diff --git a/CommitDialog.cpp b/CommitDialog.cpp
index 3a68012..489125b 100644
--- a/CommitDialog.cpp
+++ b/CommitDialog.cpp
@@ -3,7 +3,7 @@
#include "ui_CommitDialog.h"
#include "MainWindow.h" // Ugly. I know.
-CommitDialog::CommitDialog(QWidget *parent, const QStringList &commitMsgHistory, QStringList &files) :
+CommitDialog::CommitDialog(QWidget *parent, QString title, QStringList &files, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue) :
QDialog(parent, Qt::Sheet),
ui(new Ui::CommitDialog)
{
@@ -11,20 +11,40 @@ CommitDialog::CommitDialog(QWidget *parent, const QStringList &commitMsgHistory,
ui->plainTextEdit->clear();
ui->listView->setModel(&itemModel);
- // Generate the history combo
- foreach(const QString msg, commitMsgHistory)
+ setWindowTitle(title);
+
+ // Activate the appropriate control based on mode
+ ui->plainTextEdit->setVisible(!singleLineEntry);
+ ui->lineEdit->setVisible(singleLineEntry);
+
+ // Activate the checkbox if we have some text
+ ui->checkBox->setVisible(checkBoxText!=0);
+ if(checkBoxText)
{
- QString trimmed = msg.trimmed();
- if(trimmed.isEmpty())
- continue;
+ Q_ASSERT(checkBoxValue);
+ ui->checkBox->setText(*checkBoxText);
+ ui->checkBox->setCheckState(*checkBoxValue ? Qt::Checked : Qt::Unchecked);
+ }
- commitMessages.append(trimmed);
- QStringList lines = trimmed.split('\n');
- QString first_line;
- if(!lines.empty())
- first_line = lines[0] + "...";
+ // Activate the combo if we have history
+ ui->comboBox->setVisible(history!=0);
+ if(history)
+ {
+ // Generate the history combo
+ foreach(const QString msg, *history)
+ {
+ QString trimmed = msg.trimmed();
+ if(trimmed.isEmpty())
+ continue;
- ui->comboBox->addItem(first_line);
+ commitMessages.append(trimmed);
+ QStringList lines = trimmed.split('\n');
+ QString first_line;
+ if(!lines.empty())
+ first_line = lines[0] + "...";
+
+ ui->comboBox->addItem(first_line);
+ }
}
// Populate file list
@@ -44,11 +64,16 @@ CommitDialog::~CommitDialog()
}
//------------------------------------------------------------------------------
-bool CommitDialog::run(QWidget *parent, QString &commitMsg, const QStringList &commitMsgHistory, QStringList &files)
+bool CommitDialog::run(QWidget *parent, QString title, QStringList &files, QString &commitMsg, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue)
{
- CommitDialog dlg(parent, commitMsgHistory, files);
+ CommitDialog dlg(parent, title, files, history, singleLineEntry, checkBoxText, checkBoxValue);
int res = dlg.exec();
- commitMsg = dlg.ui->plainTextEdit->toPlainText();
+
+ if(singleLineEntry)
+ commitMsg = dlg.ui->lineEdit->text();
+ else
+ commitMsg = dlg.ui->plainTextEdit->toPlainText();
+
if(res!=QDialog::Accepted)
return false;
@@ -62,6 +87,12 @@ bool CommitDialog::run(QWidget *parent, QString &commitMsg, const QStringList &c
files.append(si->text());
}
+ if(checkBoxText)
+ {
+ Q_ASSERT(checkBoxValue);
+ *checkBoxValue = dlg.ui->checkBox->checkState() == Qt::Checked;
+ }
+
return true;
}
@@ -69,7 +100,12 @@ bool CommitDialog::run(QWidget *parent, QString &commitMsg, const QStringList &c
void CommitDialog::on_comboBox_activated(int index)
{
Q_ASSERT(index < commitMessages.length());
- ui->plainTextEdit->setPlainText(commitMessages[index]);
+
+ if(ui->plainTextEdit->isVisible())
+ ui->plainTextEdit->setPlainText(commitMessages[index]);
+
+ if(ui->lineEdit->isVisible())
+ ui->lineEdit->setText(commitMessages[index]);
}
//------------------------------------------------------------------------------
diff --git a/CommitDialog.h b/CommitDialog.h
index b58906d..4825d11 100644
--- a/CommitDialog.h
+++ b/CommitDialog.h
@@ -13,10 +13,10 @@ class CommitDialog : public QDialog
Q_OBJECT
public:
- explicit CommitDialog(QWidget *parent, const QStringList &commitMsgHistory, QStringList &files);
+ explicit CommitDialog(QWidget *parent, QString title, QStringList &files, const QStringList *history=0, bool singleLineEntry=false, const QString *checkBoxText=0, bool *checkBoxValue=0);
~CommitDialog();
- static bool run(QWidget *parent, QString &commitMsg, const QStringList &commitMsgHistory, QStringList &files);
+ static bool run(QWidget *parent, QString title, QStringList &files, QString &commitMsg, const QStringList *history=0, bool singleLineEntry=false, const QString *checkBoxText=0, bool *checkBoxValue=0);
private slots:
void on_comboBox_activated(int index);
diff --git a/CommitDialog.ui b/CommitDialog.ui
index 5f0102d..3f42f24 100644
--- a/CommitDialog.ui
+++ b/CommitDialog.ui
@@ -23,6 +23,9 @@
-
+ -
+
+
-
@@ -58,6 +61,13 @@
+ -
+
+
+ CheckBox
+
+
+
-
diff --git a/MainWindow.cpp b/MainWindow.cpp
index 0283848..4bb6d9c 100644
--- a/MainWindow.cpp
+++ b/MainWindow.cpp
@@ -124,6 +124,12 @@ MainWindow::MainWindow(QWidget *parent) :
ui->treeView->addAction(ui->actionRenameFolder);
ui->treeView->addAction(ui->actionOpenFolder);
+ // StashView
+ ui->tableViewStash->setModel(&repoStashModel);
+ ui->tableViewStash->addAction(ui->actionApplyStash);
+ ui->tableViewStash->addAction(ui->actionDiffStash);
+ ui->tableViewStash->addAction(ui->actionDeleteStash);
+
// Recent Workspaces
// Locate a sequence of two separator actions in file menu
QList file_actions = ui->menuFile->actions();
@@ -632,9 +638,40 @@ void MainWindow::scanWorkspace()
pathSet.insert(path);
}
+ // Load the stash
+ stashMap.clear();
+ res.clear();
+ if(!runFossil(QStringList() << "stash" << "ls", &res, RUNGLAGS_SILENT_ALL))
+ return;
+
+ for(QStringList::iterator line_it=res.begin(); line_it!=res.end(); ++line_it)
+ {
+ QString l = (*line_it).trimmed();
+ int colon = l.indexOf(':');
+
+ // When no colon we have no stash to process
+ if(colon==-1)
+ break;
+
+ QString id = l.left(colon);
+
+ // Parse stash name
+ ++line_it;
+
+ // Invalid stash, exit
+ if(line_it==res.end())
+ break;
+
+ QString name = (*line_it);
+ name = name.trimmed();
+ stashMap.insert(name, id);
+ }
+
+
// Update the file item model
updateDirView();
updateFileView();
+ updateStashView();
setEnabled(true);
setStatus("");
@@ -682,6 +719,11 @@ void MainWindow::updateDirView()
{
// Directory View
repoDirModel.clear();
+
+ QStringList header;
+ header << tr("Folders");
+ repoDirModel.setHorizontalHeaderLabels(header);
+
QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), projectName);
root->setData(""); // Empty Path
root->setEditable(false);
@@ -825,6 +867,24 @@ MainWindow::RepoStatus MainWindow::getRepoStatus()
return run_ok ? REPO_OK : REPO_NOT_FOUND;
}
+//------------------------------------------------------------------------------
+void MainWindow::updateStashView()
+{
+ repoStashModel.clear();
+
+ QStringList header;
+ header << tr("Stashes");
+ repoStashModel.setHorizontalHeaderLabels(header);
+
+ for(stashmap_t::iterator it=stashMap.begin(); it!=stashMap.end(); ++it)
+ {
+ QStandardItem *item = new QStandardItem(it.key());
+ repoStashModel.appendRow(item);
+ }
+ ui->tableViewStash->resizeColumnsToContents();
+ ui->tableViewStash->resizeRowsToContents();
+}
+
//------------------------------------------------------------------------------
void MainWindow::log(const QString &text, bool isHTML)
{
@@ -885,7 +945,17 @@ bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int
bool detached = (runFlags & RUNGLAGS_DETACHED) != 0;
if(!silent_input)
- log("> fossil "+args.join(" ")+"
", true);
+ {
+ QString params;
+ foreach(QString p, args)
+ {
+ if(p.indexOf(' ')!=-1)
+ params += '"' + p + "\" ";
+ else
+ params += p + ' ';
+ }
+ log("> fossil "+params+"
", true);
+ }
QString wkdir = getCurrentWorkspace();
@@ -914,13 +984,19 @@ bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int
fossilAbort = false;
QString buffer;
- while(process.state()==QProcess::Running || process.bytesAvailable()>0)
+ while(true)
{
+ QProcess::ProcessState state = process.state();
+ qint64 bytes_avail = process.bytesAvailable();
+
+ if(state!=QProcess::Running && bytes_avail<1)
+ break;
+
if(fossilAbort)
{
log("\n* "+tr("Terminated")+" *\n");
#ifdef Q_WS_WIN
- fossilUI.kill(); // QT on windows cannot terminate console processes with QProcess::terminate
+ process.kill(); // QT on windows cannot terminate console processes with QProcess::terminate
#else
process.terminate();
#endif
@@ -1137,8 +1213,13 @@ void MainWindow::loadSettings()
if(qsettings.contains("ViewAsList"))
{
ui->actionViewAsList->setChecked(qsettings.value("ViewAsList").toBool());
- ui->treeView->setVisible(qsettings.value("ViewAsList").toBool() == VIEWMODE_LIST);
+ 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());
+ ui->tableViewStash->setVisible(ui->actionViewStash->isChecked());
}
//------------------------------------------------------------------------------
@@ -1173,6 +1254,7 @@ void MainWindow::saveSettings()
qsettings.setValue("ViewUnchanged", ui->actionViewUnchanged->isChecked());
qsettings.setValue("ViewIgnored", ui->actionViewIgnored->isChecked());
qsettings.setValue("ViewAsList", ui->actionViewAsList->isChecked());
+ qsettings.setValue("ViewStash", ui->actionViewStash->isChecked());
}
//------------------------------------------------------------------------------
@@ -1285,6 +1367,28 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b
filenames.append(filename);
}
}
+//------------------------------------------------------------------------------
+void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty)
+{
+ QModelIndexList selection = ui->tableViewStash->selectionModel()->selectedIndexes();
+ if(selection.empty() && allIfEmpty)
+ {
+ ui->tableViewStash->selectAll();
+ selection = ui->tableViewStash->selectionModel()->selectedIndexes();
+ ui->tableViewStash->clearSelection();
+ }
+
+ for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it)
+ {
+ const QModelIndex &mi = *mi_it;
+
+ if(mi.column()!=0)
+ continue;
+ QString name = repoStashModel.data(mi).toString();
+ stashNames.append(name);
+ }
+}
+
//------------------------------------------------------------------------------
bool MainWindow::diffFile(QString repoFile)
{
@@ -1462,7 +1566,7 @@ void MainWindow::on_actionCommit_triggered()
QStringList commit_msgs = settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value.toStringList();
QString msg;
- bool aborted = !CommitDialog::run(this, msg, commit_msgs, modified_files);
+ bool aborted = !CommitDialog::run(this, tr("Commit Changes"), modified_files, msg, &commit_msgs);
// Aborted or not we always keep the commit messages.
// (This has saved me way too many times on TortoiseSVN)
@@ -2046,3 +2150,133 @@ QMenu * MainWindow::createPopupMenu()
return NULL;
}
+//------------------------------------------------------------------------------
+void MainWindow::on_actionViewStash_triggered()
+{
+ ui->tableViewStash->setVisible(ui->actionViewStash->isChecked());
+}
+
+//------------------------------------------------------------------------------
+void MainWindow::on_actionNewStash_triggered()
+{
+ QStringList stashed_files;
+ getSelectionFilenames(stashed_files, RepoFile::TYPE_MODIFIED, true);
+
+ if(stashed_files.empty())
+ return;
+
+ QString stash_name;
+ bool revert = false;
+ QString checkbox_text = tr("Revert stashed files");
+ if(!CommitDialog::run(this, tr("Stash Changes"), stashed_files, stash_name, 0, true, &checkbox_text, &revert) || stashed_files.empty())
+ return;
+
+ stash_name = stash_name.trimmed();
+
+ if(stash_name.indexOf("\"")!=-1 || stash_name.isEmpty())
+ {
+ QMessageBox::critical(this, tr("Error"), tr("Invalid stash name"));
+ return;
+ }
+
+ // Check that this stash does not exist
+ for(stashmap_t::iterator it=stashMap.begin(); it!=stashMap.end(); ++it)
+ {
+ if(stash_name == it.key())
+ {
+ QMessageBox::critical(this, tr("Error"), tr("This stash already exists"));
+ return;
+ }
+ }
+
+ // Do Stash
+ QString command = "snapshot";
+ if(revert)
+ command = "save";
+
+ runFossil(QStringList() << "stash" << command << "-m" << stash_name << QuotePaths(stashed_files) );
+ refresh();
+}
+
+//------------------------------------------------------------------------------
+void MainWindow::on_actionApplyStash_triggered()
+{
+ QStringList stashes;
+ getStashViewSelection(stashes);
+
+ bool delete_stashes = false;
+ if(!FileActionDialog::run(this, tr("Apply Stash"), tr("The following stashes will be applied. Are you sure?"), stashes, tr("Delete after applying"), &delete_stashes))
+ return;
+
+ // Apply stashes
+ for(QStringList::iterator it=stashes.begin(); it!=stashes.end(); ++it)
+ {
+ stashmap_t::iterator id_it = stashMap.find(*it);
+ Q_ASSERT(id_it!=stashMap.end());
+
+ if(!runFossil(QStringList() << "stash" << "apply" << *id_it))
+ {
+ log(tr("Stash application aborted due to errors\n"));
+ return;
+ }
+ }
+
+ // Delete stashes
+ for(QStringList::iterator it=stashes.begin(); delete_stashes && it!=stashes.end(); ++it)
+ {
+ stashmap_t::iterator id_it = stashMap.find(*it);
+ Q_ASSERT(id_it!=stashMap.end());
+
+ if(!runFossil(QStringList() << "stash" << "drop" << *id_it))
+ {
+ log(tr("Stash deletion aborted due to errors\n"));
+ return;
+ }
+ }
+
+ refresh();
+}
+
+//------------------------------------------------------------------------------
+void MainWindow::on_actionDeleteStash_triggered()
+{
+ QStringList stashes;
+ getStashViewSelection(stashes);
+
+ if(stashes.empty())
+ return;
+
+ if(!FileActionDialog::run(this, tr("Delete Stashes"), tr("The following stashes will be deleted. Are you sure?"), stashes))
+ return;
+
+ // Delete stashes
+ for(QStringList::iterator it=stashes.begin(); it!=stashes.end(); ++it)
+ {
+ stashmap_t::iterator id_it = stashMap.find(*it);
+ Q_ASSERT(id_it!=stashMap.end());
+
+ if(!runFossil(QStringList() << "stash" << "drop" << *id_it))
+ {
+ log(tr("Stash deletion aborted due to errors\n"));
+ return;
+ }
+ }
+
+ refresh();
+}
+
+//------------------------------------------------------------------------------
+void MainWindow::on_actionDiffStash_triggered()
+{
+ QStringList stashes;
+ getStashViewSelection(stashes);
+
+ if(stashes.length() != 1)
+ return;
+
+ stashmap_t::iterator id_it = stashMap.find(*stashes.begin());
+ Q_ASSERT(id_it!=stashMap.end());
+
+ // Run diff
+ runFossil(QStringList() << "stash" << "diff" << *id_it, 0);
+}
diff --git a/MainWindow.h b/MainWindow.h
index 60131c7..56f7f97 100644
--- a/MainWindow.h
+++ b/MainWindow.h
@@ -108,8 +108,6 @@ private:
QString Path;
};
-
-
//////////////////////////////////////////////////////////////////////////
// MainWindow
//////////////////////////////////////////////////////////////////////////
@@ -148,6 +146,7 @@ private:
void getSelectionFilenames(QStringList &filenames, int includeMask=RepoFile::TYPE_ALL, bool allIfEmpty=false);
void getFileViewSelection(QStringList &filenames, int includeMask=RepoFile::TYPE_ALL, bool allIfEmpty=false);
void getDirViewSelection(QStringList &filenames, int includeMask=RepoFile::TYPE_ALL, bool allIfEmpty=false);
+ void getStashViewSelection(QStringList &stashNames, bool allIfEmpty=false);
void getSelectionPaths(stringset_t &paths);
bool startUI();
void stopUI();
@@ -161,7 +160,9 @@ private:
bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec);
void updateDirView();
void updateFileView();
+ void updateStashView();
void selectRootDir();
+
virtual QMenu *createPopupMenu();
enum RepoStatus
@@ -218,6 +219,11 @@ private slots:
void on_actionNewRepository_triggered();
void on_actionOpenRepository_triggered();
void on_actionCloseRepository_triggered();
+ void on_actionViewStash_triggered();
+ void on_actionNewStash_triggered();
+ void on_actionApplyStash_triggered();
+ void on_actionDeleteStash_triggered();
+ void on_actionDiffStash_triggered();
private:
enum
@@ -229,6 +235,7 @@ private:
Ui::MainWindow *ui;
QStandardItemModel repoFileModel;
QStandardItemModel repoDirModel;
+ QStandardItemModel repoStashModel;
QProcess fossilUI;
QString fossilUIPort;
class QAction *recentWorkspaceActs[MAX_RECENT];
@@ -246,8 +253,10 @@ private:
// Repo State
typedef QList filelist_t;
typedef QMap filemap_t;
+ typedef QMap stashmap_t;
filemap_t workspaceFiles;
stringset_t pathSet;
+ stashmap_t stashMap;
};
#endif // MAINWINDOW_H
diff --git a/MainWindow.ui b/MainWindow.ui
index 37ade9f..dfdebac 100644
--- a/MainWindow.ui
+++ b/MainWindow.ui
@@ -32,7 +32,7 @@
-
+
0
80
@@ -42,7 +42,7 @@
-
+
20
0
@@ -65,6 +65,9 @@
false
+
+ false
+
@@ -94,9 +97,15 @@
false
+
+ false
+
20
+
+ false
+
false
@@ -104,6 +113,44 @@
30
+
+
+
+ 20
+ 0
+
+
+
+ Qt::ActionsContextMenu
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ true
+
+
+ QAbstractItemView::SelectRows
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+ true
+
+
+ false
+
+
@@ -128,7 +175,7 @@
@@ -199,6 +248,8 @@
+
+
@@ -305,7 +356,7 @@
:/icons/icons/Document Blank-01.png:/icons/icons/Document Blank-01.png
- New...
+ &New...
Make a new Fossil repository
@@ -323,7 +374,7 @@
:/icons/icons/My Documents-01.png:/icons/icons/My Documents-01.png
- Open...
+ &Open...
Open a Fossil repository or workspace folder
@@ -340,7 +391,7 @@
- Close
+ &Close
Close the current workspace
@@ -418,7 +469,7 @@
:/icons/icons/Button Turn Off-01.png:/icons/icons/Button Turn Off-01.png
- Quit
+ &Quit
Quit
@@ -532,7 +583,7 @@
- :/icons/icons/My Documents-01.png:/icons/icons/My Documents-01.png
+ :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png
Open Containing
@@ -571,7 +622,7 @@
:/icons/icons/Battery-01.png:/icons/icons/Battery-01.png
- About...
+ &About...
About Fuel
@@ -601,7 +652,7 @@
:/icons/icons/Gear-01.png:/icons/icons/Gear-01.png
- Preferences...
+ &Preferences...
Fuel Preferences
@@ -618,7 +669,7 @@
true
- Modified
+ &Modified
Show modifed files
@@ -632,7 +683,7 @@
true
- Unchanged
+ &Unchanged
Show unchanged files
@@ -646,7 +697,7 @@
true
- Unknown
+ Un&known
Show unknown files
@@ -657,7 +708,7 @@
true
- Ignored
+ &Ignored
Show ignored files
@@ -668,7 +719,13 @@
true
- View as List
+ File &List
+
+
+ View as files as a list
+
+
+ View as files as a list
View the workspace as a list of files
@@ -677,7 +734,7 @@
- :/icons/icons/My Documents-01.png:/icons/icons/My Documents-01.png
+ :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png
Open Folder
@@ -704,6 +761,65 @@
Rename the selected folder
+
+
+
+ :/icons/icons/Folder Add-01.png:/icons/icons/Folder Add-01.png
+
+
+ Stash changes
+
+
+ Show the stash
+
+
+
+
+
+ :/icons/icons/Folder Open-01.png:/icons/icons/Folder Open-01.png
+
+
+ Apply Stash
+
+
+ Apply stashed changes
+
+
+ Apply stashed changes
+
+
+
+
+ true
+
+
+ &Stashed Changes
+
+
+ View the Stash
+
+
+ Show the list of stashed changes
+
+
+
+
+
+ :/icons/icons/Folder Delete-01.png:/icons/icons/Folder Delete-01.png
+
+
+ Delete Stash
+
+
+
+
+
+ :/icons/icons/Folder Explorer-01.png:/icons/icons/Folder Explorer-01.png
+
+
+ Diff Stash
+
+
diff --git a/manifest b/manifest
index 2a12daf..a7202b3 100644
--- a/manifest
+++ b/manifest
@@ -1,14 +1,14 @@
-C Allow\sfor\sopening\sworkspaces\svia\sthe\scheckout\sfile.\s[Thanks\sChris]\nAdded\ssupport\sfor\sthe\snew\s".fslckout"\sfile\nFixed\san\sissue\swhere\sthe\s\stree\sview\swas\snot\sbeing\supdated\swhen\shidden\sand\sa\sdifferent\sworkspace\swas\sopened\nMinor\sdialog\stext\simprovements\n
-D 2012-04-14T09:16:30.450
-F CommitDialog.cpp bc05504be08d9ffe2b24d341a18e37035e1941b7
-F CommitDialog.h 65a7238dcdd41b578536a0b0ac2a65f2e7f23c9a
-F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154
+C Added\ssupport\sfor\sstashes\nGeneralized\sthe\scommit\sdialog\sto\ssupport\sstashes\nParameters\sare\snow\squoted\sin\sthe\slog\sif\snecessary\nFixed\sanother\sissue\swith\sthe\sfolderview\sshow/hide\slogic\nVarious\sminor\sui\stweaks
+D 2012-04-15T06:56:51.575
+F CommitDialog.cpp a46020a9361151d8d286a2670257d01d8967bf69
+F CommitDialog.h f1ee8db92103164e7db55a8407ccdcff24571b72
+F CommitDialog.ui 813d7cba316e226de1a22b7e480bb969fbe9b0c4
F FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8
F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce
F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7
-F MainWindow.cpp f6ee64df8e4d275e3ed60462904566154758e9e1
-F MainWindow.h 643f13d4b5615c51c38b164768bf62258ccb94b1
-F MainWindow.ui 0afb7d2a8e9ce2cff2966295f9eefaed01f1ed51
+F MainWindow.cpp 36e0fa67dbae7db5612d00e28267a2f8240353d0
+F MainWindow.h 552f6bd4061ae15be90e52402bcde6a8d7fbb7ad
+F MainWindow.ui b96e3126e2966f8fdeda1dd063efbbc731c7338e
F SettingsDialog.cpp e1fad18cc020d08b82c6d35dc94f6624deec9a3b
F SettingsDialog.h f5da6cab4ccc82e2eb78ec835fb849c4c104d6cc
F SettingsDialog.ui 8964629ea80c61971c0601624c84d1927902b1fd
@@ -174,7 +174,7 @@ F installer/fuel.iss 13b6a938bcdf273cbd3649d2549887baa1577214
F installer/license.txt 4cc77b90af91e615a64ae04893fdffa7939db84c
F main.cpp 46bf5ddc90fca01c9ef2e8e3d14b4d32217945dd
F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53
-P b04aa4a2a385325b9b50e4ce700a364b05c7b70b
-R ba6b4795a2456f34d550ae60fa343370
+P d0520ae5050524145697206927a579823b8920d0
+R b055358a254079018cada6a15162fbb7
U kostas
-Z 6b958dff62628f63360ab69f37796e8d
+Z c15f935758986542ce2828f4282ddc7a
diff --git a/manifest.uuid b/manifest.uuid
index c16a4bd..6ecc512 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-d0520ae5050524145697206927a579823b8920d0
\ No newline at end of file
+ce70efe67a1fe0087cc6d3aa79757a5011c57db2
\ No newline at end of file