Added support for portable mode [Thanks Chris]
Portable mode is enabled by passing the "--portable" command line option More i8n cleanups FossilOrigin-Name: 9cb380713c661f2ac8250800ef8e8b01fa9dafdc
This commit is contained in:
parent
0cb9a9c036
commit
480bc28712
130
MainWindow.cpp
130
MainWindow.cpp
@ -89,7 +89,7 @@ static QStringMap MakeKeyValues(QStringList lines)
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
MainWindow::MainWindow(QWidget *parent, QString *workspacePath) :
|
||||
MainWindow::MainWindow(QWidget *parent, QString *workspacePath, bool portableMode) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow)
|
||||
{
|
||||
@ -173,6 +173,18 @@ MainWindow::MainWindow(QWidget *parent, QString *workspacePath) :
|
||||
#endif
|
||||
|
||||
viewMode = VIEWMODE_TREE;
|
||||
|
||||
// Go into portable mode when explicitly requested or if a config file exists next to the executable
|
||||
QString ini_path = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + QDir::separator() + QCoreApplication::applicationName() + ".ini");
|
||||
if(portableMode || QFile::exists(ini_path))
|
||||
qsettings = new QSettings(ini_path, QSettings::IniFormat);
|
||||
else
|
||||
{
|
||||
// Linux: ~/.config/organizationName/applicationName.conf
|
||||
// Windows: HKEY_CURRENT_USER\Software\organizationName\Fuel
|
||||
qsettings = new QSettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
|
||||
}
|
||||
|
||||
loadSettings();
|
||||
|
||||
// Apply any explicit workspace path if available
|
||||
@ -193,6 +205,7 @@ MainWindow::~MainWindow()
|
||||
{
|
||||
stopUI();
|
||||
saveSettings();
|
||||
delete qsettings;
|
||||
|
||||
// Dispose RepoFiles
|
||||
for(filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it)
|
||||
@ -1222,24 +1235,20 @@ QString MainWindow::getFossilPath()
|
||||
//------------------------------------------------------------------------------
|
||||
void MainWindow::loadSettings()
|
||||
{
|
||||
// Linux: ~/.config/organizationName/applicationName.conf
|
||||
// Windows: HKEY_CURRENT_USER\Software\organizationName\Fuel
|
||||
QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
|
||||
if(qsettings->contains(FUEL_SETTING_FOSSIL_PATH))
|
||||
settings.Mappings[FUEL_SETTING_FOSSIL_PATH].Value = qsettings->value(FUEL_SETTING_FOSSIL_PATH);
|
||||
|
||||
if(qsettings.contains(FUEL_SETTING_FOSSIL_PATH))
|
||||
settings.Mappings[FUEL_SETTING_FOSSIL_PATH].Value = qsettings.value(FUEL_SETTING_FOSSIL_PATH);
|
||||
if(qsettings->contains(FUEL_SETTING_COMMIT_MSG))
|
||||
settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value = qsettings->value(FUEL_SETTING_COMMIT_MSG);
|
||||
|
||||
if(qsettings.contains(FUEL_SETTING_COMMIT_MSG))
|
||||
settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value = qsettings.value(FUEL_SETTING_COMMIT_MSG);
|
||||
if(qsettings->contains(FUEL_SETTING_FILE_DBLCLICK))
|
||||
settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value = qsettings->value(FUEL_SETTING_FILE_DBLCLICK);
|
||||
|
||||
if(qsettings.contains(FUEL_SETTING_FILE_DBLCLICK))
|
||||
settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value = qsettings.value(FUEL_SETTING_FILE_DBLCLICK);
|
||||
|
||||
int num_wks = qsettings.beginReadArray("Workspaces");
|
||||
int num_wks = qsettings->beginReadArray("Workspaces");
|
||||
for(int i=0; i<num_wks; ++i)
|
||||
{
|
||||
qsettings.setArrayIndex(i);
|
||||
QString wk = qsettings.value("Path").toString();
|
||||
qsettings->setArrayIndex(i);
|
||||
QString wk = qsettings->value("Path").toString();
|
||||
|
||||
// Skip invalid workspaces
|
||||
if(wk.isEmpty() || !QDir(wk).exists())
|
||||
@ -1247,81 +1256,79 @@ void MainWindow::loadSettings()
|
||||
|
||||
addWorkspace(wk);
|
||||
|
||||
if(qsettings.contains("Active") && qsettings.value("Active").toBool())
|
||||
if(qsettings->contains("Active") && qsettings->value("Active").toBool())
|
||||
setCurrentWorkspace(wk);
|
||||
}
|
||||
qsettings.endArray();
|
||||
qsettings->endArray();
|
||||
|
||||
|
||||
if(qsettings.contains("WindowX") && qsettings.contains("WindowY"))
|
||||
if(qsettings->contains("WindowX") && qsettings->contains("WindowY"))
|
||||
{
|
||||
QPoint _pos;
|
||||
_pos.setX(qsettings.value("WindowX").toInt());
|
||||
_pos.setY(qsettings.value("WindowY").toInt());
|
||||
_pos.setX(qsettings->value("WindowX").toInt());
|
||||
_pos.setY(qsettings->value("WindowY").toInt());
|
||||
move(_pos);
|
||||
}
|
||||
|
||||
if(qsettings.contains("WindowWidth") && qsettings.contains("WindowHeight"))
|
||||
if(qsettings->contains("WindowWidth") && qsettings->contains("WindowHeight"))
|
||||
{
|
||||
QSize _size;
|
||||
_size.setWidth(qsettings.value("WindowWidth").toInt());
|
||||
_size.setHeight(qsettings.value("WindowHeight").toInt());
|
||||
_size.setWidth(qsettings->value("WindowWidth").toInt());
|
||||
_size.setHeight(qsettings->value("WindowHeight").toInt());
|
||||
resize(_size);
|
||||
}
|
||||
|
||||
if(qsettings.contains("ViewUnknown"))
|
||||
ui->actionViewUnknown->setChecked(qsettings.value("ViewUnknown").toBool());
|
||||
if(qsettings.contains("ViewModified"))
|
||||
ui->actionViewModified->setChecked(qsettings.value("ViewModified").toBool());
|
||||
if(qsettings.contains("ViewUnchanged"))
|
||||
ui->actionViewUnchanged->setChecked(qsettings.value("ViewUnchanged").toBool());
|
||||
if(qsettings.contains("ViewIgnored"))
|
||||
ui->actionViewIgnored->setChecked(qsettings.value("ViewIgnored").toBool());
|
||||
if(qsettings.contains("ViewAsList"))
|
||||
if(qsettings->contains("ViewUnknown"))
|
||||
ui->actionViewUnknown->setChecked(qsettings->value("ViewUnknown").toBool());
|
||||
if(qsettings->contains("ViewModified"))
|
||||
ui->actionViewModified->setChecked(qsettings->value("ViewModified").toBool());
|
||||
if(qsettings->contains("ViewUnchanged"))
|
||||
ui->actionViewUnchanged->setChecked(qsettings->value("ViewUnchanged").toBool());
|
||||
if(qsettings->contains("ViewIgnored"))
|
||||
ui->actionViewIgnored->setChecked(qsettings->value("ViewIgnored").toBool());
|
||||
if(qsettings->contains("ViewAsList"))
|
||||
{
|
||||
ui->actionViewAsList->setChecked(qsettings.value("ViewAsList").toBool());
|
||||
viewMode = qsettings.value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE;
|
||||
ui->actionViewAsList->setChecked(qsettings->value("ViewAsList").toBool());
|
||||
viewMode = qsettings->value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE;
|
||||
}
|
||||
ui->treeView->setVisible(viewMode == VIEWMODE_TREE);
|
||||
|
||||
if(qsettings.contains("ViewStash"))
|
||||
ui->actionViewStash->setChecked(qsettings.value("ViewStash").toBool());
|
||||
if(qsettings->contains("ViewStash"))
|
||||
ui->actionViewStash->setChecked(qsettings->value("ViewStash").toBool());
|
||||
ui->tableViewStash->setVisible(ui->actionViewStash->isChecked());
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void MainWindow::saveSettings()
|
||||
{
|
||||
QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
|
||||
|
||||
// If we have a customize fossil path, save it
|
||||
QString fossil_path = settings.Mappings[FUEL_SETTING_FOSSIL_PATH].Value.toString();
|
||||
qsettings.setValue(FUEL_SETTING_FOSSIL_PATH, fossil_path);
|
||||
qsettings.setValue(FUEL_SETTING_COMMIT_MSG, settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value);
|
||||
qsettings.setValue(FUEL_SETTING_FILE_DBLCLICK, settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value);
|
||||
qsettings->setValue(FUEL_SETTING_FOSSIL_PATH, fossil_path);
|
||||
qsettings->setValue(FUEL_SETTING_COMMIT_MSG, settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value);
|
||||
qsettings->setValue(FUEL_SETTING_FILE_DBLCLICK, settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value);
|
||||
|
||||
qsettings.beginWriteArray("Workspaces", workspaceHistory.size());
|
||||
qsettings->beginWriteArray("Workspaces", workspaceHistory.size());
|
||||
for(int i=0; i<workspaceHistory.size(); ++i)
|
||||
{
|
||||
qsettings.setArrayIndex(i);
|
||||
qsettings.setValue("Path", workspaceHistory[i]);
|
||||
qsettings->setArrayIndex(i);
|
||||
qsettings->setValue("Path", workspaceHistory[i]);
|
||||
if(getCurrentWorkspace() == workspaceHistory[i])
|
||||
qsettings.setValue("Active", true);
|
||||
qsettings->setValue("Active", true);
|
||||
else
|
||||
qsettings.remove("Active");
|
||||
qsettings->remove("Active");
|
||||
}
|
||||
qsettings.endArray();
|
||||
qsettings->endArray();
|
||||
|
||||
qsettings.setValue("WindowX", x());
|
||||
qsettings.setValue("WindowY", y());
|
||||
qsettings.setValue("WindowWidth", width());
|
||||
qsettings.setValue("WindowHeight", height());
|
||||
qsettings.setValue("ViewUnknown", ui->actionViewUnknown->isChecked());
|
||||
qsettings.setValue("ViewModified", ui->actionViewModified->isChecked());
|
||||
qsettings.setValue("ViewUnchanged", ui->actionViewUnchanged->isChecked());
|
||||
qsettings.setValue("ViewIgnored", ui->actionViewIgnored->isChecked());
|
||||
qsettings.setValue("ViewAsList", ui->actionViewAsList->isChecked());
|
||||
qsettings.setValue("ViewStash", ui->actionViewStash->isChecked());
|
||||
qsettings->setValue("WindowX", x());
|
||||
qsettings->setValue("WindowY", y());
|
||||
qsettings->setValue("WindowWidth", width());
|
||||
qsettings->setValue("WindowHeight", height());
|
||||
qsettings->setValue("ViewUnknown", ui->actionViewUnknown->isChecked());
|
||||
qsettings->setValue("ViewModified", ui->actionViewModified->isChecked());
|
||||
qsettings->setValue("ViewUnchanged", ui->actionViewUnchanged->isChecked());
|
||||
qsettings->setValue("ViewIgnored", ui->actionViewIgnored->isChecked());
|
||||
qsettings->setValue("ViewAsList", ui->actionViewAsList->isChecked());
|
||||
qsettings->setValue("ViewStash", ui->actionViewStash->isChecked());
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@ -1479,7 +1486,7 @@ bool MainWindow::startUI()
|
||||
{
|
||||
if(uiRunning())
|
||||
{
|
||||
log("Fossil UI is already running\n");
|
||||
log(tr("Fossil UI is already running\n"));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1488,13 +1495,13 @@ bool MainWindow::startUI()
|
||||
fossilUI.setWorkingDirectory(getCurrentWorkspace());
|
||||
|
||||
log("<b>> fossil ui</b><br>", true);
|
||||
log("Starting Fossil UI. Please wait.\n");
|
||||
log(tr("Starting Fossil UI. Please wait.\n"));
|
||||
QString fossil = getFossilPath();
|
||||
|
||||
fossilUI.start(fossil, QStringList() << "ui");
|
||||
if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running)
|
||||
{
|
||||
log(fossil+ tr(" does not exist") +"\n");
|
||||
log(tr("%0 does not exist\n").arg(fossil));
|
||||
ui->actionFossilUI->setChecked(false);
|
||||
return false;
|
||||
}
|
||||
@ -1620,7 +1627,6 @@ void MainWindow::on_actionPull_triggered()
|
||||
runFossil(QStringList() << "pull");
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void MainWindow::on_actionCommit_triggered()
|
||||
{
|
||||
@ -1800,8 +1806,6 @@ void MainWindow::on_actionRename_triggered()
|
||||
refresh();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void MainWindow::on_actionOpenContaining_triggered()
|
||||
{
|
||||
@ -1856,7 +1860,7 @@ void MainWindow::on_actionAbout_triggered()
|
||||
fossil_ver = tr("Fossil version ")+res[0].mid(off) + "\n\n";
|
||||
}
|
||||
|
||||
QMessageBox::about(this, "About Fuel...",
|
||||
QMessageBox::about(this, tr("About Fuel..."),
|
||||
QCoreApplication::applicationName() + " "+ QCoreApplication::applicationVersion() + " " +
|
||||
tr("a GUI frontend to the Fossil SCM\n"
|
||||
"by Kostas Karanikolas\n"
|
||||
|
@ -116,7 +116,7 @@ class MainWindow : public QMainWindow
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = 0, QString *workspacePath = 0);
|
||||
explicit MainWindow(QWidget *parent = 0, QString *workspacePath = 0, bool portableMode = false);
|
||||
~MainWindow();
|
||||
bool diffFile(QString repoFile);
|
||||
|
||||
@ -252,6 +252,8 @@ private:
|
||||
ViewMode viewMode;
|
||||
stringset_t selectedDirs; // The directory selected in the tree
|
||||
|
||||
class QSettings *qsettings;
|
||||
|
||||
// Repo State
|
||||
typedef QList<RepoFile*> filelist_t;
|
||||
typedef QMap<QString, RepoFile*> filemap_t;
|
||||
|
39
main.cpp
39
main.cpp
@ -3,24 +3,39 @@
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
a.setApplicationName("Fuel");
|
||||
a.setApplicationVersion("0.9.6");
|
||||
a.setOrganizationDomain("fuel-scm.org");
|
||||
a.setOrganizationName("Fuel-SCM");
|
||||
QApplication app(argc, argv);
|
||||
app.setApplicationName("Fuel");
|
||||
app.setApplicationVersion("0.9.6");
|
||||
app.setOrganizationDomain("fuel-scm.org");
|
||||
app.setOrganizationName("Fuel-SCM");
|
||||
|
||||
// Native OSX applications don't use menu icons
|
||||
#ifdef Q_WS_MACX
|
||||
// Native OSX applications don't use menu icons
|
||||
a.setAttribute(Qt::AA_DontShowIconsInMenus);
|
||||
#endif
|
||||
|
||||
{
|
||||
bool portable = false;
|
||||
QString workspace;
|
||||
if(a.arguments().length()>1)
|
||||
workspace = a.arguments()[1];
|
||||
|
||||
MainWindow w(0, &workspace);
|
||||
w.show();
|
||||
return a.exec();
|
||||
Q_ASSERT(app.arguments().size()>0);
|
||||
for(int i=1; i<app.arguments().size(); ++i)
|
||||
{
|
||||
QString arg = app.arguments()[i];
|
||||
// Parse options
|
||||
if(arg.indexOf("--")!=-1)
|
||||
{
|
||||
if(arg.indexOf("portable")!=-1)
|
||||
portable = true;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
workspace = arg;
|
||||
}
|
||||
|
||||
MainWindow mainwin(0,
|
||||
workspace.isEmpty() ? 0 : &workspace,
|
||||
portable);
|
||||
mainwin.show();
|
||||
return app.exec();
|
||||
}
|
||||
}
|
||||
|
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C Fixed\scrash\son\sWindows\nMinor\scleanups\sfor\si8n\n
|
||||
D 2012-04-22T12:54:59.393
|
||||
C Added\ssupport\sfor\sportable\smode\s[Thanks\sChris]\nPortable\smode\sis\senabled\sby\spassing\sthe\s"--portable"\scommand\sline\soption\nMore\si8n\scleanups\n\n
|
||||
D 2012-04-22T13:48:41.757
|
||||
F CommitDialog.cpp a46020a9361151d8d286a2670257d01d8967bf69
|
||||
F CommitDialog.h f1ee8db92103164e7db55a8407ccdcff24571b72
|
||||
F CommitDialog.ui 813d7cba316e226de1a22b7e480bb969fbe9b0c4
|
||||
@ -8,8 +8,8 @@ F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce
|
||||
F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7
|
||||
F FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2
|
||||
F FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df
|
||||
F MainWindow.cpp 44316f743a465506a2aad86dc52c3f7875927e7a
|
||||
F MainWindow.h 1f6d8db9cf25a89fbbb1e0b33cc63a0e43cfe7ff
|
||||
F MainWindow.cpp 1ae55ca0a760c44ee33a73f35cb10e95a5c92172
|
||||
F MainWindow.h 3360113c938bee4b181f1bdc4953a09e60a0e1ed
|
||||
F MainWindow.ui 6c12a0b141b86c6994d5835618acba19a9ff1976
|
||||
F SettingsDialog.cpp e1fad18cc020d08b82c6d35dc94f6624deec9a3b
|
||||
F SettingsDialog.h f5da6cab4ccc82e2eb78ec835fb849c4c104d6cc
|
||||
@ -174,9 +174,9 @@ F icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b
|
||||
F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038
|
||||
F installer/fuel.iss 13b6a938bcdf273cbd3649d2549887baa1577214
|
||||
F installer/license.txt 4cc77b90af91e615a64ae04893fdffa7939db84c
|
||||
F main.cpp 69c1f9e873c016ef466d20298a67c3bc4c2b2f3a
|
||||
F main.cpp 3741082d40973584d7c9ecddb58721000d6a7f8e
|
||||
F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53
|
||||
P b8a055ccf8ebc9e80120ea76ec6db5c95706a10c
|
||||
R 1c96f8a9e18378890cda05cc358b8d05
|
||||
P 2efeff4cc821f149dbfb010c2de6d2e36945efa4
|
||||
R 587b49ca5c6114db2276f46c88d8e4a5
|
||||
U kostas
|
||||
Z ee05f83c5f2294a8a6db0a8f4727be4b
|
||||
Z 807e808714a0c7db7d78ffaf0e1621b4
|
||||
|
@ -1 +1 @@
|
||||
2efeff4cc821f149dbfb010c2de6d2e36945efa4
|
||||
9cb380713c661f2ac8250800ef8e8b01fa9dafdc
|
Loading…
x
Reference in New Issue
Block a user