Reintroduced the status character, since it is necessary for the automatic sorting

Streamlined the settings storage
We now support an implicit fossil executable living in QCoreApplication::applicationDirPath() or in the system path, unless the user has provided an override

FossilOrigin-Name: 97aefbc7825732e8fc2e711187c32c49e1149c11
This commit is contained in:
kostas 2011-08-07 04:56:05 +00:00
parent d939003b9f
commit 379d9707cb
5 changed files with 58 additions and 43 deletions

View File

@ -353,7 +353,7 @@ void MainWindow::scanWorkspace()
} }
} }
QStandardItem *status = new QStandardItem(QIcon(icon), ""); QStandardItem *status = new QStandardItem(QIcon(icon), tag);
status->setToolTip(tooltip); status->setToolTip(tooltip);
itemModel.setItem(i, COLUMN_STATUS, status); itemModel.setItem(i, COLUMN_STATUS, status);
@ -468,19 +468,21 @@ bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int
QString wkdir = getCurrentWorkspace(); QString wkdir = getCurrentWorkspace();
QString fossil = getFossilPath();
if(detached) if(detached)
{ {
return QProcess::startDetached(settings.fossilPath, args, wkdir); return QProcess::startDetached(fossil, args, wkdir);
} }
QProcess process(this); QProcess process(this);
process.setProcessChannelMode(QProcess::MergedChannels); process.setProcessChannelMode(QProcess::MergedChannels);
process.setWorkingDirectory(wkdir); process.setWorkingDirectory(wkdir);
process.start(settings.fossilPath, args); process.start(fossil, args);
if(!process.waitForStarted()) if(!process.waitForStarted())
{ {
log("Could not start fossil executable '"+settings.fossilPath + "''\n"); log("Could not start fossil executable '" + fossil + "''\n");
return false; return false;
} }
@ -610,35 +612,46 @@ void MainWindow::addWorkspace(const QString &dir)
workspaceHistory.append(new_workspace); workspaceHistory.append(new_workspace);
} }
//------------------------------------------------------------------------------
QString MainWindow::getFossilPath()
{
// Use the user-specified fossil if available
if(!settings.fossilPath.isEmpty())
return settings.fossilPath;
// Use our fossil if available
QString fuel_fossil = QCoreApplication::applicationDirPath() + QDir::separator() + "fossil";
if(QFile::exists(fuel_fossil))
return fuel_fossil;
// Otherwise assume there is a "fossil" executable in the path
return "fossil";
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::loadSettings() void MainWindow::loadSettings()
{ {
// Linux: ~/.config/organizationName/applicationName.conf
// Windows: HKEY_CURRENT_USER\Software\organizationName\Fuel
QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName()); QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
if(qsettings.contains("FossilPath")) if(qsettings.contains("FossilPath"))
settings.fossilPath = qsettings.value("FossilPath").toString(); settings.fossilPath = qsettings.value("FossilPath").toString();
else
settings.fossilPath = "fossil";
int num_wks = 0;
if(qsettings.contains("NumWorkspaces"))
num_wks = qsettings.value("NumWorkspaces").toInt();
int num_wks = qsettings.beginReadArray("Workspaces");
for(int i=0; i<num_wks; ++i) for(int i=0; i<num_wks; ++i)
{ {
QString key = "Workspace_" + QString::number(i); qsettings.setArrayIndex(i);
QString wk = qsettings.value(key).toString(); QString wk = qsettings.value("Path").toString();
if(!wk.isEmpty()) if(!wk.isEmpty())
addWorkspace(wk); addWorkspace(wk);
if(qsettings.contains("Active") && qsettings.value("Active").toBool())
currentWorkspace = wk;
} }
qsettings.endArray();
int curr_wkspace = -1;
if(qsettings.contains("LastWorkspace"))
curr_wkspace = qsettings.value("LastWorkspace").toInt();
if(curr_wkspace!=-1 && curr_wkspace< workspaceHistory.size())
currentWorkspace = workspaceHistory[curr_wkspace];
if(qsettings.contains("WindowX") && qsettings.contains("WindowY")) if(qsettings.contains("WindowX") && qsettings.contains("WindowY"))
{ {
@ -661,18 +674,20 @@ void MainWindow::loadSettings()
void MainWindow::saveSettings() void MainWindow::saveSettings()
{ {
QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName()); QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
qsettings.setValue("FossilPath", settings.fossilPath);
qsettings.setValue("NumWorkspaces", workspaceHistory.size());
// If we have a customize fossil path, save it
if(!settings.fossilPath.isEmpty())
qsettings.setValue("FossilPath", settings.fossilPath);
qsettings.beginWriteArray("Workspaces", workspaceHistory.size());
for(int i=0; i<workspaceHistory.size(); ++i) for(int i=0; i<workspaceHistory.size(); ++i)
{ {
QString key = "Workspace_" + QString::number(i); qsettings.setArrayIndex(i);
qsettings.setValue(key, workspaceHistory[i]); qsettings.setValue("Path", workspaceHistory[i]);
if(currentWorkspace == workspaceHistory[i])
qsettings.setValue("Active", true);
} }
qsettings.endArray();
int curr_wkspace = workspaceHistory.indexOf(currentWorkspace);
if(curr_wkspace>-1)
qsettings.setValue("LastWorkspace", curr_wkspace);
qsettings.setValue("WindowX", x()); qsettings.setValue("WindowX", x());
qsettings.setValue("WindowY", y()); qsettings.setValue("WindowY", y());
@ -742,11 +757,12 @@ bool MainWindow::startUI()
fossilUI.setWorkingDirectory(getCurrentWorkspace()); fossilUI.setWorkingDirectory(getCurrentWorkspace());
log("> fossil ui\n"); log("> fossil ui\n");
QString fossil = getFossilPath();
fossilUI.start(settings.fossilPath, QStringList() << "ui"); fossilUI.start(fossil, QStringList() << "ui");
if(!fossilUI.waitForStarted()) if(!fossilUI.waitForStarted())
{ {
log(settings.fossilPath + tr(" does not exist") +"\n"); log(fossil+ tr(" does not exist") +"\n");
return false; return false;
} }
@ -1102,3 +1118,4 @@ void MainWindow::on_actionSettings_triggered()
{ {
SettingsDialog::run(this, settings); SettingsDialog::run(this, settings);
} }

View File

@ -116,6 +116,7 @@ private:
void addWorkspace(const QString &dir); void addWorkspace(const QString &dir);
void rebuildRecent(); void rebuildRecent();
bool openWorkspace(const QString &dir); bool openWorkspace(const QString &dir);
QString getFossilPath();
enum RepoStatus enum RepoStatus
{ {
@ -154,22 +155,19 @@ private slots:
void on_actionUndo_triggered(); void on_actionUndo_triggered();
void on_actionAbout_triggered(); void on_actionAbout_triggered();
void on_actionUpdate_triggered(); void on_actionUpdate_triggered();
void on_actionSettings_triggered(); void on_actionSettings_triggered();
private: private:
enum enum
{ {
MAX_RECENT=5 MAX_RECENT=5
}; };
Ui::MainWindow *ui; Ui::MainWindow *ui;
QStandardItemModel itemModel; QStandardItemModel itemModel;
QProcess fossilUI; QProcess fossilUI;
class QAction *recentWorkspaceActs[MAX_RECENT]; class QAction *recentWorkspaceActs[MAX_RECENT];
class QLabel *statusLabel; class QLabel *statusLabel;
bool fossilAbort; bool fossilAbort; // FIXME: No GUI for it yet
Settings settings; Settings settings;
QString projectName; QString projectName;

View File

@ -7,7 +7,7 @@ int main(int argc, char *argv[])
a.setApplicationName("Fuel"); a.setApplicationName("Fuel");
a.setApplicationVersion("0.9.0"); a.setApplicationVersion("0.9.0");
a.setOrganizationDomain("karanik.com"); a.setOrganizationDomain("karanik.com");
a.setOrganizationName("karanik"); a.setOrganizationName("Karanik");
MainWindow w; MainWindow w;
w.show(); w.show();

View File

@ -1,13 +1,13 @@
C Improved\ssupport\sfor\sfossil\sinteractive\squestions C Reintroduced\sthe\sstatus\scharacter,\ssince\sit\sis\snecessary\sfor\sthe\sautomatic\ssorting\nStreamlined\sthe\ssettings\sstorage\nWe\snow\ssupport\san\simplicit\sfossil\sexecutable\sliving\sin\sQCoreApplication::applicationDirPath()\sor\sin\sthe\ssystem\spath,\sunless\sthe\suser\shas\sprovided\san\soverride
D 2011-08-07T03:14:37.316 D 2011-08-07T04:56:05.986
F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e
F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a
F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154 F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154
F FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8
F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce
F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7
F MainWindow.cpp 18c298a5cc9a8d27f59d377c4d363c7a9b7e1085 F MainWindow.cpp 809b27413caa8192b135f6addf40fc2119d8f3b3
F MainWindow.h 81a5061a551c9969a7acfcc49c84adc076e5eaf6 F MainWindow.h 67778cc3e6e5a933d4b198e2a8284523f591ff44
F MainWindow.ui 9f901c1f06b24df3cbd36d5349ffe0d82896c05b F MainWindow.ui 9f901c1f06b24df3cbd36d5349ffe0d82896c05b
F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e
F RepoDialog.h a958c5f98f1e6882bf41dbdd2e4df3cb89700802 F RepoDialog.h a958c5f98f1e6882bf41dbdd2e4df3cb89700802
@ -171,9 +171,9 @@ F icons/Zoom\sOut-01.png 8eda092100d9e00c9097f43a80d1e26695947448
F icons/Zoom-01.png 67ca532922e9166325c5c75fce1ca3fbb0d2b6a6 F icons/Zoom-01.png 67ca532922e9166325c5c75fce1ca3fbb0d2b6a6
F icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b
F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038
F main.cpp aed85ed9766ddb8685e300e8ca4a0dc193ae2586 F main.cpp c27bddc9ee5efdee649c6bf96696197874560e22
F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53 F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53
P 6a6a654b0db2537fc73774e7dc37d25cb2ae63d7 P 2c36e183b8e8816ada688991ea6da7ad64caf2a8
R 40a5f682e0b0200d3bd354258d471c18 R 3b0c20ab4fb5da73c9585141277a12f4
U kostas U kostas
Z 68777a7f034546864430c866d1616086 Z 306fe72a4f590e48c01e123486041f37

View File

@ -1 +1 @@
2c36e183b8e8816ada688991ea6da7ad64caf2a8 97aefbc7825732e8fc2e711187c32c49e1149c11