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:
kostas 2012-04-22 13:48:41 +00:00
parent 0cb9a9c036
commit 480bc28712
5 changed files with 106 additions and 85 deletions

View File

@ -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>&gt; 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"

View File

@ -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;

View File

@ -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();
}
}

View File

@ -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

View File

@ -1 +1 @@
2efeff4cc821f149dbfb010c2de6d2e36945efa4
9cb380713c661f2ac8250800ef8e8b01fa9dafdc