From d17850e07c0fd757ecf731b7e5bd8c5f249ec940 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 09:57:06 +0000 Subject: [PATCH 01/90] Create new branch named "refactor" FossilOrigin-Name: 7f876a0b9e2c3c802938bd843e3e387e5e7e027a --- manifest | 11 +++++++---- manifest.uuid | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/manifest b/manifest index 22272a8..782e366 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\sformatting\sin\sbuilding\sinstructions -D 2015-04-25T15:10:40.587 +C Create\snew\sbranch\snamed\s"refactor" +D 2015-04-26T09:57:06.445 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -213,7 +213,10 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 9314ddc02dd302435a4aea987f16cb847a1076b6 +P 6b51d631f61ea685cf4ce84b3c34954dcd6338e2 R 7cb8f99d09af03a8c7fc0a6cb6e77784 +T *branch * refactor +T *sym-refactor * +T -sym-trunk * U kostas -Z e7407fd42cdfa4ddd4dc6e2cd76018f5 +Z 7368bbf2e485a2aa190b88109453d953 diff --git a/manifest.uuid b/manifest.uuid index 5ffc378..6320ef9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6b51d631f61ea685cf4ce84b3c34954dcd6338e2 \ No newline at end of file +7f876a0b9e2c3c802938bd843e3e387e5e7e027a \ No newline at end of file From de78beb1b56eaa81381718b1ba373bda876a31d3 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 10:36:55 +0000 Subject: [PATCH 02/90] Started moving fossil operations into Bridge FossilOrigin-Name: 7a4ea959c64034b6e20dec41a4a8c16a09397bfa --- fuel.pro | 6 +- manifest | 23 ++- manifest.uuid | 2 +- src/Bridge.cpp | 453 +++++++++++++++++++++++++++++++++++++++++++++ src/Bridge.h | 93 ++++++++++ src/MainWindow.cpp | 45 +++++ src/MainWindow.h | 3 + src/main.cpp | 4 +- 8 files changed, 612 insertions(+), 17 deletions(-) create mode 100644 src/Bridge.cpp create mode 100644 src/Bridge.h diff --git a/fuel.pro b/fuel.pro index 789cb24..d5461a1 100644 --- a/fuel.pro +++ b/fuel.pro @@ -51,7 +51,8 @@ SOURCES += src/main.cpp\ src/CloneDialog.cpp \ src/LoggedProcess.cpp \ src/BrowserWidget.cpp \ - src/CustomWebView.cpp + src/CustomWebView.cpp \ + src/Bridge.cpp HEADERS += src/MainWindow.h \ src/CommitDialog.h \ @@ -62,7 +63,8 @@ HEADERS += src/MainWindow.h \ src/CloneDialog.h \ src/LoggedProcess.h \ src/BrowserWidget.h \ - src/CustomWebView.h + src/CustomWebView.h \ + src/Bridge.h FORMS += ui/MainWindow.ui \ ui/CommitDialog.ui \ diff --git a/manifest b/manifest index 782e366..6cd1bdc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Create\snew\sbranch\snamed\s"refactor" -D 2015-04-26T09:57:06.445 +C Started\smoving\sfossil\soperations\sinto\sBridge\n +D 2015-04-26T10:36:55.373 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro 844a18c3faf5239e0d0025d8b7feac3900c28e71 +F fuel.pro fe3ce3763affa5e809b1154fffd33b437d03ca5b F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -184,6 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f +F src/Bridge.cpp b34f14d8d887c9db6b27a84b6423931bf262e7a0 +F src/Bridge.h a2167ed1bb8d1d80eb2ff0fda157eb4c8d176b16 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -198,13 +200,13 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp f023407f57730b695d4eeff8f27eef569c9eec66 -F src/MainWindow.h dc0a9ed7de8a338e56c38c00ec303796f31bd24d +F src/MainWindow.cpp 7d07c97213b1a448d0a850c017cf226fb1c553da +F src/MainWindow.h a69b2e5ad3e6cd42343bccf145fa99dc9eb6c4f2 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 F src/Utils.h c546e478a1225a28c99cd4c30f70cf9be9804a2a -F src/main.cpp 0bba433f16072096cba1d48733b4e801df144800 +F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d @@ -213,10 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 6b51d631f61ea685cf4ce84b3c34954dcd6338e2 -R 7cb8f99d09af03a8c7fc0a6cb6e77784 -T *branch * refactor -T *sym-refactor * -T -sym-trunk * +P 7f876a0b9e2c3c802938bd843e3e387e5e7e027a +R 5d10ed53db083d8513096d001d39f7ff U kostas -Z 7368bbf2e485a2aa190b88109453d953 +Z 36c407da296e8989c57827d80d13d2da diff --git a/manifest.uuid b/manifest.uuid index 6320ef9..915af63 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7f876a0b9e2c3c802938bd843e3e387e5e7e027a \ No newline at end of file +7a4ea959c64034b6e20dec41a4a8c16a09397bfa \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp new file mode 100644 index 0000000..586b5ca --- /dev/null +++ b/src/Bridge.cpp @@ -0,0 +1,453 @@ +#include "Bridge.h" +#include +#include +#include +#include +#include +#include +#include +#include + +static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; + +#include "Utils.h" + +Bridge::RepoStatus Bridge::getRepoStatus() +{ + QStringList res; + int exit_code = EXIT_FAILURE; + + // We need to determine the reason why fossil has failed + // so we delay processing of the exit_code + if(!runFossilRaw(QStringList() << "info", &res, &exit_code, RUNFLAGS_SILENT_ALL)) + return REPO_NOT_FOUND; + + bool run_ok = exit_code == EXIT_SUCCESS; + + for(QStringList::iterator it=res.begin(); it!=res.end(); ++it) + { + int col_index = it->indexOf(':'); + if(col_index==-1) + continue; + + QString key = it->left(col_index).trimmed(); + QString value = it->mid(col_index+1).trimmed(); + + if(key=="fossil") + { + if(value=="incorrect repository schema version") + return REPO_OLD_SCHEMA; + else if(value=="not within an open checkout") + return REPO_NOT_FOUND; + } + + if(run_ok) + { + if(key=="project-name") + projectName = value; + else if(key=="repository") + repositoryFile = value; + } + } + + return run_ok ? REPO_OK : REPO_NOT_FOUND; +} +//------------------------------------------------------------------------------ +static QString ParseFossilQuery(QString line) +{ + // Extract question + int qend = line.lastIndexOf('('); + if(qend == -1) + qend = line.lastIndexOf('['); + Q_ASSERT(qend!=-1); + line = line.left(qend); + line = line.trimmed(); + line += "?"; + line[0]=QString(line[0]).toUpper()[0]; + return line; +} + + +//------------------------------------------------------------------------------ +bool Bridge::runFossil(const QStringList &args, QStringList *output, int runFlags) +{ + int exit_code = EXIT_FAILURE; + if(!runFossilRaw(args, output, &exit_code, runFlags)) + return false; + + return exit_code == EXIT_SUCCESS; +} + + +//------------------------------------------------------------------------------ +// Run fossil. Returns true if execution was successful regardless if fossil +// issued an error +bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags) +{ + bool silent_input = (runFlags & RUNFLAGS_SILENT_INPUT) != 0; + bool silent_output = (runFlags & RUNFLAGS_SILENT_OUTPUT) != 0; + bool detached = (runFlags & RUNFLAGS_DETACHED) != 0; + + if(!silent_input) + { + QString params; + foreach(QString p, args) + { + if(p.indexOf(' ')!=-1) + params += '"' + p + "\" "; + else + params += p + ' '; + } + log("> fossil "+params+"
", true); + } + + QString wkdir = getCurrentWorkspace(); + + QString fossil = getFossilPath(); + + // Detached processes use the command-line only, to avoid having to wait + // for the temporary args file to be released before returing + if(detached) + return QProcess::startDetached(fossil, args, wkdir); + + // Make StatusBar message +#if 0 // FIXME + QString status_msg = tr("Running Fossil"); + if(args.length() > 0) + status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); + ScopedStatus status(status_msg, ui, progressBar); +#endif + + // Generate args file + const QStringList *final_args = &args; + QTemporaryFile args_file; + if(!args_file.open()) + { + log(tr("Could not generate command line file")); + return false; + } + + // Write BOM + args_file.write(reinterpret_cast(UTF8_BOM), sizeof(UTF8_BOM)); + + // Write Args + foreach(const QString &arg, args) + { + args_file.write(arg.toUtf8()); + args_file.write("\n"); + } + args_file.close(); + + // Replace args with args filename + QStringList run_args; + run_args.append("--args"); + run_args.append(args_file.fileName()); + final_args = &run_args; + + // Create fossil process + LoggedProcess process(parentWidget); + process.setWorkingDirectory(wkdir); + + process.start(fossil, *final_args); + if(!process.waitForStarted()) + { + log(tr("Could not start Fossil executable '%0'").arg(fossil)+"\n"); + return false; + } + const QChar EOL_MARK('\n'); + QString ans_yes = 'y' + EOL_MARK; + QString ans_no = 'n' + EOL_MARK; + QString ans_always = 'a' + EOL_MARK; + QString ans_convert = 'c' + EOL_MARK; + + abortOperation = false; + QString buffer; + +#ifdef Q_OS_WIN + QTextCodec *codec = QTextCodec::codecForName("UTF-8"); +#else + QTextCodec *codec = QTextCodec::codecForLocale(); +#endif + + Q_ASSERT(codec); + QTextDecoder *decoder = codec->makeDecoder(); + Q_ASSERT(decoder); + + while(true) + { + QProcess::ProcessState state = process.state(); + qint64 bytes_avail = process.logBytesAvailable(); + + if(state!=QProcess::Running && bytes_avail<1) + break; + + if(abortOperation) + { + log("\n* "+tr("Terminated")+" *\n"); + #ifdef Q_OS_WIN // Verify this is still true on Qt5 + process.kill(); // QT on windows cannot terminate console processes with QProcess::terminate + #else + process.terminate(); + #endif + break; + } + + QByteArray input; + process.getLogAndClear(input); + + #ifdef QT_DEBUG // Log fossil output in debug builds + if(!input.isEmpty()) + qDebug() << input; + #endif + + buffer += decoder->toUnicode(input); + + QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + + if(buffer.isEmpty()) + continue; + + // Normalize line endings + buffer = buffer.replace("\r\n", "\n"); + buffer = buffer.replace("\r", "\n"); + + // Extract the last line + int last_line_start = buffer.lastIndexOf(EOL_MARK); + + QString last_line; + QString before_last_line; + if(last_line_start != -1) + { + last_line = buffer.mid(last_line_start+1); // Including the EOL + + // Detect previous line + if(last_line_start>0) + { + int before_last_line_start = buffer.lastIndexOf(EOL_MARK, last_line_start-1); + // No line before ? + if(before_last_line_start==-1) + before_last_line_start = 0; // Use entire line + + // Extract previous line + before_last_line = buffer.mid(before_last_line_start, last_line_start-before_last_line_start); + } + } + else + last_line = buffer; + + last_line = last_line.trimmed(); + + // Check if we have a query + bool ends_qmark = !last_line.isEmpty() && last_line[last_line.length()-1]=='?'; + bool have_yn_query = last_line.toLower().indexOf("y/n")!=-1; + bool have_yna_query = last_line.toLower().indexOf("a=always/y/n")!=-1 || last_line.toLower().indexOf("yes/no/all")!=-1 || last_line.toLower().indexOf("a=all/y/n")!=-1; + bool have_an_query = last_line.toLower().indexOf("a=always/n")!=-1; + bool have_acyn_query = last_line.toLower().indexOf("a=all/c=convert/y/n")!=-1; + + bool have_query = ends_qmark && (have_yn_query || have_yna_query || have_an_query || have_acyn_query); + + // Flush all complete lines to the log and output + QStringList log_lines = buffer.left(last_line_start).split(EOL_MARK); + for(int l=0; lappend(line); + + if(!silent_output) + log(line+"\n"); + } + + // Remove everything we processed (including the EOL) + buffer = buffer.mid(last_line_start+1) ; + + // Now process any query + if(have_query && (have_yna_query || have_acyn_query)) + { + log(last_line); + QString query = ParseFossilQuery(last_line); + QMessageBox::StandardButtons buttons = QMessageBox::YesToAll|QMessageBox::Yes|QMessageBox::No; + + // Add any extra text available to the query + before_last_line = before_last_line.trimmed(); + if(!before_last_line.isEmpty()) + query = before_last_line + "\n" + query; + + // Map the Convert option to the Apply button + if(have_acyn_query) + buttons |= QMessageBox::Apply; + + QMessageBox::StandardButton res = DialogQuery(parentWidget, "Fossil", query, buttons); + if(res==QMessageBox::Yes) + { + process.write(ans_yes.toLatin1()); + log("Y\n"); + } + else if(res==QMessageBox::YesAll) + { + process.write(ans_always.toLatin1()); + log("A\n"); + } + else if(res==QMessageBox::Apply) + { + process.write(ans_convert.toLatin1()); + log("C\n"); + } + else + { + process.write(ans_no.toLatin1()); + log("N\n"); + } + buffer.clear(); + } + else if(have_query && have_yn_query) + { + log(last_line); + QString query = ParseFossilQuery(last_line); + QMessageBox::StandardButton res = DialogQuery(parentWidget, "Fossil", query); + + if(res==QMessageBox::Yes) + { + process.write(ans_yes.toLatin1()); + log("Y\n"); + } + else + { + process.write(ans_no.toLatin1()); + log("N\n"); + } + + buffer.clear(); + } + else if(have_query && have_an_query) + { + log(last_line); + QString query = ParseFossilQuery(last_line); + QMessageBox::StandardButton res = DialogQuery(parentWidget, "Fossil", query, QMessageBox::YesToAll|QMessageBox::No); + if(res==QMessageBox::YesAll) + { + process.write(ans_always.toLatin1()); + log("A\n"); + } + else + { + process.write(ans_no.toLatin1()); + log("N\n"); + } + buffer.clear(); + } + } + + delete decoder; + + // Must be finished by now + Q_ASSERT(process.state()==QProcess::NotRunning); + + QProcess::ExitStatus es = process.exitStatus(); + + if(es!=QProcess::NormalExit) + return false; + + if(exitCode) + *exitCode = process.exitCode(); + + return true; +} + +QString Bridge::getFossilPath() +{ + // Use the user-specified fossil if available + QString fossil_path = fossilPath; + if(!fossil_path.isEmpty()) + return QDir::toNativeSeparators(fossil_path); + + QString fossil_exe = "fossil"; +#ifdef Q_OS_WIN + fossil_exe += ".exe"; +#endif + // Use our fossil if available + QString fuel_fossil = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + QDir::separator() + fossil_exe); + + if(QFile::exists(fuel_fossil)) + return fuel_fossil; + + // Otherwise assume there is a "fossil" executable in the path + return fossil_exe; +} + + +#define FOSSIL_CHECKOUT1 "_FOSSIL_" +#define FOSSIL_CHECKOUT2 ".fslckout" +#define FOSSIL_EXT "fossil" +#define PATH_SEP "/" + + +bool Bridge::isWorkspace(const QString &path) +{ + if(path.length()==0) + return false; + + QFileInfo fi(path); + QString wkspace = path; + wkspace = fi.absoluteDir().absolutePath(); + QString checkout_file1 = wkspace + PATH_SEP + FOSSIL_CHECKOUT1; + QString checkout_file2 = wkspace + PATH_SEP + FOSSIL_CHECKOUT2; + + return (QFileInfo(checkout_file1).exists() || QFileInfo(checkout_file2).exists()); +} + +//------------------------------------------------------------------------------ +bool Bridge::uiRunning() const +{ + return fossilUI.state() == QProcess::Running; +} + +//------------------------------------------------------------------------------ +bool Bridge::startUI(const QString &httpPort) +{ + if(uiRunning()) + { + log(tr("Fossil UI is already running")+"\n"); + return true; + } + + fossilUI.setParent(parentWidget); + fossilUI.setProcessChannelMode(QProcess::MergedChannels); + fossilUI.setWorkingDirectory(getCurrentWorkspace()); + + log("> fossil ui
", true); + log(tr("Starting Fossil browser UI. Please wait.")+"\n"); + QString fossil = getFossilPath(); + + fossilUI.start(fossil, QStringList() << "server" << "--localauth" << "-P" << httpPort ); + + if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running) + { + log(tr("Could not start Fossil executable '%s'").arg(fossil)+"\n"); + return false; + } + + return true; +} + +//------------------------------------------------------------------------------ +void Bridge::stopUI() +{ + if(uiRunning()) + { +#ifdef Q_WS_WIN + fossilUI.kill(); // QT on windows cannot terminate console processes with QProcess::terminate +#else + fossilUI.terminate(); +#endif + } + fossilUI.close(); +} diff --git a/src/Bridge.h b/src/Bridge.h new file mode 100644 index 0000000..b6ef008 --- /dev/null +++ b/src/Bridge.h @@ -0,0 +1,93 @@ +#ifndef BRIDGE_H +#define BRIDGE_H + +class QStringList; +#include +#include +#include + + +class Bridge : public QObject +{ +public: + Bridge() + : QObject(0) + , parentWidget(0) + , abortOperation(false) + , logCallbackObject(0) + { + } + + + bool runFossil(const QStringList &args, QStringList *output, int runFlags); + bool runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags); + + enum RunFlags + { + RUNFLAGS_NONE = 0<<0, + RUNFLAGS_SILENT_INPUT = 1<<0, + RUNFLAGS_SILENT_OUTPUT = 1<<1, + RUNFLAGS_SILENT_ALL = RUNFLAGS_SILENT_INPUT | RUNFLAGS_SILENT_OUTPUT, + RUNFLAGS_DETACHED = 1<<2 + }; + + typedef void(*log_callback_t)(const QString &text, bool isHTML, QObject *object); + + + void Init(QWidget *parent, log_callback_t callback, QObject *callbackObject, const QString &fossPath, const QString &workspace) + { + parentWidget = parent; + logCallback = callback; + logCallbackObject = callbackObject; + + fossilPath = fossPath; + currentWorkspace = workspace; + } + + + static bool isWorkspace(const QString &path); + enum RepoStatus + { + REPO_OK, + REPO_NOT_FOUND, + REPO_OLD_SCHEMA + }; + + RepoStatus getRepoStatus(); + + + + bool uiRunning() const; + bool startUI(const QString &httpPort); + void stopUI(); + + QString projectName; + QString repositoryFile; + +private: + void log(const QString &text, bool isHTML=false) + { + if(logCallback) + (*logCallback)(text, isHTML, logCallbackObject); + } + + const QString &getCurrentWorkspace() + { + return currentWorkspace; + } + + QString getFossilPath(); + + QWidget *parentWidget; // fixme + bool abortOperation; // FIXME: No GUI for it yet + + log_callback_t logCallback; + QObject *logCallbackObject; + QString currentWorkspace; + QString fossilPath; // The value from the settings + + QProcess fossilUI; +}; + + +#endif // BRIDGE_H diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 4cf570f..b556d0f 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -34,6 +34,7 @@ static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; // 19: [5c46757d4b9765] on 2012-04-22 04:41:15 static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); +//#define BRIDGE_DISABLED //----------------------------------------------------------------------------- enum @@ -235,6 +236,8 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP applySettings(); + bridge.Init(this, 0, 0, "", ""); + // Apply any explicit workspace path if available if(workspacePath && !workspacePath->isEmpty()) openWorkspace(*workspacePath); @@ -980,6 +983,7 @@ void MainWindow::updateFileView() } //------------------------------------------------------------------------------ +#ifdef BRIDGE_DISABLED MainWindow::RepoStatus MainWindow::getRepoStatus() { QStringList res; @@ -1020,6 +1024,12 @@ MainWindow::RepoStatus MainWindow::getRepoStatus() return run_ok ? REPO_OK : REPO_NOT_FOUND; } +#else +MainWindow::RepoStatus MainWindow::getRepoStatus() +{ + return (MainWindow::RepoStatus) bridge.getRepoStatus(); +} +#endif //------------------------------------------------------------------------------ void MainWindow::updateStashView() { @@ -1064,6 +1074,8 @@ void MainWindow::on_actionClearLog_triggered() ui->textBrowser->clear(); } + +#ifdef BRIDGE_DISABLED //------------------------------------------------------------------------------ bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) { @@ -1391,6 +1403,21 @@ QString MainWindow::getFossilPath() // Otherwise assume there is a "fossil" executable in the path return fossil_exe; } +#else + +bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) +{ + return bridge.runFossil(args, output, runFlags); +} + +//------------------------------------------------------------------------------ +bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags) +{ + return bridge.runFossilRaw(args, output, exitCode, runFlags); + +} +#endif + //------------------------------------------------------------------------------ void MainWindow::applySettings() { @@ -1695,6 +1722,7 @@ void MainWindow::on_actionDiff_triggered() } //------------------------------------------------------------------------------ +#ifdef BRIDGE_DISABLED bool MainWindow::startUI() { if(uiRunning()) @@ -1741,6 +1769,23 @@ void MainWindow::stopUI() ui->actionFossilUI->setChecked(false); } +#else +bool MainWindow::startUI() +{ + QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString(); + bool started = bridge.startUI(port); + ui->actionFossilUI->setChecked(started); + return started; +} +//------------------------------------------------------------------------------ +void MainWindow::stopUI() +{ + bridge.stopUI(); + ui->actionFossilUI->setChecked(false); +} + +#endif + //------------------------------------------------------------------------------ void MainWindow::on_actionFossilUI_triggered() diff --git a/src/MainWindow.h b/src/MainWindow.h index 49aab29..8583a19 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -10,6 +10,7 @@ #include #include #include "SettingsDialog.h" +#include "Bridge.h" namespace Ui { class MainWindow; @@ -261,6 +262,8 @@ private: ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree + Bridge bridge; + // Repository State typedef QList filelist_t; typedef QMap filemap_t; diff --git a/src/main.cpp b/src/main.cpp index 289a6c8..100b096 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,8 +5,8 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setApplicationName("Fuel"); - app.setApplicationVersion("1.0.0"); - app.setOrganizationDomain("fuel-scm.org"); + app.setApplicationVersion("2.0.0"); + app.setOrganizationDomain("fuelscm.org"); app.setOrganizationName("Fuel-SCM"); From f261fbaa66c782222237994c6ec3ee1b70e21d9e Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 10:41:44 +0000 Subject: [PATCH 03/90] Ported uiRunning FossilOrigin-Name: bc822e7b940bf0e3eceaf99d6a47921af1a361f0 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 13 +++++++++++++ src/MainWindow.h | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 6cd1bdc..a618d97 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Started\smoving\sfossil\soperations\sinto\sBridge\n -D 2015-04-26T10:36:55.373 +C Ported\suiRunning +D 2015-04-26T10:41:44.338 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 7d07c97213b1a448d0a850c017cf226fb1c553da -F src/MainWindow.h a69b2e5ad3e6cd42343bccf145fa99dc9eb6c4f2 +F src/MainWindow.cpp 16c97083d455983f1c7d21c8d21a16d7d0676ba4 +F src/MainWindow.h 8336643bbdca5c294f9fafc91ae78303fb7c063e F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 7f876a0b9e2c3c802938bd843e3e387e5e7e027a -R 5d10ed53db083d8513096d001d39f7ff +P 7a4ea959c64034b6e20dec41a4a8c16a09397bfa +R d99dba3c5888b6181bf266039eef3548 U kostas -Z 36c407da296e8989c57827d80d13d2da +Z 8b104a9799f52bcdd97acb20bb55d2d7 diff --git a/manifest.uuid b/manifest.uuid index 915af63..b1a326a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7a4ea959c64034b6e20dec41a4a8c16a09397bfa \ No newline at end of file +bc822e7b940bf0e3eceaf99d6a47921af1a361f0 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index b556d0f..2ba87e2 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1769,6 +1769,13 @@ void MainWindow::stopUI() ui->actionFossilUI->setChecked(false); } + +//------------------------------------------------------------------------------ +bool MainWindow::uiRunning() const +{ + return fossilUI.state() == QProcess::Running; +} + #else bool MainWindow::startUI() { @@ -1784,6 +1791,12 @@ void MainWindow::stopUI() ui->actionFossilUI->setChecked(false); } +//------------------------------------------------------------------------------ +bool MainWindow::uiRunning() const +{ + return bridge.uiRunning(); +} + #endif diff --git a/src/MainWindow.h b/src/MainWindow.h index 8583a19..2518c2b 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -145,7 +145,7 @@ private: void setCurrentWorkspace(const QString &workspace); void log(const QString &text, bool isHTML=false); void setStatus(const QString &text); - bool uiRunning() const { return fossilUI.state() == QProcess::Running; } + bool uiRunning() const; 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); From 39745ab55aacc13906b3e9cf7946af4b9824e309 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 10:58:36 +0000 Subject: [PATCH 04/90] Refactored logging FossilOrigin-Name: 9c198b023e2df1b5cfe64dd745d070732b5ab843 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.h | 13 +++++++------ src/MainWindow.cpp | 28 +++++++++++++++++----------- src/MainWindow.h | 5 +++++ 5 files changed, 38 insertions(+), 26 deletions(-) diff --git a/manifest b/manifest index a618d97..b1dbb5d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ported\suiRunning -D 2015-04-26T10:41:44.338 +C Refactored\slogging\n +D 2015-04-26T10:58:36.776 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -185,7 +185,7 @@ F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f F src/Bridge.cpp b34f14d8d887c9db6b27a84b6423931bf262e7a0 -F src/Bridge.h a2167ed1bb8d1d80eb2ff0fda157eb4c8d176b16 +F src/Bridge.h 7c6c314b45d1010e17af5aa6975469fd3a4ba2aa F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 16c97083d455983f1c7d21c8d21a16d7d0676ba4 -F src/MainWindow.h 8336643bbdca5c294f9fafc91ae78303fb7c063e +F src/MainWindow.cpp 0400011fea2e3b83008fb00a95199de6d63aa391 +F src/MainWindow.h 60b5a13bec9fa43c5ec37aa1f748005c9add19d5 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 7a4ea959c64034b6e20dec41a4a8c16a09397bfa -R d99dba3c5888b6181bf266039eef3548 +P bc822e7b940bf0e3eceaf99d6a47921af1a361f0 +R c580610965f2587fc6a5ff80b6dd2555 U kostas -Z 8b104a9799f52bcdd97acb20bb55d2d7 +Z e9a9d3506fa9e7637aeb7a955de583a9 diff --git a/manifest.uuid b/manifest.uuid index b1a326a..8eb23e7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bc822e7b940bf0e3eceaf99d6a47921af1a361f0 \ No newline at end of file +9c198b023e2df1b5cfe64dd745d070732b5ab843 \ No newline at end of file diff --git a/src/Bridge.h b/src/Bridge.h index b6ef008..e439583 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -5,6 +5,7 @@ class QStringList; #include #include #include +#include class Bridge : public QObject @@ -14,7 +15,7 @@ public: : QObject(0) , parentWidget(0) , abortOperation(false) - , logCallbackObject(0) + , logTextBrowser(0) { } @@ -31,14 +32,14 @@ public: RUNFLAGS_DETACHED = 1<<2 }; - typedef void(*log_callback_t)(const QString &text, bool isHTML, QObject *object); + typedef void(*log_callback_t)(QTextBrowser *textBrowser, const QString &text, bool isHTML); - void Init(QWidget *parent, log_callback_t callback, QObject *callbackObject, const QString &fossPath, const QString &workspace) + void Init(QWidget *parent, log_callback_t callback, QTextBrowser *textBrowser, const QString &fossPath, const QString &workspace) { parentWidget = parent; logCallback = callback; - logCallbackObject = callbackObject; + logTextBrowser = textBrowser; fossilPath = fossPath; currentWorkspace = workspace; @@ -68,7 +69,7 @@ private: void log(const QString &text, bool isHTML=false) { if(logCallback) - (*logCallback)(text, isHTML, logCallbackObject); + (*logCallback)(logTextBrowser, text, isHTML); } const QString &getCurrentWorkspace() @@ -82,7 +83,7 @@ private: bool abortOperation; // FIXME: No GUI for it yet log_callback_t logCallback; - QObject *logCallbackObject; + QTextBrowser *logTextBrowser; QString currentWorkspace; QString fossilPath; // The value from the settings diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2ba87e2..0d0100a 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -34,8 +34,6 @@ static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; // 19: [5c46757d4b9765] on 2012-04-22 04:41:15 static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); -//#define BRIDGE_DISABLED - //----------------------------------------------------------------------------- enum { @@ -236,7 +234,9 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP applySettings(); - bridge.Init(this, 0, 0, "", ""); +#ifdef BRIDGE_ENABLED + bridge.Init(this, &log, ui->textBrowser, "", ""); +#endif // Apply any explicit workspace path if available if(workspacePath && !workspacePath->isEmpty()) @@ -983,7 +983,7 @@ void MainWindow::updateFileView() } //------------------------------------------------------------------------------ -#ifdef BRIDGE_DISABLED +#ifndef BRIDGE_ENABLED MainWindow::RepoStatus MainWindow::getRepoStatus() { QStringList res; @@ -1050,16 +1050,22 @@ void MainWindow::updateStashView() } //------------------------------------------------------------------------------ -void MainWindow::log(const QString &text, bool isHTML) +void MainWindow::log(QTextBrowser *textBrowser, const QString &text, bool isHTML) { - QTextCursor c = ui->textBrowser->textCursor(); + QTextCursor c = textBrowser->textCursor(); c.movePosition(QTextCursor::End); - ui->textBrowser->setTextCursor(c); + textBrowser->setTextCursor(c); if(isHTML) - ui->textBrowser->insertHtml(text); + textBrowser->insertHtml(text); else - ui->textBrowser->insertPlainText(text); + textBrowser->insertPlainText(text); +} + +//------------------------------------------------------------------------------ +void MainWindow::log(const QString &text, bool isHTML) +{ + log(ui->textBrowser, text, isHTML); } //------------------------------------------------------------------------------ @@ -1075,7 +1081,7 @@ void MainWindow::on_actionClearLog_triggered() } -#ifdef BRIDGE_DISABLED +#ifndef BRIDGE_ENABLED //------------------------------------------------------------------------------ bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) { @@ -1722,7 +1728,7 @@ void MainWindow::on_actionDiff_triggered() } //------------------------------------------------------------------------------ -#ifdef BRIDGE_DISABLED +#ifndef BRIDGE_ENABLED bool MainWindow::startUI() { if(uiRunning()) diff --git a/src/MainWindow.h b/src/MainWindow.h index 2518c2b..112a5e0 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -12,6 +12,8 @@ #include "SettingsDialog.h" #include "Bridge.h" +#define BRIDGE_ENABLED + namespace Ui { class MainWindow; } @@ -143,6 +145,7 @@ private: void updateSettings(); const QString &getCurrentWorkspace(); void setCurrentWorkspace(const QString &workspace); + static void log(QTextBrowser *textBrowser, const QString &text, bool isHTML); void log(const QString &text, bool isHTML=false); void setStatus(const QString &text); bool uiRunning() const; @@ -262,7 +265,9 @@ private: ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree +#ifdef BRIDGE_ENABLED Bridge bridge; +#endif // Repository State typedef QList filelist_t; From 17736bd719693c05d7de86141b1df384c3cdfde0 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 11:13:24 +0000 Subject: [PATCH 05/90] Moved currentWorkspace to Bridge FossilOrigin-Name: a7ac992f6f87abee63c74696cb372a1564250103 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.h | 13 +++++++++---- src/MainWindow.cpp | 17 +++++++++++++++-- src/MainWindow.h | 2 ++ 5 files changed, 35 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index b1dbb5d..93c9092 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactored\slogging\n -D 2015-04-26T10:58:36.776 +C Moved\scurrentWorkspace\sto\sBridge +D 2015-04-26T11:13:24.835 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -185,7 +185,7 @@ F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f F src/Bridge.cpp b34f14d8d887c9db6b27a84b6423931bf262e7a0 -F src/Bridge.h 7c6c314b45d1010e17af5aa6975469fd3a4ba2aa +F src/Bridge.h b06c1db4906305a83ec1d32a7241bde9d1776ecb F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 0400011fea2e3b83008fb00a95199de6d63aa391 -F src/MainWindow.h 60b5a13bec9fa43c5ec37aa1f748005c9add19d5 +F src/MainWindow.cpp 7bc9f5ce1da7a8c19e923440a1f08c492d7387d0 +F src/MainWindow.h e087145f0eab2319ffac281993a9944a354e15c1 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P bc822e7b940bf0e3eceaf99d6a47921af1a361f0 -R c580610965f2587fc6a5ff80b6dd2555 +P 9c198b023e2df1b5cfe64dd745d070732b5ab843 +R d0adfbb3f952b08bd7432dd99b039a0b U kostas -Z e9a9d3506fa9e7637aeb7a955de583a9 +Z 7e132583e7db752dfecd3420482d5c4a diff --git a/manifest.uuid b/manifest.uuid index 8eb23e7..6fe38b5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9c198b023e2df1b5cfe64dd745d070732b5ab843 \ No newline at end of file +a7ac992f6f87abee63c74696cb372a1564250103 \ No newline at end of file diff --git a/src/Bridge.h b/src/Bridge.h index e439583..fde84b8 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -56,6 +56,15 @@ public: RepoStatus getRepoStatus(); + void setCurrentWorkspace(const QString &workspace) + { + currentWorkspace = workspace; + } + + const QString &getCurrentWorkspace() + { + return currentWorkspace; + } bool uiRunning() const; @@ -72,10 +81,6 @@ private: (*logCallback)(logTextBrowser, text, isHTML); } - const QString &getCurrentWorkspace() - { - return currentWorkspace; - } QString getFossilPath(); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 0d0100a..a1a25a1 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -262,7 +262,11 @@ MainWindow::~MainWindow() //----------------------------------------------------------------------------- const QString &MainWindow::getCurrentWorkspace() { +#ifndef BRIDGE_ENABLED return currentWorkspace; +#else + return bridge.getCurrentWorkspace(); +#endif } //----------------------------------------------------------------------------- @@ -270,13 +274,22 @@ void MainWindow::setCurrentWorkspace(const QString &workspace) { if(workspace.isEmpty()) { +#ifndef BRIDGE_ENABLED currentWorkspace.clear(); +#else + bridge.setCurrentWorkspace(""); +#endif return; } QString new_workspace = QFileInfo(workspace).absoluteFilePath(); +#ifndef BRIDGE_ENABLED currentWorkspace = new_workspace; +#else + bridge.setCurrentWorkspace(new_workspace); +#endif + addWorkspace(new_workspace); if(!QDir::setCurrent(new_workspace)) @@ -2736,11 +2749,11 @@ void MainWindow::dropEvent(QDropEvent *event) QString abspath = finfo.absoluteFilePath(); // Within the current workspace ? - if(abspath.indexOf(currentWorkspace)!=0) + if(abspath.indexOf(getCurrentWorkspace())!=0) continue; // skip // Remove workspace from full path - QString wkpath = abspath.right(abspath.length()-currentWorkspace.length()-1); + QString wkpath = abspath.right(abspath.length()-getCurrentWorkspace().length()-1); newfiles.append(wkpath); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 112a5e0..ebf2c00 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -261,7 +261,9 @@ private: QString projectName; QString repositoryFile; QStringList workspaceHistory; +#ifndef BRIDGE_ENABLED QString currentWorkspace; +#endif ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree From e8c8f9e506eafb723994041eb486910972aaa987 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 11:33:07 +0000 Subject: [PATCH 06/90] Fixed currentWorkspace Refactored projectName FossilOrigin-Name: 1d1ec089cdb02738d99efcc66c1b32bb0e3208e0 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.h | 12 ++++++++++-- src/MainWindow.cpp | 12 +++++++----- src/MainWindow.h | 9 +++++---- 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 93c9092..7fe3561 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Moved\scurrentWorkspace\sto\sBridge -D 2015-04-26T11:13:24.835 +C Fixed\scurrentWorkspace\nRefactored\s\sprojectName +D 2015-04-26T11:33:07.285 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -185,7 +185,7 @@ F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f F src/Bridge.cpp b34f14d8d887c9db6b27a84b6423931bf262e7a0 -F src/Bridge.h b06c1db4906305a83ec1d32a7241bde9d1776ecb +F src/Bridge.h 4d761a594415105f765c90baf081e7ae1f48f614 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 7bc9f5ce1da7a8c19e923440a1f08c492d7387d0 -F src/MainWindow.h e087145f0eab2319ffac281993a9944a354e15c1 +F src/MainWindow.cpp 1f54b516ab93e11b3ac6019215be70ede4a83f06 +F src/MainWindow.h 27ec1b2e2925d9b5005a60f9c2546ca0bf724b4c F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 9c198b023e2df1b5cfe64dd745d070732b5ab843 -R d0adfbb3f952b08bd7432dd99b039a0b +P a7ac992f6f87abee63c74696cb372a1564250103 +R 50596001f3be473af30beed2e9989cea U kostas -Z 7e132583e7db752dfecd3420482d5c4a +Z 3eeb9c3b313f41a766a406d8d644c6ab diff --git a/manifest.uuid b/manifest.uuid index 6fe38b5..a17d514 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a7ac992f6f87abee63c74696cb372a1564250103 \ No newline at end of file +1d1ec089cdb02738d99efcc66c1b32bb0e3208e0 \ No newline at end of file diff --git a/src/Bridge.h b/src/Bridge.h index fde84b8..92ee6c6 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -61,17 +61,22 @@ public: currentWorkspace = workspace; } - const QString &getCurrentWorkspace() + const QString &getCurrentWorkspace() const { return currentWorkspace; } + const QString &getProjectName() const + { + return projectName; + } + + bool uiRunning() const; bool startUI(const QString &httpPort); void stopUI(); - QString projectName; QString repositoryFile; private: @@ -92,6 +97,9 @@ private: QString currentWorkspace; QString fossilPath; // The value from the settings + QString projectName; + + QProcess fossilUI; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index a1a25a1..cc8c261 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -232,12 +232,13 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP viewMode = VIEWMODE_TREE; - applySettings(); - #ifdef BRIDGE_ENABLED + // Need to be before applySettings which sets the last workspace bridge.Init(this, &log, ui->textBrowser, "", ""); #endif + applySettings(); + // Apply any explicit workspace path if available if(workspacePath && !workspacePath->isEmpty()) openWorkspace(*workspacePath); @@ -673,8 +674,9 @@ bool MainWindow::refresh() enableActions(true); QString title = "Fuel"; - if(!projectName.isEmpty()) - title += " - "+projectName; + + if(!getProjectName().isEmpty()) + title += " - " + getProjectName(); setWindowTitle(title); return true; @@ -903,7 +905,7 @@ void MainWindow::updateDirView() header << tr("Folders"); repoDirModel.setHorizontalHeaderLabels(header); - QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), projectName); + QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), getProjectName()); root->setData(""); // Empty Path root->setEditable(false); diff --git a/src/MainWindow.h b/src/MainWindow.h index ebf2c00..2c799cc 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -258,18 +258,19 @@ private: bool abortOperation; Settings &settings; - QString projectName; QString repositoryFile; QStringList workspaceHistory; #ifndef BRIDGE_ENABLED + QString projectName; QString currentWorkspace; + const QString & getProjectName() const { return projectName; } +#else + Bridge bridge; + const QString & getProjectName() const { return bridge.getProjectName(); } #endif ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree -#ifdef BRIDGE_ENABLED - Bridge bridge; -#endif // Repository State typedef QList filelist_t; From a1d60fa19c53a32fdd4c690babd9e695d1be384c Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 12:27:51 +0000 Subject: [PATCH 07/90] Refactored repositoryFile FossilOrigin-Name: 880213d7d5ad220ae0a8c453e367d87f069c67b7 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.h | 16 ++++++++++++---- src/MainWindow.cpp | 14 +++++++------- src/MainWindow.h | 8 +++++++- 5 files changed, 35 insertions(+), 21 deletions(-) diff --git a/manifest b/manifest index 7fe3561..e4b192c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\scurrentWorkspace\nRefactored\s\sprojectName -D 2015-04-26T11:33:07.285 +C Refactored\srepositoryFile\n +D 2015-04-26T12:27:51.155 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -185,7 +185,7 @@ F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f F src/Bridge.cpp b34f14d8d887c9db6b27a84b6423931bf262e7a0 -F src/Bridge.h 4d761a594415105f765c90baf081e7ae1f48f614 +F src/Bridge.h 4e32aaea72c4ca2e5703cb8a19b67e233a7b735a F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 1f54b516ab93e11b3ac6019215be70ede4a83f06 -F src/MainWindow.h 27ec1b2e2925d9b5005a60f9c2546ca0bf724b4c +F src/MainWindow.cpp ee9cedf5766d169a0548f0621f939c5bf7a35167 +F src/MainWindow.h 3b94fb6a1f877c7ab861ae5ab29c4516c09301a4 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P a7ac992f6f87abee63c74696cb372a1564250103 -R 50596001f3be473af30beed2e9989cea +P 1d1ec089cdb02738d99efcc66c1b32bb0e3208e0 +R 8f891191e4c7bf83fb23055f9a6cd4b2 U kostas -Z 3eeb9c3b313f41a766a406d8d644c6ab +Z 5b7acc471a730941f76f2cc8e3fb3853 diff --git a/manifest.uuid b/manifest.uuid index a17d514..bb2e02b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1d1ec089cdb02738d99efcc66c1b32bb0e3208e0 \ No newline at end of file +880213d7d5ad220ae0a8c453e367d87f069c67b7 \ No newline at end of file diff --git a/src/Bridge.h b/src/Bridge.h index 92ee6c6..06a2c54 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -72,12 +72,21 @@ public: return projectName; } + const QString &getRepositoryFile() const + { + return repositoryFile; + } + + void setRepositoryFile(const QString &filename) + { + repositoryFile = filename; + } + bool uiRunning() const; bool startUI(const QString &httpPort); void stopUI(); - QString repositoryFile; private: void log(const QString &text, bool isHTML=false) @@ -96,9 +105,8 @@ private: QTextBrowser *logTextBrowser; QString currentWorkspace; QString fossilPath; // The value from the settings - - QString projectName; - + QString repositoryFile; + QString projectName; QProcess fossilUI; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index cc8c261..20194ee 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -355,9 +355,9 @@ bool MainWindow::openWorkspace(const QString &path) return false; } - repositoryFile = fi.absoluteFilePath(); + setRepositoryFile(fi.absoluteFilePath()); - if(!runFossil(QStringList() << "open" << QuotePath(repositoryFile))) + if(!runFossil(QStringList() << "open" << QuotePath(getRepositoryFile()))) { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return false; @@ -458,10 +458,10 @@ void MainWindow::on_actionNewRepository_triggered() stopUI(); on_actionClearLog_triggered(); - repositoryFile = repo_path_info.absoluteFilePath(); + setRepositoryFile(repo_path_info.absoluteFilePath()); // Create repository - if(!runFossil(QStringList() << "new" << QuotePath(repositoryFile))) + if(!runFossil(QStringList() << "new" << QuotePath(getRepositoryFile()))) { QMessageBox::critical(this, tr("Error"), tr("Could not create repository."), QMessageBox::Ok ); return; @@ -480,7 +480,7 @@ void MainWindow::on_actionNewRepository_triggered() ui->actionViewUnknown->setChecked(true); // Open repo - if(!runFossil(QStringList() << "open" << QuotePath(repositoryFile))) + if(!runFossil(QStringList() << "open" << QuotePath(getRepositoryFile()))) { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return; @@ -733,7 +733,7 @@ void MainWindow::scanWorkspace() QString fullpath = it->absoluteFilePath(); // Skip fossil files - if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!repositoryFile.isEmpty() && QFileInfo(fullpath) == QFileInfo(repositoryFile))) + if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!getRepositoryFile().isEmpty() && QFileInfo(fullpath) == QFileInfo(getRepositoryFile()))) continue; RepoFile *rf = new RepoFile(*it, RepoFile::TYPE_UNKNOWN, wkdir); @@ -1033,7 +1033,7 @@ MainWindow::RepoStatus MainWindow::getRepoStatus() if(key=="project-name") projectName = value; else if(key=="repository") - repositoryFile = value; + setRepositoryFile(value); } } diff --git a/src/MainWindow.h b/src/MainWindow.h index 2c799cc..d633b39 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -258,15 +258,21 @@ private: bool abortOperation; Settings &settings; - QString repositoryFile; QStringList workspaceHistory; #ifndef BRIDGE_ENABLED QString projectName; QString currentWorkspace; + QString repositoryFile; + + const QString & getRepositoryFile() const { return repositoryFile; } + void setRepositoryFile(const QString &filename) { repositoryFile = filename; } const QString & getProjectName() const { return projectName; } #else Bridge bridge; const QString & getProjectName() const { return bridge.getProjectName(); } + const QString & getRepositoryFile() const { return bridge.getRepositoryFile(); } + void setRepositoryFile(const QString &filename) { bridge.setRepositoryFile(filename); } + #endif ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree From 68575b95cdb418e09398bc70cd695693152d1315 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 13:57:13 +0000 Subject: [PATCH 08/90] Fixed status bar updates FossilOrigin-Name: bf0e885bf80d28fda92ed20315d93445bb2b42a6 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 8 -------- src/MainWindow.cpp | 14 ++++++-------- src/MainWindow.h | 2 ++ 5 files changed, 17 insertions(+), 25 deletions(-) diff --git a/manifest b/manifest index e4b192c..4f25599 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactored\srepositoryFile\n -D 2015-04-26T12:27:51.155 +C Fixed\sstatus\sbar\supdates +D 2015-04-26T13:57:13.333 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,7 +184,7 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp b34f14d8d887c9db6b27a84b6423931bf262e7a0 +F src/Bridge.cpp 7c4c368c8c8923122116f9f8e1d0d3cfb037444b F src/Bridge.h 4e32aaea72c4ca2e5703cb8a19b67e233a7b735a F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp ee9cedf5766d169a0548f0621f939c5bf7a35167 -F src/MainWindow.h 3b94fb6a1f877c7ab861ae5ab29c4516c09301a4 +F src/MainWindow.cpp 664178a97f540e6015efc302f019efdd90db7b1c +F src/MainWindow.h 3e19e5af60fa9bf0b7049fce70e2f030f8514ac9 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 1d1ec089cdb02738d99efcc66c1b32bb0e3208e0 -R 8f891191e4c7bf83fb23055f9a6cd4b2 +P 880213d7d5ad220ae0a8c453e367d87f069c67b7 +R 68848428b73aa9c48d56ef567d781a32 U kostas -Z 5b7acc471a730941f76f2cc8e3fb3853 +Z 42c2887151fe2c1da8c90c1b39de078e diff --git a/manifest.uuid b/manifest.uuid index bb2e02b..587964d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -880213d7d5ad220ae0a8c453e367d87f069c67b7 \ No newline at end of file +bf0e885bf80d28fda92ed20315d93445bb2b42a6 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 586b5ca..05323dd 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -110,14 +110,6 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi if(detached) return QProcess::startDetached(fossil, args, wkdir); - // Make StatusBar message -#if 0 // FIXME - QString status_msg = tr("Running Fossil"); - if(args.length() > 0) - status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); - ScopedStatus status(status_msg, ui, progressBar); -#endif - // Generate args file const QStringList *final_args = &args; QTemporaryFile args_file; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 20194ee..39ddc33 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -600,7 +600,6 @@ bool MainWindow::scanDirectory(QFileInfoList &entries, const QString& dirPath, c return false; QFileInfo info = list[i]; - QString filename = info.fileName(); QString filepath = info.filePath(); QString rel_path = filepath; rel_path.remove(baseDir+PATH_SEP); @@ -1428,15 +1427,14 @@ QString MainWindow::getFossilPath() bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) { + // Make StatusBar message + QString status_msg = tr("Running Fossil"); + if(args.length() > 0) + status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); + ScopedStatus status(status_msg, ui, progressBar); + return bridge.runFossil(args, output, runFlags); } - -//------------------------------------------------------------------------------ -bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags) -{ - return bridge.runFossilRaw(args, output, exitCode, runFlags); - -} #endif //------------------------------------------------------------------------------ diff --git a/src/MainWindow.h b/src/MainWindow.h index d633b39..1627638 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -140,7 +140,9 @@ private: bool refresh(); void scanWorkspace(); bool runFossil(const QStringList &args, QStringList *output=0, int runFlags=RUNFLAGS_NONE); +#ifndef BRIDGE_ENABLED bool runFossilRaw(const QStringList &args, QStringList *output=0, int *exitCode=0, int runFlags=RUNFLAGS_NONE); +#endif void applySettings(); void updateSettings(); const QString &getCurrentWorkspace(); From b97434a2a49269d1dde7bdbe94919c117b239506 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 17:13:29 +0000 Subject: [PATCH 09/90] Refactored openRepository FossilOrigin-Name: 02a7b672e1d634b703ee5f30258153c3f4610886 --- manifest | 20 ++++++++++---------- manifest.uuid | 2 +- src/Bridge.cpp | 20 ++++++++++++++++++++ src/Bridge.h | 7 ++++--- src/MainWindow.cpp | 25 +++++++++---------------- src/Utils.cpp | 17 ++++++++++++++++- src/Utils.h | 3 +++ 7 files changed, 63 insertions(+), 31 deletions(-) diff --git a/manifest b/manifest index 4f25599..f617454 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\sstatus\sbar\supdates -D 2015-04-26T13:57:13.333 +C Refactored\sopenRepository +D 2015-04-26T17:13:29.338 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 7c4c368c8c8923122116f9f8e1d0d3cfb037444b -F src/Bridge.h 4e32aaea72c4ca2e5703cb8a19b67e233a7b735a +F src/Bridge.cpp faf3de171463d77ba28948e5f40a6593090b973f +F src/Bridge.h 78f856817740777eafc2cb3ebde876eefb8d97cb F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,12 +200,12 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 664178a97f540e6015efc302f019efdd90db7b1c +F src/MainWindow.cpp 6115f40df16453946c2d1531d9f073744474dc7e F src/MainWindow.h 3e19e5af60fa9bf0b7049fce70e2f030f8514ac9 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/Utils.cpp 9aff456712e4276b49083426301b3b96d3819c77 -F src/Utils.h c546e478a1225a28c99cd4c30f70cf9be9804a2a +F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca +F src/Utils.h 9c9ee6c918fccaded2ae212d45514de7c9527f82 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 880213d7d5ad220ae0a8c453e367d87f069c67b7 -R 68848428b73aa9c48d56ef567d781a32 +P bf0e885bf80d28fda92ed20315d93445bb2b42a6 +R 5dd6a3a3a992f4b262039fc6c8121b23 U kostas -Z 42c2887151fe2c1da8c90c1b39de078e +Z 1d7b8fe8bfa0d1e122d9f1d78dba5383 diff --git a/manifest.uuid b/manifest.uuid index 587964d..ce1c7af 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bf0e885bf80d28fda92ed20315d93445bb2b42a6 \ No newline at end of file +02a7b672e1d634b703ee5f30258153c3f4610886 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 05323dd..1cab390 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -7,6 +7,7 @@ #include #include #include +#include "Utils.h" static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; @@ -52,6 +53,25 @@ Bridge::RepoStatus Bridge::getRepoStatus() return run_ok ? REPO_OK : REPO_NOT_FOUND; } + +//------------------------------------------------------------------------------ +bool Bridge::openRepository(const QString& repositoryPath, const QString& workspacePath) +{ + QFileInfo fi(repositoryPath); + + if(!QDir::setCurrent(workspacePath) || !fi.isFile()) + return false; + + QString abspath = fi.absoluteFilePath(); + setCurrentWorkspace(workspacePath); + setRepositoryFile(abspath); + + if(!runFossil(QStringList() << "open" << QuotePath(abspath))) + return false; + + return true; +} + //------------------------------------------------------------------------------ static QString ParseFossilQuery(QString line) { diff --git a/src/Bridge.h b/src/Bridge.h index 06a2c54..29e624c 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -20,9 +20,6 @@ public: } - bool runFossil(const QStringList &args, QStringList *output, int runFlags); - bool runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags); - enum RunFlags { RUNFLAGS_NONE = 0<<0, @@ -45,6 +42,8 @@ public: currentWorkspace = workspace; } + bool runFossil(const QStringList &args, QStringList *output=0, int runFlags=RUNFLAGS_NONE); + bool runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags); static bool isWorkspace(const QString &path); enum RepoStatus @@ -83,6 +82,8 @@ public: } + bool openRepository(const QString &repositoryPath, const QString& workspacePath); + bool uiRunning() const; bool startUI(const QString &httpPort); void stopUI(); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 39ddc33..88ee4bd 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -55,21 +55,6 @@ enum REPODIRMODEL_ROLE_PATH = Qt::UserRole+1 }; -//----------------------------------------------------------------------------- -static QString QuotePath(const QString &path) -{ - return path; -} - -//----------------------------------------------------------------------------- -static QStringList QuotePaths(const QStringList &paths) -{ - QStringList res; - for(int i=0; i QStringMap; static QStringMap MakeKeyValues(QStringList lines) @@ -347,14 +332,15 @@ bool MainWindow::openWorkspace(const QString &path) return false; } +#ifndef BRIDGE_ENABLED // Ok open the fossil - setCurrentWorkspace(wkspace); if(!QDir::setCurrent(wkspace)) { QMessageBox::critical(this, tr("Error"), tr("Could not change current directory"), QMessageBox::Ok ); return false; } + setCurrentWorkspace(wkspace); setRepositoryFile(fi.absoluteFilePath()); if(!runFossil(QStringList() << "open" << QuotePath(getRepositoryFile()))) @@ -362,6 +348,13 @@ bool MainWindow::openWorkspace(const QString &path) QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return false; } +#else + if(!bridge.openRepository(fi.absoluteFilePath(), wkspace)) + { + QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); + return false; + } +#endif } else { diff --git a/src/Utils.cpp b/src/Utils.cpp index 18ccce2..89a8d50 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -14,6 +14,21 @@ QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, c return res; } +//----------------------------------------------------------------------------- +QString QuotePath(const QString &path) +{ + return path; +} + +//----------------------------------------------------------------------------- +QStringList QuotePaths(const QStringList &paths) +{ + QStringList res; + for(int i=0; i @@ -158,7 +173,7 @@ bool ShowExplorerMenu(HWND hwnd, const QString &path, const QPoint &qpoint) // IShellFolder interface. // bool bResult = false; - + LPMALLOC pMalloc; if (!SUCCEEDED (SHGetMalloc (&pMalloc))) return bResult; diff --git a/src/Utils.h b/src/Utils.h index 601065a..188702e 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -5,6 +5,9 @@ #include QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, const QString &query, QMessageBox::StandardButtons buttons = QMessageBox::Yes|QMessageBox::No); +QString QuotePath(const QString &path); +QStringList QuotePaths(const QStringList &paths); + #ifdef Q_OS_WIN bool ShowExplorerMenu(HWND hwnd, const QString &path, const QPoint &qpoint); From c43c638b91cf8f35f097a3b702a286975069f687 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 17:31:26 +0000 Subject: [PATCH 10/90] Wrapped "fossil open" and "fossil new" FossilOrigin-Name: edf97efd4a0adc050076296c896e68371ecb0be0 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 13 +++++++++++++ src/Bridge.h | 1 + src/MainWindow.cpp | 31 +++++++++++++++++++------------ 5 files changed, 42 insertions(+), 21 deletions(-) diff --git a/manifest b/manifest index f617454..e84ea8f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactored\sopenRepository -D 2015-04-26T17:13:29.338 +C Wrapped\s"fossil\sopen"\sand\s"fossil\snew" +D 2015-04-26T17:31:26.309 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp faf3de171463d77ba28948e5f40a6593090b973f -F src/Bridge.h 78f856817740777eafc2cb3ebde876eefb8d97cb +F src/Bridge.cpp 60aeda77aa45d0392882163ebb2a76c180887edf +F src/Bridge.h ed662224c9e1dfcefce7b20e61bf9233d4658739 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 6115f40df16453946c2d1531d9f073744474dc7e +F src/MainWindow.cpp 1a566742892c79d9ae82c9ecd30a7104f3fd7dda F src/MainWindow.h 3e19e5af60fa9bf0b7049fce70e2f030f8514ac9 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P bf0e885bf80d28fda92ed20315d93445bb2b42a6 -R 5dd6a3a3a992f4b262039fc6c8121b23 +P 02a7b672e1d634b703ee5f30258153c3f4610886 +R 9b9bafb1d1fed894392a7cd8221a1f0d U kostas -Z 1d7b8fe8bfa0d1e122d9f1d78dba5383 +Z 8897bdc7ab9789c2ea95847e8892a35c diff --git a/manifest.uuid b/manifest.uuid index ce1c7af..32ffc5e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -02a7b672e1d634b703ee5f30258153c3f4610886 \ No newline at end of file +edf97efd4a0adc050076296c896e68371ecb0be0 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 1cab390..97ad925 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -72,6 +72,19 @@ bool Bridge::openRepository(const QString& repositoryPath, const QString& worksp return true; } +//------------------------------------------------------------------------------ +bool Bridge::newRepository(const QString& repositoryPath) +{ + QFileInfo fi(repositoryPath); + + if(fi.exists()) + return false; + + if(!runFossil(QStringList() << "new" << QuotePath(fi.absoluteFilePath()))) + return false; + return true; +} + //------------------------------------------------------------------------------ static QString ParseFossilQuery(QString line) { diff --git a/src/Bridge.h b/src/Bridge.h index 29e624c..4e7fe39 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -83,6 +83,7 @@ public: bool openRepository(const QString &repositoryPath, const QString& workspacePath); + bool newRepository(const QString &repositoryPath); bool uiRunning() const; bool startUI(const QString &httpPort); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 88ee4bd..3829218 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -332,8 +332,8 @@ bool MainWindow::openWorkspace(const QString &path) return false; } + // Ok open the repository file #ifndef BRIDGE_ENABLED - // Ok open the fossil if(!QDir::setCurrent(wkspace)) { QMessageBox::critical(this, tr("Error"), tr("Could not change current directory"), QMessageBox::Ok ); @@ -344,17 +344,14 @@ bool MainWindow::openWorkspace(const QString &path) setRepositoryFile(fi.absoluteFilePath()); if(!runFossil(QStringList() << "open" << QuotePath(getRepositoryFile()))) - { - QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); - return false; - } #else if(!bridge.openRepository(fi.absoluteFilePath(), wkspace)) +#endif { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return false; } -#endif + } else { @@ -451,15 +448,21 @@ void MainWindow::on_actionNewRepository_triggered() stopUI(); on_actionClearLog_triggered(); - setRepositoryFile(repo_path_info.absoluteFilePath()); - // Create repository + QString repo_abs_path = repo_path_info.absoluteFilePath(); +#ifndef BRIDGE_ENABLED + setRepositoryFile(repo_abs_path); + if(!runFossil(QStringList() << "new" << QuotePath(getRepositoryFile()))) +#else + if(!bridge.newRepository(repo_abs_path)) +#endif { QMessageBox::critical(this, tr("Error"), tr("Could not create repository."), QMessageBox::Ok ); return; } +#ifndef BRIDGE_ENABLED // Create workspace setCurrentWorkspace(wkdir); if(!QDir::setCurrent(wkdir)) @@ -468,16 +471,20 @@ void MainWindow::on_actionNewRepository_triggered() return; } - // Disable unknown file filter - if(!ui->actionViewUnknown->isChecked()) - ui->actionViewUnknown->setChecked(true); - // Open repo if(!runFossil(QStringList() << "open" << QuotePath(getRepositoryFile()))) +#else + if(!bridge.openRepository(repo_abs_path, wkdir)) { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return; } +#endif + + // Disable unknown file filter + if(!ui->actionViewUnknown->isChecked()) + ui->actionViewUnknown->setChecked(true); + refresh(); } From 1c728c9146c93790727ed4bfeccb682842d6dad6 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 17:40:58 +0000 Subject: [PATCH 11/90] - Wrapped "fossil close" - Fixed invalid window title when closing a workspace FossilOrigin-Name: c449a826c83c98c4e33e7adb31841684b4ed6084 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 11 +++++++++++ src/Bridge.h | 1 + src/MainWindow.cpp | 12 ++++++++++-- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index e84ea8f..2d8e093 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"fossil\sopen"\sand\s"fossil\snew" -D 2015-04-26T17:31:26.309 +C -\sWrapped\s"fossil\sclose"\n-\sFixed\sinvalid\swindow\stitle\swhen\sclosing\sa\sworkspace\n +D 2015-04-26T17:40:58.322 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 60aeda77aa45d0392882163ebb2a76c180887edf -F src/Bridge.h ed662224c9e1dfcefce7b20e61bf9233d4658739 +F src/Bridge.cpp 0dbac79acbd9d0d4a324a36a81ccfa17ab78724a +F src/Bridge.h 991532ea29129af8212b2c6993d45f29f9e55098 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 1a566742892c79d9ae82c9ecd30a7104f3fd7dda +F src/MainWindow.cpp b76f75859164a1f6466d698f6de2e287cbb7d220 F src/MainWindow.h 3e19e5af60fa9bf0b7049fce70e2f030f8514ac9 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 02a7b672e1d634b703ee5f30258153c3f4610886 -R 9b9bafb1d1fed894392a7cd8221a1f0d +P edf97efd4a0adc050076296c896e68371ecb0be0 +R 248142aaf1fb4256b0aef0b34c37e023 U kostas -Z 8897bdc7ab9789c2ea95847e8892a35c +Z 80bf5b981b23e692892835541310d2c6 diff --git a/manifest.uuid b/manifest.uuid index 32ffc5e..7843f70 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -edf97efd4a0adc050076296c896e68371ecb0be0 \ No newline at end of file +c449a826c83c98c4e33e7adb31841684b4ed6084 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 97ad925..3dc3cd9 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -85,6 +85,17 @@ bool Bridge::newRepository(const QString& repositoryPath) return true; } +//------------------------------------------------------------------------------ +bool Bridge::closeRepository() +{ + if(!runFossil(QStringList() << "close")) + return false; + + stopUI(); + setCurrentWorkspace(""); + return true; +} + //------------------------------------------------------------------------------ static QString ParseFossilQuery(QString line) { diff --git a/src/Bridge.h b/src/Bridge.h index 4e7fe39..cacfc92 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -84,6 +84,7 @@ public: bool openRepository(const QString &repositoryPath, const QString& workspacePath); bool newRepository(const QString &repositoryPath); + bool closeRepository(); bool uiRunning() const; bool startUI(const QString &httpPort); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 3829218..fad5ce3 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -498,14 +498,20 @@ void MainWindow::on_actionCloseRepository_triggered() return; // Close Repo +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "close")) +#else + if(!bridge.closeRepository()) +#endif { QMessageBox::critical(this, tr("Error"), tr("Cannot close the workspace.\nAre there still uncommitted changes available?"), QMessageBox::Ok ); return; } +#ifdef BRIDGE_ENABLED stopUI(); setCurrentWorkspace(""); +#endif refresh(); } @@ -647,6 +653,8 @@ void MainWindow::enableActions(bool on) //------------------------------------------------------------------------------ bool MainWindow::refresh() { + QString title = "Fuel"; + // Load repository info RepoStatus st = getRepoStatus(); @@ -656,6 +664,7 @@ bool MainWindow::refresh() enableActions(false); repoFileModel.removeRows(0, repoFileModel.rowCount()); repoDirModel.clear(); + setWindowTitle(title); return false; } else if(st==REPO_OLD_SCHEMA) @@ -664,6 +673,7 @@ bool MainWindow::refresh() enableActions(false); repoFileModel.removeRows(0, repoFileModel.rowCount()); repoDirModel.clear(); + setWindowTitle(title); return true; } @@ -672,8 +682,6 @@ bool MainWindow::refresh() setStatus(""); enableActions(true); - QString title = "Fuel"; - if(!getProjectName().isEmpty()) title += " - " + getProjectName(); From 496224f0301bc44bfabb85bce5e7af47a1f2ccdd Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 18:16:42 +0000 Subject: [PATCH 12/90] Wrapped "ls" and "stash ls" FossilOrigin-Name: 8d81e12735d7c999ea5fca07c4c1683b68a5ad66 --- manifest | 20 +++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 62 +++++++++++++++++++++++++++++++++++++++------- src/Bridge.h | 3 +++ src/MainWindow.cpp | 11 +++++--- src/MainWindow.h | 1 - src/Utils.h | 1 + 7 files changed, 76 insertions(+), 24 deletions(-) diff --git a/manifest b/manifest index 2d8e093..23083ee 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C -\sWrapped\s"fossil\sclose"\n-\sFixed\sinvalid\swindow\stitle\swhen\sclosing\sa\sworkspace\n -D 2015-04-26T17:40:58.322 +C Wrapped\s"ls"\sand\s"stash\sls" +D 2015-04-26T18:16:42.936 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 0dbac79acbd9d0d4a324a36a81ccfa17ab78724a -F src/Bridge.h 991532ea29129af8212b2c6993d45f29f9e55098 +F src/Bridge.cpp 3d5eefd4610276e72b76d0e941df949b7de3f917 +F src/Bridge.h b06f3721408c7393a3470c053034d40aa0bfacf8 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,12 +200,12 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp b76f75859164a1f6466d698f6de2e287cbb7d220 -F src/MainWindow.h 3e19e5af60fa9bf0b7049fce70e2f030f8514ac9 +F src/MainWindow.cpp 929ee7209b7ac1c472abdb1d6b0ad9f63ef70715 +F src/MainWindow.h 11328bb6544faca0175b64a88809f13e1da0f488 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca -F src/Utils.h 9c9ee6c918fccaded2ae212d45514de7c9527f82 +F src/Utils.h bece95535a98daeb3ea0653352c0a1bb63d39ba8 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P edf97efd4a0adc050076296c896e68371ecb0be0 -R 248142aaf1fb4256b0aef0b34c37e023 +P c449a826c83c98c4e33e7adb31841684b4ed6084 +R 40fad144dce1c43251709699c6928532 U kostas -Z 80bf5b981b23e692892835541310d2c6 +Z 33c7b3fa11b5a9b519b06c31d0739d75 diff --git a/manifest.uuid b/manifest.uuid index 7843f70..af80244 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c449a826c83c98c4e33e7adb31841684b4ed6084 \ No newline at end of file +8d81e12735d7c999ea5fca07c4c1683b68a5ad66 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 3dc3cd9..b32ee50 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -11,8 +11,15 @@ static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; -#include "Utils.h" +// 19: [5c46757d4b9765] on 2012-04-22 04:41:15 +static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); +#define FOSSIL_CHECKOUT1 "_FOSSIL_" +#define FOSSIL_CHECKOUT2 ".fslckout" +#define FOSSIL_EXT "fossil" +#define PATH_SEP "/" + +//------------------------------------------------------------------------------ Bridge::RepoStatus Bridge::getRepoStatus() { QStringList res; @@ -96,6 +103,50 @@ bool Bridge::closeRepository() return true; } +//------------------------------------------------------------------------------ +bool Bridge::listFiles(QStringList &files) +{ + return runFossil(QStringList() << "ls" << "-l", &files, RUNFLAGS_SILENT_ALL); +} + +//------------------------------------------------------------------------------ +bool Bridge::stashList(stashmap_t& stashes) +{ + stashes.clear(); + QStringList res; + + if(!runFossil(QStringList() << "stash" << "ls", &res, RUNFLAGS_SILENT_ALL)) + return false; + + for(QStringList::iterator line_it=res.begin(); line_it!=res.end(); ) + { + QString line = *line_it; + + int index = REGEX_STASH.indexIn(line); + if(index==-1) + break; + + QString id = REGEX_STASH.cap(1); + ++line_it; + + QString name; + // Finish at an anonymous stash or start of a new stash ? + if(line_it==res.end() || REGEX_STASH.indexIn(*line_it)!=-1) + name = line.trimmed(); + else // Named stash + { + // Parse stash name + name = (*line_it); + name = name.trimmed(); + ++line_it; + } + + stashes.insert(name, id); + } + + return true; +} + //------------------------------------------------------------------------------ static QString ParseFossilQuery(QString line) { @@ -111,7 +162,6 @@ static QString ParseFossilQuery(QString line) return line; } - //------------------------------------------------------------------------------ bool Bridge::runFossil(const QStringList &args, QStringList *output, int runFlags) { @@ -122,7 +172,6 @@ bool Bridge::runFossil(const QStringList &args, QStringList *output, int runFlag return exit_code == EXIT_SUCCESS; } - //------------------------------------------------------------------------------ // Run fossil. Returns true if execution was successful regardless if fossil // issued an error @@ -420,12 +469,7 @@ QString Bridge::getFossilPath() } -#define FOSSIL_CHECKOUT1 "_FOSSIL_" -#define FOSSIL_CHECKOUT2 ".fslckout" -#define FOSSIL_EXT "fossil" -#define PATH_SEP "/" - - +//------------------------------------------------------------------------------ bool Bridge::isWorkspace(const QString &path) { if(path.length()==0) diff --git a/src/Bridge.h b/src/Bridge.h index cacfc92..347c9dc 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -7,6 +7,7 @@ class QStringList; #include #include +typedef QMap stashmap_t; class Bridge : public QObject { @@ -90,6 +91,8 @@ public: bool startUI(const QString &httpPort); void stopUI(); + bool listFiles(QStringList& files); + bool stashList(stashmap_t &stashes); private: void log(const QString &text, bool isHTML=false) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index fad5ce3..9ac506c 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -25,8 +25,6 @@ #include "Utils.h" #include "LoggedProcess.h" -#define COUNTOF(array) (sizeof(array)/sizeof(array[0])) - #define PATH_SEP "/" static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; @@ -701,7 +699,11 @@ void MainWindow::scanWorkspace() // Retrieve the status of files tracked by fossil QStringList res; +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "ls" << "-l", &res, RUNFLAGS_SILENT_ALL)) +#else + if(!bridge.listFiles(res)) +#endif return; bool scan_files = ui->actionViewUnknown->isChecked(); @@ -823,6 +825,7 @@ void MainWindow::scanWorkspace() } // Load the stash +#ifndef BRIDGE_ENABLED stashMap.clear(); res.clear(); if(!runFossil(QStringList() << "stash" << "ls", &res, RUNFLAGS_SILENT_ALL)) @@ -853,7 +856,9 @@ void MainWindow::scanWorkspace() stashMap.insert(name, id); } - +#else + bridge.stashList(stashMap); +#endif // Update the file item model _done: diff --git a/src/MainWindow.h b/src/MainWindow.h index 1627638..90e64c5 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -283,7 +283,6 @@ private: // Repository State typedef QList filelist_t; typedef QMap filemap_t; - typedef QMap stashmap_t; filemap_t workspaceFiles; stringset_t pathSet; stashmap_t stashMap; diff --git a/src/Utils.h b/src/Utils.h index 188702e..1d8a910 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -8,6 +8,7 @@ QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, c QString QuotePath(const QString &path); QStringList QuotePaths(const QStringList &paths); +#define COUNTOF(array) (sizeof(array)/sizeof(array[0])) #ifdef Q_OS_WIN bool ShowExplorerMenu(HWND hwnd, const QString &path, const QPoint &qpoint); From 895770b14b9442ed2708876eca4c35818174438c Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 18:26:39 +0000 Subject: [PATCH 13/90] Wrapped "push" and "pull" FossilOrigin-Name: ab5fd401a09cc503168a86761b95c28e52d2875a --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 12 ++++++++++++ src/Bridge.h | 2 ++ src/MainWindow.cpp | 8 ++++++++ 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 23083ee..958a14e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"ls"\sand\s"stash\sls" -D 2015-04-26T18:16:42.936 +C Wrapped\s"push"\sand\s"pull" +D 2015-04-26T18:26:39.720 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 3d5eefd4610276e72b76d0e941df949b7de3f917 -F src/Bridge.h b06f3721408c7393a3470c053034d40aa0bfacf8 +F src/Bridge.cpp 4fbc6cbebfa20008c575e0d52d4eafe4b18caf99 +F src/Bridge.h 8c266069dfe6cfb1a870b09e20c568fb506a0829 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 929ee7209b7ac1c472abdb1d6b0ad9f63ef70715 +F src/MainWindow.cpp e585e885e496697d180e021deb514b04acdce659 F src/MainWindow.h 11328bb6544faca0175b64a88809f13e1da0f488 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P c449a826c83c98c4e33e7adb31841684b4ed6084 -R 40fad144dce1c43251709699c6928532 +P 8d81e12735d7c999ea5fca07c4c1683b68a5ad66 +R bea6f8fdaa1d3a52307231819083669e U kostas -Z 33c7b3fa11b5a9b519b06c31d0739d75 +Z ced14dfb75cb5108cd5ba6e92482ad2b diff --git a/manifest.uuid b/manifest.uuid index af80244..8737bfe 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8d81e12735d7c999ea5fca07c4c1683b68a5ad66 \ No newline at end of file +ab5fd401a09cc503168a86761b95c28e52d2875a \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index b32ee50..5302192 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -109,6 +109,18 @@ bool Bridge::listFiles(QStringList &files) return runFossil(QStringList() << "ls" << "-l", &files, RUNFLAGS_SILENT_ALL); } +//------------------------------------------------------------------------------ +bool Bridge::pushRepository() +{ + return runFossil(QStringList() << "push"); +} + +//------------------------------------------------------------------------------ +bool Bridge::pullRepository() +{ + return runFossil(QStringList() << "pull"); +} + //------------------------------------------------------------------------------ bool Bridge::stashList(stashmap_t& stashes) { diff --git a/src/Bridge.h b/src/Bridge.h index 347c9dc..13c1023 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -86,6 +86,8 @@ public: bool openRepository(const QString &repositoryPath, const QString& workspacePath); bool newRepository(const QString &repositoryPath); bool closeRepository(); + bool pushRepository(); + bool pullRepository(); bool uiRunning() const; bool startUI(const QString &httpPort); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 9ac506c..8bdbbf2 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1901,7 +1901,11 @@ void MainWindow::on_actionPush_triggered() return; } +#ifndef BRIDGE_ENABLED runFossil(QStringList() << "push"); +#else + bridge.pushRepository(); +#endif } //------------------------------------------------------------------------------ @@ -1915,7 +1919,11 @@ void MainWindow::on_actionPull_triggered() return; } +#ifndef BRIDGE_ENABLED runFossil(QStringList() << "pull"); +#else + bridge.pullRepository(); +#endif } //------------------------------------------------------------------------------ From a7e759e6a661a6bd72ce7b2d37866afca8f4b7f8 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 18:55:05 +0000 Subject: [PATCH 14/90] Wrapped "clone" "diff" "commit" FossilOrigin-Name: 1207f87a560c9d077c00367a4270c693f7cceee0 --- manifest | 18 +++++------ manifest.uuid | 2 +- src/Bridge.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++ src/Bridge.h | 7 ++++- src/MainWindow.cpp | 26 +++++++++++++++- src/MainWindow.h | 2 +- 6 files changed, 117 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 958a14e..a87b115 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"push"\sand\s"pull" -D 2015-04-26T18:26:39.720 +C Wrapped\s"clone"\s"diff"\s"commit" +D 2015-04-26T18:55:05.691 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 4fbc6cbebfa20008c575e0d52d4eafe4b18caf99 -F src/Bridge.h 8c266069dfe6cfb1a870b09e20c568fb506a0829 +F src/Bridge.cpp 08019d2826accd56f370981aba8ede3f04c82ccf +F src/Bridge.h 329b3e81008d779f4d100f370b41601d49ca025a F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp e585e885e496697d180e021deb514b04acdce659 -F src/MainWindow.h 11328bb6544faca0175b64a88809f13e1da0f488 +F src/MainWindow.cpp 9016287b46f4d057ea84f438b043723ae611367a +F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 8d81e12735d7c999ea5fca07c4c1683b68a5ad66 -R bea6f8fdaa1d3a52307231819083669e +P ab5fd401a09cc503168a86761b95c28e52d2875a +R 7a32a7081f2b847eaec01d12ff3d24ec U kostas -Z ced14dfb75cb5108cd5ba6e92482ad2b +Z e11abbb88941df5fe0d707b72a7e29b8 diff --git a/manifest.uuid b/manifest.uuid index 8737bfe..a14e650 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ab5fd401a09cc503168a86761b95c28e52d2875a \ No newline at end of file +1207f87a560c9d077c00367a4270c693f7cceee0 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 5302192..6ae865c 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -121,6 +121,81 @@ bool Bridge::pullRepository() return runFossil(QStringList() << "pull"); } +//------------------------------------------------------------------------------ +bool Bridge::cloneRepository(const QString& repository, const QUrl& url, const QUrl& proxyUrl) +{ + // Actual command + QStringList cmd = QStringList() << "clone"; + + // Log Command + QStringList logcmd = QStringList() << "fossil" << "clone"; + + QString source = url.toString(); + QString logsource = url.toString(QUrl::RemovePassword); + if(url.isLocalFile()) + { + source = url.toLocalFile(); + logsource = source; + } + cmd << source << repository; + logcmd << logsource << repository; + + if(!proxyUrl.isEmpty()) + { + cmd << "--proxy" << proxyUrl.toString(); + logcmd << "--proxy" << proxyUrl.toString(QUrl::RemovePassword); + } + + log(">"+logcmd.join(" ")+"
", true); + + // Clone Repo + if(!runFossil(cmd, 0, RUNFLAGS_SILENT_INPUT)) + return false; + + return true; +} + +//------------------------------------------------------------------------------ +bool Bridge::diffFile(const QString &repoFile) +{ + // Run the diff detached + return runFossil(QStringList() << "gdiff" << QuotePath(repoFile), 0, RUNFLAGS_DETACHED); +} + +//------------------------------------------------------------------------------ +bool Bridge::commitFiles(const QStringList& fileList, const QString& comment) +{ + // Do commit + QString comment_fname; + { + QTemporaryFile temp_file; + if(!temp_file.open()) + return false; + + comment_fname = temp_file.fileName(); + } + + QFile comment_file(comment_fname); + if(!comment_file.open(QIODevice::WriteOnly)) + return false; + + // Write BOM + comment_file.write(reinterpret_cast(UTF8_BOM), sizeof(UTF8_BOM)); + + // Write Comment + comment_file.write(comment.toUtf8()); + comment_file.close(); + + // Generate fossil parameters. + QStringList params; + params << "commit" << "--message-file" << QuotePath(comment_fname); + params << QuotePaths(fileList); + + runFossil(params); + QFile::remove(comment_fname); + return true; +} + //------------------------------------------------------------------------------ bool Bridge::stashList(stashmap_t& stashes) { diff --git a/src/Bridge.h b/src/Bridge.h index 13c1023..84773bc 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -88,13 +88,18 @@ public: bool closeRepository(); bool pushRepository(); bool pullRepository(); + bool cloneRepository(const QString &repository, const QUrl &url, const QUrl &proxyUrl); bool uiRunning() const; bool startUI(const QString &httpPort); void stopUI(); - bool listFiles(QStringList& files); + bool listFiles(QStringList &files); bool stashList(stashmap_t &stashes); + bool diffFile(const QString &repoFile); + bool commitFiles(const QStringList &fileList, const QString &comment); + + private: void log(const QString &text, bool isHTML=false) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 8bdbbf2..7c97cb7 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -524,6 +524,7 @@ void MainWindow::on_actionCloneRepository_triggered() stopUI(); +#ifndef BRIDGE_ENABLED // Actual command QStringList cmd = QStringList() << "clone"; @@ -550,6 +551,9 @@ void MainWindow::on_actionCloneRepository_triggered() // Clone Repo if(!runFossil(cmd, 0, RUNFLAGS_SILENT_INPUT)) +#else + if(!bridge.cloneRepository(repository, url, url_proxy)) +#endif { QMessageBox::critical(this, tr("Error"), tr("Could not clone the repository"), QMessageBox::Ok); return; @@ -1736,10 +1740,14 @@ void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) } //------------------------------------------------------------------------------ -bool MainWindow::diffFile(QString repoFile) +bool MainWindow::diffFile(const QString &repoFile) { +#ifndef BRIDGE_ENABLED // Run the diff detached return runFossil(QStringList() << "gdiff" << QuotePath(repoFile), 0, RUNFLAGS_DETACHED); +#else + return bridge.diffFile(repoFile); +#endif } //------------------------------------------------------------------------------ @@ -1956,6 +1964,7 @@ void MainWindow::on_actionCommit_triggered() return; // Do commit +#ifndef BRIDGE_ENABLED QString comment_fname; { QTemporaryFile temp_file; @@ -1997,6 +2006,21 @@ void MainWindow::on_actionCommit_triggered() runFossil(params); QFile::remove(comment_fname); +#else + QStringList files; + + // When a subset of files has been selected, explicitely specify each file. + // Otherwise all files will be implicitly committed by fossil. This is necessary + // when committing after a merge where fossil thinks that we are trying to do + // a partial commit which is not permitted. + QStringList all_modified_files; + getAllFilenames(all_modified_files, RepoFile::TYPE_MODIFIED); + + if(commit_files.size() != all_modified_files.size()) + files = commit_files; + + bridge.commitFiles(files, msg); +#endif refresh(); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 90e64c5..ae67b0d 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -122,7 +122,7 @@ class MainWindow : public QMainWindow public: explicit MainWindow(Settings &_settings, QWidget *parent = 0, QString *workspacePath = 0); ~MainWindow(); - bool diffFile(QString repoFile); + bool diffFile(const QString& repoFile); void fullRefresh(); private: From 04a5bb2488042327b9edcdc7aed73edaf698da58 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 26 Apr 2015 19:14:09 +0000 Subject: [PATCH 15/90] Wrapped "add" and "remove" FossilOrigin-Name: 1284b0abf55c359e79d4953a00da1de2cebb6a31 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 33 +++++++++++++++++++++++++++++++++ src/Bridge.h | 5 ++--- src/MainWindow.cpp | 21 +++++++++++++++++++++ 5 files changed, 65 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index a87b115..fc0f0a0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"clone"\s"diff"\s"commit" -D 2015-04-26T18:55:05.691 +C Wrapped\s"add"\sand\s"remove" +D 2015-04-26T19:14:09.179 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 08019d2826accd56f370981aba8ede3f04c82ccf -F src/Bridge.h 329b3e81008d779f4d100f370b41601d49ca025a +F src/Bridge.cpp 7229111e00e0f5392dc46787ccb31fa78749aba4 +F src/Bridge.h 77ab136b2c01c202e921adca6cb9b3c2a64d13ef F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 9016287b46f4d057ea84f438b043723ae611367a +F src/MainWindow.cpp 58f21bcd22e693ecfc3f6e60d935f1b5ebd7b87d F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P ab5fd401a09cc503168a86761b95c28e52d2875a -R 7a32a7081f2b847eaec01d12ff3d24ec +P 1207f87a560c9d077c00367a4270c693f7cceee0 +R f1168e323d10e3f76816f649be9ae8e0 U kostas -Z e11abbb88941df5fe0d707b72a7e29b8 +Z 2bb18d4aa34df09c3543cc10ff0cbe33 diff --git a/manifest.uuid b/manifest.uuid index a14e650..d009c30 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1207f87a560c9d077c00367a4270c693f7cceee0 \ No newline at end of file +1284b0abf55c359e79d4953a00da1de2cebb6a31 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 6ae865c..38dce31 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -196,6 +196,39 @@ bool Bridge::commitFiles(const QStringList& fileList, const QString& comment) return true; } +//------------------------------------------------------------------------------ +bool Bridge::addFiles(const QStringList& fileList) +{ + if(fileList.empty()) + return false; + + // Do Add + return runFossil(QStringList() << "add" << QuotePaths(fileList)); +} + +//------------------------------------------------------------------------------ +bool Bridge::removeFiles(const QStringList& fileList, bool deleteLocal) +{ + if(fileList.empty()) + return false; + + // Do Delete + if(!runFossil(QStringList() << "delete" << QuotePaths(fileList))) + return false; + + if(deleteLocal) + { + for(int i=0; i Date: Sun, 26 Apr 2015 19:32:41 +0000 Subject: [PATCH 16/90] Wrapped "revert" "rename" "undo" FossilOrigin-Name: 09f2c8f44189b490da880f56011b95fae223a5a9 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/Bridge.h | 3 +++ src/MainWindow.cpp | 23 ++++++++++++++++++++++- 5 files changed, 73 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index fc0f0a0..d12054d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"add"\sand\s"remove" -D 2015-04-26T19:14:09.179 +C Wrapped\s"revert"\s"rename"\s"undo" +D 2015-04-26T19:32:41.271 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 7229111e00e0f5392dc46787ccb31fa78749aba4 -F src/Bridge.h 77ab136b2c01c202e921adca6cb9b3c2a64d13ef +F src/Bridge.cpp 943994a2cb3e181bf58f0a8b4a8ba56e44d0da8f +F src/Bridge.h 6dc336ac0877ae51de668c42d60e0874c5820d72 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 58f21bcd22e693ecfc3f6e60d935f1b5ebd7b87d +F src/MainWindow.cpp a44f5c8bee45621cce49a2b10f4393ec54d630e2 F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 1207f87a560c9d077c00367a4270c693f7cceee0 -R f1168e323d10e3f76816f649be9ae8e0 +P 1284b0abf55c359e79d4953a00da1de2cebb6a31 +R ef26df4ff23cffb54b79b80643d10861 U kostas -Z 2bb18d4aa34df09c3543cc10ff0cbe33 +Z 0ab9d2c4bc0bb974d8abd63068614dd5 diff --git a/manifest.uuid b/manifest.uuid index d009c30..30bc2f0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1284b0abf55c359e79d4953a00da1de2cebb6a31 \ No newline at end of file +09f2c8f44189b490da880f56011b95fae223a5a9 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 38dce31..d9380f9 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -229,6 +229,45 @@ bool Bridge::removeFiles(const QStringList& fileList, bool deleteLocal) return true; } +//------------------------------------------------------------------------------ +bool Bridge::revertFiles(const QStringList& fileList) +{ + if(fileList.empty()) + return false; + + // Do Revert + return runFossil(QStringList() << "revert" << QuotePaths(fileList)); +} + +//------------------------------------------------------------------------------ +bool Bridge::renameFile(const QString &beforePath, const QString &afterPath) +{ + // Ensure we can rename the file + if(!QFileInfo(beforePath).exists() || QFileInfo(afterPath).exists()) + return false; + + // Do Rename + if(!runFossil(QStringList() << "mv" << QuotePath(beforePath) << QuotePath(afterPath))) + return false; + + QString wkdir = getCurrentWorkspace() + QDir::separator(); + + // Also rename the file + return QFile::rename(wkdir+beforePath, wkdir+afterPath); +} + +//------------------------------------------------------------------------------ +bool Bridge::undo(QStringList &result, bool explainOnly) +{ + QStringList params; + params << "undo"; + + if(explainOnly) + params << "--explain"; + + return runFossil(params, &result); +} + //------------------------------------------------------------------------------ bool Bridge::stashList(stashmap_t& stashes) { diff --git a/src/Bridge.h b/src/Bridge.h index 188013e..bbb24d1 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -100,6 +100,9 @@ public: bool commitFiles(const QStringList &fileList, const QString &comment); bool addFiles(const QStringList& fileList); bool removeFiles(const QStringList& fileList, bool deleteLocal); + bool revertFiles(const QStringList& fileList); + bool renameFile(const QString& beforePath, const QString& afterPath); + bool undo(QStringList& result, bool explainOnly); private: void log(const QString &text, bool isHTML=false) { diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index e3fea49..13309bf 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -2117,7 +2117,11 @@ void MainWindow::on_actionRevert_triggered() return; // Do Revert +#ifndef BRIDGE_ENABLED runFossil(QStringList() << "revert" << QuotePaths(modified_files) ); +#else + bridge.revertFiles(modified_files); +#endif refresh(); } @@ -2146,13 +2150,17 @@ void MainWindow::on_actionRename_triggered() return; } +#ifndef BRIDGE_ENABLED // Do Rename runFossil(QStringList() << "mv" << QuotePath(fi_before.filePath()) << QuotePath(fi_after.filePath()) ); QString wkdir = getCurrentWorkspace() + QDir::separator(); // Also rename the file - QFile::rename( wkdir+fi_before.filePath(), wkdir+fi_after.filePath()); + QFile::rename(wkdir+fi_before.filePath(), wkdir+fi_after.filePath()); +#else + bridge.renameFile(fi_before.filePath(), fi_after.filePath()); +#endif refresh(); } @@ -2183,6 +2191,7 @@ void MainWindow::on_actionUndo_triggered() // Gather Undo actions QStringList res; +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "undo" << "--explain", &res )) return; @@ -2194,6 +2203,18 @@ void MainWindow::on_actionUndo_triggered() // Do Undo runFossil(QStringList() << "undo" ); +#else + bridge.undo(res, true); + + if(res.length()>0 && res[0]=="No undo or redo is available") + return; + + if(!FileActionDialog::run(this, tr("Undo"), tr("The following actions will be undone.")+"\n"+tr("Are you sure?"), res)) + return; + + // Do Undo + bridge.undo(res, false); +#endif refresh(); } From fc8941b5209675040aad3948a07b364bf09a36a1 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 15:25:13 +0000 Subject: [PATCH 17/90] Wrapped fossil version FossilOrigin-Name: 239b8ac44d4dd954633b52d28b68e4cd9937efbc --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 18 ++++++++++++++++++ src/Bridge.h | 2 ++ src/MainWindow.cpp | 7 ++++++- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index d12054d..75557e8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"revert"\s"rename"\s"undo" -D 2015-04-26T19:32:41.271 +C Wrapped\sfossil\sversion +D 2015-04-27T15:25:13.463 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 943994a2cb3e181bf58f0a8b4a8ba56e44d0da8f -F src/Bridge.h 6dc336ac0877ae51de668c42d60e0874c5820d72 +F src/Bridge.cpp 380baa815d78c21efa1e634df66e1a9efd2938ec +F src/Bridge.h 6ac7659bd5924aa7b571f8fce974a2b67650bd55 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp a44f5c8bee45621cce49a2b10f4393ec54d630e2 +F src/MainWindow.cpp c1421d8ade96fb91a6ae7846766b67ff111ef113 F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 1284b0abf55c359e79d4953a00da1de2cebb6a31 -R ef26df4ff23cffb54b79b80643d10861 +P 09f2c8f44189b490da880f56011b95fae223a5a9 +R 377d8713271159c2aa61196856694261 U kostas -Z 0ab9d2c4bc0bb974d8abd63068614dd5 +Z d0a09250611bae97fd8dfec546e148ce diff --git a/manifest.uuid b/manifest.uuid index 30bc2f0..b24331a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -09f2c8f44189b490da880f56011b95fae223a5a9 \ No newline at end of file +239b8ac44d4dd954633b52d28b68e4cd9937efbc \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index d9380f9..dbbadd6 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -155,6 +155,24 @@ bool Bridge::cloneRepository(const QString& repository, const QUrl& url, const Q return true; } +//------------------------------------------------------------------------------ +bool Bridge::getFossilVersion(QString& version) +{ + QStringList res; + if(!runFossil(QStringList() << "version", &res, RUNFLAGS_SILENT_ALL) && res.length()==1) + return false; + + if(res.length()==0) + return false; + + int off = res[0].indexOf("version "); + if(off==-1) + return false; + + version = res[0].mid(off+8); + return true; +} + //------------------------------------------------------------------------------ bool Bridge::diffFile(const QString &repoFile) { diff --git a/src/Bridge.h b/src/Bridge.h index bbb24d1..c2784cd 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -90,6 +90,8 @@ public: bool pullRepository(); bool cloneRepository(const QString &repository, const QUrl &url, const QUrl &proxyUrl); + bool getFossilVersion(QString &version); + bool uiRunning() const; bool startUI(const QString &httpPort); void stopUI(); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 13309bf..b5e564f 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -2223,14 +2223,19 @@ void MainWindow::on_actionUndo_triggered() void MainWindow::on_actionAbout_triggered() { QString fossil_ver; - QStringList res; +#ifndef BRIDGE_ENABLED + QStringList res; if(runFossil(QStringList() << "version", &res, RUNFLAGS_SILENT_ALL) && res.length()==1) { int off = res[0].indexOf("version "); if(off!=-1) fossil_ver = tr("Fossil version %0").arg(res[0].mid(off+8)) + "\n"; } +#else + if(bridge.getFossilVersion(fossil_ver)) + fossil_ver = tr("Fossil version %0").arg(fossil_ver) + "\n"; +#endif QString qt_ver = tr("QT version %0").arg(QT_VERSION_STR) + "\n\n"; From c4e96bea35eca912fff7b29362ab608a29c40730 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 15:32:28 +0000 Subject: [PATCH 18/90] Wrapped fossil "update" FossilOrigin-Name: 11a0f979fc198ad134c95c139547baae81d90050 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 16 +++++++++++++++- src/Bridge.h | 3 ++- src/MainWindow.cpp | 20 +++++++++++++++++--- 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index 75557e8..0dacab4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\sfossil\sversion -D 2015-04-27T15:25:13.463 +C Wrapped\sfossil\s"update" +D 2015-04-27T15:32:28.640 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 380baa815d78c21efa1e634df66e1a9efd2938ec -F src/Bridge.h 6ac7659bd5924aa7b571f8fce974a2b67650bd55 +F src/Bridge.cpp 9112bd819e4a012eb050c25a4e790aefe1082cd5 +F src/Bridge.h 25b22bbaf5c34f529095921f3f8fb367185d9750 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp c1421d8ade96fb91a6ae7846766b67ff111ef113 +F src/MainWindow.cpp 946d1422c8540f155d4b8022956319bfeb0d693c F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 09f2c8f44189b490da880f56011b95fae223a5a9 -R 377d8713271159c2aa61196856694261 +P 239b8ac44d4dd954633b52d28b68e4cd9937efbc +R 21520105f6d95e2d46dcaeedab9c8d5c U kostas -Z d0a09250611bae97fd8dfec546e148ce +Z 7f5cca5d4e2b24f9dd76444de33be1b8 diff --git a/manifest.uuid b/manifest.uuid index b24331a..7433b05 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -239b8ac44d4dd954633b52d28b68e4cd9937efbc \ No newline at end of file +11a0f979fc198ad134c95c139547baae81d90050 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index dbbadd6..9acb129 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -275,7 +275,7 @@ bool Bridge::renameFile(const QString &beforePath, const QString &afterPath) } //------------------------------------------------------------------------------ -bool Bridge::undo(QStringList &result, bool explainOnly) +bool Bridge::undoRepository(QStringList &result, bool explainOnly) { QStringList params; params << "undo"; @@ -283,6 +283,20 @@ bool Bridge::undo(QStringList &result, bool explainOnly) if(explainOnly) params << "--explain"; + result.clear(); + return runFossil(params, &result); +} + +//------------------------------------------------------------------------------ +bool Bridge::updateRepository(QStringList &result, bool explainOnly) +{ + QStringList params; + params << "update"; + + if(explainOnly) + params << "--nochange"; + + result.clear(); return runFossil(params, &result); } diff --git a/src/Bridge.h b/src/Bridge.h index c2784cd..58621c2 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -104,7 +104,8 @@ public: bool removeFiles(const QStringList& fileList, bool deleteLocal); bool revertFiles(const QStringList& fileList); bool renameFile(const QString& beforePath, const QString& afterPath); - bool undo(QStringList& result, bool explainOnly); + bool undoRepository(QStringList& result, bool explainOnly); + bool updateRepository(QStringList& result, bool explainOnly); private: void log(const QString &text, bool isHTML=false) { diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index b5e564f..1528632 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -2204,7 +2204,7 @@ void MainWindow::on_actionUndo_triggered() // Do Undo runFossil(QStringList() << "undo" ); #else - bridge.undo(res, true); + bridge.undoRepository(res, true); if(res.length()>0 && res[0]=="No undo or redo is available") return; @@ -2213,7 +2213,7 @@ void MainWindow::on_actionUndo_triggered() return; // Do Undo - bridge.undo(res, false); + bridge.undoRepository(res, false); #endif refresh(); @@ -2261,7 +2261,7 @@ void MainWindow::on_actionAbout_triggered() void MainWindow::on_actionUpdate_triggered() { QStringList res; - +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "update" << "--nochange", &res, RUNFLAGS_SILENT_ALL)) return; @@ -2273,6 +2273,20 @@ void MainWindow::on_actionUpdate_triggered() // Do Update runFossil(QStringList() << "update" ); +#else + if(!bridge.updateRepository(res, true)) + return; + + // Fixme: parse "changes: None. Already up-to-date" and avoid dialog + + if(res.length()==0) + return; + + if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) + return; + + bridge.updateRepository(res, false); +#endif refresh(); } From efe0b61464d1ef3360004590ad43475456aa785d Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 15:49:05 +0000 Subject: [PATCH 19/90] - More fossil "mv" wrapping - stopUI now navigates to "about:blank" FossilOrigin-Name: 77ff1ae8697fa89d87f3ca03fc50cf40ce537f24 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 7 +++++-- src/Bridge.h | 2 +- src/MainWindow.cpp | 7 ++++++- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 0dacab4..444d00e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\sfossil\s"update" -D 2015-04-27T15:32:28.640 +C -\sMore\sfossil\s"mv"\swrapping\n-\sstopUI\snow\snavigates\sto\s"about:blank" +D 2015-04-27T15:49:05.526 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 9112bd819e4a012eb050c25a4e790aefe1082cd5 -F src/Bridge.h 25b22bbaf5c34f529095921f3f8fb367185d9750 +F src/Bridge.cpp 50996723afa0ebf24dc2e4c0ec93a73ec6c0f9e4 +F src/Bridge.h 52401305a45aa48e147000ebda538719d17ebb6f F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 946d1422c8540f155d4b8022956319bfeb0d693c +F src/MainWindow.cpp d1a07a3cc3b6b7ee9892b87691d9dee44f7760c7 F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 239b8ac44d4dd954633b52d28b68e4cd9937efbc -R 21520105f6d95e2d46dcaeedab9c8d5c +P 11a0f979fc198ad134c95c139547baae81d90050 +R 7c36928b15b28edaefddc669a790ffc2 U kostas -Z 7f5cca5d4e2b24f9dd76444de33be1b8 +Z a63695d7f1d6a5fd1462c09f9c0b905b diff --git a/manifest.uuid b/manifest.uuid index 7433b05..2df0d02 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -11a0f979fc198ad134c95c139547baae81d90050 \ No newline at end of file +77ff1ae8697fa89d87f3ca03fc50cf40ce537f24 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 9acb129..6b3edc4 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -258,7 +258,7 @@ bool Bridge::revertFiles(const QStringList& fileList) } //------------------------------------------------------------------------------ -bool Bridge::renameFile(const QString &beforePath, const QString &afterPath) +bool Bridge::renameFile(const QString &beforePath, const QString &afterPath, bool renameLocal) { // Ensure we can rename the file if(!QFileInfo(beforePath).exists() || QFileInfo(afterPath).exists()) @@ -271,7 +271,10 @@ bool Bridge::renameFile(const QString &beforePath, const QString &afterPath) QString wkdir = getCurrentWorkspace() + QDir::separator(); // Also rename the file - return QFile::rename(wkdir+beforePath, wkdir+afterPath); + if(renameLocal && !QFile::rename(wkdir+beforePath, wkdir+afterPath)) + return false; + + return true; } //------------------------------------------------------------------------------ diff --git a/src/Bridge.h b/src/Bridge.h index 58621c2..f404fe6 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -103,7 +103,7 @@ public: bool addFiles(const QStringList& fileList); bool removeFiles(const QStringList& fileList, bool deleteLocal); bool revertFiles(const QStringList& fileList); - bool renameFile(const QString& beforePath, const QString& afterPath); + bool renameFile(const QString& beforePath, const QString& afterPath, bool renameLocal); bool undoRepository(QStringList& result, bool explainOnly); bool updateRepository(QStringList& result, bool explainOnly); private: diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 1528632..5f3bf06 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1828,6 +1828,7 @@ bool MainWindow::startUI() void MainWindow::stopUI() { bridge.stopUI(); + ui->webView->load(QUrl("about:blank")); ui->actionFossilUI->setChecked(false); } @@ -2159,7 +2160,7 @@ void MainWindow::on_actionRename_triggered() // Also rename the file QFile::rename(wkdir+fi_before.filePath(), wkdir+fi_after.filePath()); #else - bridge.renameFile(fi_before.filePath(), fi_after.filePath()); + bridge.renameFile(fi_before.filePath(), fi_after.filePath(), true); #endif refresh(); @@ -2547,7 +2548,11 @@ void MainWindow::on_actionRenameFolder_triggered() RepoFile *r = files_to_move[i]; const QString &new_file_path = new_paths[i] + PATH_SEP + r->getFilename(); +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "mv" << QuotePath(r->getFilePath()) << QuotePath(new_file_path))) +#else + if(!bridge.renameFile(r->getFilePath(), new_file_path, false)) +#endif { log(tr("Move aborted due to errors")+"\n"); goto _exit; From 79c351c0432a77112628754127c2505d88a5b855 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 15:53:09 +0000 Subject: [PATCH 20/90] Wrapped "settings" FossilOrigin-Name: 2b7585554eaec0b930d78171ee9c6855637cd7ab --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 7 +++++++ src/Bridge.h | 1 + src/MainWindow.cpp | 6 ++++++ 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 444d00e..e939ccb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C -\sMore\sfossil\s"mv"\swrapping\n-\sstopUI\snow\snavigates\sto\s"about:blank" -D 2015-04-27T15:49:05.526 +C Wrapped\s"settings" +D 2015-04-27T15:53:09.050 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 50996723afa0ebf24dc2e4c0ec93a73ec6c0f9e4 -F src/Bridge.h 52401305a45aa48e147000ebda538719d17ebb6f +F src/Bridge.cpp aa2ebe96902c441f6b39c32f7d38ea7ffab9405d +F src/Bridge.h 64ad587c13537066a2294ad76134077a19c4006f F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp d1a07a3cc3b6b7ee9892b87691d9dee44f7760c7 +F src/MainWindow.cpp afbca2ef960db0a7adc35b6ce67005203625802b F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 11a0f979fc198ad134c95c139547baae81d90050 -R 7c36928b15b28edaefddc669a790ffc2 +P 77ff1ae8697fa89d87f3ca03fc50cf40ce537f24 +R a372585b2168c96a373b54d319b9d7d6 U kostas -Z a63695d7f1d6a5fd1462c09f9c0b905b +Z c575daebd28a465ba5a799a992716136 diff --git a/manifest.uuid b/manifest.uuid index 2df0d02..0ead11f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -77ff1ae8697fa89d87f3ca03fc50cf40ce537f24 \ No newline at end of file +2b7585554eaec0b930d78171ee9c6855637cd7ab \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 6b3edc4..35c95b2 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -303,6 +303,13 @@ bool Bridge::updateRepository(QStringList &result, bool explainOnly) return runFossil(params, &result); } +//------------------------------------------------------------------------------ +bool Bridge::getFossilSettings(QStringList &result) +{ + return runFossil(QStringList() << "settings", &result, RUNFLAGS_SILENT_ALL); +} + + //------------------------------------------------------------------------------ bool Bridge::stashList(stashmap_t& stashes) { diff --git a/src/Bridge.h b/src/Bridge.h index f404fe6..a57101c 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -106,6 +106,7 @@ public: bool renameFile(const QString& beforePath, const QString& afterPath, bool renameLocal); bool undoRepository(QStringList& result, bool explainOnly); bool updateRepository(QStringList& result, bool explainOnly); + bool getFossilSettings(QStringList& result); private: void log(const QString &text, bool isHTML=false) { diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 5f3bf06..a94c40b 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -2297,8 +2297,14 @@ void MainWindow::loadFossilSettings() { // Also retrieve the fossil global settings QStringList out; + +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "settings", &out, RUNFLAGS_SILENT_ALL)) return; +#else + if(!bridge.getFossilSettings(out)) + return; +#endif QStringMap kv = MakeKeyValues(out); From be2856d06098671d5382362c1dc04dba586febe2 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 18:12:04 +0000 Subject: [PATCH 21/90] Wrapped "stash" and all remaining calls We now use explicit calls for non-setting based fossil options (eg remote-url) FossilOrigin-Name: bbbd2f42e643fbd912b6b3a5cc0b744f14cd56b0 --- manifest | 16 +++++------ manifest.uuid | 2 +- src/Bridge.cpp | 70 ++++++++++++++++++++++++++++++++++++++++++++-- src/Bridge.h | 10 ++++++- src/MainWindow.cpp | 47 ++++++++++++++++++++++++++++--- 5 files changed, 128 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index e939ccb..5ffec4f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"settings" -D 2015-04-27T15:53:09.050 +C Wrapped\s"stash"\sand\sall\sremaining\scalls\nWe\snow\suse\sexplicit\scalls\sfor\snon-setting\sbased\sfossil\soptions\s(eg\sremote-url) +D 2015-04-27T18:12:04.670 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp aa2ebe96902c441f6b39c32f7d38ea7ffab9405d -F src/Bridge.h 64ad587c13537066a2294ad76134077a19c4006f +F src/Bridge.cpp c7e897ffb89a3cb6ff60931426378dbb60b0432d +F src/Bridge.h 4222ac4d1e899516ed62df0e0575d98d10ebac40 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp afbca2ef960db0a7adc35b6ce67005203625802b +F src/MainWindow.cpp e4136c247097be4bfb38aff1e21e39b96af503e9 F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 77ff1ae8697fa89d87f3ca03fc50cf40ce537f24 -R a372585b2168c96a373b54d319b9d7d6 +P 2b7585554eaec0b930d78171ee9c6855637cd7ab +R 9c542f6043c5ab3e327b2d8ba71458b7 U kostas -Z c575daebd28a465ba5a799a992716136 +Z af9c2eb95a699b2e5bce089794310af1 diff --git a/manifest.uuid b/manifest.uuid index 0ead11f..d44d018 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2b7585554eaec0b930d78171ee9c6855637cd7ab \ No newline at end of file +bbbd2f42e643fbd912b6b3a5cc0b744f14cd56b0 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 35c95b2..a3af4a3 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -309,6 +309,48 @@ bool Bridge::getFossilSettings(QStringList &result) return runFossil(QStringList() << "settings", &result, RUNFLAGS_SILENT_ALL); } +//------------------------------------------------------------------------------ +bool Bridge::setFossilSetting(const QString& name, const QString& value, bool global) +{ + QStringList params; + + if(value.isEmpty()) + params << "unset" << name; + else + params << "settings" << name << value; + + if(global) + params << "-global"; + + return runFossil(params); +} + +//------------------------------------------------------------------------------ +bool Bridge::setRemoteUrl(const QString& url) +{ + QString u = url; + + if(url.isEmpty()) + u = "off"; + + // Run as silent to avoid displaying credentials in the log + // FIXME: maybe use a QUrl instead + return runFossil(QStringList() << "remote-url" << u, 0, RUNFLAGS_SILENT_INPUT); +} + +//------------------------------------------------------------------------------ +bool Bridge::stashNew(const QStringList& fileList, const QString& name, bool revert) +{ + // Do Stash + // Snapshot just records the changes into the stash + QString command = "snapshot"; + + // Save also reverts the stashed files + if(revert) + command = "save"; + + return runFossil(QStringList() << "stash" << command << "-m" << name << QuotePaths(fileList)); +} //------------------------------------------------------------------------------ bool Bridge::stashList(stashmap_t& stashes) @@ -348,6 +390,24 @@ bool Bridge::stashList(stashmap_t& stashes) return true; } +//------------------------------------------------------------------------------ +bool Bridge::stashApply(const QString& name) +{ + return runFossil(QStringList() << "stash" << "apply" << name); +} + +//------------------------------------------------------------------------------ +bool Bridge::stashDrop(const QString& name) +{ + return runFossil(QStringList() << "stash" << "apply" << name); +} + +//------------------------------------------------------------------------------ +bool Bridge::stashDiff(const QString& name) +{ + return runFossil(QStringList() << "stash" << "diff" << name, 0); +} + //------------------------------------------------------------------------------ static QString ParseFossilQuery(QString line) { @@ -459,6 +519,10 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi QTextDecoder *decoder = codec->makeDecoder(); Q_ASSERT(decoder); +#ifdef QT_DEBUG + size_t input_index = 0; +#endif + while(true) { QProcess::ProcessState state = process.state(); @@ -483,7 +547,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi #ifdef QT_DEBUG // Log fossil output in debug builds if(!input.isEmpty()) - qDebug() << input; + qDebug() << "[" << ++input_index << "] '" << input.data() << "'\n"; #endif buffer += decoder->toUnicode(input); @@ -536,8 +600,8 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi QStringList log_lines = buffer.left(last_line_start).split(EOL_MARK); for(int l=0; l0 && l==log_lines.length()-1 && buffer[buffer.length()-1] != EOL_MARK ) continue; QString line = log_lines[l].trimmed(); diff --git a/src/Bridge.h b/src/Bridge.h index a57101c..2b654c7 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -97,7 +97,6 @@ public: void stopUI(); bool listFiles(QStringList &files); - bool stashList(stashmap_t &stashes); bool diffFile(const QString &repoFile); bool commitFiles(const QStringList &fileList, const QString &comment); bool addFiles(const QStringList& fileList); @@ -107,6 +106,15 @@ public: bool undoRepository(QStringList& result, bool explainOnly); bool updateRepository(QStringList& result, bool explainOnly); bool getFossilSettings(QStringList& result); + bool setFossilSetting(const QString &name, const QString &value, bool global); + bool setRemoteUrl(const QString &url); + + bool stashNew(const QStringList& fileList, const QString& name, bool revert); + bool stashList(stashmap_t &stashes); + bool stashApply(const QString& name); + bool stashDrop(const QString& name); + bool stashDiff(const QString& name); + private: void log(const QString &text, bool isHTML=false) { diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index a94c40b..f87ea77 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1441,7 +1441,7 @@ QString MainWindow::getFossilPath() return fossil_exe; } #else - +#if 1 bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) { // Make StatusBar message @@ -1453,6 +1453,7 @@ bool MainWindow::runFossil(const QStringList &args, QStringList *output, int run return bridge.runFossil(args, output, runFlags); } #endif +#endif //------------------------------------------------------------------------------ void MainWindow::applySettings() @@ -2314,7 +2315,9 @@ void MainWindow::loadFossilSettings() Settings::Setting::SettingType type = it->Type; // Command types we issue directly on fossil - if(type == Settings::Setting::TYPE_FOSSIL_COMMAND) + + //if(type == Settings::Setting::TYPE_FOSSIL_COMMAND) + if(name == FOSSIL_SETTING_REMOTE_URL) { // Retrieve existing url QStringList out; @@ -2324,6 +2327,8 @@ void MainWindow::loadFossilSettings() continue; } + Q_ASSERT(type == Settings::Setting::TYPE_FOSSIL_GLOBAL || type == Settings::Setting::TYPE_FOSSIL_LOCAL); + // Otherwise it must be a fossil setting if(!kv.contains(name)) continue; @@ -2360,16 +2365,23 @@ void MainWindow::on_actionSettings_triggered() Settings::Setting::SettingType type = it.value().Type; // Command types we issue directly on fossil - if(type == Settings::Setting::TYPE_FOSSIL_COMMAND) + // FIXME: major uglyness with settings management + //if(type == Settings::Setting::TYPE_FOSSIL_COMMAND) + if(name == FOSSIL_SETTING_REMOTE_URL) { // Run as silent to avoid displaying credentials in the log +#ifndef BRIDGE_H runFossil(QStringList() << "remote-url" << QuotePath(it.value().Value.toString()), 0, RUNFLAGS_SILENT_INPUT); +#else + bridge.setRemoteUrl(it.value().Value.toString()); +#endif continue; } Q_ASSERT(type == Settings::Setting::TYPE_FOSSIL_GLOBAL || type == Settings::Setting::TYPE_FOSSIL_LOCAL); QString value = it.value().Value.toString(); +#ifndef BRIDGE_H QStringList params; if(value.isEmpty()) @@ -2381,6 +2393,9 @@ void MainWindow::on_actionSettings_triggered() params << "-global"; runFossil(params); +#else + bridge.setFossilSetting(name, value, type == Settings::Setting::TYPE_FOSSIL_GLOBAL); +#endif } } @@ -2681,11 +2696,15 @@ void MainWindow::on_actionNewStash_triggered() } // Do Stash +#ifndef BRIDGE_ENABLED QString command = "snapshot"; if(revert) command = "save"; runFossil(QStringList() << "stash" << command << "-m" << stash_name << QuotePaths(stashed_files) ); +#else + bridge.stashNew(stashed_files, stash_name, revert); +#endif refresh(); } @@ -2705,7 +2724,11 @@ void MainWindow::on_actionApplyStash_triggered() stashmap_t::iterator id_it = stashMap.find(*it); Q_ASSERT(id_it!=stashMap.end()); +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "stash" << "apply" << *id_it)) +#else + if(!bridge.stashApply(*id_it)) +#endif { log(tr("Stash application aborted due to errors")+"\n"); return; @@ -2717,8 +2740,12 @@ void MainWindow::on_actionApplyStash_triggered() { stashmap_t::iterator id_it = stashMap.find(*it); Q_ASSERT(id_it!=stashMap.end()); - +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "stash" << "drop" << *id_it)) +#else + if(!bridge.stashDrop(*id_it)) +#endif + { log(tr("Stash deletion aborted due to errors")+"\n"); return; @@ -2746,7 +2773,11 @@ void MainWindow::on_actionDeleteStash_triggered() stashmap_t::iterator id_it = stashMap.find(*it); Q_ASSERT(id_it!=stashMap.end()); +#ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "stash" << "drop" << *id_it)) +#else + if(!bridge.stashDrop(*id_it)) +#endif { log(tr("Stash deletion aborted due to errors")+"\n"); return; @@ -2769,7 +2800,11 @@ void MainWindow::on_actionDiffStash_triggered() Q_ASSERT(id_it!=stashMap.end()); // Run diff +#ifndef BRIDGE_ENABLED runFossil(QStringList() << "stash" << "diff" << *id_it, 0); +#else + bridge.stashDiff(*id_it); +#endif } //------------------------------------------------------------------------------ @@ -2882,7 +2917,11 @@ void MainWindow::dropEvent(QDropEvent *event) return; // Do Add +#ifndef BRIDGE_ENABLED runFossil(QStringList() << "add" << QuotePaths(newfiles) ); +#else + bridge.addFiles(newfiles); +#endif refresh(); } From 906873e7f9ca9c08f5afa8483a348a70022eb925 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 18:23:00 +0000 Subject: [PATCH 22/90] Completed wrapping FossilOrigin-Name: de84b1fda5b215f404dfafb1d5b95a694707573b --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/Bridge.cpp | 16 +++++++++++++++- src/Bridge.h | 20 ++++++++++---------- src/MainWindow.cpp | 12 +++++++++--- src/MainWindow.h | 10 +--------- 6 files changed, 45 insertions(+), 33 deletions(-) diff --git a/manifest b/manifest index 5ffec4f..719ebe0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\s"stash"\sand\sall\sremaining\scalls\nWe\snow\suse\sexplicit\scalls\sfor\snon-setting\sbased\sfossil\soptions\s(eg\sremote-url) -D 2015-04-27T18:12:04.670 +C Completed\swrapping +D 2015-04-27T18:23:00.528 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp c7e897ffb89a3cb6ff60931426378dbb60b0432d -F src/Bridge.h 4222ac4d1e899516ed62df0e0575d98d10ebac40 +F src/Bridge.cpp e10c71b97f2010427c51588933776a5047a57b2b +F src/Bridge.h 339260808e1f77d8c8c786554296b3c5adb8fe60 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp e4136c247097be4bfb38aff1e21e39b96af503e9 -F src/MainWindow.h a727aea9b2b453c79682f61157b38a76a873060a +F src/MainWindow.cpp cc89324e8e5e134a3503d0a9488a647424a6fa36 +F src/MainWindow.h 85fd2ccc544c1873c38651463a81c6978a2d9eac F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 2b7585554eaec0b930d78171ee9c6855637cd7ab -R 9c542f6043c5ab3e327b2d8ba71458b7 +P bbbd2f42e643fbd912b6b3a5cc0b744f14cd56b0 +R aefaf10d20a007fec085027b062f8453 U kostas -Z af9c2eb95a699b2e5bce089794310af1 +Z 45b903712c271e0c77bb149a9b43a601 diff --git a/manifest.uuid b/manifest.uuid index d44d018..e0f7362 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bbbd2f42e643fbd912b6b3a5cc0b744f14cd56b0 \ No newline at end of file +de84b1fda5b215f404dfafb1d5b95a694707573b \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index a3af4a3..119d077 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -338,6 +338,20 @@ bool Bridge::setRemoteUrl(const QString& url) return runFossil(QStringList() << "remote-url" << u, 0, RUNFLAGS_SILENT_INPUT); } +//------------------------------------------------------------------------------ +bool Bridge::getRemoteUrl(QString& url) +{ + url.clear(); + + QStringList out; + if(!runFossil(QStringList() << "remote-url", &out, RUNFLAGS_SILENT_ALL)) + return false; + + if(out.length()>0) + url = out[0].trimmed(); + return true; +} + //------------------------------------------------------------------------------ bool Bridge::stashNew(const QStringList& fileList, const QString& name, bool revert) { @@ -399,7 +413,7 @@ bool Bridge::stashApply(const QString& name) //------------------------------------------------------------------------------ bool Bridge::stashDrop(const QString& name) { - return runFossil(QStringList() << "stash" << "apply" << name); + return runFossil(QStringList() << "stash" << "drop" << name); } //------------------------------------------------------------------------------ diff --git a/src/Bridge.h b/src/Bridge.h index 2b654c7..e606b6f 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -9,6 +9,15 @@ class QStringList; typedef QMap stashmap_t; +enum RunFlags +{ + RUNFLAGS_NONE = 0<<0, + RUNFLAGS_SILENT_INPUT = 1<<0, + RUNFLAGS_SILENT_OUTPUT = 1<<1, + RUNFLAGS_SILENT_ALL = RUNFLAGS_SILENT_INPUT | RUNFLAGS_SILENT_OUTPUT, + RUNFLAGS_DETACHED = 1<<2 +}; + class Bridge : public QObject { public: @@ -20,16 +29,6 @@ public: { } - - enum RunFlags - { - RUNFLAGS_NONE = 0<<0, - RUNFLAGS_SILENT_INPUT = 1<<0, - RUNFLAGS_SILENT_OUTPUT = 1<<1, - RUNFLAGS_SILENT_ALL = RUNFLAGS_SILENT_INPUT | RUNFLAGS_SILENT_OUTPUT, - RUNFLAGS_DETACHED = 1<<2 - }; - typedef void(*log_callback_t)(QTextBrowser *textBrowser, const QString &text, bool isHTML); @@ -108,6 +107,7 @@ public: bool getFossilSettings(QStringList& result); bool setFossilSetting(const QString &name, const QString &value, bool global); bool setRemoteUrl(const QString &url); + bool getRemoteUrl(QString &url); bool stashNew(const QStringList& fileList, const QString& name, bool revert); bool stashList(stashmap_t &stashes); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index f87ea77..d15fca8 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1441,7 +1441,7 @@ QString MainWindow::getFossilPath() return fossil_exe; } #else -#if 1 +#if 0 bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) { // Make StatusBar message @@ -2320,9 +2320,15 @@ void MainWindow::loadFossilSettings() if(name == FOSSIL_SETTING_REMOTE_URL) { // Retrieve existing url +#ifndef BRIDGE_ENABLED QStringList out; if(runFossil(QStringList() << name, &out, RUNFLAGS_SILENT_ALL) && out.length()==1) it.value().Value = out[0].trimmed(); +#else + QString url; + if(bridge.getRemoteUrl(url)) + it.value().Value = url; +#endif continue; } @@ -2370,7 +2376,7 @@ void MainWindow::on_actionSettings_triggered() if(name == FOSSIL_SETTING_REMOTE_URL) { // Run as silent to avoid displaying credentials in the log -#ifndef BRIDGE_H +#ifndef BRIDGE_ENABLED runFossil(QStringList() << "remote-url" << QuotePath(it.value().Value.toString()), 0, RUNFLAGS_SILENT_INPUT); #else bridge.setRemoteUrl(it.value().Value.toString()); @@ -2381,7 +2387,7 @@ void MainWindow::on_actionSettings_triggered() Q_ASSERT(type == Settings::Setting::TYPE_FOSSIL_GLOBAL || type == Settings::Setting::TYPE_FOSSIL_LOCAL); QString value = it.value().Value.toString(); -#ifndef BRIDGE_H +#ifndef BRIDGE_ENABLED QStringList params; if(value.isEmpty()) diff --git a/src/MainWindow.h b/src/MainWindow.h index ae67b0d..6528e6e 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -127,21 +127,13 @@ public: private: typedef QSet stringset_t; - enum RunFlags - { - RUNFLAGS_NONE = 0<<0, - RUNFLAGS_SILENT_INPUT = 1<<0, - RUNFLAGS_SILENT_OUTPUT = 1<<1, - RUNFLAGS_SILENT_ALL = RUNFLAGS_SILENT_INPUT | RUNFLAGS_SILENT_OUTPUT, - RUNFLAGS_DETACHED = 1<<2 - }; private: bool refresh(); void scanWorkspace(); - bool runFossil(const QStringList &args, QStringList *output=0, int runFlags=RUNFLAGS_NONE); #ifndef BRIDGE_ENABLED bool runFossilRaw(const QStringList &args, QStringList *output=0, int *exitCode=0, int runFlags=RUNFLAGS_NONE); + bool runFossil(const QStringList &args, QStringList *output=0, int runFlags=RUNFLAGS_NONE); #endif void applySettings(); void updateSettings(); From 5b3333836d497284d27a1f8873b1623a3965a4c2 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 18:59:09 +0000 Subject: [PATCH 23/90] Refactored ui callback mechanism Bridge now has access to the status bar via the new callbacks FossilOrigin-Name: ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/Bridge.cpp | 24 ++++++++++++++++++++++++ src/Bridge.h | 24 +++++++++++++++--------- src/MainWindow.cpp | 30 +++++++++++++++++++++++++++++- src/MainWindow.h | 24 ++++++++++++++++++++++++ 6 files changed, 102 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 719ebe0..cec3ff6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Completed\swrapping -D 2015-04-27T18:23:00.528 +C Refactored\sui\scallback\smechanism\nBridge\snow\shas\saccess\sto\sthe\sstatus\sbar\svia\sthe\snew\scallbacks +D 2015-04-27T18:59:09.410 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp e10c71b97f2010427c51588933776a5047a57b2b -F src/Bridge.h 339260808e1f77d8c8c786554296b3c5adb8fe60 +F src/Bridge.cpp 7d9043cf388710ab09f8f2e3bb7ba04fecba94ee +F src/Bridge.h 178ce7d42fae6f249866e473be1219c126a98646 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp cc89324e8e5e134a3503d0a9488a647424a6fa36 -F src/MainWindow.h 85fd2ccc544c1873c38651463a81c6978a2d9eac +F src/MainWindow.cpp 10501a468e95f3b18ac72ce5cf1d37515f582ee4 +F src/MainWindow.h f50d6fa91864f5499d7b627af87bd405f28acd31 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P bbbd2f42e643fbd912b6b3a5cc0b744f14cd56b0 -R aefaf10d20a007fec085027b062f8453 +P de84b1fda5b215f404dfafb1d5b95a694707573b +R 16a653b7d4aa34851b31c4350ffaf2a2 U kostas -Z 45b903712c271e0c77bb149a9b43a601 +Z 13e634934b62e62d5a4308841431d39a diff --git a/manifest.uuid b/manifest.uuid index e0f7362..b8b50d4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -de84b1fda5b215f404dfafb1d5b95a694707573b \ No newline at end of file +ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 119d077..9054e01 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -19,6 +19,24 @@ static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-( #define FOSSIL_EXT "fossil" #define PATH_SEP "/" + +/////////////////////////////////////////////////////////////////////////////// +class ScopedFossilStatus +{ +public: + ScopedFossilStatus(Bridge::UICallback *callback, const QString &text) : uiCallback(callback) + { + uiCallback->beginProcess(text); + } + + ~ScopedFossilStatus() + { + uiCallback->endProcess(); + } +private: + Bridge::UICallback *uiCallback; +}; + //------------------------------------------------------------------------------ Bridge::RepoStatus Bridge::getRepoStatus() { @@ -478,6 +496,12 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi if(detached) return QProcess::startDetached(fossil, args, wkdir); + // Make status message + QString status_msg = tr("Running Fossil"); + if(args.length() > 0) + status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); + ScopedFossilStatus status(uiCallback, status_msg); + // Generate args file const QStringList *final_args = &args; QTemporaryFile args_file; diff --git a/src/Bridge.h b/src/Bridge.h index e606b6f..a8f77c9 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -21,21 +21,27 @@ enum RunFlags class Bridge : public QObject { public: + class UICallback + { + public: + virtual void logText(const QString &text, bool isHTML)=0; + virtual void beginProcess(const QString &text)=0; + virtual void endProcess()=0; + }; + + Bridge() : QObject(0) , parentWidget(0) , abortOperation(false) - , logTextBrowser(0) + , uiCallback(0) { } - typedef void(*log_callback_t)(QTextBrowser *textBrowser, const QString &text, bool isHTML); - - - void Init(QWidget *parent, log_callback_t callback, QTextBrowser *textBrowser, const QString &fossPath, const QString &workspace) + void Init(QWidget *parent, UICallback *callback, QTextBrowser *textBrowser, const QString &fossPath, const QString &workspace) { parentWidget = parent; - logCallback = callback; + uiCallback = callback; logTextBrowser = textBrowser; fossilPath = fossPath; @@ -118,8 +124,8 @@ public: private: void log(const QString &text, bool isHTML=false) { - if(logCallback) - (*logCallback)(logTextBrowser, text, isHTML); + if(uiCallback) + uiCallback->logText(text, isHTML); } @@ -128,7 +134,7 @@ private: QWidget *parentWidget; // fixme bool abortOperation; // FIXME: No GUI for it yet - log_callback_t logCallback; + UICallback *uiCallback; QTextBrowser *logTextBrowser; QString currentWorkspace; QString fossilPath; // The value from the settings diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index d15fca8..f71fdbd 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -80,6 +80,7 @@ static QStringMap MakeKeyValues(QStringList lines) } +#ifndef BRIDGE_ENABLED /////////////////////////////////////////////////////////////////////////////// class ScopedStatus { @@ -99,6 +100,7 @@ private: Ui::MainWindow *ui; QProgressBar *progressBar; }; +#endif /////////////////////////////////////////////////////////////////////////////// MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspacePath) : @@ -216,8 +218,9 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP viewMode = VIEWMODE_TREE; #ifdef BRIDGE_ENABLED + uiCallback.init(this); // Need to be before applySettings which sets the last workspace - bridge.Init(this, &log, ui->textBrowser, "", ""); + bridge.Init(this, &uiCallback, ui->textBrowser, "", ""); #endif applySettings(); @@ -2959,3 +2962,28 @@ void MainWindow::fullRefresh() // Select the Root of the tree to update the file view selectRootDir(); } + +#ifdef BRIDGE_ENABLED +//------------------------------------------------------------------------------ +void MainWindow::MainWinUICallback::logText(const QString& text, bool isHTML) +{ + Q_ASSERT(mainWindow); + mainWindow->log(text, isHTML); +} + +//------------------------------------------------------------------------------ +void MainWindow::MainWinUICallback::beginProcess(const QString& text) +{ + Q_ASSERT(mainWindow); + mainWindow->ui->statusBar->showMessage(text); + mainWindow->progressBar->setHidden(false); +} + +//------------------------------------------------------------------------------ +void MainWindow::MainWinUICallback::endProcess() +{ + Q_ASSERT(mainWindow); + mainWindow->ui->statusBar->clearMessage(); + mainWindow->progressBar->setHidden(true); +} +#endif \ No newline at end of file diff --git a/src/MainWindow.h b/src/MainWindow.h index 6528e6e..dae3e13 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -235,6 +235,29 @@ private slots: void on_tableView_customContextMenuRequested(const QPoint &pos); private: +#ifdef BRIDGE_ENABLED + class MainWinUICallback : public Bridge::UICallback + { + public: + MainWinUICallback() : mainWindow(0) + {} + + void init(class MainWindow *mainWindow) + { + this->mainWindow = mainWindow; + } + + virtual void logText(const QString& text, bool isHTML); + virtual void beginProcess(const QString& text); + virtual void endProcess(); + + private: + class MainWindow *mainWindow; + }; +#endif + + friend class MainWinUICallback; + enum { MAX_RECENT=5 @@ -262,6 +285,7 @@ private: void setRepositoryFile(const QString &filename) { repositoryFile = filename; } const QString & getProjectName() const { return projectName; } #else + MainWinUICallback uiCallback; Bridge bridge; const QString & getProjectName() const { return bridge.getProjectName(); } const QString & getRepositoryFile() const { return bridge.getRepositoryFile(); } From c039be3c8c09c0512a520777f775bad9c31220d5 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 19:04:11 +0000 Subject: [PATCH 24/90] Cleanups FossilOrigin-Name: b6473fc40399a46731c8741ceed7d3432d687c5a --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/Bridge.cpp | 1 + src/Bridge.h | 5 +---- src/MainWindow.cpp | 24 +++++++++--------------- src/MainWindow.h | 4 +--- 6 files changed, 22 insertions(+), 32 deletions(-) diff --git a/manifest b/manifest index cec3ff6..2f87b4d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactored\sui\scallback\smechanism\nBridge\snow\shas\saccess\sto\sthe\sstatus\sbar\svia\sthe\snew\scallbacks -D 2015-04-27T18:59:09.410 +C Cleanups +D 2015-04-27T19:04:11.301 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 7d9043cf388710ab09f8f2e3bb7ba04fecba94ee -F src/Bridge.h 178ce7d42fae6f249866e473be1219c126a98646 +F src/Bridge.cpp 9e2881359f454238bd4d6df5f7b2a81a06c6c2db +F src/Bridge.h 9c1828df15fcec90777afe998663d13138633d57 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 10501a468e95f3b18ac72ce5cf1d37515f582ee4 -F src/MainWindow.h f50d6fa91864f5499d7b627af87bd405f28acd31 +F src/MainWindow.cpp e793fdec0450d49fd3b787e4ad4693fb43d936d6 +F src/MainWindow.h 559547ce7aebd17d8bbb89195807f2a4a4ab3f76 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P de84b1fda5b215f404dfafb1d5b95a694707573b -R 16a653b7d4aa34851b31c4350ffaf2a2 +P ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8 +R 0cc42bee3118407cae720e60ef185e0c U kostas -Z 13e634934b62e62d5a4308841431d39a +Z f46004bc190ae5569498873da8760a7b diff --git a/manifest.uuid b/manifest.uuid index b8b50d4..5f2565c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8 \ No newline at end of file +b6473fc40399a46731c8741ceed7d3432d687c5a \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 9054e01..40aff67 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "Utils.h" static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; diff --git a/src/Bridge.h b/src/Bridge.h index a8f77c9..0ece12d 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -5,7 +5,6 @@ class QStringList; #include #include #include -#include typedef QMap stashmap_t; @@ -38,11 +37,10 @@ public: { } - void Init(QWidget *parent, UICallback *callback, QTextBrowser *textBrowser, const QString &fossPath, const QString &workspace) + void Init(QWidget *parent, UICallback *callback, const QString &fossPath, const QString &workspace) { parentWidget = parent; uiCallback = callback; - logTextBrowser = textBrowser; fossilPath = fossPath; currentWorkspace = workspace; @@ -135,7 +133,6 @@ private: bool abortOperation; // FIXME: No GUI for it yet UICallback *uiCallback; - QTextBrowser *logTextBrowser; QString currentWorkspace; QString fossilPath; // The value from the settings QString repositoryFile; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index f71fdbd..9e0c601 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -220,7 +220,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP #ifdef BRIDGE_ENABLED uiCallback.init(this); // Need to be before applySettings which sets the last workspace - bridge.Init(this, &uiCallback, ui->textBrowser, "", ""); + bridge.Init(this, &uiCallback, "", ""); #endif applySettings(); @@ -1083,23 +1083,17 @@ void MainWindow::updateStashView() ui->tableViewStash->resizeRowsToContents(); } -//------------------------------------------------------------------------------ -void MainWindow::log(QTextBrowser *textBrowser, const QString &text, bool isHTML) -{ - QTextCursor c = textBrowser->textCursor(); - c.movePosition(QTextCursor::End); - textBrowser->setTextCursor(c); - - if(isHTML) - textBrowser->insertHtml(text); - else - textBrowser->insertPlainText(text); -} - //------------------------------------------------------------------------------ void MainWindow::log(const QString &text, bool isHTML) { - log(ui->textBrowser, text, isHTML); + QTextCursor c = ui->textBrowser->textCursor(); + c.movePosition(QTextCursor::End); + ui->textBrowser->setTextCursor(c); + + if(isHTML) + ui->textBrowser->insertHtml(text); + else + ui->textBrowser->insertPlainText(text); } //------------------------------------------------------------------------------ diff --git a/src/MainWindow.h b/src/MainWindow.h index dae3e13..2b57504 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -139,7 +139,6 @@ private: void updateSettings(); const QString &getCurrentWorkspace(); void setCurrentWorkspace(const QString &workspace); - static void log(QTextBrowser *textBrowser, const QString &text, bool isHTML); void log(const QString &text, bool isHTML=false); void setStatus(const QString &text); bool uiRunning() const; @@ -285,7 +284,7 @@ private: void setRepositoryFile(const QString &filename) { repositoryFile = filename; } const QString & getProjectName() const { return projectName; } #else - MainWinUICallback uiCallback; + MainWinUICallback uiCallback; Bridge bridge; const QString & getProjectName() const { return bridge.getProjectName(); } const QString & getRepositoryFile() const { return bridge.getRepositoryFile(); } @@ -295,7 +294,6 @@ private: ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree - // Repository State typedef QList filelist_t; typedef QMap filemap_t; From 762172f1244b003b595172ba03c83fc0b7d898d3 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 19:15:43 +0000 Subject: [PATCH 25/90] More refactoring FossilOrigin-Name: e2b03b2a965ec50382ea89d374ece4a6a56b72b5 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/Bridge.cpp | 7 +++---- src/Bridge.h | 15 +++++++++------ src/MainWindow.cpp | 38 ++++++++++++++++++++++++-------------- src/MainWindow.h | 9 ++------- 6 files changed, 48 insertions(+), 41 deletions(-) diff --git a/manifest b/manifest index 2f87b4d..12dc5be 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Cleanups -D 2015-04-27T19:04:11.301 +C More\srefactoring\n +D 2015-04-27T19:15:43.096 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 9e2881359f454238bd4d6df5f7b2a81a06c6c2db -F src/Bridge.h 9c1828df15fcec90777afe998663d13138633d57 +F src/Bridge.cpp 00a460d33624258b29ad194297569c53cb10810f +F src/Bridge.h b121493715dd0bed15658b326a70af57f2252db7 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp e793fdec0450d49fd3b787e4ad4693fb43d936d6 -F src/MainWindow.h 559547ce7aebd17d8bbb89195807f2a4a4ab3f76 +F src/MainWindow.cpp 691e536058a9360f1a0db56c153638a196941283 +F src/MainWindow.h 9e4f2887690bffa9a154e7f9666f4655584256d1 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8 -R 0cc42bee3118407cae720e60ef185e0c +P b6473fc40399a46731c8741ceed7d3432d687c5a +R 217c3c621c2a2ca89f57d3cea5717343 U kostas -Z f46004bc190ae5569498873da8760a7b +Z 2a41dd117ed487365f20972afe89eb8f diff --git a/manifest.uuid b/manifest.uuid index 5f2565c..68d35d7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b6473fc40399a46731c8741ceed7d3432d687c5a \ No newline at end of file +e2b03b2a965ec50382ea89d374ece4a6a56b72b5 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 40aff67..d49dd34 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -18,7 +18,6 @@ static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-( #define FOSSIL_CHECKOUT1 "_FOSSIL_" #define FOSSIL_CHECKOUT2 ".fslckout" #define FOSSIL_EXT "fossil" -#define PATH_SEP "/" /////////////////////////////////////////////////////////////////////////////// @@ -39,7 +38,7 @@ private: }; //------------------------------------------------------------------------------ -Bridge::RepoStatus Bridge::getRepoStatus() +RepoStatus Bridge::getRepoStatus() { QStringList res; int exit_code = EXIT_FAILURE; @@ -782,8 +781,8 @@ bool Bridge::isWorkspace(const QString &path) QFileInfo fi(path); QString wkspace = path; wkspace = fi.absoluteDir().absolutePath(); - QString checkout_file1 = wkspace + PATH_SEP + FOSSIL_CHECKOUT1; - QString checkout_file2 = wkspace + PATH_SEP + FOSSIL_CHECKOUT2; + QString checkout_file1 = wkspace + PATH_SEPARATOR + FOSSIL_CHECKOUT1; + QString checkout_file2 = wkspace + PATH_SEPARATOR + FOSSIL_CHECKOUT2; return (QFileInfo(checkout_file1).exists() || QFileInfo(checkout_file2).exists()); } diff --git a/src/Bridge.h b/src/Bridge.h index 0ece12d..39ad99e 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -8,6 +8,8 @@ class QStringList; typedef QMap stashmap_t; +#define PATH_SEPARATOR "/" + enum RunFlags { RUNFLAGS_NONE = 0<<0, @@ -17,6 +19,13 @@ enum RunFlags RUNFLAGS_DETACHED = 1<<2 }; +enum RepoStatus +{ + REPO_OK, + REPO_NOT_FOUND, + REPO_OLD_SCHEMA +}; + class Bridge : public QObject { public: @@ -50,12 +59,6 @@ public: bool runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags); static bool isWorkspace(const QString &path); - enum RepoStatus - { - REPO_OK, - REPO_NOT_FOUND, - REPO_OLD_SCHEMA - }; RepoStatus getRepoStatus(); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 9e0c601..4556515 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -25,12 +25,12 @@ #include "Utils.h" #include "LoggedProcess.h" -#define PATH_SEP "/" - +#ifndef BRIDGE_ENABLED static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; // 19: [5c46757d4b9765] on 2012-04-22 04:41:15 static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); +#endif //----------------------------------------------------------------------------- enum @@ -317,8 +317,8 @@ bool MainWindow::openWorkspace(const QString &path) if(fi.isFile()) { wkspace = fi.absoluteDir().absolutePath(); - QString checkout_file1 = wkspace + PATH_SEP + FOSSIL_CHECKOUT1; - QString checkout_file2 = wkspace + PATH_SEP + FOSSIL_CHECKOUT2; + QString checkout_file1 = wkspace + PATH_SEPARATOR + FOSSIL_CHECKOUT1; + QString checkout_file2 = wkspace + PATH_SEPARATOR + FOSSIL_CHECKOUT2; if(!(QFileInfo(checkout_file1).exists() || QFileInfo(checkout_file2).exists()) ) { @@ -492,8 +492,13 @@ void MainWindow::on_actionNewRepository_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionCloseRepository_triggered() { +#ifndef BRIDGE_ENABLED if(getRepoStatus()!=REPO_OK) return; +#else + if(bridge.getRepoStatus()!=REPO_OK) + return; +#endif if(QMessageBox::Yes !=DialogQuery(this, tr("Close Workspace"), tr("Are you sure you want to close this workspace?"))) return; @@ -581,7 +586,6 @@ void MainWindow::rebuildRecent() recentWorkspaceActs[i]->setData(workspaceHistory[i]); recentWorkspaceActs[i]->setVisible(true); } - } //------------------------------------------------------------------------------ @@ -613,7 +617,7 @@ bool MainWindow::scanDirectory(QFileInfoList &entries, const QString& dirPath, c QFileInfo info = list[i]; QString filepath = info.filePath(); QString rel_path = filepath; - rel_path.remove(baseDir+PATH_SEP); + rel_path.remove(baseDir+PATH_SEPARATOR); // Skip ignored files if(!ignoreSpec.isEmpty() && QDir::match(ignoreSpec, rel_path)) @@ -661,7 +665,11 @@ bool MainWindow::refresh() QString title = "Fuel"; // Load repository info +#ifndef BRIDGE_ENABLED RepoStatus st = getRepoStatus(); +#else + RepoStatus st = bridge.getRepoStatus(); +#endif if(st==REPO_NOT_FOUND) { @@ -1018,7 +1026,7 @@ void MainWindow::updateFileView() //------------------------------------------------------------------------------ #ifndef BRIDGE_ENABLED -MainWindow::RepoStatus MainWindow::getRepoStatus() +RepoStatus MainWindow::getRepoStatus() { QStringList res; int exit_code = EXIT_FAILURE; @@ -1059,11 +1067,13 @@ MainWindow::RepoStatus MainWindow::getRepoStatus() return run_ok ? REPO_OK : REPO_NOT_FOUND; } #else +#if 0 MainWindow::RepoStatus MainWindow::getRepoStatus() { return (MainWindow::RepoStatus) bridge.getRepoStatus(); } #endif +#endif //------------------------------------------------------------------------------ void MainWindow::updateStashView() { @@ -2479,7 +2489,7 @@ void MainWindow::on_actionOpenFolder_triggered() void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) { QString target = repoDirModel.data(index, REPODIRMODEL_ROLE_PATH).toString(); - target = getCurrentWorkspace() + PATH_SEP + target; + target = getCurrentWorkspace() + PATH_SEPARATOR + target; QUrl url = QUrl::fromLocalFile(target); QDesktopServices::openUrl(url); @@ -2504,7 +2514,7 @@ void MainWindow::on_actionRenameFolder_triggered() return; } - int dir_start = old_path.lastIndexOf(PATH_SEP); + int dir_start = old_path.lastIndexOf(PATH_SEPARATOR); if(dir_start==-1) dir_start = 0; else @@ -2550,7 +2560,7 @@ void MainWindow::on_actionRenameFolder_triggered() files_to_move.append(r); QString new_dir = new_path + r->getPath().mid(old_path.length()); new_paths.append(new_dir); - QString new_file_path = new_dir + PATH_SEP + r->getFilename(); + QString new_file_path = new_dir + PATH_SEPARATOR + r->getFilename(); operations.append(r->getFilePath() + " -> " + new_file_path); } @@ -2570,7 +2580,7 @@ void MainWindow::on_actionRenameFolder_triggered() for(int i=0; igetFilename(); + const QString &new_file_path = new_paths[i] + PATH_SEPARATOR + r->getFilename(); #ifndef BRIDGE_ENABLED if(!runFossil(QStringList() << "mv" << QuotePath(r->getFilePath()) << QuotePath(new_file_path))) @@ -2589,7 +2599,7 @@ void MainWindow::on_actionRenameFolder_triggered() // First ensure that the target directories exist, and if not make them for(int i=0; igetFilename(); + QString new_file_path = new_paths[i] + PATH_SEPARATOR + r->getFilename(); if(QFile::exists(new_file_path)) { diff --git a/src/MainWindow.h b/src/MainWindow.h index 2b57504..58ad4e8 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -168,14 +168,9 @@ private: void setBusy(bool busy); virtual QMenu *createPopupMenu(); - enum RepoStatus - { - REPO_OK, - REPO_NOT_FOUND, - REPO_OLD_SCHEMA - }; - +#ifndef BRIDGE_ENABLED RepoStatus getRepoStatus(); +#endif enum ViewMode { From 46c5fba9d21dc550836df341a67148828ebe44b4 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 19:31:43 +0000 Subject: [PATCH 26/90] Transitioned to new fossil bridge FossilOrigin-Name: c5b0a1a62a9607f434ac6426401fd40c94d6a2d8 --- manifest | 14 +- manifest.uuid | 2 +- src/MainWindow.cpp | 812 +-------------------------------------------- src/MainWindow.h | 25 +- 4 files changed, 14 insertions(+), 839 deletions(-) diff --git a/manifest b/manifest index 12dc5be..37b9319 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C More\srefactoring\n -D 2015-04-27T19:15:43.096 +C Transitioned\sto\snew\sfossil\sbridge +D 2015-04-27T19:31:43.310 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 691e536058a9360f1a0db56c153638a196941283 -F src/MainWindow.h 9e4f2887690bffa9a154e7f9666f4655584256d1 +F src/MainWindow.cpp 8f20a49621c42bfa7ee5f6018900a9f6ef08f6c8 +F src/MainWindow.h 045b784735d86cef7ed415ca46dccf9b6a005c39 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P b6473fc40399a46731c8741ceed7d3432d687c5a -R 217c3c621c2a2ca89f57d3cea5717343 +P e2b03b2a965ec50382ea89d374ece4a6a56b72b5 +R 7230e39179ffadefe20ce40a0176c6fa U kostas -Z 2a41dd117ed487365f20972afe89eb8f +Z 1c155b4c26131deaf429fe2b750502dc diff --git a/manifest.uuid b/manifest.uuid index 68d35d7..2c624c0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e2b03b2a965ec50382ea89d374ece4a6a56b72b5 \ No newline at end of file +c5b0a1a62a9607f434ac6426401fd40c94d6a2d8 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 4556515..16b9b4d 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -25,13 +25,6 @@ #include "Utils.h" #include "LoggedProcess.h" -#ifndef BRIDGE_ENABLED -static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; - -// 19: [5c46757d4b9765] on 2012-04-22 04:41:15 -static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); -#endif - //----------------------------------------------------------------------------- enum { @@ -80,28 +73,6 @@ static QStringMap MakeKeyValues(QStringList lines) } -#ifndef BRIDGE_ENABLED -/////////////////////////////////////////////////////////////////////////////// -class ScopedStatus -{ -public: - ScopedStatus(const QString &text, Ui::MainWindow *mw, QProgressBar *bar) : ui(mw), progressBar(bar) - { - ui->statusBar->showMessage(text); - progressBar->setHidden(false); - } - - ~ScopedStatus() - { - ui->statusBar->clearMessage(); - progressBar->setHidden(true); - } -private: - Ui::MainWindow *ui; - QProgressBar *progressBar; -}; -#endif - /////////////////////////////////////////////////////////////////////////////// MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspacePath) : QMainWindow(parent), @@ -217,11 +188,9 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP viewMode = VIEWMODE_TREE; -#ifdef BRIDGE_ENABLED uiCallback.init(this); // Need to be before applySettings which sets the last workspace bridge.Init(this, &uiCallback, "", ""); -#endif applySettings(); @@ -249,11 +218,7 @@ MainWindow::~MainWindow() //----------------------------------------------------------------------------- const QString &MainWindow::getCurrentWorkspace() { -#ifndef BRIDGE_ENABLED - return currentWorkspace; -#else return bridge.getCurrentWorkspace(); -#endif } //----------------------------------------------------------------------------- @@ -261,21 +226,13 @@ void MainWindow::setCurrentWorkspace(const QString &workspace) { if(workspace.isEmpty()) { -#ifndef BRIDGE_ENABLED - currentWorkspace.clear(); -#else bridge.setCurrentWorkspace(""); -#endif return; } QString new_workspace = QFileInfo(workspace).absoluteFilePath(); -#ifndef BRIDGE_ENABLED - currentWorkspace = new_workspace; -#else bridge.setCurrentWorkspace(new_workspace); -#endif addWorkspace(new_workspace); @@ -334,20 +291,7 @@ bool MainWindow::openWorkspace(const QString &path) } // Ok open the repository file -#ifndef BRIDGE_ENABLED - if(!QDir::setCurrent(wkspace)) - { - QMessageBox::critical(this, tr("Error"), tr("Could not change current directory"), QMessageBox::Ok ); - return false; - } - - setCurrentWorkspace(wkspace); - setRepositoryFile(fi.absoluteFilePath()); - - if(!runFossil(QStringList() << "open" << QuotePath(getRepositoryFile()))) -#else if(!bridge.openRepository(fi.absoluteFilePath(), wkspace)) -#endif { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return false; @@ -451,36 +395,18 @@ void MainWindow::on_actionNewRepository_triggered() // Create repository QString repo_abs_path = repo_path_info.absoluteFilePath(); -#ifndef BRIDGE_ENABLED - setRepositoryFile(repo_abs_path); - if(!runFossil(QStringList() << "new" << QuotePath(getRepositoryFile()))) -#else if(!bridge.newRepository(repo_abs_path)) -#endif { QMessageBox::critical(this, tr("Error"), tr("Could not create repository."), QMessageBox::Ok ); return; } -#ifndef BRIDGE_ENABLED - // Create workspace - setCurrentWorkspace(wkdir); - if(!QDir::setCurrent(wkdir)) - { - QMessageBox::critical(this, tr("Error"), tr("Could not change current directory"), QMessageBox::Ok ); - return; - } - - // Open repo - if(!runFossil(QStringList() << "open" << QuotePath(getRepositoryFile()))) -#else if(!bridge.openRepository(repo_abs_path, wkdir)) { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return; } -#endif // Disable unknown file filter if(!ui->actionViewUnknown->isChecked()) @@ -492,32 +418,21 @@ void MainWindow::on_actionNewRepository_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionCloseRepository_triggered() { -#ifndef BRIDGE_ENABLED - if(getRepoStatus()!=REPO_OK) - return; -#else if(bridge.getRepoStatus()!=REPO_OK) return; -#endif if(QMessageBox::Yes !=DialogQuery(this, tr("Close Workspace"), tr("Are you sure you want to close this workspace?"))) return; // Close Repo -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "close")) -#else if(!bridge.closeRepository()) -#endif { QMessageBox::critical(this, tr("Error"), tr("Cannot close the workspace.\nAre there still uncommitted changes available?"), QMessageBox::Ok ); return; } -#ifdef BRIDGE_ENABLED stopUI(); setCurrentWorkspace(""); -#endif refresh(); } @@ -532,36 +447,7 @@ void MainWindow::on_actionCloneRepository_triggered() stopUI(); -#ifndef BRIDGE_ENABLED - // Actual command - QStringList cmd = QStringList() << "clone"; - - // Log Command - QStringList logcmd = QStringList() << "fossil" << "clone"; - - QString source = url.toString(); - QString logsource = url.toString(QUrl::RemovePassword); - if(url.isLocalFile()) - { - source = url.toLocalFile(); - logsource = source; - } - cmd << source << repository; - logcmd << logsource << repository; - - if(!url_proxy.isEmpty()) - { - cmd << "--proxy" << url_proxy.toString(); - logcmd << "--proxy" << url_proxy.toString(QUrl::RemovePassword); - } - - log(">"+logcmd.join(" ")+"
", true); - - // Clone Repo - if(!runFossil(cmd, 0, RUNFLAGS_SILENT_INPUT)) -#else if(!bridge.cloneRepository(repository, url, url_proxy)) -#endif { QMessageBox::critical(this, tr("Error"), tr("Could not clone the repository"), QMessageBox::Ok); return; @@ -665,11 +551,7 @@ bool MainWindow::refresh() QString title = "Fuel"; // Load repository info -#ifndef BRIDGE_ENABLED - RepoStatus st = getRepoStatus(); -#else RepoStatus st = bridge.getRepoStatus(); -#endif if(st==REPO_NOT_FOUND) { @@ -714,11 +596,7 @@ void MainWindow::scanWorkspace() // Retrieve the status of files tracked by fossil QStringList res; -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "ls" << "-l", &res, RUNFLAGS_SILENT_ALL)) -#else if(!bridge.listFiles(res)) -#endif return; bool scan_files = ui->actionViewUnknown->isChecked(); @@ -840,40 +718,7 @@ void MainWindow::scanWorkspace() } // Load the stash -#ifndef BRIDGE_ENABLED - stashMap.clear(); - res.clear(); - if(!runFossil(QStringList() << "stash" << "ls", &res, RUNFLAGS_SILENT_ALL)) - goto _done; - - for(QStringList::iterator line_it=res.begin(); line_it!=res.end(); ) - { - QString line = *line_it; - - int index = REGEX_STASH.indexIn(line); - if(index==-1) - break; - - QString id = REGEX_STASH.cap(1); - ++line_it; - - QString name; - // Finish at an anonymous stash or start of a new stash ? - if(line_it==res.end() || REGEX_STASH.indexIn(*line_it)!=-1) - name = line.trimmed(); - else // Named stash - { - // Parse stash name - name = (*line_it); - name = name.trimmed(); - ++line_it; - } - - stashMap.insert(name, id); - } -#else bridge.stashList(stashMap); -#endif // Update the file item model _done: @@ -1024,56 +869,6 @@ void MainWindow::updateFileView() ui->tableView->resizeRowsToContents(); } -//------------------------------------------------------------------------------ -#ifndef BRIDGE_ENABLED -RepoStatus MainWindow::getRepoStatus() -{ - QStringList res; - int exit_code = EXIT_FAILURE; - - // We need to determine the reason why fossil has failed - // so we delay processing of the exit_code - if(!runFossilRaw(QStringList() << "info", &res, &exit_code, RUNFLAGS_SILENT_ALL)) - return REPO_NOT_FOUND; - - bool run_ok = exit_code == EXIT_SUCCESS; - - for(QStringList::iterator it=res.begin(); it!=res.end(); ++it) - { - int col_index = it->indexOf(':'); - if(col_index==-1) - continue; - - QString key = it->left(col_index).trimmed(); - QString value = it->mid(col_index+1).trimmed(); - - if(key=="fossil") - { - if(value=="incorrect repository schema version") - return REPO_OLD_SCHEMA; - else if(value=="not within an open checkout") - return REPO_NOT_FOUND; - } - - if(run_ok) - { - if(key=="project-name") - projectName = value; - else if(key=="repository") - setRepositoryFile(value); - } - } - - return run_ok ? REPO_OK : REPO_NOT_FOUND; -} -#else -#if 0 -MainWindow::RepoStatus MainWindow::getRepoStatus() -{ - return (MainWindow::RepoStatus) bridge.getRepoStatus(); -} -#endif -#endif //------------------------------------------------------------------------------ void MainWindow::updateStashView() { @@ -1118,350 +913,6 @@ void MainWindow::on_actionClearLog_triggered() ui->textBrowser->clear(); } - -#ifndef BRIDGE_ENABLED -//------------------------------------------------------------------------------ -bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) -{ - int exit_code = EXIT_FAILURE; - if(!runFossilRaw(args, output, &exit_code, runFlags)) - return false; - - return exit_code == EXIT_SUCCESS; -} - -//------------------------------------------------------------------------------ -static QString ParseFossilQuery(QString line) -{ - // Extract question - int qend = line.lastIndexOf('('); - if(qend == -1) - qend = line.lastIndexOf('['); - Q_ASSERT(qend!=-1); - line = line.left(qend); - line = line.trimmed(); - line += "?"; - line[0]=QString(line[0]).toUpper()[0]; - return line; -} - -//------------------------------------------------------------------------------ -// Run fossil. Returns true if execution was successful regardless if fossil -// issued an error -bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags) -{ - bool silent_input = (runFlags & RUNFLAGS_SILENT_INPUT) != 0; - bool silent_output = (runFlags & RUNFLAGS_SILENT_OUTPUT) != 0; - bool detached = (runFlags & RUNFLAGS_DETACHED) != 0; - - if(!silent_input) - { - QString params; - foreach(QString p, args) - { - if(p.indexOf(' ')!=-1) - params += '"' + p + "\" "; - else - params += p + ' '; - } - log("> fossil "+params+"
", true); - } - - QString wkdir = getCurrentWorkspace(); - - QString fossil = getFossilPath(); - - // Detached processes use the command-line only, to avoid having to wait - // for the temporary args file to be released before returing - if(detached) - return QProcess::startDetached(fossil, args, wkdir); - - // Make StatusBar message - QString status_msg = tr("Running Fossil"); - if(args.length() > 0) - status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); - ScopedStatus status(status_msg, ui, progressBar); - - // Generate args file - const QStringList *final_args = &args; - QTemporaryFile args_file; - if(!args_file.open()) - { - QMessageBox::critical(this, tr("Error"), tr("Could not generate command line file"), QMessageBox::Ok ); - return false; - } - - // Write BOM - args_file.write(reinterpret_cast(UTF8_BOM), sizeof(UTF8_BOM)); - - // Write Args - foreach(const QString &arg, args) - { - args_file.write(arg.toUtf8()); - args_file.write("\n"); - } - args_file.close(); - - // Replace args with args filename - QStringList run_args; - run_args.append("--args"); - run_args.append(args_file.fileName()); - final_args = &run_args; - - // Create fossil process - LoggedProcess process(this); - process.setWorkingDirectory(wkdir); - - process.start(fossil, *final_args); - if(!process.waitForStarted()) - { - log(tr("Could not start Fossil executable '%0'").arg(fossil)+"\n"); - return false; - } - const QChar EOL_MARK('\n'); - QString ans_yes = 'y' + EOL_MARK; - QString ans_no = 'n' + EOL_MARK; - QString ans_always = 'a' + EOL_MARK; - QString ans_convert = 'c' + EOL_MARK; - - abortOperation = false; - QString buffer; - -#ifdef Q_OS_WIN - QTextCodec *codec = QTextCodec::codecForName("UTF-8"); -#else - QTextCodec *codec = QTextCodec::codecForLocale(); -#endif - - Q_ASSERT(codec); - QTextDecoder *decoder = codec->makeDecoder(); - Q_ASSERT(decoder); - - while(true) - { - QProcess::ProcessState state = process.state(); - qint64 bytes_avail = process.logBytesAvailable(); - - if(state!=QProcess::Running && bytes_avail<1) - break; - - if(abortOperation) - { - #ifdef Q_OS_WIN // Verify this is still true on Qt5 - process.kill(); // QT on windows cannot terminate console processes with QProcess::terminate - #else - process.terminate(); - #endif - break; - } - - QByteArray input; - process.getLogAndClear(input); - - #ifdef QT_DEBUG // Log fossil output in debug builds - if(!input.isEmpty()) - qDebug() << input; - #endif - - buffer += decoder->toUnicode(input); - - QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); - - if(buffer.isEmpty()) - continue; - - // Normalize line endings - buffer = buffer.replace("\r\n", "\n"); - buffer = buffer.replace("\r", "\n"); - - // Extract the last line - int last_line_start = buffer.lastIndexOf(EOL_MARK); - - QString last_line; - QString before_last_line; - if(last_line_start != -1) - { - last_line = buffer.mid(last_line_start+1); // Including the EOL - - // Detect previous line - if(last_line_start>0) - { - int before_last_line_start = buffer.lastIndexOf(EOL_MARK, last_line_start-1); - // No line before ? - if(before_last_line_start==-1) - before_last_line_start = 0; // Use entire line - - // Extract previous line - before_last_line = buffer.mid(before_last_line_start, last_line_start-before_last_line_start); - } - } - else - last_line = buffer; - - last_line = last_line.trimmed(); - - // Check if we have a query - bool ends_qmark = !last_line.isEmpty() && last_line[last_line.length()-1]=='?'; - bool have_yn_query = last_line.toLower().indexOf("y/n")!=-1; - bool have_yna_query = last_line.toLower().indexOf("a=always/y/n")!=-1 || last_line.toLower().indexOf("yes/no/all")!=-1 || last_line.toLower().indexOf("a=all/y/n")!=-1; - bool have_an_query = last_line.toLower().indexOf("a=always/n")!=-1; - bool have_acyn_query = last_line.toLower().indexOf("a=all/c=convert/y/n")!=-1; - - bool have_query = ends_qmark && (have_yn_query || have_yna_query || have_an_query || have_acyn_query); - - // Flush all complete lines to the log and output - QStringList log_lines = buffer.left(last_line_start).split(EOL_MARK); - for(int l=0; lappend(line); - - if(!silent_output) - log(line+"\n"); - } - - // Remove everything we processed (including the EOL) - buffer = buffer.mid(last_line_start+1) ; - - // Now process any query - if(have_query && (have_yna_query || have_acyn_query)) - { - log(last_line); - QString query = ParseFossilQuery(last_line); - QMessageBox::StandardButtons buttons = QMessageBox::YesToAll|QMessageBox::Yes|QMessageBox::No; - - // Add any extra text available to the query - before_last_line = before_last_line.trimmed(); - if(!before_last_line.isEmpty()) - query = before_last_line + "\n" + query; - - // Map the Convert option to the Apply button - if(have_acyn_query) - buttons |= QMessageBox::Apply; - - QMessageBox::StandardButton res = DialogQuery(this, "Fossil", query, buttons); - if(res==QMessageBox::Yes) - { - process.write(ans_yes.toLatin1()); - log("Y\n"); - } - else if(res==QMessageBox::YesAll) - { - process.write(ans_always.toLatin1()); - log("A\n"); - } - else if(res==QMessageBox::Apply) - { - process.write(ans_convert.toLatin1()); - log("C\n"); - } - else - { - process.write(ans_no.toLatin1()); - log("N\n"); - } - buffer.clear(); - } - else if(have_query && have_yn_query) - { - log(last_line); - QString query = ParseFossilQuery(last_line); - QMessageBox::StandardButton res = DialogQuery(this, "Fossil", query); - - if(res==QMessageBox::Yes) - { - process.write(ans_yes.toLatin1()); - log("Y\n"); - } - else - { - process.write(ans_no.toLatin1()); - log("N\n"); - } - - buffer.clear(); - } - else if(have_query && have_an_query) - { - log(last_line); - QString query = ParseFossilQuery(last_line); - QMessageBox::StandardButton res = DialogQuery(this, "Fossil", query, QMessageBox::YesToAll|QMessageBox::No); - if(res==QMessageBox::YesAll) - { - process.write(ans_always.toLatin1()); - log("A\n"); - } - else - { - process.write(ans_no.toLatin1()); - log("N\n"); - } - buffer.clear(); - } - } - - delete decoder; - - // Must be finished by now - Q_ASSERT(process.state()==QProcess::NotRunning); - - QProcess::ExitStatus es = process.exitStatus(); - - if(es!=QProcess::NormalExit) - return false; - - if(exitCode) - *exitCode = process.exitCode(); - - return true; -} - - -//------------------------------------------------------------------------------ -QString MainWindow::getFossilPath() -{ - // Use the user-specified fossil if available - QString fossil_path = settings.GetValue(FUEL_SETTING_FOSSIL_PATH).toString(); - if(!fossil_path.isEmpty()) - return QDir::toNativeSeparators(fossil_path); - - QString fossil_exe = "fossil"; -#ifdef Q_OS_WIN - fossil_exe += ".exe"; -#endif - // Use our fossil if available - QString fuel_fossil = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + QDir::separator() + fossil_exe); - - if(QFile::exists(fuel_fossil)) - return fuel_fossil; - - // Otherwise assume there is a "fossil" executable in the path - return fossil_exe; -} -#else -#if 0 -bool MainWindow::runFossil(const QStringList &args, QStringList *output, int runFlags) -{ - // Make StatusBar message - QString status_msg = tr("Running Fossil"); - if(args.length() > 0) - status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); - ScopedStatus status(status_msg, ui, progressBar); - - return bridge.runFossil(args, output, runFlags); -} -#endif -#endif - //------------------------------------------------------------------------------ void MainWindow::applySettings() { @@ -1750,12 +1201,7 @@ void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) //------------------------------------------------------------------------------ bool MainWindow::diffFile(const QString &repoFile) { -#ifndef BRIDGE_ENABLED - // Run the diff detached - return runFossil(QStringList() << "gdiff" << QuotePath(repoFile), 0, RUNFLAGS_DETACHED); -#else return bridge.diffFile(repoFile); -#endif } //------------------------------------------------------------------------------ @@ -1770,61 +1216,6 @@ void MainWindow::on_actionDiff_triggered() } //------------------------------------------------------------------------------ -#ifndef BRIDGE_ENABLED -bool MainWindow::startUI() -{ - if(uiRunning()) - { - log(tr("Fossil UI is already running")+"\n"); - return true; - } - - fossilUI.setParent(this); - fossilUI.setProcessChannelMode(QProcess::MergedChannels); - fossilUI.setWorkingDirectory(getCurrentWorkspace()); - - log("> fossil ui
", true); - log(tr("Starting Fossil browser UI. Please wait.")+"\n"); - QString fossil = getFossilPath(); - - QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString(); - - fossilUI.start(fossil, QStringList() << "server" << "--localauth" << "-P" << port ); - - if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running) - { - log(tr("Could not start Fossil executable '%s'").arg(fossil)+"\n"); - ui->actionFossilUI->setChecked(false); - return false; - } - - ui->actionFossilUI->setChecked(true); - return true; -} - -//------------------------------------------------------------------------------ -void MainWindow::stopUI() -{ - if(uiRunning()) - { -#ifdef Q_OS_WIN - fossilUI.kill(); // QT on windows cannot terminate console processes with QProcess::terminate -#else - fossilUI.terminate(); -#endif - } - fossilUI.close(); - - ui->actionFossilUI->setChecked(false); -} - -//------------------------------------------------------------------------------ -bool MainWindow::uiRunning() const -{ - return fossilUI.state() == QProcess::Running; -} - -#else bool MainWindow::startUI() { QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString(); @@ -1846,9 +1237,6 @@ bool MainWindow::uiRunning() const return bridge.uiRunning(); } -#endif - - //------------------------------------------------------------------------------ void MainWindow::on_actionFossilUI_triggered() { @@ -1918,11 +1306,7 @@ void MainWindow::on_actionPush_triggered() return; } -#ifndef BRIDGE_ENABLED - runFossil(QStringList() << "push"); -#else bridge.pushRepository(); -#endif } //------------------------------------------------------------------------------ @@ -1936,11 +1320,7 @@ void MainWindow::on_actionPull_triggered() return; } -#ifndef BRIDGE_ENABLED - runFossil(QStringList() << "pull"); -#else bridge.pullRepository(); -#endif } //------------------------------------------------------------------------------ @@ -1973,49 +1353,6 @@ void MainWindow::on_actionCommit_triggered() return; // Do commit -#ifndef BRIDGE_ENABLED - QString comment_fname; - { - QTemporaryFile temp_file; - if(!temp_file.open()) - { - QMessageBox::critical(this, tr("Error"), tr("Could not generate comment file"), QMessageBox::Ok ); - return; - } - comment_fname = temp_file.fileName(); - } - - QFile comment_file(comment_fname); - if(!comment_file.open(QIODevice::WriteOnly)) - { - QMessageBox::critical(this, tr("Error"), tr("Could not generate comment file"), QMessageBox::Ok ); - return; - } - - // Write BOM - comment_file.write(reinterpret_cast(UTF8_BOM), sizeof(UTF8_BOM)); - - // Write Comment - comment_file.write(msg.toUtf8()); - comment_file.close(); - - // Generate fossil parameters. - QStringList params; - params << "commit" << "--message-file" << QuotePath(comment_fname); - - // When a subset of files has been selected, explicitely specify each file. - // Otherwise all files will be implicitly committed by fossil. This is necessary - // when committing after a merge where fossil thinks that we are trying to do - // a partial commit which is not permitted. - QStringList all_modified_files; - getAllFilenames(all_modified_files, RepoFile::TYPE_MODIFIED); - - if(commit_files.size() != all_modified_files.size()) - params << QuotePaths(commit_files); - - runFossil(params); - QFile::remove(comment_fname); -#else QStringList files; // When a subset of files has been selected, explicitely specify each file. @@ -2029,8 +1366,6 @@ void MainWindow::on_actionCommit_triggered() files = commit_files; bridge.commitFiles(files, msg); -#endif - refresh(); } @@ -2048,12 +1383,7 @@ void MainWindow::on_actionAdd_triggered() return; // Do Add -#ifndef BRIDGE_ENABLED - runFossil(QStringList() << "add" << QuotePaths(selection) ); -#else bridge.addFiles(selection); -#endif - refresh(); } @@ -2076,24 +1406,6 @@ void MainWindow::on_actionDelete_triggered() if(!FileActionDialog::run(this, tr("Remove files"), tr("The following files will be removed from the repository.")+"\n"+tr("Are you sure?"), all_files, tr("Also delete the local files"), &remove_local )) return; -#ifndef BRIDGE_ENABLED - if(!repo_files.empty()) - { - // Do Delete - if(!runFossil(QStringList() << "delete" << QuotePaths(repo_files))) - return; - } - - if(remove_local) - { - for(int i=0; i0 && res[0]=="No undo or redo is available") - return; - - if(!FileActionDialog::run(this, tr("Undo"), tr("The following actions will be undone.")+"\n"+tr("Are you sure?"), res)) - return; - - // Do Undo - runFossil(QStringList() << "undo" ); -#else + // Do test Undo bridge.undoRepository(res, true); if(res.length()>0 && res[0]=="No undo or redo is available") @@ -2223,7 +1508,6 @@ void MainWindow::on_actionUndo_triggered() // Do Undo bridge.undoRepository(res, false); -#endif refresh(); } @@ -2233,18 +1517,8 @@ void MainWindow::on_actionAbout_triggered() { QString fossil_ver; -#ifndef BRIDGE_ENABLED - QStringList res; - if(runFossil(QStringList() << "version", &res, RUNFLAGS_SILENT_ALL) && res.length()==1) - { - int off = res[0].indexOf("version "); - if(off!=-1) - fossil_ver = tr("Fossil version %0").arg(res[0].mid(off+8)) + "\n"; - } -#else if(bridge.getFossilVersion(fossil_ver)) fossil_ver = tr("Fossil version %0").arg(fossil_ver) + "\n"; -#endif QString qt_ver = tr("QT version %0").arg(QT_VERSION_STR) + "\n\n"; @@ -2270,19 +1544,8 @@ void MainWindow::on_actionAbout_triggered() void MainWindow::on_actionUpdate_triggered() { QStringList res; -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "update" << "--nochange", &res, RUNFLAGS_SILENT_ALL)) - return; - if(res.length()==0) - return; - - if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) - return; - - // Do Update - runFossil(QStringList() << "update" ); -#else + // Do test update if(!bridge.updateRepository(res, true)) return; @@ -2294,8 +1557,8 @@ void MainWindow::on_actionUpdate_triggered() if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) return; + // Do update bridge.updateRepository(res, false); -#endif refresh(); } @@ -2306,13 +1569,8 @@ void MainWindow::loadFossilSettings() // Also retrieve the fossil global settings QStringList out; -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "settings", &out, RUNFLAGS_SILENT_ALL)) - return; -#else if(!bridge.getFossilSettings(out)) return; -#endif QStringMap kv = MakeKeyValues(out); @@ -2323,20 +1581,12 @@ void MainWindow::loadFossilSettings() // Command types we issue directly on fossil - //if(type == Settings::Setting::TYPE_FOSSIL_COMMAND) if(name == FOSSIL_SETTING_REMOTE_URL) { // Retrieve existing url -#ifndef BRIDGE_ENABLED - QStringList out; - if(runFossil(QStringList() << name, &out, RUNFLAGS_SILENT_ALL) && out.length()==1) - it.value().Value = out[0].trimmed(); -#else QString url; if(bridge.getRemoteUrl(url)) it.value().Value = url; -#endif - continue; } @@ -2379,36 +1629,17 @@ void MainWindow::on_actionSettings_triggered() // Command types we issue directly on fossil // FIXME: major uglyness with settings management - //if(type == Settings::Setting::TYPE_FOSSIL_COMMAND) if(name == FOSSIL_SETTING_REMOTE_URL) { // Run as silent to avoid displaying credentials in the log -#ifndef BRIDGE_ENABLED - runFossil(QStringList() << "remote-url" << QuotePath(it.value().Value.toString()), 0, RUNFLAGS_SILENT_INPUT); -#else bridge.setRemoteUrl(it.value().Value.toString()); -#endif continue; } Q_ASSERT(type == Settings::Setting::TYPE_FOSSIL_GLOBAL || type == Settings::Setting::TYPE_FOSSIL_LOCAL); QString value = it.value().Value.toString(); -#ifndef BRIDGE_ENABLED - QStringList params; - - if(value.isEmpty()) - params << "unset" << name; - else - params << "settings" << name << value; - - if(type == Settings::Setting::TYPE_FOSSIL_GLOBAL) - params << "-global"; - - runFossil(params); -#else bridge.setFossilSetting(name, value, type == Settings::Setting::TYPE_FOSSIL_GLOBAL); -#endif } } @@ -2582,11 +1813,7 @@ void MainWindow::on_actionRenameFolder_triggered() RepoFile *r = files_to_move[i]; const QString &new_file_path = new_paths[i] + PATH_SEPARATOR + r->getFilename(); -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "mv" << QuotePath(r->getFilePath()) << QuotePath(new_file_path))) -#else if(!bridge.renameFile(r->getFilePath(), new_file_path, false)) -#endif { log(tr("Move aborted due to errors")+"\n"); goto _exit; @@ -2709,15 +1936,8 @@ void MainWindow::on_actionNewStash_triggered() } // Do Stash -#ifndef BRIDGE_ENABLED - QString command = "snapshot"; - if(revert) - command = "save"; - - runFossil(QStringList() << "stash" << command << "-m" << stash_name << QuotePaths(stashed_files) ); -#else bridge.stashNew(stashed_files, stash_name, revert); -#endif + refresh(); } @@ -2737,11 +1957,7 @@ void MainWindow::on_actionApplyStash_triggered() stashmap_t::iterator id_it = stashMap.find(*it); Q_ASSERT(id_it!=stashMap.end()); -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "stash" << "apply" << *id_it)) -#else if(!bridge.stashApply(*id_it)) -#endif { log(tr("Stash application aborted due to errors")+"\n"); return; @@ -2753,12 +1969,8 @@ void MainWindow::on_actionApplyStash_triggered() { stashmap_t::iterator id_it = stashMap.find(*it); Q_ASSERT(id_it!=stashMap.end()); -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "stash" << "drop" << *id_it)) -#else - if(!bridge.stashDrop(*id_it)) -#endif + if(!bridge.stashDrop(*id_it)) { log(tr("Stash deletion aborted due to errors")+"\n"); return; @@ -2786,11 +1998,7 @@ void MainWindow::on_actionDeleteStash_triggered() stashmap_t::iterator id_it = stashMap.find(*it); Q_ASSERT(id_it!=stashMap.end()); -#ifndef BRIDGE_ENABLED - if(!runFossil(QStringList() << "stash" << "drop" << *id_it)) -#else if(!bridge.stashDrop(*id_it)) -#endif { log(tr("Stash deletion aborted due to errors")+"\n"); return; @@ -2813,11 +2021,7 @@ void MainWindow::on_actionDiffStash_triggered() Q_ASSERT(id_it!=stashMap.end()); // Run diff -#ifndef BRIDGE_ENABLED - runFossil(QStringList() << "stash" << "diff" << *id_it, 0); -#else bridge.stashDiff(*id_it); -#endif } //------------------------------------------------------------------------------ @@ -2930,11 +2134,7 @@ void MainWindow::dropEvent(QDropEvent *event) return; // Do Add -#ifndef BRIDGE_ENABLED - runFossil(QStringList() << "add" << QuotePaths(newfiles) ); -#else bridge.addFiles(newfiles); -#endif refresh(); } @@ -2967,7 +2167,6 @@ void MainWindow::fullRefresh() selectRootDir(); } -#ifdef BRIDGE_ENABLED //------------------------------------------------------------------------------ void MainWindow::MainWinUICallback::logText(const QString& text, bool isHTML) { @@ -2990,4 +2189,3 @@ void MainWindow::MainWinUICallback::endProcess() mainWindow->ui->statusBar->clearMessage(); mainWindow->progressBar->setHidden(true); } -#endif \ No newline at end of file diff --git a/src/MainWindow.h b/src/MainWindow.h index 58ad4e8..817f843 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -12,15 +12,10 @@ #include "SettingsDialog.h" #include "Bridge.h" -#define BRIDGE_ENABLED - namespace Ui { class MainWindow; } - -class QStringList; - ////////////////////////////////////////////////////////////////////////// // RepoFile ////////////////////////////////////////////////////////////////////////// @@ -131,10 +126,6 @@ private: private: bool refresh(); void scanWorkspace(); -#ifndef BRIDGE_ENABLED - bool runFossilRaw(const QStringList &args, QStringList *output=0, int *exitCode=0, int runFlags=RUNFLAGS_NONE); - bool runFossil(const QStringList &args, QStringList *output=0, int runFlags=RUNFLAGS_NONE); -#endif void applySettings(); void updateSettings(); const QString &getCurrentWorkspace(); @@ -168,10 +159,6 @@ private: void setBusy(bool busy); virtual QMenu *createPopupMenu(); -#ifndef BRIDGE_ENABLED - RepoStatus getRepoStatus(); -#endif - enum ViewMode { VIEWMODE_LIST, @@ -229,7 +216,6 @@ private slots: void on_tableView_customContextMenuRequested(const QPoint &pos); private: -#ifdef BRIDGE_ENABLED class MainWinUICallback : public Bridge::UICallback { public: @@ -248,7 +234,6 @@ private: private: class MainWindow *mainWindow; }; -#endif friend class MainWinUICallback; @@ -270,22 +255,14 @@ private: Settings &settings; QStringList workspaceHistory; -#ifndef BRIDGE_ENABLED - QString projectName; - QString currentWorkspace; - QString repositoryFile; - const QString & getRepositoryFile() const { return repositoryFile; } - void setRepositoryFile(const QString &filename) { repositoryFile = filename; } - const QString & getProjectName() const { return projectName; } -#else MainWinUICallback uiCallback; Bridge bridge; const QString & getProjectName() const { return bridge.getProjectName(); } const QString & getRepositoryFile() const { return bridge.getRepositoryFile(); } void setRepositoryFile(const QString &filename) { bridge.setRepositoryFile(filename); } -#endif + ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree From 2eb430b6e1dcafe63eedf6d6c57a9f3a240bf81e Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 19:54:01 +0000 Subject: [PATCH 27/90] Bridge no longer needs depends on the UI. All interaction occurs via the callback More cleanups FossilOrigin-Name: 3d1e269fee5acd4b65025024f701319c3e993e97 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/Bridge.cpp | 17 +++++++++++------ src/Bridge.h | 12 ++++-------- src/MainWindow.cpp | 16 +++++++++++----- src/MainWindow.h | 7 ++----- 6 files changed, 38 insertions(+), 34 deletions(-) diff --git a/manifest b/manifest index 37b9319..50bbff5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Transitioned\sto\snew\sfossil\sbridge -D 2015-04-27T19:31:43.310 +C Bridge\sno\slonger\sneeds\sdepends\son\sthe\sUI.\sAll\sinteraction\soccurs\svia\sthe\scallback\nMore\scleanups +D 2015-04-27T19:54:01.466 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 00a460d33624258b29ad194297569c53cb10810f -F src/Bridge.h b121493715dd0bed15658b326a70af57f2252db7 +F src/Bridge.cpp a0661a0a68799140c7e0d9b185e64c266c882c98 +F src/Bridge.h 33cea48e72c4c1a8dc8bd41c0bdd972454ca9240 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 8f20a49621c42bfa7ee5f6018900a9f6ef08f6c8 -F src/MainWindow.h 045b784735d86cef7ed415ca46dccf9b6a005c39 +F src/MainWindow.cpp 5a66bf80a0af7c2f1255a7e567f108466dd4eba8 +F src/MainWindow.h c593f74f3b7d0b8f6d29288c6badd6b350fcb25f F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P e2b03b2a965ec50382ea89d374ece4a6a56b72b5 -R 7230e39179ffadefe20ce40a0176c6fa +P c5b0a1a62a9607f434ac6426401fd40c94d6a2d8 +R f57a18f9cee5453e9453dfa80c854856 U kostas -Z 1c155b4c26131deaf429fe2b750502dc +Z 7bfd61383d77ec4c7853ed5119f2785e diff --git a/manifest.uuid b/manifest.uuid index 2c624c0..c3e04f3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c5b0a1a62a9607f434ac6426401fd40c94d6a2d8 \ No newline at end of file +3d1e269fee5acd4b65025024f701319c3e993e97 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index d49dd34..3ac3dcd 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include @@ -529,7 +528,10 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi final_args = &run_args; // Create fossil process - LoggedProcess process(parentWidget); + // FIXME: when we are sure this works delete this + // LoggedProcess process(parentWidget*/); + LoggedProcess process(0); + process.setWorkingDirectory(wkdir); process.start(fossil, *final_args); @@ -557,6 +559,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi QTextDecoder *decoder = codec->makeDecoder(); Q_ASSERT(decoder); + Q_ASSERT(uiCallback); #ifdef QT_DEBUG size_t input_index = 0; #endif @@ -673,7 +676,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi if(have_acyn_query) buttons |= QMessageBox::Apply; - QMessageBox::StandardButton res = DialogQuery(parentWidget, "Fossil", query, buttons); + QMessageBox::StandardButton res = uiCallback->Query("Fossil", query, buttons); if(res==QMessageBox::Yes) { process.write(ans_yes.toLatin1()); @@ -700,7 +703,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi { log(last_line); QString query = ParseFossilQuery(last_line); - QMessageBox::StandardButton res = DialogQuery(parentWidget, "Fossil", query); + QMessageBox::StandardButton res = uiCallback->Query("Fossil", query, QMessageBox::Yes|QMessageBox::No); if(res==QMessageBox::Yes) { @@ -719,7 +722,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi { log(last_line); QString query = ParseFossilQuery(last_line); - QMessageBox::StandardButton res = DialogQuery(parentWidget, "Fossil", query, QMessageBox::YesToAll|QMessageBox::No); + QMessageBox::StandardButton res = uiCallback->Query("Fossil", query, QMessageBox::YesToAll|QMessageBox::No); if(res==QMessageBox::YesAll) { process.write(ans_always.toLatin1()); @@ -802,7 +805,9 @@ bool Bridge::startUI(const QString &httpPort) return true; } - fossilUI.setParent(parentWidget); + // FIXME: when we are sure this works delete this + //fossilUI.setParent(parentWidget); + fossilUI.setProcessChannelMode(QProcess::MergedChannels); fossilUI.setWorkingDirectory(getCurrentWorkspace()); diff --git a/src/Bridge.h b/src/Bridge.h index 39ad99e..8f0e721 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -5,6 +5,7 @@ class QStringList; #include #include #include +#include typedef QMap stashmap_t; @@ -35,22 +36,20 @@ public: virtual void logText(const QString &text, bool isHTML)=0; virtual void beginProcess(const QString &text)=0; virtual void endProcess()=0; + virtual QMessageBox::StandardButton Query(const QString &title, const QString &query, QMessageBox::StandardButtons buttons)=0; }; Bridge() : QObject(0) - , parentWidget(0) , abortOperation(false) , uiCallback(0) { } - void Init(QWidget *parent, UICallback *callback, const QString &fossPath, const QString &workspace) + void Init(UICallback *callback, const QString &fossPath, const QString &workspace) { - parentWidget = parent; uiCallback = callback; - fossilPath = fossPath; currentWorkspace = workspace; } @@ -129,12 +128,9 @@ private: uiCallback->logText(text, isHTML); } + QString getFossilPath(); - QString getFossilPath(); - - QWidget *parentWidget; // fixme bool abortOperation; // FIXME: No GUI for it yet - UICallback *uiCallback; QString currentWorkspace; QString fossilPath; // The value from the settings diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 16b9b4d..2f75eee 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -190,7 +190,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP uiCallback.init(this); // Need to be before applySettings which sets the last workspace - bridge.Init(this, &uiCallback, "", ""); + bridge.Init(&uiCallback, "", ""); applySettings(); @@ -577,8 +577,8 @@ bool MainWindow::refresh() setStatus(""); enableActions(true); - if(!getProjectName().isEmpty()) - title += " - " + getProjectName(); + if(!bridge.getProjectName().isEmpty()) + title += " - " + bridge.getProjectName(); setWindowTitle(title); return true; @@ -635,7 +635,7 @@ void MainWindow::scanWorkspace() QString fullpath = it->absoluteFilePath(); // Skip fossil files - if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!getRepositoryFile().isEmpty() && QFileInfo(fullpath) == QFileInfo(getRepositoryFile()))) + if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!bridge.getRepositoryFile().isEmpty() && QFileInfo(fullpath) == QFileInfo(bridge.getRepositoryFile()))) continue; RepoFile *rf = new RepoFile(*it, RepoFile::TYPE_UNKNOWN, wkdir); @@ -777,7 +777,7 @@ void MainWindow::updateDirView() header << tr("Folders"); repoDirModel.setHorizontalHeaderLabels(header); - QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), getProjectName()); + QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), bridge.getProjectName()); root->setData(""); // Empty Path root->setEditable(false); @@ -2189,3 +2189,9 @@ void MainWindow::MainWinUICallback::endProcess() mainWindow->ui->statusBar->clearMessage(); mainWindow->progressBar->setHidden(true); } + +//------------------------------------------------------------------------------ +QMessageBox::StandardButton MainWindow::MainWinUICallback::Query(const QString &title, const QString &query, QMessageBox::StandardButtons buttons) +{ + return DialogQuery(mainWindow, title, query, buttons); +} diff --git a/src/MainWindow.h b/src/MainWindow.h index 817f843..966ce41 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -230,6 +230,8 @@ private: virtual void logText(const QString& text, bool isHTML); virtual void beginProcess(const QString& text); virtual void endProcess(); + virtual QMessageBox::StandardButton Query(const QString &title, const QString &query, QMessageBox::StandardButtons buttons); + private: class MainWindow *mainWindow; @@ -242,7 +244,6 @@ private: MAX_RECENT=5 }; - Ui::MainWindow *ui; QStandardItemModel repoFileModel; QStandardItemModel repoDirModel; @@ -258,10 +259,6 @@ private: MainWinUICallback uiCallback; Bridge bridge; - const QString & getProjectName() const { return bridge.getProjectName(); } - const QString & getRepositoryFile() const { return bridge.getRepositoryFile(); } - void setRepositoryFile(const QString &filename) { bridge.setRepositoryFile(filename); } - ViewMode viewMode; stringset_t selectedDirs; // The directory selected in the tree From a6616065724a83e75bab77d4a03a9197196492cb Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 27 Apr 2015 19:59:29 +0000 Subject: [PATCH 28/90] Bridge now longer derives from QObject FossilOrigin-Name: 0017b55685a3fe99a72757e9f6a8c3c261612413 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.cpp | 14 +++++++------- src/Bridge.h | 17 +++++++---------- src/MainWindow.cpp | 2 +- 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index 50bbff5..e4a907d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Bridge\sno\slonger\sneeds\sdepends\son\sthe\sUI.\sAll\sinteraction\soccurs\svia\sthe\scallback\nMore\scleanups -D 2015-04-27T19:54:01.466 +C Bridge\snow\slonger\sderives\sfrom\sQObject\n +D 2015-04-27T19:59:29.459 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp a0661a0a68799140c7e0d9b185e64c266c882c98 -F src/Bridge.h 33cea48e72c4c1a8dc8bd41c0bdd972454ca9240 +F src/Bridge.cpp 7f84e6b1ba2e2807a067aba0e16c4c62cdc00dff +F src/Bridge.h 545b83b2137290f3b514e12f5481a677e29bb6f0 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,7 +200,7 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 5a66bf80a0af7c2f1255a7e567f108466dd4eba8 +F src/MainWindow.cpp 6a6a3ad412ec3c2c32ec1ff0c650979b85c770f4 F src/MainWindow.h c593f74f3b7d0b8f6d29288c6badd6b350fcb25f F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P c5b0a1a62a9607f434ac6426401fd40c94d6a2d8 -R f57a18f9cee5453e9453dfa80c854856 +P 3d1e269fee5acd4b65025024f701319c3e993e97 +R c371a4175aab68d369af5a0cabed7310 U kostas -Z 7bfd61383d77ec4c7853ed5119f2785e +Z 9e900d838d9caa3f99048fed896a33a5 diff --git a/manifest.uuid b/manifest.uuid index c3e04f3..8604e79 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3d1e269fee5acd4b65025024f701319c3e993e97 \ No newline at end of file +0017b55685a3fe99a72757e9f6a8c3c261612413 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 3ac3dcd..79780b3 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -496,7 +496,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi return QProcess::startDetached(fossil, args, wkdir); // Make status message - QString status_msg = tr("Running Fossil"); + QString status_msg = QObject::tr("Running Fossil"); if(args.length() > 0) status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); ScopedFossilStatus status(uiCallback, status_msg); @@ -506,7 +506,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi QTemporaryFile args_file; if(!args_file.open()) { - log(tr("Could not generate command line file")); + log(QObject::tr("Could not generate command line file")); return false; } @@ -537,7 +537,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi process.start(fossil, *final_args); if(!process.waitForStarted()) { - log(tr("Could not start Fossil executable '%0'").arg(fossil)+"\n"); + log(QObject::tr("Could not start Fossil executable '%0'").arg(fossil)+"\n"); return false; } const QChar EOL_MARK('\n'); @@ -574,7 +574,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi if(abortOperation) { - log("\n* "+tr("Terminated")+" *\n"); + log("\n* "+QObject::tr("Terminated")+" *\n"); #ifdef Q_OS_WIN // Verify this is still true on Qt5 process.kill(); // QT on windows cannot terminate console processes with QProcess::terminate #else @@ -801,7 +801,7 @@ bool Bridge::startUI(const QString &httpPort) { if(uiRunning()) { - log(tr("Fossil UI is already running")+"\n"); + log(QObject::tr("Fossil UI is already running")+"\n"); return true; } @@ -812,14 +812,14 @@ bool Bridge::startUI(const QString &httpPort) fossilUI.setWorkingDirectory(getCurrentWorkspace()); log("> fossil ui
", true); - log(tr("Starting Fossil browser UI. Please wait.")+"\n"); + log(QObject::tr("Starting Fossil browser UI. Please wait.")+"\n"); QString fossil = getFossilPath(); fossilUI.start(fossil, QStringList() << "server" << "--localauth" << "-P" << httpPort ); if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running) { - log(tr("Could not start Fossil executable '%s'").arg(fossil)+"\n"); + log(QObject::tr("Could not start Fossil executable '%s'").arg(fossil)+"\n"); return false; } diff --git a/src/Bridge.h b/src/Bridge.h index 8f0e721..8f2ef8d 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -27,7 +27,7 @@ enum RepoStatus REPO_OLD_SCHEMA }; -class Bridge : public QObject +class Bridge { public: class UICallback @@ -41,17 +41,16 @@ public: Bridge() - : QObject(0) - , abortOperation(false) + : abortOperation(false) , uiCallback(0) { } - void Init(UICallback *callback, const QString &fossPath, const QString &workspace) + void Init(UICallback *callback) { uiCallback = callback; - fossilPath = fossPath; - currentWorkspace = workspace; + fossilPath.clear(); + currentWorkspace.clear(); } bool runFossil(const QStringList &args, QStringList *output=0, int runFlags=RUNFLAGS_NONE); @@ -94,7 +93,8 @@ public: bool pushRepository(); bool pullRepository(); bool cloneRepository(const QString &repository, const QUrl &url, const QUrl &proxyUrl); - + bool undoRepository(QStringList& result, bool explainOnly); + bool updateRepository(QStringList& result, bool explainOnly); bool getFossilVersion(QString &version); bool uiRunning() const; @@ -108,8 +108,6 @@ public: bool removeFiles(const QStringList& fileList, bool deleteLocal); bool revertFiles(const QStringList& fileList); bool renameFile(const QString& beforePath, const QString& afterPath, bool renameLocal); - bool undoRepository(QStringList& result, bool explainOnly); - bool updateRepository(QStringList& result, bool explainOnly); bool getFossilSettings(QStringList& result); bool setFossilSetting(const QString &name, const QString &value, bool global); bool setRemoteUrl(const QString &url); @@ -136,7 +134,6 @@ private: QString fossilPath; // The value from the settings QString repositoryFile; QString projectName; - QProcess fossilUI; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2f75eee..6823961 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -190,7 +190,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP uiCallback.init(this); // Need to be before applySettings which sets the last workspace - bridge.Init(&uiCallback, "", ""); + bridge.Init(&uiCallback); applySettings(); From c7cfa079a4dec625ae31a46bf338d64ccb7b5b98 Mon Sep 17 00:00:00 2001 From: kostas Date: Wed, 29 Apr 2015 12:35:33 +0000 Subject: [PATCH 29/90] Fixed fossil operation termination flag FossilOrigin-Name: f791fda7d73f7e7b71b28ecbaefd93330090a834 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/Bridge.cpp | 4 ++-- src/Bridge.h | 7 ++++--- src/MainWindow.cpp | 9 +++++---- src/MainWindow.h | 2 +- 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index e4a907d..b00f95c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Bridge\snow\slonger\sderives\sfrom\sQObject\n -D 2015-04-27T19:59:29.459 +C Fixed\sfossil\soperation\stermination\sflag\n +D 2015-04-29T12:35:33.873 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 7f84e6b1ba2e2807a067aba0e16c4c62cdc00dff -F src/Bridge.h 545b83b2137290f3b514e12f5481a677e29bb6f0 +F src/Bridge.cpp 96aca0460c87ec2cdd154527a0583a00309ebcea +F src/Bridge.h 81d3e808ca1bd90771abc51d1557bb29e098fbf3 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 6a6a3ad412ec3c2c32ec1ff0c650979b85c770f4 -F src/MainWindow.h c593f74f3b7d0b8f6d29288c6badd6b350fcb25f +F src/MainWindow.cpp f87fb7425ae220f2b00d6e35c7e51c189232ada7 +F src/MainWindow.h fb8783a0bcc82b61e63d0b52db157c4a31881380 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 3d1e269fee5acd4b65025024f701319c3e993e97 -R c371a4175aab68d369af5a0cabed7310 +P 0017b55685a3fe99a72757e9f6a8c3c261612413 +R 1a2fe39703e4ffd7fef355a18e8d5a76 U kostas -Z 9e900d838d9caa3f99048fed896a33a5 +Z 30de43e6ae2e0ffe73371ce33c4e23bd diff --git a/manifest.uuid b/manifest.uuid index 8604e79..f396374 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0017b55685a3fe99a72757e9f6a8c3c261612413 \ No newline at end of file +f791fda7d73f7e7b71b28ecbaefd93330090a834 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index 79780b3..b7567a2 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -546,7 +546,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi QString ans_always = 'a' + EOL_MARK; QString ans_convert = 'c' + EOL_MARK; - abortOperation = false; + operationAborted = false; QString buffer; #ifdef Q_OS_WIN @@ -572,7 +572,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi if(state!=QProcess::Running && bytes_avail<1) break; - if(abortOperation) + if(operationAborted) { log("\n* "+QObject::tr("Terminated")+" *\n"); #ifdef Q_OS_WIN // Verify this is still true on Qt5 diff --git a/src/Bridge.h b/src/Bridge.h index 8f2ef8d..8fd9aa7 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -41,7 +41,7 @@ public: Bridge() - : abortOperation(false) + : operationAborted(false) , uiCallback(0) { } @@ -86,7 +86,6 @@ public: repositoryFile = filename; } - bool openRepository(const QString &repositoryPath, const QString& workspacePath); bool newRepository(const QString &repositoryPath); bool closeRepository(); @@ -119,6 +118,8 @@ public: bool stashDrop(const QString& name); bool stashDiff(const QString& name); + void abortOperation() { operationAborted = true; } + private: void log(const QString &text, bool isHTML=false) { @@ -128,7 +129,7 @@ private: QString getFossilPath(); - bool abortOperation; // FIXME: No GUI for it yet + bool operationAborted; UICallback *uiCallback; QString currentWorkspace; QString fossilPath; // The value from the settings diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 6823961..552eda5 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -198,7 +198,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP if(workspacePath && !workspacePath->isEmpty()) openWorkspace(*workspacePath); - abortOperation = false; + operationAborted = false; rebuildRecent(); } @@ -612,7 +612,7 @@ void MainWindow::scanWorkspace() workspaceFiles.clear(); pathSet.clear(); - abortOperation = false; + operationAborted = false; if(scan_files) { @@ -626,7 +626,7 @@ void MainWindow::scanWorkspace() ignore = settings.GetFossilValue(FOSSIL_SETTING_IGNORE_GLOB).toString().replace(',',';'); } - if(!scanDirectory(all_files, wkdir, wkdir, ignore, abortOperation)) + if(!scanDirectory(all_files, wkdir, wkdir, ignore, operationAborted)) goto _done; for(QFileInfoList::iterator it=all_files.begin(); it!=all_files.end(); ++it) @@ -2154,7 +2154,8 @@ void MainWindow::setBusy(bool busy) //------------------------------------------------------------------------------ void MainWindow::onAbort() { - abortOperation = true; + operationAborted = true; + bridge.abortOperation(); // FIXME: Rename this to something better, Operation Aborted log("
* "+tr("Terminated")+" *
", true); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 966ce41..c9e75f0 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -252,7 +252,7 @@ private: class QAction *recentWorkspaceActs[MAX_RECENT]; class QProgressBar *progressBar; class QShortcut *abortShortcut; - bool abortOperation; + bool operationAborted; Settings &settings; QStringList workspaceHistory; From f882d80dc00fd5d44148c3f0d93a1ad41ac2a2fc Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 08:34:11 +0000 Subject: [PATCH 30/90] Moved repository model data to Repository class FossilOrigin-Name: 2e2faf9770ecdb644a4e9aaad0cc7dc050ef5f98 --- manifest | 14 ++--- manifest.uuid | 2 +- src/MainWindow.cpp | 132 ++++++++++++++++++++++----------------------- src/MainWindow.h | 36 +++++++------ 4 files changed, 95 insertions(+), 89 deletions(-) diff --git a/manifest b/manifest index b00f95c..c8621eb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\sfossil\soperation\stermination\sflag\n -D 2015-04-29T12:35:33.873 +C Moved\srepository\smodel\sdata\sto\sRepository\sclass\n +D 2015-04-30T08:34:11.227 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp f87fb7425ae220f2b00d6e35c7e51c189232ada7 -F src/MainWindow.h fb8783a0bcc82b61e63d0b52db157c4a31881380 +F src/MainWindow.cpp b73396d7d6ead5421e4a2776c73eb3909fe2b36b +F src/MainWindow.h fc1a2a7afee8cea6f7d86c3a477d1687b6be3f3a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 0017b55685a3fe99a72757e9f6a8c3c261612413 -R 1a2fe39703e4ffd7fef355a18e8d5a76 +P f791fda7d73f7e7b71b28ecbaefd93330090a834 +R 23d93d1e0a50531951ca9e8e511e4bcb U kostas -Z 30de43e6ae2e0ffe73371ce33c4e23bd +Z 7b020d5baf7830f0328eb54332f8b242 diff --git a/manifest.uuid b/manifest.uuid index f396374..15d9523 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f791fda7d73f7e7b71b28ecbaefd93330090a834 \ No newline at end of file +2e2faf9770ecdb644a4e9aaad0cc7dc050ef5f98 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 552eda5..2ea3f35 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -85,7 +85,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP separator->setSeparator(true); // TableView - ui->tableView->setModel(&repoFileModel); + ui->tableView->setModel(&getRepo().repoFileModel); ui->tableView->addAction(ui->actionDiff); ui->tableView->addAction(ui->actionHistory); @@ -103,8 +103,8 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP QStringList header; header << tr("Status") << tr("File") << tr("Extension") << tr("Modified") << tr("Path"); - repoFileModel.setHorizontalHeaderLabels(header); - repoFileModel.horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); + getRepo().repoFileModel.setHorizontalHeaderLabels(header); + getRepo().repoFileModel.horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); // Needed on OSX as the preset value from the GUI editor is not always reflected ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); @@ -116,7 +116,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->tableView->horizontalHeader()->setStretchLastSection(true); // TreeView - ui->treeView->setModel(&repoDirModel); + ui->treeView->setModel(&getRepo().repoDirModel); connect( ui->treeView->selectionModel(), SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection &) ), SLOT( onTreeViewSelectionChanged(const QItemSelection &, const QItemSelection &) ), @@ -132,7 +132,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->treeView->addAction(ui->actionOpenFolder); // StashView - ui->tableViewStash->setModel(&repoStashModel); + ui->tableViewStash->setModel(&getRepo().repoStashModel); ui->tableViewStash->addAction(ui->actionApplyStash); ui->tableViewStash->addAction(ui->actionDiffStash); ui->tableViewStash->addAction(ui->actionDeleteStash); @@ -210,7 +210,7 @@ MainWindow::~MainWindow() updateSettings(); // Dispose RepoFiles - for(filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) + for(Repository::filemap_t::iterator it = getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) delete *it; delete ui; @@ -557,8 +557,8 @@ bool MainWindow::refresh() { setStatus(tr("No workspace detected.")); enableActions(false); - repoFileModel.removeRows(0, repoFileModel.rowCount()); - repoDirModel.clear(); + getRepo().repoFileModel.removeRows(0, getRepo().repoFileModel.rowCount()); + getRepo().repoDirModel.clear(); setWindowTitle(title); return false; } @@ -566,8 +566,8 @@ bool MainWindow::refresh() { setStatus(tr("Old repository schema detected. Consider running 'fossil rebuild'")); enableActions(false); - repoFileModel.removeRows(0, repoFileModel.rowCount()); - repoDirModel.clear(); + getRepo().repoFileModel.removeRows(0, getRepo().repoFileModel.rowCount()); + getRepo().repoDirModel.clear(); setWindowTitle(title); return true; } @@ -606,11 +606,11 @@ void MainWindow::scanWorkspace() QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); // Dispose RepoFiles - for(filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) + for(Repository::filemap_t::iterator it = getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) delete *it; - workspaceFiles.clear(); - pathSet.clear(); + getRepo().workspaceFiles.clear(); + getRepo().pathSet.clear(); operationAborted = false; @@ -639,8 +639,8 @@ void MainWindow::scanWorkspace() continue; RepoFile *rf = new RepoFile(*it, RepoFile::TYPE_UNKNOWN, wkdir); - workspaceFiles.insert(rf->getFilePath(), rf); - pathSet.insert(rf->getPath()); + getRepo().workspaceFiles.insert(rf->getFilePath(), rf); + getRepo().pathSet.insert(rf->getPath()); } } @@ -688,37 +688,37 @@ void MainWindow::scanWorkspace() if( ((type & RepoFile::TYPE_MODIFIED) && !ui->actionViewModified->isChecked()) || ((type & RepoFile::TYPE_UNCHANGED) && !ui->actionViewUnchanged->isChecked() )) { - workspaceFiles.remove(fname); + getRepo().workspaceFiles.remove(fname); continue; } else add_missing = true; - filemap_t::iterator it = workspaceFiles.find(fname); + Repository::filemap_t::iterator it = getRepo().workspaceFiles.find(fname); RepoFile *rf = 0; - if(add_missing && it==workspaceFiles.end()) + if(add_missing && it==getRepo().workspaceFiles.end()) { QFileInfo info(wkdir+QDir::separator()+fname); rf = new RepoFile(info, type, wkdir); - workspaceFiles.insert(rf->getFilePath(), rf); + getRepo().workspaceFiles.insert(rf->getFilePath(), rf); } if(!rf) { - it = workspaceFiles.find(fname); - Q_ASSERT(it!=workspaceFiles.end()); + it = getRepo().workspaceFiles.find(fname); + Q_ASSERT(it!=getRepo().workspaceFiles.end()); rf = *it; } rf->setType(type); QString path = rf->getPath(); - pathSet.insert(path); + getRepo().pathSet.insert(path); } // Load the stash - bridge.stashList(stashMap); + bridge.stashList(getRepo().stashMap); // Update the file item model _done: @@ -771,18 +771,18 @@ static void addPathToTree(QStandardItem &root, const QString &path) void MainWindow::updateDirView() { // Directory View - repoDirModel.clear(); + getRepo().repoDirModel.clear(); QStringList header; header << tr("Folders"); - repoDirModel.setHorizontalHeaderLabels(header); + getRepo().repoDirModel.setHorizontalHeaderLabels(header); QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), bridge.getProjectName()); root->setData(""); // Empty Path root->setEditable(false); - repoDirModel.appendRow(root); - for(stringset_t::iterator it = pathSet.begin(); it!=pathSet.end(); ++it) + getRepo().repoDirModel.appendRow(root); + for(stringset_t::iterator it = getRepo().pathSet.begin(); it!=getRepo().pathSet.end(); ++it) { const QString &dir = *it; if(dir.isEmpty()) @@ -798,7 +798,7 @@ void MainWindow::updateDirView() void MainWindow::updateFileView() { // Clear content except headers - repoFileModel.removeRows(0, repoFileModel.rowCount()); + getRepo().repoFileModel.removeRows(0, getRepo().repoFileModel.rowCount()); struct { RepoFile::EntryType type; QString text; const char *icon; } stats[] = @@ -814,16 +814,16 @@ void MainWindow::updateFileView() QFileIconProvider icon_provider; - bool display_path = viewMode==VIEWMODE_LIST || selectedDirs.count() > 1; + bool display_path = viewMode==VIEWMODE_LIST || getRepo().selectedDirs.count() > 1; size_t item_id=0; - for(filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) + for(Repository::filemap_t::iterator it = getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) { const RepoFile &e = *it.value(); QString path = e.getPath(); // In Tree mode, filter all items not included in the current dir - if(viewMode==VIEWMODE_TREE && !selectedDirs.contains(path)) + if(viewMode==VIEWMODE_TREE && !getRepo().selectedDirs.contains(path)) continue; // Status Column @@ -842,13 +842,13 @@ void MainWindow::updateFileView() QStandardItem *status = new QStandardItem(QIcon(status_icon_path), status_text); status->setToolTip(status_text); - repoFileModel.setItem(item_id, COLUMN_STATUS, status); + getRepo().repoFileModel.setItem(item_id, COLUMN_STATUS, status); QFileInfo finfo = e.getFileInfo(); QIcon icon = icon_provider.icon(finfo); QStandardItem *filename_item = 0; - repoFileModel.setItem(item_id, COLUMN_PATH, new QStandardItem(path)); + getRepo().repoFileModel.setItem(item_id, COLUMN_PATH, new QStandardItem(path)); if(display_path) filename_item = new QStandardItem(icon, QDir::toNativeSeparators(e.getFilePath())); @@ -858,10 +858,10 @@ void MainWindow::updateFileView() Q_ASSERT(filename_item); // Keep the path in the user data filename_item->setData(e.getFilePath()); - repoFileModel.setItem(item_id, COLUMN_FILENAME, filename_item); + getRepo().repoFileModel.setItem(item_id, COLUMN_FILENAME, filename_item); - repoFileModel.setItem(item_id, COLUMN_EXTENSION, new QStandardItem(finfo.suffix())); - repoFileModel.setItem(item_id, COLUMN_MODIFIED, new QStandardItem(finfo.lastModified().toString(Qt::SystemLocaleShortDate))); + getRepo().repoFileModel.setItem(item_id, COLUMN_EXTENSION, new QStandardItem(finfo.suffix())); + getRepo().repoFileModel.setItem(item_id, COLUMN_MODIFIED, new QStandardItem(finfo.lastModified().toString(Qt::SystemLocaleShortDate))); ++item_id; } @@ -872,17 +872,17 @@ void MainWindow::updateFileView() //------------------------------------------------------------------------------ void MainWindow::updateStashView() { - repoStashModel.clear(); + getRepo().repoStashModel.clear(); QStringList header; header << tr("Stashes"); - repoStashModel.setHorizontalHeaderLabels(header); + getRepo().repoStashModel.setHorizontalHeaderLabels(header); - for(stashmap_t::iterator it=stashMap.begin(); it!=stashMap.end(); ++it) + for(stashmap_t::iterator it=getRepo().stashMap.begin(); it!=getRepo().stashMap.end(); ++it) { QStandardItem *item = new QStandardItem(it.key()); item->setToolTip(it.key()); - repoStashModel.appendRow(item); + getRepo().repoStashModel.appendRow(item); } ui->tableViewStash->resizeColumnsToContents(); ui->tableViewStash->resizeRowsToContents(); @@ -936,7 +936,7 @@ void MainWindow::applySettings() store->endArray(); store->beginReadArray("FileColumns"); - for(int i=0; isetArrayIndex(i); if(store->contains("Width")) @@ -1010,8 +1010,8 @@ void MainWindow::updateSettings() } store->endArray(); - store->beginWriteArray("FileColumns", repoFileModel.columnCount()); - for(int i=0; ibeginWriteArray("FileColumns", getRepo().repoFileModel.columnCount()); + for(int i=0; isetArrayIndex(i); store->setValue("Width", ui->tableView->columnWidth(i)); @@ -1077,7 +1077,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths) for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) { const QModelIndex &mi = *mi_it; - QVariant data = repoDirModel.data(mi, REPODIRMODEL_ROLE_PATH); + QVariant data = getRepo().repoDirModel.data(mi, REPODIRMODEL_ROLE_PATH); paths.insert(data.toString()); } } @@ -1085,7 +1085,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths) // Select all workspace files that match the includeMask void MainWindow::getAllFilenames(QStringList &filenames, int includeMask) { - for(filemap_t::iterator it=workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) + for(Repository::filemap_t::iterator it=getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) { const RepoFile &e = *(*it); @@ -1109,7 +1109,7 @@ void MainWindow::getDirViewSelection(QStringList &filenames, int includeMask, bo } // Select the actual files form the selected directories - for(filemap_t::iterator it=workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) + for(Repository::filemap_t::iterator it=getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) { const RepoFile &e = *(*it); @@ -1163,10 +1163,10 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b if(mi.column()!=COLUMN_FILENAME) continue; - QVariant data = repoFileModel.data(mi, Qt::UserRole+1); + QVariant data = getRepo().repoFileModel.data(mi, Qt::UserRole+1); QString filename = data.toString(); - filemap_t::iterator e_it = workspaceFiles.find(filename); - Q_ASSERT(e_it!=workspaceFiles.end()); + Repository::filemap_t::iterator e_it = getRepo().workspaceFiles.find(filename); + Q_ASSERT(e_it!=getRepo().workspaceFiles.end()); const RepoFile &e = *e_it.value(); // Skip unwanted files @@ -1193,7 +1193,7 @@ void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) if(mi.column()!=0) continue; - QString name = repoStashModel.data(mi).toString(); + QString name = getRepo().repoStashModel.data(mi).toString(); stashNames.append(name); } } @@ -1692,13 +1692,13 @@ void MainWindow::onTreeViewSelectionChanged(const QItemSelection &/*selected*/, if(num_selected==0) return; - selectedDirs.clear(); + getRepo().selectedDirs.clear(); for(int i=0; igetPath().indexOf(old_path)!=0) continue; @@ -1926,7 +1926,7 @@ void MainWindow::on_actionNewStash_triggered() } // Check that this stash does not exist - for(stashmap_t::iterator it=stashMap.begin(); it!=stashMap.end(); ++it) + for(stashmap_t::iterator it=getRepo().stashMap.begin(); it!=getRepo().stashMap.end(); ++it) { if(stash_name == it.key()) { @@ -1954,8 +1954,8 @@ void MainWindow::on_actionApplyStash_triggered() // 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()); + stashmap_t::iterator id_it = getRepo().stashMap.find(*it); + Q_ASSERT(id_it!=getRepo().stashMap.end()); if(!bridge.stashApply(*id_it)) { @@ -1967,8 +1967,8 @@ void MainWindow::on_actionApplyStash_triggered() // 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()); + stashmap_t::iterator id_it = getRepo().stashMap.find(*it); + Q_ASSERT(id_it!=getRepo().stashMap.end()); if(!bridge.stashDrop(*id_it)) { @@ -1995,8 +1995,8 @@ void MainWindow::on_actionDeleteStash_triggered() // 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()); + stashmap_t::iterator id_it = getRepo().stashMap.find(*it); + Q_ASSERT(id_it!=getRepo().stashMap.end()); if(!bridge.stashDrop(*id_it)) { @@ -2017,8 +2017,8 @@ void MainWindow::on_actionDiffStash_triggered() if(stashes.length() != 1) return; - stashmap_t::iterator id_it = stashMap.find(*stashes.begin()); - Q_ASSERT(id_it!=stashMap.end()); + stashmap_t::iterator id_it = getRepo().stashMap.find(*stashes.begin()); + Q_ASSERT(id_it!=getRepo().stashMap.end()); // Run diff bridge.stashDiff(*id_it); diff --git a/src/MainWindow.h b/src/MainWindow.h index c9e75f0..b9e71ef 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -107,6 +107,24 @@ private: QString Path; }; + +typedef QSet stringset_t; + +class Repository +{ +public: + QStandardItemModel repoFileModel; + QStandardItemModel repoDirModel; + QStandardItemModel repoStashModel; + // Repository State + typedef QList filelist_t; + typedef QMap filemap_t; + filemap_t workspaceFiles; + stringset_t pathSet; + stashmap_t stashMap; + stringset_t selectedDirs; // The directory selected in the tree +}; + ////////////////////////////////////////////////////////////////////////// // MainWindow ////////////////////////////////////////////////////////////////////////// @@ -120,9 +138,6 @@ public: bool diffFile(const QString& repoFile); void fullRefresh(); -private: - typedef QSet stringset_t; - private: bool refresh(); void scanWorkspace(); @@ -245,15 +260,14 @@ private: }; Ui::MainWindow *ui; - QStandardItemModel repoFileModel; - QStandardItemModel repoDirModel; - QStandardItemModel repoStashModel; - QProcess fossilUI; class QAction *recentWorkspaceActs[MAX_RECENT]; class QProgressBar *progressBar; class QShortcut *abortShortcut; bool operationAborted; + Repository repo; + Repository & getRepo() { return repo; } + Settings &settings; QStringList workspaceHistory; @@ -261,14 +275,6 @@ private: Bridge bridge; ViewMode viewMode; - stringset_t selectedDirs; // The directory selected in the tree - - // Repository State - typedef QList filelist_t; - typedef QMap filemap_t; - filemap_t workspaceFiles; - stringset_t pathSet; - stashmap_t stashMap; }; #endif // MAINWINDOW_H From a43eac0ae3bfc9e1b24fa6108fc328d913d466e0 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 08:44:45 +0000 Subject: [PATCH 31/90] Wrapped bridge member via function FossilOrigin-Name: c48861c93293aafa6b1193a4b6892342e0ca0159 --- manifest | 14 ++++---- manifest.uuid | 2 +- src/MainWindow.cpp | 90 +++++++++++++++++++++++----------------------- src/MainWindow.h | 5 ++- 4 files changed, 57 insertions(+), 54 deletions(-) diff --git a/manifest b/manifest index c8621eb..f686572 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Moved\srepository\smodel\sdata\sto\sRepository\sclass\n -D 2015-04-30T08:34:11.227 +C Wrapped\sbridge\smember\svia\sfunction +D 2015-04-30T08:44:45.045 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp b73396d7d6ead5421e4a2776c73eb3909fe2b36b -F src/MainWindow.h fc1a2a7afee8cea6f7d86c3a477d1687b6be3f3a +F src/MainWindow.cpp 2ba210d3d8a0a1c73c781a579b644b823af0503a +F src/MainWindow.h daf3bd6132ffb547639dda436389601450366d4b F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P f791fda7d73f7e7b71b28ecbaefd93330090a834 -R 23d93d1e0a50531951ca9e8e511e4bcb +P 2e2faf9770ecdb644a4e9aaad0cc7dc050ef5f98 +R fa89b242d21bce26120a2513c04b20dd U kostas -Z 7b020d5baf7830f0328eb54332f8b242 +Z 57e92e99d50c4e8ff5d8194583af8368 diff --git a/manifest.uuid b/manifest.uuid index 15d9523..db83e06 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2e2faf9770ecdb644a4e9aaad0cc7dc050ef5f98 \ No newline at end of file +c48861c93293aafa6b1193a4b6892342e0ca0159 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2ea3f35..e34b8ee 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -190,7 +190,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP uiCallback.init(this); // Need to be before applySettings which sets the last workspace - bridge.Init(&uiCallback); + fossil().Init(&uiCallback); applySettings(); @@ -218,7 +218,7 @@ MainWindow::~MainWindow() //----------------------------------------------------------------------------- const QString &MainWindow::getCurrentWorkspace() { - return bridge.getCurrentWorkspace(); + return fossil().getCurrentWorkspace(); } //----------------------------------------------------------------------------- @@ -226,13 +226,13 @@ void MainWindow::setCurrentWorkspace(const QString &workspace) { if(workspace.isEmpty()) { - bridge.setCurrentWorkspace(""); + fossil().setCurrentWorkspace(""); return; } QString new_workspace = QFileInfo(workspace).absoluteFilePath(); - bridge.setCurrentWorkspace(new_workspace); + fossil().setCurrentWorkspace(new_workspace); addWorkspace(new_workspace); @@ -291,7 +291,7 @@ bool MainWindow::openWorkspace(const QString &path) } // Ok open the repository file - if(!bridge.openRepository(fi.absoluteFilePath(), wkspace)) + if(!fossil().openRepository(fi.absoluteFilePath(), wkspace)) { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return false; @@ -396,13 +396,13 @@ void MainWindow::on_actionNewRepository_triggered() // Create repository QString repo_abs_path = repo_path_info.absoluteFilePath(); - if(!bridge.newRepository(repo_abs_path)) + if(!fossil().newRepository(repo_abs_path)) { QMessageBox::critical(this, tr("Error"), tr("Could not create repository."), QMessageBox::Ok ); return; } - if(!bridge.openRepository(repo_abs_path, wkdir)) + if(!fossil().openRepository(repo_abs_path, wkdir)) { QMessageBox::critical(this, tr("Error"), tr("Could not open repository."), QMessageBox::Ok ); return; @@ -418,14 +418,14 @@ void MainWindow::on_actionNewRepository_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionCloseRepository_triggered() { - if(bridge.getRepoStatus()!=REPO_OK) + if(fossil().getRepoStatus()!=REPO_OK) return; if(QMessageBox::Yes !=DialogQuery(this, tr("Close Workspace"), tr("Are you sure you want to close this workspace?"))) return; // Close Repo - if(!bridge.closeRepository()) + if(!fossil().closeRepository()) { QMessageBox::critical(this, tr("Error"), tr("Cannot close the workspace.\nAre there still uncommitted changes available?"), QMessageBox::Ok ); return; @@ -447,7 +447,7 @@ void MainWindow::on_actionCloneRepository_triggered() stopUI(); - if(!bridge.cloneRepository(repository, url, url_proxy)) + if(!fossil().cloneRepository(repository, url, url_proxy)) { QMessageBox::critical(this, tr("Error"), tr("Could not clone the repository"), QMessageBox::Ok); return; @@ -551,7 +551,7 @@ bool MainWindow::refresh() QString title = "Fuel"; // Load repository info - RepoStatus st = bridge.getRepoStatus(); + RepoStatus st = fossil().getRepoStatus(); if(st==REPO_NOT_FOUND) { @@ -577,8 +577,8 @@ bool MainWindow::refresh() setStatus(""); enableActions(true); - if(!bridge.getProjectName().isEmpty()) - title += " - " + bridge.getProjectName(); + if(!fossil().getProjectName().isEmpty()) + title += " - " + fossil().getProjectName(); setWindowTitle(title); return true; @@ -596,7 +596,7 @@ void MainWindow::scanWorkspace() // Retrieve the status of files tracked by fossil QStringList res; - if(!bridge.listFiles(res)) + if(!fossil().listFiles(res)) return; bool scan_files = ui->actionViewUnknown->isChecked(); @@ -635,7 +635,7 @@ void MainWindow::scanWorkspace() QString fullpath = it->absoluteFilePath(); // Skip fossil files - if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!bridge.getRepositoryFile().isEmpty() && QFileInfo(fullpath) == QFileInfo(bridge.getRepositoryFile()))) + if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!fossil().getRepositoryFile().isEmpty() && QFileInfo(fullpath) == QFileInfo(fossil().getRepositoryFile()))) continue; RepoFile *rf = new RepoFile(*it, RepoFile::TYPE_UNKNOWN, wkdir); @@ -718,7 +718,7 @@ void MainWindow::scanWorkspace() } // Load the stash - bridge.stashList(getRepo().stashMap); + fossil().stashList(getRepo().stashMap); // Update the file item model _done: @@ -777,7 +777,7 @@ void MainWindow::updateDirView() header << tr("Folders"); getRepo().repoDirModel.setHorizontalHeaderLabels(header); - QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), bridge.getProjectName()); + QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), fossil().getProjectName()); root->setData(""); // Empty Path root->setEditable(false); @@ -1201,7 +1201,7 @@ void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) //------------------------------------------------------------------------------ bool MainWindow::diffFile(const QString &repoFile) { - return bridge.diffFile(repoFile); + return fossil().diffFile(repoFile); } //------------------------------------------------------------------------------ @@ -1219,14 +1219,14 @@ void MainWindow::on_actionDiff_triggered() bool MainWindow::startUI() { QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString(); - bool started = bridge.startUI(port); + bool started = fossil().startUI(port); ui->actionFossilUI->setChecked(started); return started; } //------------------------------------------------------------------------------ void MainWindow::stopUI() { - bridge.stopUI(); + fossil().stopUI(); ui->webView->load(QUrl("about:blank")); ui->actionFossilUI->setChecked(false); } @@ -1234,7 +1234,7 @@ void MainWindow::stopUI() //------------------------------------------------------------------------------ bool MainWindow::uiRunning() const { - return bridge.uiRunning(); + return fossil().uiRunning(); } //------------------------------------------------------------------------------ @@ -1306,7 +1306,7 @@ void MainWindow::on_actionPush_triggered() return; } - bridge.pushRepository(); + fossil().pushRepository(); } //------------------------------------------------------------------------------ @@ -1320,7 +1320,7 @@ void MainWindow::on_actionPull_triggered() return; } - bridge.pullRepository(); + fossil().pullRepository(); } //------------------------------------------------------------------------------ @@ -1365,7 +1365,7 @@ void MainWindow::on_actionCommit_triggered() if(commit_files.size() != all_modified_files.size()) files = commit_files; - bridge.commitFiles(files, msg); + fossil().commitFiles(files, msg); refresh(); } @@ -1383,7 +1383,7 @@ void MainWindow::on_actionAdd_triggered() return; // Do Add - bridge.addFiles(selection); + fossil().addFiles(selection); refresh(); } @@ -1408,7 +1408,7 @@ void MainWindow::on_actionDelete_triggered() // Remove repository files if(!repo_files.empty()) - bridge.removeFiles(repo_files, remove_local); + fossil().removeFiles(repo_files, remove_local); // Remove unknown local files if selected if(remove_local) @@ -1437,7 +1437,7 @@ void MainWindow::on_actionRevert_triggered() return; // Do Revert - bridge.revertFiles(modified_files); + fossil().revertFiles(modified_files); refresh(); } @@ -1466,7 +1466,7 @@ void MainWindow::on_actionRename_triggered() } // Do Rename - bridge.renameFile(fi_before.filePath(), fi_after.filePath(), true); + fossil().renameFile(fi_before.filePath(), fi_after.filePath(), true); refresh(); } @@ -1498,7 +1498,7 @@ void MainWindow::on_actionUndo_triggered() QStringList res; // Do test Undo - bridge.undoRepository(res, true); + fossil().undoRepository(res, true); if(res.length()>0 && res[0]=="No undo or redo is available") return; @@ -1507,7 +1507,7 @@ void MainWindow::on_actionUndo_triggered() return; // Do Undo - bridge.undoRepository(res, false); + fossil().undoRepository(res, false); refresh(); } @@ -1517,7 +1517,7 @@ void MainWindow::on_actionAbout_triggered() { QString fossil_ver; - if(bridge.getFossilVersion(fossil_ver)) + if(fossil().getFossilVersion(fossil_ver)) fossil_ver = tr("Fossil version %0").arg(fossil_ver) + "\n"; QString qt_ver = tr("QT version %0").arg(QT_VERSION_STR) + "\n\n"; @@ -1546,7 +1546,7 @@ void MainWindow::on_actionUpdate_triggered() QStringList res; // Do test update - if(!bridge.updateRepository(res, true)) + if(!fossil().updateRepository(res, true)) return; // Fixme: parse "changes: None. Already up-to-date" and avoid dialog @@ -1558,7 +1558,7 @@ void MainWindow::on_actionUpdate_triggered() return; // Do update - bridge.updateRepository(res, false); + fossil().updateRepository(res, false); refresh(); } @@ -1569,7 +1569,7 @@ void MainWindow::loadFossilSettings() // Also retrieve the fossil global settings QStringList out; - if(!bridge.getFossilSettings(out)) + if(!fossil().getFossilSettings(out)) return; QStringMap kv = MakeKeyValues(out); @@ -1585,7 +1585,7 @@ void MainWindow::loadFossilSettings() { // Retrieve existing url QString url; - if(bridge.getRemoteUrl(url)) + if(fossil().getRemoteUrl(url)) it.value().Value = url; continue; } @@ -1632,14 +1632,14 @@ void MainWindow::on_actionSettings_triggered() if(name == FOSSIL_SETTING_REMOTE_URL) { // Run as silent to avoid displaying credentials in the log - bridge.setRemoteUrl(it.value().Value.toString()); + fossil().setRemoteUrl(it.value().Value.toString()); continue; } Q_ASSERT(type == Settings::Setting::TYPE_FOSSIL_GLOBAL || type == Settings::Setting::TYPE_FOSSIL_LOCAL); QString value = it.value().Value.toString(); - bridge.setFossilSetting(name, value, type == Settings::Setting::TYPE_FOSSIL_GLOBAL); + fossil().setFossilSetting(name, value, type == Settings::Setting::TYPE_FOSSIL_GLOBAL); } } @@ -1813,7 +1813,7 @@ void MainWindow::on_actionRenameFolder_triggered() RepoFile *r = files_to_move[i]; const QString &new_file_path = new_paths[i] + PATH_SEPARATOR + r->getFilename(); - if(!bridge.renameFile(r->getFilePath(), new_file_path, false)) + if(!fossil().renameFile(r->getFilePath(), new_file_path, false)) { log(tr("Move aborted due to errors")+"\n"); goto _exit; @@ -1936,7 +1936,7 @@ void MainWindow::on_actionNewStash_triggered() } // Do Stash - bridge.stashNew(stashed_files, stash_name, revert); + fossil().stashNew(stashed_files, stash_name, revert); refresh(); } @@ -1957,7 +1957,7 @@ void MainWindow::on_actionApplyStash_triggered() stashmap_t::iterator id_it = getRepo().stashMap.find(*it); Q_ASSERT(id_it!=getRepo().stashMap.end()); - if(!bridge.stashApply(*id_it)) + if(!fossil().stashApply(*id_it)) { log(tr("Stash application aborted due to errors")+"\n"); return; @@ -1970,7 +1970,7 @@ void MainWindow::on_actionApplyStash_triggered() stashmap_t::iterator id_it = getRepo().stashMap.find(*it); Q_ASSERT(id_it!=getRepo().stashMap.end()); - if(!bridge.stashDrop(*id_it)) + if(!fossil().stashDrop(*id_it)) { log(tr("Stash deletion aborted due to errors")+"\n"); return; @@ -1998,7 +1998,7 @@ void MainWindow::on_actionDeleteStash_triggered() stashmap_t::iterator id_it = getRepo().stashMap.find(*it); Q_ASSERT(id_it!=getRepo().stashMap.end()); - if(!bridge.stashDrop(*id_it)) + if(!fossil().stashDrop(*id_it)) { log(tr("Stash deletion aborted due to errors")+"\n"); return; @@ -2021,7 +2021,7 @@ void MainWindow::on_actionDiffStash_triggered() Q_ASSERT(id_it!=getRepo().stashMap.end()); // Run diff - bridge.stashDiff(*id_it); + fossil().stashDiff(*id_it); } //------------------------------------------------------------------------------ @@ -2134,7 +2134,7 @@ void MainWindow::dropEvent(QDropEvent *event) return; // Do Add - bridge.addFiles(newfiles); + fossil().addFiles(newfiles); refresh(); } @@ -2155,7 +2155,7 @@ void MainWindow::setBusy(bool busy) void MainWindow::onAbort() { operationAborted = true; - bridge.abortOperation(); + fossil().abortOperation(); // FIXME: Rename this to something better, Operation Aborted log("
* "+tr("Terminated")+" *
", true); } diff --git a/src/MainWindow.h b/src/MainWindow.h index b9e71ef..88c0c94 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -265,6 +265,10 @@ private: class QShortcut *abortShortcut; bool operationAborted; + Bridge bridge; + Bridge & fossil() { return bridge; } + const Bridge & fossil() const { return bridge; } + Repository repo; Repository & getRepo() { return repo; } @@ -272,7 +276,6 @@ private: QStringList workspaceHistory; MainWinUICallback uiCallback; - Bridge bridge; ViewMode viewMode; }; From 97f210fd463788c37c43d463d5ff3e80abd99216 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 09:50:22 +0000 Subject: [PATCH 32/90] Added UICallback::updateProcess Moved scanDirectory to Repository FossilOrigin-Name: 4d94a638499c31672bf47de43407b1fa2531e716 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/Bridge.h | 1 + src/MainWindow.cpp | 24 +++++++++++++++++------- src/MainWindow.h | 5 ++++- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index f686572..6d337b3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Wrapped\sbridge\smember\svia\sfunction -D 2015-04-30T08:44:45.045 +C Added\sUICallback::updateProcess\nMoved\sscanDirectory\sto\sRepository +D 2015-04-30T09:50:22.918 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -185,7 +185,7 @@ F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f F src/Bridge.cpp 96aca0460c87ec2cdd154527a0583a00309ebcea -F src/Bridge.h 81d3e808ca1bd90771abc51d1557bb29e098fbf3 +F src/Bridge.h 9a3a3a52eb64c673a9dedac1d5d15a44aac71bc7 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 2ba210d3d8a0a1c73c781a579b644b823af0503a -F src/MainWindow.h daf3bd6132ffb547639dda436389601450366d4b +F src/MainWindow.cpp d0592f736ae782633c9d2dd510ab5f0d5c80fabf +F src/MainWindow.h f9470bc231db5fc95661254c0bab2854adfd3ffb F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 2e2faf9770ecdb644a4e9aaad0cc7dc050ef5f98 -R fa89b242d21bce26120a2513c04b20dd +P c48861c93293aafa6b1193a4b6892342e0ca0159 +R 49f72f8f9eafff06a5ea35eb0497e88d U kostas -Z 57e92e99d50c4e8ff5d8194583af8368 +Z 025a79c928231b5b6d280e6959bd1db5 diff --git a/manifest.uuid b/manifest.uuid index db83e06..24a59c6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c48861c93293aafa6b1193a4b6892342e0ca0159 \ No newline at end of file +4d94a638499c31672bf47de43407b1fa2531e716 \ No newline at end of file diff --git a/src/Bridge.h b/src/Bridge.h index 8fd9aa7..9bc7036 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -35,6 +35,7 @@ public: public: virtual void logText(const QString &text, bool isHTML)=0; virtual void beginProcess(const QString &text)=0; + virtual void updateProcess(const QString &text)=0; virtual void endProcess()=0; virtual QMessageBox::StandardButton Query(const QString &title, const QString &query, QMessageBox::StandardButtons buttons)=0; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index e34b8ee..f1af776 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -487,12 +487,11 @@ void MainWindow::onOpenRecent() } //------------------------------------------------------------------------------ -bool MainWindow::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort) +bool Repository::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort, Bridge::UICallback &uiCallback) { QDir dir(dirPath); - setStatus(dirPath); - QCoreApplication::processEvents(); + uiCallback.updateProcess(dirPath); QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot); for (int i=0; isetEnabled(busy); bool enabled = !busy; ui->menuBar->setEnabled(enabled); @@ -2183,6 +2185,14 @@ void MainWindow::MainWinUICallback::beginProcess(const QString& text) mainWindow->progressBar->setHidden(false); } +//------------------------------------------------------------------------------ +void MainWindow::MainWinUICallback::updateProcess(const QString& text) +{ + Q_ASSERT(mainWindow); + mainWindow->ui->statusBar->showMessage(text); + QCoreApplication::processEvents(); +} + //------------------------------------------------------------------------------ void MainWindow::MainWinUICallback::endProcess() { diff --git a/src/MainWindow.h b/src/MainWindow.h index 88c0c94..8840ebd 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -123,6 +123,8 @@ public: stringset_t pathSet; stashmap_t stashMap; stringset_t selectedDirs; // The directory selected in the tree + + static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, Bridge::UICallback &uiCallback); }; ////////////////////////////////////////////////////////////////////////// @@ -163,7 +165,7 @@ private: void loadFossilSettings(); QString getFossilPath(); QString getFossilHttpAddress(); - bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort); + //static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort); void updateDirView(); void updateFileView(); void updateStashView(); @@ -244,6 +246,7 @@ private: virtual void logText(const QString& text, bool isHTML); virtual void beginProcess(const QString& text); + virtual void updateProcess(const QString& text); virtual void endProcess(); virtual QMessageBox::StandardButton Query(const QString &title, const QString &query, QMessageBox::StandardButtons buttons); From d289dee92b03f4d7535f7a50e4fe1adda47fe9af Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 10:30:47 +0000 Subject: [PATCH 33/90] Moved scanWorkspace to Repository FossilOrigin-Name: 61734cf430e041d514222c71f751feead5b7faf6 --- manifest | 14 +++++----- manifest.uuid | 2 +- src/MainWindow.cpp | 70 +++++++++++++++++++++++++++------------------- src/MainWindow.h | 13 +++++---- 4 files changed, 58 insertions(+), 41 deletions(-) diff --git a/manifest b/manifest index 6d337b3..17f931d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\sUICallback::updateProcess\nMoved\sscanDirectory\sto\sRepository -D 2015-04-30T09:50:22.918 +C Moved\sscanWorkspace\sto\sRepository +D 2015-04-30T10:30:47.754 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp d0592f736ae782633c9d2dd510ab5f0d5c80fabf -F src/MainWindow.h f9470bc231db5fc95661254c0bab2854adfd3ffb +F src/MainWindow.cpp 939c919b6ede21771df77ff9973da7b3e39808dc +F src/MainWindow.h 49f8f8241f54e99101828de6501bd77780510c4c F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P c48861c93293aafa6b1193a4b6892342e0ca0159 -R 49f72f8f9eafff06a5ea35eb0497e88d +P 4d94a638499c31672bf47de43407b1fa2531e716 +R 9c35dcfb53087265b1dc9de40e3abf6c U kostas -Z 025a79c928231b5b6d280e6959bd1db5 +Z ba97d0832e88bf4227c1c8c175541671 diff --git a/manifest.uuid b/manifest.uuid index 24a59c6..73d51f3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4d94a638499c31672bf47de43407b1fa2531e716 \ No newline at end of file +61734cf430e041d514222c71f751feead5b7faf6 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index f1af776..0545283 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -584,11 +584,11 @@ bool MainWindow::refresh() } //------------------------------------------------------------------------------ -void MainWindow::scanWorkspace() +void Repository::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted) { // Scan all workspace files QFileInfoList all_files; - QString wkdir = getCurrentWorkspace(); + QString wkdir = fossil().getCurrentWorkspace(); if(wkdir.isEmpty()) return; @@ -598,33 +598,32 @@ void MainWindow::scanWorkspace() if(!fossil().listFiles(res)) return; - bool scan_files = ui->actionViewUnknown->isChecked(); - - setStatus(tr("Scanning Workspace...")); - setBusy(true); + bool scan_files = scanLocal; // Dispose RepoFiles - for(Repository::filemap_t::iterator it = getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) + for(Repository::filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) delete *it; - getRepo().workspaceFiles.clear(); - getRepo().pathSet.clear(); + workspaceFiles.clear(); + pathSet.clear(); operationAborted = false; + uiCallback.beginProcess(""); if(scan_files) { QCoreApplication::processEvents(); QString ignore; // If we should not be showing ignored files, fill in the ignored spec - if(!ui->actionViewIgnored->isChecked()) + if(!scanIgnored) { // QDir expects multiple specs being separated by a semicolon - ignore = settings.GetFossilValue(FOSSIL_SETTING_IGNORE_GLOB).toString().replace(',',';'); + ignore = ignoreGlob; + ignore.replace(',',';'); } - if(!getRepo().scanDirectory(all_files, wkdir, wkdir, ignore, operationAborted, uiCallback)) + if(!scanDirectory(all_files, wkdir, wkdir, ignore, operationAborted, uiCallback)) goto _done; for(QFileInfoList::iterator it=all_files.begin(); it!=all_files.end(); ++it) @@ -637,13 +636,13 @@ void MainWindow::scanWorkspace() continue; RepoFile *rf = new RepoFile(*it, RepoFile::TYPE_UNKNOWN, wkdir); - getRepo().workspaceFiles.insert(rf->getFilePath(), rf); - getRepo().pathSet.insert(rf->getPath()); + workspaceFiles.insert(rf->getFilePath(), rf); + pathSet.insert(rf->getPath()); } } + uiCallback.endProcess(); - setStatus(tr("Updating...")); - QCoreApplication::processEvents(); + uiCallback.beginProcess(QObject::tr("Updating...")); // Update Files and Directories @@ -683,43 +682,56 @@ void MainWindow::scanWorkspace() type = RepoFile::TYPE_CONFLICTED; // Filter unwanted file types - if( ((type & RepoFile::TYPE_MODIFIED) && !ui->actionViewModified->isChecked()) || - ((type & RepoFile::TYPE_UNCHANGED) && !ui->actionViewUnchanged->isChecked() )) + if( ((type & RepoFile::TYPE_MODIFIED) && !scanModified) || + ((type & RepoFile::TYPE_UNCHANGED) && !scanUnchanged)) { - getRepo().workspaceFiles.remove(fname); + workspaceFiles.remove(fname); continue; } else add_missing = true; - Repository::filemap_t::iterator it = getRepo().workspaceFiles.find(fname); + Repository::filemap_t::iterator it = workspaceFiles.find(fname); RepoFile *rf = 0; - if(add_missing && it==getRepo().workspaceFiles.end()) + if(add_missing && it==workspaceFiles.end()) { QFileInfo info(wkdir+QDir::separator()+fname); rf = new RepoFile(info, type, wkdir); - getRepo().workspaceFiles.insert(rf->getFilePath(), rf); + workspaceFiles.insert(rf->getFilePath(), rf); } if(!rf) { - it = getRepo().workspaceFiles.find(fname); - Q_ASSERT(it!=getRepo().workspaceFiles.end()); + it = workspaceFiles.find(fname); + Q_ASSERT(it!=workspaceFiles.end()); rf = *it; } rf->setType(type); QString path = rf->getPath(); - getRepo().pathSet.insert(path); + pathSet.insert(path); } // Load the stash - fossil().stashList(getRepo().stashMap); - - // Update the file item model + fossil().stashList(stashMap); _done: + uiCallback.endProcess(); +} + +//------------------------------------------------------------------------------ +void MainWindow::scanWorkspace() +{ + setBusy(true); + getRepo().scanWorkspace(ui->actionViewUnknown->isChecked(), + ui->actionViewIgnored->isChecked(), + ui->actionViewModified->isChecked(), + ui->actionViewUnchanged->isChecked(), + settings.GetFossilValue(FOSSIL_SETTING_IGNORE_GLOB).toString(), + uiCallback, + operationAborted + ); updateDirView(); updateFileView(); updateStashView(); @@ -2183,6 +2195,7 @@ void MainWindow::MainWinUICallback::beginProcess(const QString& text) Q_ASSERT(mainWindow); mainWindow->ui->statusBar->showMessage(text); mainWindow->progressBar->setHidden(false); + QCoreApplication::processEvents(); } //------------------------------------------------------------------------------ @@ -2199,6 +2212,7 @@ void MainWindow::MainWinUICallback::endProcess() Q_ASSERT(mainWindow); mainWindow->ui->statusBar->clearMessage(); mainWindow->progressBar->setHidden(true); + QCoreApplication::processEvents(); } //------------------------------------------------------------------------------ diff --git a/src/MainWindow.h b/src/MainWindow.h index 8840ebd..7e0ba65 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -124,7 +124,12 @@ public: stashmap_t stashMap; stringset_t selectedDirs; // The directory selected in the tree + Bridge bridge; + Bridge & fossil() { return bridge; } + const Bridge & fossil() const { return bridge; } + static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, Bridge::UICallback &uiCallback); + void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted); }; ////////////////////////////////////////////////////////////////////////// @@ -165,7 +170,6 @@ private: void loadFossilSettings(); QString getFossilPath(); QString getFossilHttpAddress(); - //static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort); void updateDirView(); void updateFileView(); void updateStashView(); @@ -268,13 +272,12 @@ private: class QShortcut *abortShortcut; bool operationAborted; - Bridge bridge; - Bridge & fossil() { return bridge; } - const Bridge & fossil() const { return bridge; } - Repository repo; Repository & getRepo() { return repo; } + Bridge & fossil() { return repo.bridge; } + const Bridge & fossil() const { return repo.bridge; } + Settings &settings; QStringList workspaceHistory; From 341e945322f613e47e3a66613ae0c527c623c067 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 10:36:18 +0000 Subject: [PATCH 34/90] Cleanup FossilOrigin-Name: 0975c824a72cacd0d2fb5ee5d3c38c145712a0b4 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/MainWindow.h | 5 ----- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index 17f931d..1d70504 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Moved\sscanWorkspace\sto\sRepository -D 2015-04-30T10:30:47.754 +C Cleanup +D 2015-04-30T10:36:18.967 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -201,7 +201,7 @@ F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp 939c919b6ede21771df77ff9973da7b3e39808dc -F src/MainWindow.h 49f8f8241f54e99101828de6501bd77780510c4c +F src/MainWindow.h 9df3df4c1baf0f386e226b1991b2d1dbea0ecdbb F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 4d94a638499c31672bf47de43407b1fa2531e716 -R 9c35dcfb53087265b1dc9de40e3abf6c +P 61734cf430e041d514222c71f751feead5b7faf6 +R 753dd95663c89722dde887fa796bf2c1 U kostas -Z ba97d0832e88bf4227c1c8c175541671 +Z f5ff6cd15d239d70f6502ce6d67686d0 diff --git a/manifest.uuid b/manifest.uuid index 73d51f3..6718dfc 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -61734cf430e041d514222c71f751feead5b7faf6 \ No newline at end of file +0975c824a72cacd0d2fb5ee5d3c38c145712a0b4 \ No newline at end of file diff --git a/src/MainWindow.h b/src/MainWindow.h index 7e0ba65..0d83202 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -68,11 +68,6 @@ struct RepoFile return FileInfo; } - bool isRepo() const - { - return Type == TYPE_UNCHANGED || Type == TYPE_EDITTED; - } - const QString &getFilePath() const { return FilePath; From c67746a84d649ce0479d698198126ef2995839b2 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 10:59:25 +0000 Subject: [PATCH 35/90] Renamed Repository to Workspace Workspace member access is now via methods FossilOrigin-Name: 2c664b7db2644e1434b5e2d9e83a103ca2093cb3 --- manifest | 14 ++--- manifest.uuid | 2 +- src/MainWindow.cpp | 136 ++++++++++++++++++++++----------------------- src/MainWindow.h | 42 ++++++++------ 4 files changed, 101 insertions(+), 93 deletions(-) diff --git a/manifest b/manifest index 1d70504..987de87 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Cleanup -D 2015-04-30T10:36:18.967 +C Renamed\sRepository\sto\sWorkspace\nWorkspace\smember\saccess\sis\snow\svia\smethods\n +D 2015-04-30T10:59:25.241 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 939c919b6ede21771df77ff9973da7b3e39808dc -F src/MainWindow.h 9df3df4c1baf0f386e226b1991b2d1dbea0ecdbb +F src/MainWindow.cpp f04effe7dbb5712f1214a8778ab372fef44c0e01 +F src/MainWindow.h c7c22c37b157cb8fcddb6345617a7c3fe663c903 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 61734cf430e041d514222c71f751feead5b7faf6 -R 753dd95663c89722dde887fa796bf2c1 +P 0975c824a72cacd0d2fb5ee5d3c38c145712a0b4 +R d87d054d9f8c171e265c82e724cde68f U kostas -Z f5ff6cd15d239d70f6502ce6d67686d0 +Z 5be810239a33cadc87f4c7d50c02c8a6 diff --git a/manifest.uuid b/manifest.uuid index 6718dfc..ce37cb7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0975c824a72cacd0d2fb5ee5d3c38c145712a0b4 \ No newline at end of file +2c664b7db2644e1434b5e2d9e83a103ca2093cb3 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 0545283..9954408 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -85,7 +85,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP separator->setSeparator(true); // TableView - ui->tableView->setModel(&getRepo().repoFileModel); + ui->tableView->setModel(&getRepo().getFileModel()); ui->tableView->addAction(ui->actionDiff); ui->tableView->addAction(ui->actionHistory); @@ -103,8 +103,8 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP QStringList header; header << tr("Status") << tr("File") << tr("Extension") << tr("Modified") << tr("Path"); - getRepo().repoFileModel.setHorizontalHeaderLabels(header); - getRepo().repoFileModel.horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); + getRepo().getFileModel().setHorizontalHeaderLabels(header); + getRepo().getFileModel().horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); // Needed on OSX as the preset value from the GUI editor is not always reflected ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); @@ -116,7 +116,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->tableView->horizontalHeader()->setStretchLastSection(true); // TreeView - ui->treeView->setModel(&getRepo().repoDirModel); + ui->treeView->setModel(&getRepo().getDirModel()); connect( ui->treeView->selectionModel(), SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection &) ), SLOT( onTreeViewSelectionChanged(const QItemSelection &, const QItemSelection &) ), @@ -132,7 +132,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->treeView->addAction(ui->actionOpenFolder); // StashView - ui->tableViewStash->setModel(&getRepo().repoStashModel); + ui->tableViewStash->setModel(&getRepo().getStashModel()); ui->tableViewStash->addAction(ui->actionApplyStash); ui->tableViewStash->addAction(ui->actionDiffStash); ui->tableViewStash->addAction(ui->actionDeleteStash); @@ -210,7 +210,7 @@ MainWindow::~MainWindow() updateSettings(); // Dispose RepoFiles - for(Repository::filemap_t::iterator it = getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) + for(Workspace::filemap_t::iterator it = getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) delete *it; delete ui; @@ -487,7 +487,7 @@ void MainWindow::onOpenRecent() } //------------------------------------------------------------------------------ -bool Repository::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort, Bridge::UICallback &uiCallback) +bool Workspace::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort, Bridge::UICallback &uiCallback) { QDir dir(dirPath); @@ -556,8 +556,8 @@ bool MainWindow::refresh() { setStatus(tr("No workspace detected.")); enableActions(false); - getRepo().repoFileModel.removeRows(0, getRepo().repoFileModel.rowCount()); - getRepo().repoDirModel.clear(); + getRepo().getFileModel().removeRows(0, getRepo().getFileModel().rowCount()); + getRepo().getDirModel().clear(); setWindowTitle(title); return false; } @@ -565,8 +565,8 @@ bool MainWindow::refresh() { setStatus(tr("Old repository schema detected. Consider running 'fossil rebuild'")); enableActions(false); - getRepo().repoFileModel.removeRows(0, getRepo().repoFileModel.rowCount()); - getRepo().repoDirModel.clear(); + getRepo().getFileModel().removeRows(0, getRepo().getFileModel().rowCount()); + getRepo().getDirModel().clear(); setWindowTitle(title); return true; } @@ -584,7 +584,7 @@ bool MainWindow::refresh() } //------------------------------------------------------------------------------ -void Repository::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted) +void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted) { // Scan all workspace files QFileInfoList all_files; @@ -601,11 +601,11 @@ void Repository::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifi bool scan_files = scanLocal; // Dispose RepoFiles - for(Repository::filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) + for(Workspace::filemap_t::iterator it = getFiles().begin(); it!=getFiles().end(); ++it) delete *it; - workspaceFiles.clear(); - pathSet.clear(); + getFiles().clear(); + getPaths().clear(); operationAborted = false; @@ -636,8 +636,8 @@ void Repository::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifi continue; RepoFile *rf = new RepoFile(*it, RepoFile::TYPE_UNKNOWN, wkdir); - workspaceFiles.insert(rf->getFilePath(), rf); - pathSet.insert(rf->getPath()); + getFiles().insert(rf->getFilePath(), rf); + getPaths().insert(rf->getPath()); } } uiCallback.endProcess(); @@ -685,37 +685,37 @@ void Repository::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifi if( ((type & RepoFile::TYPE_MODIFIED) && !scanModified) || ((type & RepoFile::TYPE_UNCHANGED) && !scanUnchanged)) { - workspaceFiles.remove(fname); + getFiles().remove(fname); continue; } else add_missing = true; - Repository::filemap_t::iterator it = workspaceFiles.find(fname); + Workspace::filemap_t::iterator it = getFiles().find(fname); RepoFile *rf = 0; - if(add_missing && it==workspaceFiles.end()) + if(add_missing && it==getFiles().end()) { QFileInfo info(wkdir+QDir::separator()+fname); rf = new RepoFile(info, type, wkdir); - workspaceFiles.insert(rf->getFilePath(), rf); + getFiles().insert(rf->getFilePath(), rf); } if(!rf) { - it = workspaceFiles.find(fname); - Q_ASSERT(it!=workspaceFiles.end()); + it = getFiles().find(fname); + Q_ASSERT(it!=getFiles().end()); rf = *it; } rf->setType(type); QString path = rf->getPath(); - pathSet.insert(path); + getPaths().insert(path); } // Load the stash - fossil().stashList(stashMap); + fossil().stashList(getStashes()); _done: uiCallback.endProcess(); } @@ -780,18 +780,18 @@ static void addPathToTree(QStandardItem &root, const QString &path) void MainWindow::updateDirView() { // Directory View - getRepo().repoDirModel.clear(); + getRepo().getDirModel().clear(); QStringList header; header << tr("Folders"); - getRepo().repoDirModel.setHorizontalHeaderLabels(header); + getRepo().getDirModel().setHorizontalHeaderLabels(header); QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), fossil().getProjectName()); root->setData(""); // Empty Path root->setEditable(false); - getRepo().repoDirModel.appendRow(root); - for(stringset_t::iterator it = getRepo().pathSet.begin(); it!=getRepo().pathSet.end(); ++it) + getRepo().getDirModel().appendRow(root); + for(stringset_t::iterator it = getRepo().getPaths().begin(); it!=getRepo().getPaths().end(); ++it) { const QString &dir = *it; if(dir.isEmpty()) @@ -807,7 +807,7 @@ void MainWindow::updateDirView() void MainWindow::updateFileView() { // Clear content except headers - getRepo().repoFileModel.removeRows(0, getRepo().repoFileModel.rowCount()); + getRepo().getFileModel().removeRows(0, getRepo().getFileModel().rowCount()); struct { RepoFile::EntryType type; QString text; const char *icon; } stats[] = @@ -823,16 +823,16 @@ void MainWindow::updateFileView() QFileIconProvider icon_provider; - bool display_path = viewMode==VIEWMODE_LIST || getRepo().selectedDirs.count() > 1; + bool display_path = viewMode==VIEWMODE_LIST || selectedDirs.count() > 1; size_t item_id=0; - for(Repository::filemap_t::iterator it = getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) + for(Workspace::filemap_t::iterator it = getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) { const RepoFile &e = *it.value(); QString path = e.getPath(); // In Tree mode, filter all items not included in the current dir - if(viewMode==VIEWMODE_TREE && !getRepo().selectedDirs.contains(path)) + if(viewMode==VIEWMODE_TREE && !selectedDirs.contains(path)) continue; // Status Column @@ -851,13 +851,13 @@ void MainWindow::updateFileView() QStandardItem *status = new QStandardItem(QIcon(status_icon_path), status_text); status->setToolTip(status_text); - getRepo().repoFileModel.setItem(item_id, COLUMN_STATUS, status); + getRepo().getFileModel().setItem(item_id, COLUMN_STATUS, status); QFileInfo finfo = e.getFileInfo(); QIcon icon = icon_provider.icon(finfo); QStandardItem *filename_item = 0; - getRepo().repoFileModel.setItem(item_id, COLUMN_PATH, new QStandardItem(path)); + getRepo().getFileModel().setItem(item_id, COLUMN_PATH, new QStandardItem(path)); if(display_path) filename_item = new QStandardItem(icon, QDir::toNativeSeparators(e.getFilePath())); @@ -867,10 +867,10 @@ void MainWindow::updateFileView() Q_ASSERT(filename_item); // Keep the path in the user data filename_item->setData(e.getFilePath()); - getRepo().repoFileModel.setItem(item_id, COLUMN_FILENAME, filename_item); + getRepo().getFileModel().setItem(item_id, COLUMN_FILENAME, filename_item); - getRepo().repoFileModel.setItem(item_id, COLUMN_EXTENSION, new QStandardItem(finfo.suffix())); - getRepo().repoFileModel.setItem(item_id, COLUMN_MODIFIED, new QStandardItem(finfo.lastModified().toString(Qt::SystemLocaleShortDate))); + getRepo().getFileModel().setItem(item_id, COLUMN_EXTENSION, new QStandardItem(finfo.suffix())); + getRepo().getFileModel().setItem(item_id, COLUMN_MODIFIED, new QStandardItem(finfo.lastModified().toString(Qt::SystemLocaleShortDate))); ++item_id; } @@ -881,17 +881,17 @@ void MainWindow::updateFileView() //------------------------------------------------------------------------------ void MainWindow::updateStashView() { - getRepo().repoStashModel.clear(); + getRepo().getStashModel().clear(); QStringList header; header << tr("Stashes"); - getRepo().repoStashModel.setHorizontalHeaderLabels(header); + getRepo().getStashModel().setHorizontalHeaderLabels(header); - for(stashmap_t::iterator it=getRepo().stashMap.begin(); it!=getRepo().stashMap.end(); ++it) + for(stashmap_t::iterator it=getRepo().getStashes().begin(); it!=getRepo().getStashes().end(); ++it) { QStandardItem *item = new QStandardItem(it.key()); item->setToolTip(it.key()); - getRepo().repoStashModel.appendRow(item); + getRepo().getStashModel().appendRow(item); } ui->tableViewStash->resizeColumnsToContents(); ui->tableViewStash->resizeRowsToContents(); @@ -945,7 +945,7 @@ void MainWindow::applySettings() store->endArray(); store->beginReadArray("FileColumns"); - for(int i=0; isetArrayIndex(i); if(store->contains("Width")) @@ -1019,8 +1019,8 @@ void MainWindow::updateSettings() } store->endArray(); - store->beginWriteArray("FileColumns", getRepo().repoFileModel.columnCount()); - for(int i=0; ibeginWriteArray("FileColumns", getRepo().getFileModel().columnCount()); + for(int i=0; isetArrayIndex(i); store->setValue("Width", ui->tableView->columnWidth(i)); @@ -1086,7 +1086,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths) for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) { const QModelIndex &mi = *mi_it; - QVariant data = getRepo().repoDirModel.data(mi, REPODIRMODEL_ROLE_PATH); + QVariant data = getRepo().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); paths.insert(data.toString()); } } @@ -1094,7 +1094,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths) // Select all workspace files that match the includeMask void MainWindow::getAllFilenames(QStringList &filenames, int includeMask) { - for(Repository::filemap_t::iterator it=getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) + for(Workspace::filemap_t::iterator it=getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) { const RepoFile &e = *(*it); @@ -1118,7 +1118,7 @@ void MainWindow::getDirViewSelection(QStringList &filenames, int includeMask, bo } // Select the actual files form the selected directories - for(Repository::filemap_t::iterator it=getRepo().workspaceFiles.begin(); it!=getRepo().workspaceFiles.end(); ++it) + for(Workspace::filemap_t::iterator it=getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) { const RepoFile &e = *(*it); @@ -1172,10 +1172,10 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b if(mi.column()!=COLUMN_FILENAME) continue; - QVariant data = getRepo().repoFileModel.data(mi, Qt::UserRole+1); + QVariant data = getRepo().getFileModel().data(mi, Qt::UserRole+1); QString filename = data.toString(); - Repository::filemap_t::iterator e_it = getRepo().workspaceFiles.find(filename); - Q_ASSERT(e_it!=getRepo().workspaceFiles.end()); + Workspace::filemap_t::iterator e_it = getRepo().getFiles().find(filename); + Q_ASSERT(e_it!=getRepo().getFiles().end()); const RepoFile &e = *e_it.value(); // Skip unwanted files @@ -1202,7 +1202,7 @@ void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) if(mi.column()!=0) continue; - QString name = getRepo().repoStashModel.data(mi).toString(); + QString name = getRepo().getStashModel().data(mi).toString(); stashNames.append(name); } } @@ -1701,13 +1701,13 @@ void MainWindow::onTreeViewSelectionChanged(const QItemSelection &/*selected*/, if(num_selected==0) return; - getRepo().selectedDirs.clear(); + selectedDirs.clear(); for(int i=0; igetPath().indexOf(old_path)!=0) continue; @@ -1935,7 +1935,7 @@ void MainWindow::on_actionNewStash_triggered() } // Check that this stash does not exist - for(stashmap_t::iterator it=getRepo().stashMap.begin(); it!=getRepo().stashMap.end(); ++it) + for(stashmap_t::iterator it=getRepo().getStashes().begin(); it!=getRepo().getStashes().end(); ++it) { if(stash_name == it.key()) { @@ -1963,8 +1963,8 @@ void MainWindow::on_actionApplyStash_triggered() // Apply stashes for(QStringList::iterator it=stashes.begin(); it!=stashes.end(); ++it) { - stashmap_t::iterator id_it = getRepo().stashMap.find(*it); - Q_ASSERT(id_it!=getRepo().stashMap.end()); + stashmap_t::iterator id_it = getRepo().getStashes().find(*it); + Q_ASSERT(id_it!=getRepo().getStashes().end()); if(!fossil().stashApply(*id_it)) { @@ -1976,8 +1976,8 @@ void MainWindow::on_actionApplyStash_triggered() // Delete stashes for(QStringList::iterator it=stashes.begin(); delete_stashes && it!=stashes.end(); ++it) { - stashmap_t::iterator id_it = getRepo().stashMap.find(*it); - Q_ASSERT(id_it!=getRepo().stashMap.end()); + stashmap_t::iterator id_it = getRepo().getStashes().find(*it); + Q_ASSERT(id_it!=getRepo().getStashes().end()); if(!fossil().stashDrop(*id_it)) { @@ -2004,8 +2004,8 @@ void MainWindow::on_actionDeleteStash_triggered() // Delete stashes for(QStringList::iterator it=stashes.begin(); it!=stashes.end(); ++it) { - stashmap_t::iterator id_it = getRepo().stashMap.find(*it); - Q_ASSERT(id_it!=getRepo().stashMap.end()); + stashmap_t::iterator id_it = getRepo().getStashes().find(*it); + Q_ASSERT(id_it!=getRepo().getStashes().end()); if(!fossil().stashDrop(*id_it)) { @@ -2026,8 +2026,8 @@ void MainWindow::on_actionDiffStash_triggered() if(stashes.length() != 1) return; - stashmap_t::iterator id_it = getRepo().stashMap.find(*stashes.begin()); - Q_ASSERT(id_it!=getRepo().stashMap.end()); + stashmap_t::iterator id_it = getRepo().getStashes().find(*stashes.begin()); + Q_ASSERT(id_it!=getRepo().getStashes().end()); // Run diff fossil().stashDiff(*id_it); diff --git a/src/MainWindow.h b/src/MainWindow.h index 0d83202..9e48e56 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -105,26 +105,34 @@ private: typedef QSet stringset_t; -class Repository +class Workspace { public: - QStandardItemModel repoFileModel; - QStandardItemModel repoDirModel; - QStandardItemModel repoStashModel; - // Repository State typedef QList filelist_t; typedef QMap filemap_t; - filemap_t workspaceFiles; - stringset_t pathSet; - stashmap_t stashMap; - stringset_t selectedDirs; // The directory selected in the tree - Bridge bridge; Bridge & fossil() { return bridge; } const Bridge & fossil() const { return bridge; } - static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, Bridge::UICallback &uiCallback); - void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted); + static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, Bridge::UICallback &uiCallback); + void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted); + + QStandardItemModel &getFileModel() { return repoFileModel; } + QStandardItemModel &getDirModel() { return repoDirModel; } + QStandardItemModel &getStashModel() { return repoStashModel; } + filemap_t &getFiles() { return workspaceFiles; } + stringset_t &getPaths() { return pathSet; } + stashmap_t &getStashes() { return stashMap; } + +private: + Bridge bridge; + filemap_t workspaceFiles; + stringset_t pathSet; + stashmap_t stashMap; + + QStandardItemModel repoFileModel; + QStandardItemModel repoDirModel; + QStandardItemModel repoStashModel; }; ////////////////////////////////////////////////////////////////////////// @@ -163,7 +171,6 @@ private: void rebuildRecent(); bool openWorkspace(const QString &path); void loadFossilSettings(); - QString getFossilPath(); QString getFossilHttpAddress(); void updateDirView(); void updateFileView(); @@ -266,12 +273,13 @@ private: class QProgressBar *progressBar; class QShortcut *abortShortcut; bool operationAborted; + stringset_t selectedDirs; // The directory selected in the tree - Repository repo; - Repository & getRepo() { return repo; } + Workspace repo; + Workspace & getRepo() { return repo; } - Bridge & fossil() { return repo.bridge; } - const Bridge & fossil() const { return repo.bridge; } + Bridge & fossil() { return repo.fossil(); } + const Bridge & fossil() const { return repo.fossil(); } Settings &settings; QStringList workspaceHistory; From 2ad805ecb5c42518f3a995ab5186eef282510599 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 11:04:43 +0000 Subject: [PATCH 36/90] Renamed getRepo to getWorkspace FossilOrigin-Name: 654259ef3bb3e7e2cc43a85637a8320b501a6593 --- manifest | 14 +++---- manifest.uuid | 2 +- src/MainWindow.cpp | 98 +++++++++++++++++++++++----------------------- src/MainWindow.h | 8 ++-- 4 files changed, 61 insertions(+), 61 deletions(-) diff --git a/manifest b/manifest index 987de87..3e1c660 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sRepository\sto\sWorkspace\nWorkspace\smember\saccess\sis\snow\svia\smethods\n -D 2015-04-30T10:59:25.241 +C Renamed\sgetRepo\sto\sgetWorkspace +D 2015-04-30T11:04:43.529 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp f04effe7dbb5712f1214a8778ab372fef44c0e01 -F src/MainWindow.h c7c22c37b157cb8fcddb6345617a7c3fe663c903 +F src/MainWindow.cpp 8b6494e94cf3c57fe2e4a9e0487813ad9a8f2f01 +F src/MainWindow.h fee72a22492e96e14913196a836c98c606a62904 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 0975c824a72cacd0d2fb5ee5d3c38c145712a0b4 -R d87d054d9f8c171e265c82e724cde68f +P 2c664b7db2644e1434b5e2d9e83a103ca2093cb3 +R 2b9cf73416e24c6a53fa097140c7953a U kostas -Z 5be810239a33cadc87f4c7d50c02c8a6 +Z 2c7925006fc58e53b77ddfe1866d7029 diff --git a/manifest.uuid b/manifest.uuid index ce37cb7..0d2ab1e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2c664b7db2644e1434b5e2d9e83a103ca2093cb3 \ No newline at end of file +654259ef3bb3e7e2cc43a85637a8320b501a6593 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 9954408..e7946aa 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -85,7 +85,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP separator->setSeparator(true); // TableView - ui->tableView->setModel(&getRepo().getFileModel()); + ui->tableView->setModel(&getWorkspace().getFileModel()); ui->tableView->addAction(ui->actionDiff); ui->tableView->addAction(ui->actionHistory); @@ -103,8 +103,8 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP QStringList header; header << tr("Status") << tr("File") << tr("Extension") << tr("Modified") << tr("Path"); - getRepo().getFileModel().setHorizontalHeaderLabels(header); - getRepo().getFileModel().horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); + getWorkspace().getFileModel().setHorizontalHeaderLabels(header); + getWorkspace().getFileModel().horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); // Needed on OSX as the preset value from the GUI editor is not always reflected ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); @@ -116,7 +116,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->tableView->horizontalHeader()->setStretchLastSection(true); // TreeView - ui->treeView->setModel(&getRepo().getDirModel()); + ui->treeView->setModel(&getWorkspace().getDirModel()); connect( ui->treeView->selectionModel(), SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection &) ), SLOT( onTreeViewSelectionChanged(const QItemSelection &, const QItemSelection &) ), @@ -132,7 +132,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->treeView->addAction(ui->actionOpenFolder); // StashView - ui->tableViewStash->setModel(&getRepo().getStashModel()); + ui->tableViewStash->setModel(&getWorkspace().getStashModel()); ui->tableViewStash->addAction(ui->actionApplyStash); ui->tableViewStash->addAction(ui->actionDiffStash); ui->tableViewStash->addAction(ui->actionDeleteStash); @@ -210,7 +210,7 @@ MainWindow::~MainWindow() updateSettings(); // Dispose RepoFiles - for(Workspace::filemap_t::iterator it = getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) + for(Workspace::filemap_t::iterator it = getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) delete *it; delete ui; @@ -556,8 +556,8 @@ bool MainWindow::refresh() { setStatus(tr("No workspace detected.")); enableActions(false); - getRepo().getFileModel().removeRows(0, getRepo().getFileModel().rowCount()); - getRepo().getDirModel().clear(); + getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); + getWorkspace().getDirModel().clear(); setWindowTitle(title); return false; } @@ -565,8 +565,8 @@ bool MainWindow::refresh() { setStatus(tr("Old repository schema detected. Consider running 'fossil rebuild'")); enableActions(false); - getRepo().getFileModel().removeRows(0, getRepo().getFileModel().rowCount()); - getRepo().getDirModel().clear(); + getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); + getWorkspace().getDirModel().clear(); setWindowTitle(title); return true; } @@ -724,7 +724,7 @@ _done: void MainWindow::scanWorkspace() { setBusy(true); - getRepo().scanWorkspace(ui->actionViewUnknown->isChecked(), + getWorkspace().scanWorkspace(ui->actionViewUnknown->isChecked(), ui->actionViewIgnored->isChecked(), ui->actionViewModified->isChecked(), ui->actionViewUnchanged->isChecked(), @@ -780,18 +780,18 @@ static void addPathToTree(QStandardItem &root, const QString &path) void MainWindow::updateDirView() { // Directory View - getRepo().getDirModel().clear(); + getWorkspace().getDirModel().clear(); QStringList header; header << tr("Folders"); - getRepo().getDirModel().setHorizontalHeaderLabels(header); + getWorkspace().getDirModel().setHorizontalHeaderLabels(header); QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), fossil().getProjectName()); root->setData(""); // Empty Path root->setEditable(false); - getRepo().getDirModel().appendRow(root); - for(stringset_t::iterator it = getRepo().getPaths().begin(); it!=getRepo().getPaths().end(); ++it) + getWorkspace().getDirModel().appendRow(root); + for(stringset_t::iterator it = getWorkspace().getPaths().begin(); it!=getWorkspace().getPaths().end(); ++it) { const QString &dir = *it; if(dir.isEmpty()) @@ -807,7 +807,7 @@ void MainWindow::updateDirView() void MainWindow::updateFileView() { // Clear content except headers - getRepo().getFileModel().removeRows(0, getRepo().getFileModel().rowCount()); + getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); struct { RepoFile::EntryType type; QString text; const char *icon; } stats[] = @@ -826,7 +826,7 @@ void MainWindow::updateFileView() bool display_path = viewMode==VIEWMODE_LIST || selectedDirs.count() > 1; size_t item_id=0; - for(Workspace::filemap_t::iterator it = getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) + for(Workspace::filemap_t::iterator it = getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) { const RepoFile &e = *it.value(); QString path = e.getPath(); @@ -851,13 +851,13 @@ void MainWindow::updateFileView() QStandardItem *status = new QStandardItem(QIcon(status_icon_path), status_text); status->setToolTip(status_text); - getRepo().getFileModel().setItem(item_id, COLUMN_STATUS, status); + getWorkspace().getFileModel().setItem(item_id, COLUMN_STATUS, status); QFileInfo finfo = e.getFileInfo(); QIcon icon = icon_provider.icon(finfo); QStandardItem *filename_item = 0; - getRepo().getFileModel().setItem(item_id, COLUMN_PATH, new QStandardItem(path)); + getWorkspace().getFileModel().setItem(item_id, COLUMN_PATH, new QStandardItem(path)); if(display_path) filename_item = new QStandardItem(icon, QDir::toNativeSeparators(e.getFilePath())); @@ -867,10 +867,10 @@ void MainWindow::updateFileView() Q_ASSERT(filename_item); // Keep the path in the user data filename_item->setData(e.getFilePath()); - getRepo().getFileModel().setItem(item_id, COLUMN_FILENAME, filename_item); + getWorkspace().getFileModel().setItem(item_id, COLUMN_FILENAME, filename_item); - getRepo().getFileModel().setItem(item_id, COLUMN_EXTENSION, new QStandardItem(finfo.suffix())); - getRepo().getFileModel().setItem(item_id, COLUMN_MODIFIED, new QStandardItem(finfo.lastModified().toString(Qt::SystemLocaleShortDate))); + getWorkspace().getFileModel().setItem(item_id, COLUMN_EXTENSION, new QStandardItem(finfo.suffix())); + getWorkspace().getFileModel().setItem(item_id, COLUMN_MODIFIED, new QStandardItem(finfo.lastModified().toString(Qt::SystemLocaleShortDate))); ++item_id; } @@ -881,17 +881,17 @@ void MainWindow::updateFileView() //------------------------------------------------------------------------------ void MainWindow::updateStashView() { - getRepo().getStashModel().clear(); + getWorkspace().getStashModel().clear(); QStringList header; header << tr("Stashes"); - getRepo().getStashModel().setHorizontalHeaderLabels(header); + getWorkspace().getStashModel().setHorizontalHeaderLabels(header); - for(stashmap_t::iterator it=getRepo().getStashes().begin(); it!=getRepo().getStashes().end(); ++it) + for(stashmap_t::iterator it=getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) { QStandardItem *item = new QStandardItem(it.key()); item->setToolTip(it.key()); - getRepo().getStashModel().appendRow(item); + getWorkspace().getStashModel().appendRow(item); } ui->tableViewStash->resizeColumnsToContents(); ui->tableViewStash->resizeRowsToContents(); @@ -945,7 +945,7 @@ void MainWindow::applySettings() store->endArray(); store->beginReadArray("FileColumns"); - for(int i=0; isetArrayIndex(i); if(store->contains("Width")) @@ -1019,8 +1019,8 @@ void MainWindow::updateSettings() } store->endArray(); - store->beginWriteArray("FileColumns", getRepo().getFileModel().columnCount()); - for(int i=0; ibeginWriteArray("FileColumns", getWorkspace().getFileModel().columnCount()); + for(int i=0; isetArrayIndex(i); store->setValue("Width", ui->tableView->columnWidth(i)); @@ -1086,7 +1086,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths) for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) { const QModelIndex &mi = *mi_it; - QVariant data = getRepo().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); + QVariant data = getWorkspace().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); paths.insert(data.toString()); } } @@ -1094,7 +1094,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths) // Select all workspace files that match the includeMask void MainWindow::getAllFilenames(QStringList &filenames, int includeMask) { - for(Workspace::filemap_t::iterator it=getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) + for(Workspace::filemap_t::iterator it=getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) { const RepoFile &e = *(*it); @@ -1118,7 +1118,7 @@ void MainWindow::getDirViewSelection(QStringList &filenames, int includeMask, bo } // Select the actual files form the selected directories - for(Workspace::filemap_t::iterator it=getRepo().getFiles().begin(); it!=getRepo().getFiles().end(); ++it) + for(Workspace::filemap_t::iterator it=getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) { const RepoFile &e = *(*it); @@ -1172,10 +1172,10 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b if(mi.column()!=COLUMN_FILENAME) continue; - QVariant data = getRepo().getFileModel().data(mi, Qt::UserRole+1); + QVariant data = getWorkspace().getFileModel().data(mi, Qt::UserRole+1); QString filename = data.toString(); - Workspace::filemap_t::iterator e_it = getRepo().getFiles().find(filename); - Q_ASSERT(e_it!=getRepo().getFiles().end()); + Workspace::filemap_t::iterator e_it = getWorkspace().getFiles().find(filename); + Q_ASSERT(e_it!=getWorkspace().getFiles().end()); const RepoFile &e = *e_it.value(); // Skip unwanted files @@ -1202,7 +1202,7 @@ void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) if(mi.column()!=0) continue; - QString name = getRepo().getStashModel().data(mi).toString(); + QString name = getWorkspace().getStashModel().data(mi).toString(); stashNames.append(name); } } @@ -1706,7 +1706,7 @@ void MainWindow::onTreeViewSelectionChanged(const QItemSelection &/*selected*/, for(int i=0; igetPath().indexOf(old_path)!=0) continue; @@ -1935,7 +1935,7 @@ void MainWindow::on_actionNewStash_triggered() } // Check that this stash does not exist - for(stashmap_t::iterator it=getRepo().getStashes().begin(); it!=getRepo().getStashes().end(); ++it) + for(stashmap_t::iterator it=getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) { if(stash_name == it.key()) { @@ -1963,8 +1963,8 @@ void MainWindow::on_actionApplyStash_triggered() // Apply stashes for(QStringList::iterator it=stashes.begin(); it!=stashes.end(); ++it) { - stashmap_t::iterator id_it = getRepo().getStashes().find(*it); - Q_ASSERT(id_it!=getRepo().getStashes().end()); + stashmap_t::iterator id_it = getWorkspace().getStashes().find(*it); + Q_ASSERT(id_it!=getWorkspace().getStashes().end()); if(!fossil().stashApply(*id_it)) { @@ -1976,8 +1976,8 @@ void MainWindow::on_actionApplyStash_triggered() // Delete stashes for(QStringList::iterator it=stashes.begin(); delete_stashes && it!=stashes.end(); ++it) { - stashmap_t::iterator id_it = getRepo().getStashes().find(*it); - Q_ASSERT(id_it!=getRepo().getStashes().end()); + stashmap_t::iterator id_it = getWorkspace().getStashes().find(*it); + Q_ASSERT(id_it!=getWorkspace().getStashes().end()); if(!fossil().stashDrop(*id_it)) { @@ -2004,8 +2004,8 @@ void MainWindow::on_actionDeleteStash_triggered() // Delete stashes for(QStringList::iterator it=stashes.begin(); it!=stashes.end(); ++it) { - stashmap_t::iterator id_it = getRepo().getStashes().find(*it); - Q_ASSERT(id_it!=getRepo().getStashes().end()); + stashmap_t::iterator id_it = getWorkspace().getStashes().find(*it); + Q_ASSERT(id_it!=getWorkspace().getStashes().end()); if(!fossil().stashDrop(*id_it)) { @@ -2026,8 +2026,8 @@ void MainWindow::on_actionDiffStash_triggered() if(stashes.length() != 1) return; - stashmap_t::iterator id_it = getRepo().getStashes().find(*stashes.begin()); - Q_ASSERT(id_it!=getRepo().getStashes().end()); + stashmap_t::iterator id_it = getWorkspace().getStashes().find(*stashes.begin()); + Q_ASSERT(id_it!=getWorkspace().getStashes().end()); // Run diff fossil().stashDiff(*id_it); diff --git a/src/MainWindow.h b/src/MainWindow.h index 9e48e56..1487f63 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -275,11 +275,11 @@ private: bool operationAborted; stringset_t selectedDirs; // The directory selected in the tree - Workspace repo; - Workspace & getRepo() { return repo; } + Workspace workspace; + Workspace & getWorkspace() { return workspace; } - Bridge & fossil() { return repo.fossil(); } - const Bridge & fossil() const { return repo.fossil(); } + Bridge & fossil() { return workspace.fossil(); } + const Bridge & fossil() const { return workspace.fossil(); } Settings &settings; QStringList workspaceHistory; From 3ae76ce837a517fc825214a27984a7a652f6eb55 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 11:10:27 +0000 Subject: [PATCH 37/90] Refactored Workspace cleanup FossilOrigin-Name: 3a653a3761f6f6e565762b8730bf5f7447ca2d2b --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 29 +++++++++++++++++++---------- src/MainWindow.h | 4 ++++ 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index 3e1c660..75c018a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sgetRepo\sto\sgetWorkspace -D 2015-04-30T11:04:43.529 +C Refactored\sWorkspace\scleanup +D 2015-04-30T11:10:27.176 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 8b6494e94cf3c57fe2e4a9e0487813ad9a8f2f01 -F src/MainWindow.h fee72a22492e96e14913196a836c98c606a62904 +F src/MainWindow.cpp eef87990ce725c03e0f874548663864aae59d28d +F src/MainWindow.h fa49c7c005cf8b2be71d84302e41444d73a828da F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 2c664b7db2644e1434b5e2d9e83a103ca2093cb3 -R 2b9cf73416e24c6a53fa097140c7953a +P 654259ef3bb3e7e2cc43a85637a8320b501a6593 +R 877ff1e9d9c7da6aaf633c7829698f81 U kostas -Z 2c7925006fc58e53b77ddfe1866d7029 +Z 708ed1db241d1458ef9161843ffc20f5 diff --git a/manifest.uuid b/manifest.uuid index 0d2ab1e..243bb59 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -654259ef3bb3e7e2cc43a85637a8320b501a6593 \ No newline at end of file +3a653a3761f6f6e565762b8730bf5f7447ca2d2b \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index e7946aa..5178433 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -209,12 +209,15 @@ MainWindow::~MainWindow() stopUI(); updateSettings(); - // Dispose RepoFiles - for(Workspace::filemap_t::iterator it = getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) - delete *it; - delete ui; } + +//----------------------------------------------------------------------------- +Workspace::~Workspace() +{ + clearState(); +} + //----------------------------------------------------------------------------- const QString &MainWindow::getCurrentWorkspace() { @@ -583,6 +586,17 @@ bool MainWindow::refresh() return true; } +//------------------------------------------------------------------------------ +void Workspace::clearState() +{ + // Dispose RepoFiles + foreach(RepoFile *r, getFiles()) + delete r; + + getFiles().clear(); + getPaths().clear(); +} + //------------------------------------------------------------------------------ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted) { @@ -600,12 +614,7 @@ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifie bool scan_files = scanLocal; - // Dispose RepoFiles - for(Workspace::filemap_t::iterator it = getFiles().begin(); it!=getFiles().end(); ++it) - delete *it; - - getFiles().clear(); - getPaths().clear(); + clearState(); operationAborted = false; diff --git a/src/MainWindow.h b/src/MainWindow.h index 1487f63..1975b20 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -108,9 +108,13 @@ typedef QSet stringset_t; class Workspace { public: + ~Workspace(); + typedef QList filelist_t; typedef QMap filemap_t; + void clearState(); + Bridge & fossil() { return bridge; } const Bridge & fossil() const { return bridge; } From 1b2cebdc7fe89c397c4d1024a95ca73387768193 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 11:21:29 +0000 Subject: [PATCH 38/90] Moved Workspace to separate file FossilOrigin-Name: 4c84ad9b0b25c9a77d935f9598b6705498d8e0ae --- fuel.pro | 6 +- manifest | 22 +++--- manifest.uuid | 2 +- src/CloneDialog.cpp | 1 + src/CloneDialog.h | 4 - src/MainWindow.cpp | 187 -------------------------------------------- src/MainWindow.h | 129 +----------------------------- src/Utils.h | 8 +- 8 files changed, 24 insertions(+), 335 deletions(-) diff --git a/fuel.pro b/fuel.pro index d5461a1..5e7244e 100644 --- a/fuel.pro +++ b/fuel.pro @@ -52,7 +52,8 @@ SOURCES += src/main.cpp\ src/LoggedProcess.cpp \ src/BrowserWidget.cpp \ src/CustomWebView.cpp \ - src/Bridge.cpp + src/Bridge.cpp \ + src/Workspace.cpp HEADERS += src/MainWindow.h \ src/CommitDialog.h \ @@ -64,7 +65,8 @@ HEADERS += src/MainWindow.h \ src/LoggedProcess.h \ src/BrowserWidget.h \ src/CustomWebView.h \ - src/Bridge.h + src/Bridge.h \ + src/Workspace.h FORMS += ui/MainWindow.ui \ ui/CommitDialog.ui \ diff --git a/manifest b/manifest index 75c018a..9bd8e7e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactored\sWorkspace\scleanup -D 2015-04-30T11:10:27.176 +C Moved\sWorkspace\sto\sseparate\sfile +D 2015-04-30T11:21:29.350 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro fe3ce3763affa5e809b1154fffd33b437d03ca5b +F fuel.pro 5db250757a6063a32663ab4813ec4d02912fa2f1 F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -188,8 +188,8 @@ F src/Bridge.cpp 96aca0460c87ec2cdd154527a0583a00309ebcea F src/Bridge.h 9a3a3a52eb64c673a9dedac1d5d15a44aac71bc7 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 -F src/CloneDialog.cpp 812ef7d361c16da21540b7047c9d4d5e74f18539 -F src/CloneDialog.h e9f0fc8e5cc5ea2e7c43d6e77b5c4a9cc850b59e +F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 +F src/CloneDialog.h 8813d91f893eb3eb86a4ea5e50f9a53a0ea07047 F src/CommitDialog.cpp 5300522ac11bc1096a11a6ce22f8c1665d4afc05 F src/CommitDialog.h f1ee8db92103164e7db55a8407ccdcff24571b72 F src/CustomWebView.cpp b7dd0c41977c2cba005df07ed8967ba6f58d07d9 @@ -200,12 +200,12 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp eef87990ce725c03e0f874548663864aae59d28d -F src/MainWindow.h fa49c7c005cf8b2be71d84302e41444d73a828da +F src/MainWindow.cpp 4c93bd6ef8391332a153f8e820b3baa4b5405ab6 +F src/MainWindow.h 59ba144c9a73a1398afc8c49516d93ea56cd9fc4 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca -F src/Utils.h bece95535a98daeb3ea0653352c0a1bb63d39ba8 +F src/Utils.h 48ca8ab324068df2bf5120c961216c297b94cb45 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 654259ef3bb3e7e2cc43a85637a8320b501a6593 -R 877ff1e9d9c7da6aaf633c7829698f81 +P 3a653a3761f6f6e565762b8730bf5f7447ca2d2b +R a4168b45358c0251d9f518a38873c7f1 U kostas -Z 708ed1db241d1458ef9161843ffc20f5 +Z 78ce8dabd7aa41822675709425667809 diff --git a/manifest.uuid b/manifest.uuid index 243bb59..d5136a7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3a653a3761f6f6e565762b8730bf5f7447ca2d2b \ No newline at end of file +4c84ad9b0b25c9a77d935f9598b6705498d8e0ae \ No newline at end of file diff --git a/src/CloneDialog.cpp b/src/CloneDialog.cpp index 0f6003d..ff1024b 100644 --- a/src/CloneDialog.cpp +++ b/src/CloneDialog.cpp @@ -5,6 +5,7 @@ #include #include #include +#include "Utils.h" //----------------------------------------------------------------------------- CloneDialog::CloneDialog(QWidget *parent) : diff --git a/src/CloneDialog.h b/src/CloneDialog.h index b2fdae3..884db5a 100644 --- a/src/CloneDialog.h +++ b/src/CloneDialog.h @@ -3,10 +3,6 @@ #include -#define FOSSIL_CHECKOUT1 "_FOSSIL_" -#define FOSSIL_CHECKOUT2 ".fslckout" -#define FOSSIL_EXT "fossil" - namespace Ui { class CloneDialog; } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 5178433..119c387 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -8,22 +8,14 @@ #include #include #include -#include -#include #include -#include #include #include #include -#include -#include -#include -#include #include "CommitDialog.h" #include "FileActionDialog.h" #include "CloneDialog.h" #include "Utils.h" -#include "LoggedProcess.h" //----------------------------------------------------------------------------- enum @@ -212,12 +204,6 @@ MainWindow::~MainWindow() delete ui; } -//----------------------------------------------------------------------------- -Workspace::~Workspace() -{ - clearState(); -} - //----------------------------------------------------------------------------- const QString &MainWindow::getCurrentWorkspace() { @@ -489,38 +475,6 @@ void MainWindow::onOpenRecent() openWorkspace(workspace); } -//------------------------------------------------------------------------------ -bool Workspace::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort, Bridge::UICallback &uiCallback) -{ - QDir dir(dirPath); - - uiCallback.updateProcess(dirPath); - - QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot); - for (int i=0; ifileName(); - QString fullpath = it->absoluteFilePath(); - - // Skip fossil files - if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!fossil().getRepositoryFile().isEmpty() && QFileInfo(fullpath) == QFileInfo(fossil().getRepositoryFile()))) - continue; - - RepoFile *rf = new RepoFile(*it, RepoFile::TYPE_UNKNOWN, wkdir); - getFiles().insert(rf->getFilePath(), rf); - getPaths().insert(rf->getPath()); - } - } - uiCallback.endProcess(); - - uiCallback.beginProcess(QObject::tr("Updating...")); - - // Update Files and Directories - - for(QStringList::iterator line_it=res.begin(); line_it!=res.end(); ++line_it) - { - QString line = (*line_it).trimmed(); - if(line.length()==0) - continue; - - QString status_text = line.left(10).trimmed(); - QString fname = line.right(line.length() - 10).trimmed(); - RepoFile::EntryType type = RepoFile::TYPE_UNKNOWN; - - // Generate a RepoFile for all non-existant fossil files - // or for all files if we skipped scanning the workspace - bool add_missing = !scan_files; - - if(status_text=="EDITED") - type = RepoFile::TYPE_EDITTED; - else if(status_text=="ADDED") - type = RepoFile::TYPE_ADDED; - else if(status_text=="DELETED") - { - type = RepoFile::TYPE_DELETED; - add_missing = true; - } - else if(status_text=="MISSING") - { - type = RepoFile::TYPE_MISSING; - add_missing = true; - } - else if(status_text=="RENAMED") - type = RepoFile::TYPE_RENAMED; - else if(status_text=="UNCHANGED") - type = RepoFile::TYPE_UNCHANGED; - else if(status_text=="CONFLICT") - type = RepoFile::TYPE_CONFLICTED; - - // Filter unwanted file types - if( ((type & RepoFile::TYPE_MODIFIED) && !scanModified) || - ((type & RepoFile::TYPE_UNCHANGED) && !scanUnchanged)) - { - getFiles().remove(fname); - continue; - } - else - add_missing = true; - - Workspace::filemap_t::iterator it = getFiles().find(fname); - - RepoFile *rf = 0; - if(add_missing && it==getFiles().end()) - { - QFileInfo info(wkdir+QDir::separator()+fname); - rf = new RepoFile(info, type, wkdir); - getFiles().insert(rf->getFilePath(), rf); - } - - if(!rf) - { - it = getFiles().find(fname); - Q_ASSERT(it!=getFiles().end()); - rf = *it; - } - - rf->setType(type); - - QString path = rf->getPath(); - getPaths().insert(path); - } - - // Load the stash - fossil().stashList(getStashes()); -_done: - uiCallback.endProcess(); -} //------------------------------------------------------------------------------ void MainWindow::scanWorkspace() diff --git a/src/MainWindow.h b/src/MainWindow.h index 1975b20..4a36ed1 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -2,142 +2,15 @@ #define MAINWINDOW_H #include -#include #include -#include -#include -#include -#include -#include #include "SettingsDialog.h" -#include "Bridge.h" +#include "Workspace.h" namespace Ui { class MainWindow; } -////////////////////////////////////////////////////////////////////////// -// RepoFile -////////////////////////////////////////////////////////////////////////// -struct RepoFile -{ - enum EntryType - { - TYPE_UNKNOWN = 1<<0, - TYPE_UNCHANGED = 1<<1, - TYPE_EDITTED = 1<<2, - TYPE_ADDED = 1<<3, - TYPE_DELETED = 1<<4, - TYPE_MISSING = 1<<5, - TYPE_RENAMED = 1<<6, - TYPE_CONFLICTED = 1<<7, - TYPE_MODIFIED = TYPE_EDITTED|TYPE_ADDED|TYPE_DELETED|TYPE_MISSING|TYPE_RENAMED|TYPE_CONFLICTED, - TYPE_REPO = TYPE_UNCHANGED|TYPE_MODIFIED, - TYPE_ALL = TYPE_UNKNOWN|TYPE_REPO - }; - RepoFile(QFileInfo &info, EntryType type, const QString &repoPath) - { - FileInfo = info; - Type = type; - FilePath = getRelativeFilename(repoPath); - Path = FileInfo.absolutePath(); - - // Strip the workspace path from the path - Q_ASSERT(Path.indexOf(repoPath)==0); - Path = Path.mid(repoPath.length()+1); - } - - bool isType(EntryType t) const - { - return Type == t; - } - - void setType(EntryType t) - { - Type = t; - } - - EntryType getType() const - { - return Type; - } - - QFileInfo getFileInfo() const - { - return FileInfo; - } - - const QString &getFilePath() const - { - return FilePath; - } - - QString getFilename() const - { - return FileInfo.fileName(); - } - - const QString &getPath() const - { - return Path; - } - - QString getRelativeFilename(const QString &path) - { - QString abs_base_dir = QDir(path).absolutePath(); - - QString relative = FileInfo.absoluteFilePath(); - int index = relative.indexOf(abs_base_dir); - if(index<0) - return QString(""); - - return relative.right(relative.length() - abs_base_dir.length()-1); - } - -private: - QFileInfo FileInfo; - EntryType Type; - QString FilePath; - QString Path; -}; - - -typedef QSet stringset_t; - -class Workspace -{ -public: - ~Workspace(); - - typedef QList filelist_t; - typedef QMap filemap_t; - - void clearState(); - - Bridge & fossil() { return bridge; } - const Bridge & fossil() const { return bridge; } - - static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, Bridge::UICallback &uiCallback); - void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted); - - QStandardItemModel &getFileModel() { return repoFileModel; } - QStandardItemModel &getDirModel() { return repoDirModel; } - QStandardItemModel &getStashModel() { return repoStashModel; } - filemap_t &getFiles() { return workspaceFiles; } - stringset_t &getPaths() { return pathSet; } - stashmap_t &getStashes() { return stashMap; } - -private: - Bridge bridge; - filemap_t workspaceFiles; - stringset_t pathSet; - stashmap_t stashMap; - - QStandardItemModel repoFileModel; - QStandardItemModel repoDirModel; - QStandardItemModel repoStashModel; -}; ////////////////////////////////////////////////////////////////////////// // MainWindow diff --git a/src/Utils.h b/src/Utils.h index 1d8a910..36d66bb 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -4,12 +4,16 @@ #include #include +#define COUNTOF(array) (sizeof(array)/sizeof(array[0])) +#define FOSSIL_CHECKOUT1 "_FOSSIL_" +#define FOSSIL_CHECKOUT2 ".fslckout" +#define FOSSIL_EXT "fossil" + + QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, const QString &query, QMessageBox::StandardButtons buttons = QMessageBox::Yes|QMessageBox::No); QString QuotePath(const QString &path); QStringList QuotePaths(const QStringList &paths); -#define COUNTOF(array) (sizeof(array)/sizeof(array[0])) - #ifdef Q_OS_WIN bool ShowExplorerMenu(HWND hwnd, const QString &path, const QPoint &qpoint); #endif From e4aebbe52c405ec651fa4b812335b2a46a31ddab Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 11:29:21 +0000 Subject: [PATCH 39/90] Renamed RepoFile to WorkspaceFile FossilOrigin-Name: 8527bab97be43b2370eb03045dee3818fa8a2edf --- manifest | 14 ++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 50 +++++++++++++++++++++++----------------------- src/MainWindow.h | 8 ++++---- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/manifest b/manifest index 9bd8e7e..1d05f69 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Moved\sWorkspace\sto\sseparate\sfile -D 2015-04-30T11:21:29.350 +C Renamed\sRepoFile\sto\sWorkspaceFile +D 2015-04-30T11:29:21.110 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 4c93bd6ef8391332a153f8e820b3baa4b5405ab6 -F src/MainWindow.h 59ba144c9a73a1398afc8c49516d93ea56cd9fc4 +F src/MainWindow.cpp f6ffb8c6d1283a812084094426d51a5ea601fa35 +F src/MainWindow.h a10364f15b68ca12a8ed7a48ac35dd4da3645e28 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,7 +215,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 3a653a3761f6f6e565762b8730bf5f7447ca2d2b -R a4168b45358c0251d9f518a38873c7f1 +P 4c84ad9b0b25c9a77d935f9598b6705498d8e0ae +R 09e377e3947cb9dc34273000bdb7e135 U kostas -Z 78ce8dabd7aa41822675709425667809 +Z acf05986975f53be7b8c33e091697cd2 diff --git a/manifest.uuid b/manifest.uuid index d5136a7..fd271ac 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4c84ad9b0b25c9a77d935f9598b6705498d8e0ae \ No newline at end of file +8527bab97be43b2370eb03045dee3818fa8a2edf \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 119c387..19e6541 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -631,16 +631,16 @@ void MainWindow::updateFileView() // Clear content except headers getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); - struct { RepoFile::EntryType type; QString text; const char *icon; } + struct { WorkspaceFile::Type type; QString text; const char *icon; } stats[] = { - { RepoFile::TYPE_EDITTED, tr("Edited"), ":icons/icons/Button Blank Yellow-01.png" }, - { RepoFile::TYPE_UNCHANGED, tr("Unchanged"), ":icons/icons/Button Blank Green-01.png" }, - { RepoFile::TYPE_ADDED, tr("Added"), ":icons/icons/Button Add-01.png" }, - { RepoFile::TYPE_DELETED, tr("Deleted"), ":icons/icons/Button Close-01.png" }, - { RepoFile::TYPE_RENAMED, tr("Renamed"), ":icons/icons/Button Reload-01.png" }, - { RepoFile::TYPE_MISSING, tr("Missing"), ":icons/icons/Button Help-01.png" }, - { RepoFile::TYPE_CONFLICTED, tr("Conflicted"), ":icons/icons/Button Blank Red-01.png" }, + { WorkspaceFile::TYPE_EDITTED, tr("Edited"), ":icons/icons/Button Blank Yellow-01.png" }, + { WorkspaceFile::TYPE_UNCHANGED, tr("Unchanged"), ":icons/icons/Button Blank Green-01.png" }, + { WorkspaceFile::TYPE_ADDED, tr("Added"), ":icons/icons/Button Add-01.png" }, + { WorkspaceFile::TYPE_DELETED, tr("Deleted"), ":icons/icons/Button Close-01.png" }, + { WorkspaceFile::TYPE_RENAMED, tr("Renamed"), ":icons/icons/Button Reload-01.png" }, + { WorkspaceFile::TYPE_MISSING, tr("Missing"), ":icons/icons/Button Help-01.png" }, + { WorkspaceFile::TYPE_CONFLICTED, tr("Conflicted"), ":icons/icons/Button Blank Red-01.png" }, }; QFileIconProvider icon_provider; @@ -650,7 +650,7 @@ void MainWindow::updateFileView() size_t item_id=0; for(Workspace::filemap_t::iterator it = getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) { - const RepoFile &e = *it.value(); + const WorkspaceFile &e = *it.value(); QString path = e.getPath(); // In Tree mode, filter all items not included in the current dir @@ -918,7 +918,7 @@ void MainWindow::getAllFilenames(QStringList &filenames, int includeMask) { for(Workspace::filemap_t::iterator it=getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) { - const RepoFile &e = *(*it); + const WorkspaceFile &e = *(*it); // Skip unwanted file types if(!(includeMask & e.getType())) @@ -942,7 +942,7 @@ void MainWindow::getDirViewSelection(QStringList &filenames, int includeMask, bo // Select the actual files form the selected directories for(Workspace::filemap_t::iterator it=getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) { - const RepoFile &e = *(*it); + const WorkspaceFile &e = *(*it); // Skip unwanted file types if(!(includeMask & e.getType())) @@ -998,7 +998,7 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b QString filename = data.toString(); Workspace::filemap_t::iterator e_it = getWorkspace().getFiles().find(filename); Q_ASSERT(e_it!=getWorkspace().getFiles().end()); - const RepoFile &e = *e_it.value(); + const WorkspaceFile &e = *e_it.value(); // Skip unwanted files if(!(includeMask & e.getType())) @@ -1039,7 +1039,7 @@ bool MainWindow::diffFile(const QString &repoFile) void MainWindow::on_actionDiff_triggered() { QStringList selection; - getSelectionFilenames(selection, RepoFile::TYPE_REPO); + getSelectionFilenames(selection, WorkspaceFile::TYPE_REPO); for(QStringList::iterator it = selection.begin(); it!=selection.end(); ++it) if(!diffFile(*it)) @@ -1158,7 +1158,7 @@ void MainWindow::on_actionPull_triggered() void MainWindow::on_actionCommit_triggered() { QStringList commit_files; - getSelectionFilenames(commit_files, RepoFile::TYPE_MODIFIED, true); + getSelectionFilenames(commit_files, WorkspaceFile::TYPE_MODIFIED, true); if(commit_files.empty()) return; @@ -1191,7 +1191,7 @@ void MainWindow::on_actionCommit_triggered() // when committing after a merge where fossil thinks that we are trying to do // a partial commit which is not permitted. QStringList all_modified_files; - getAllFilenames(all_modified_files, RepoFile::TYPE_MODIFIED); + getAllFilenames(all_modified_files, WorkspaceFile::TYPE_MODIFIED); if(commit_files.size() != all_modified_files.size()) files = commit_files; @@ -1205,7 +1205,7 @@ void MainWindow::on_actionAdd_triggered() { // Get unknown files only QStringList selection; - getSelectionFilenames(selection, RepoFile::TYPE_UNKNOWN); + getSelectionFilenames(selection, WorkspaceFile::TYPE_UNKNOWN); if(selection.empty()) return; @@ -1222,10 +1222,10 @@ void MainWindow::on_actionAdd_triggered() void MainWindow::on_actionDelete_triggered() { QStringList repo_files; - getSelectionFilenames(repo_files, RepoFile::TYPE_REPO); + getSelectionFilenames(repo_files, WorkspaceFile::TYPE_REPO); QStringList unknown_files; - getSelectionFilenames(unknown_files, RepoFile::TYPE_UNKNOWN); + getSelectionFilenames(unknown_files, WorkspaceFile::TYPE_UNKNOWN); QStringList all_files = repo_files+unknown_files; @@ -1259,7 +1259,7 @@ void MainWindow::on_actionDelete_triggered() void MainWindow::on_actionRevert_triggered() { QStringList modified_files; - getSelectionFilenames(modified_files, RepoFile::TYPE_EDITTED|RepoFile::TYPE_ADDED|RepoFile::TYPE_DELETED|RepoFile::TYPE_MISSING|RepoFile::TYPE_CONFLICTED); + getSelectionFilenames(modified_files, WorkspaceFile::TYPE_EDITTED|WorkspaceFile::TYPE_ADDED|WorkspaceFile::TYPE_DELETED|WorkspaceFile::TYPE_MISSING|WorkspaceFile::TYPE_CONFLICTED); if(modified_files.empty()) return; @@ -1276,7 +1276,7 @@ void MainWindow::on_actionRevert_triggered() void MainWindow::on_actionRename_triggered() { QStringList repo_files; - getSelectionFilenames(repo_files, RepoFile::TYPE_REPO); + getSelectionFilenames(repo_files, WorkspaceFile::TYPE_REPO); if(repo_files.length()!=1) return; @@ -1614,7 +1614,7 @@ void MainWindow::on_actionRenameFolder_triggered() Workspace::filelist_t files_to_move; QStringList new_paths; QStringList operations; - foreach(RepoFile *r, getWorkspace().getFiles()) + foreach(WorkspaceFile *r, getWorkspace().getFiles()) { if(r->getPath().indexOf(old_path)!=0) continue; @@ -1641,7 +1641,7 @@ void MainWindow::on_actionRenameFolder_triggered() Q_ASSERT(files_to_move.length() == new_paths.length()); for(int i=0; igetFilename(); if(!fossil().renameFile(r->getFilePath(), new_file_path, false)) @@ -1677,7 +1677,7 @@ void MainWindow::on_actionRenameFolder_triggered() // Now that target directories exist copy files for(int i=0; igetFilename(); if(QFile::exists(new_file_path)) @@ -1698,7 +1698,7 @@ void MainWindow::on_actionRenameFolder_triggered() // Finally delete old files for(int i=0; igetFilePath())+"\n"); @@ -1737,7 +1737,7 @@ void MainWindow::on_actionViewStash_triggered() void MainWindow::on_actionNewStash_triggered() { QStringList stashed_files; - getSelectionFilenames(stashed_files, RepoFile::TYPE_MODIFIED, true); + getSelectionFilenames(stashed_files, WorkspaceFile::TYPE_MODIFIED, true); if(stashed_files.empty()) return; diff --git a/src/MainWindow.h b/src/MainWindow.h index 4a36ed1..6a9b610 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -35,12 +35,12 @@ private: void log(const QString &text, bool isHTML=false); void setStatus(const QString &text); bool uiRunning() const; - 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 getSelectionFilenames(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); + void getFileViewSelection(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); + void getDirViewSelection(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); void getStashViewSelection(QStringList &stashNames, bool allIfEmpty=false); void getSelectionPaths(stringset_t &paths); - void getAllFilenames(QStringList &filenames, int includeMask=RepoFile::TYPE_ALL); + void getAllFilenames(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL); bool startUI(); void stopUI(); void enableActions(bool on); From 9dff9370ce1d32a3d7933f4f78c8f47deade6937 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 11:37:04 +0000 Subject: [PATCH 40/90] Added missing Workspace.cpp/h FossilOrigin-Name: 2e7553cddf1db1c9e22e883276829a8032dc9afb --- manifest | 12 +-- manifest.uuid | 2 +- src/Workspace.cpp | 186 ++++++++++++++++++++++++++++++++++++++++++++++ src/Workspace.h | 135 +++++++++++++++++++++++++++++++++ 4 files changed, 329 insertions(+), 6 deletions(-) create mode 100644 src/Workspace.cpp create mode 100644 src/Workspace.h diff --git a/manifest b/manifest index 1d05f69..14a6fd9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sRepoFile\sto\sWorkspaceFile -D 2015-04-30T11:29:21.110 +C Added\smissing\sWorkspace.cpp/h +D 2015-04-30T11:37:04.334 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -206,6 +206,8 @@ F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 48ca8ab324068df2bf5120c961216c297b94cb45 +F src/Workspace.cpp dd657ecc61161e2a14e821424a76220cfd4ca8ce +F src/Workspace.h fa11507567ee6dc336e19d18dd9574da4823ae2f F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -215,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 4c84ad9b0b25c9a77d935f9598b6705498d8e0ae -R 09e377e3947cb9dc34273000bdb7e135 +P 8527bab97be43b2370eb03045dee3818fa8a2edf +R a0658af9a44eb2edc8f67837992ca8ff U kostas -Z acf05986975f53be7b8c33e091697cd2 +Z c61114eaf068b6a2a510be12e212e0db diff --git a/manifest.uuid b/manifest.uuid index fd271ac..fbf752a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8527bab97be43b2370eb03045dee3818fa8a2edf \ No newline at end of file +2e7553cddf1db1c9e22e883276829a8032dc9afb \ No newline at end of file diff --git a/src/Workspace.cpp b/src/Workspace.cpp new file mode 100644 index 0000000..841d5de --- /dev/null +++ b/src/Workspace.cpp @@ -0,0 +1,186 @@ +#include "Workspace.h" +#include +#include "Utils.h" + +//----------------------------------------------------------------------------- +Workspace::~Workspace() +{ + clearState(); +} + +//------------------------------------------------------------------------------ +void Workspace::clearState() +{ + // Dispose RepoFiles + foreach(WorkspaceFile *r, getFiles()) + delete r; + + getFiles().clear(); + getPaths().clear(); +} + +//------------------------------------------------------------------------------ +bool Workspace::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort, Bridge::UICallback &uiCallback) +{ + QDir dir(dirPath); + + uiCallback.updateProcess(dirPath); + + QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot); + for (int i=0; ifileName(); + QString fullpath = it->absoluteFilePath(); + + // Skip fossil files + if(filename == FOSSIL_CHECKOUT1 || filename == FOSSIL_CHECKOUT2 || (!fossil().getRepositoryFile().isEmpty() && QFileInfo(fullpath) == QFileInfo(fossil().getRepositoryFile()))) + continue; + + WorkspaceFile *rf = new WorkspaceFile(*it, WorkspaceFile::TYPE_UNKNOWN, wkdir); + getFiles().insert(rf->getFilePath(), rf); + getPaths().insert(rf->getPath()); + } + } + uiCallback.endProcess(); + + uiCallback.beginProcess(QObject::tr("Updating...")); + + // Update Files and Directories + + for(QStringList::iterator line_it=res.begin(); line_it!=res.end(); ++line_it) + { + QString line = (*line_it).trimmed(); + if(line.length()==0) + continue; + + QString status_text = line.left(10).trimmed(); + QString fname = line.right(line.length() - 10).trimmed(); + WorkspaceFile::Type type = WorkspaceFile::TYPE_UNKNOWN; + + // Generate a RepoFile for all non-existant fossil files + // or for all files if we skipped scanning the workspace + bool add_missing = !scan_files; + + if(status_text=="EDITED") + type = WorkspaceFile::TYPE_EDITTED; + else if(status_text=="ADDED") + type = WorkspaceFile::TYPE_ADDED; + else if(status_text=="DELETED") + { + type = WorkspaceFile::TYPE_DELETED; + add_missing = true; + } + else if(status_text=="MISSING") + { + type = WorkspaceFile::TYPE_MISSING; + add_missing = true; + } + else if(status_text=="RENAMED") + type = WorkspaceFile::TYPE_RENAMED; + else if(status_text=="UNCHANGED") + type = WorkspaceFile::TYPE_UNCHANGED; + else if(status_text=="CONFLICT") + type = WorkspaceFile::TYPE_CONFLICTED; + + // Filter unwanted file types + if( ((type & WorkspaceFile::TYPE_MODIFIED) && !scanModified) || + ((type & WorkspaceFile::TYPE_UNCHANGED) && !scanUnchanged)) + { + getFiles().remove(fname); + continue; + } + else + add_missing = true; + + Workspace::filemap_t::iterator it = getFiles().find(fname); + + WorkspaceFile *rf = 0; + if(add_missing && it==getFiles().end()) + { + QFileInfo info(wkdir+QDir::separator()+fname); + rf = new WorkspaceFile(info, type, wkdir); + getFiles().insert(rf->getFilePath(), rf); + } + + if(!rf) + { + it = getFiles().find(fname); + Q_ASSERT(it!=getFiles().end()); + rf = *it; + } + + rf->setType(type); + + QString path = rf->getPath(); + getPaths().insert(path); + } + + // Load the stash + fossil().stashList(getStashes()); +_done: + uiCallback.endProcess(); +} + diff --git a/src/Workspace.h b/src/Workspace.h new file mode 100644 index 0000000..cd2f8f3 --- /dev/null +++ b/src/Workspace.h @@ -0,0 +1,135 @@ +#ifndef WORKSPACE_H +#define WORKSPACE_H + +#include +#include +#include +#include +#include + +#include "Bridge.h" + +////////////////////////////////////////////////////////////////////////// +// RepoFile +////////////////////////////////////////////////////////////////////////// +struct WorkspaceFile +{ + enum Type + { + TYPE_UNKNOWN = 1<<0, + TYPE_UNCHANGED = 1<<1, + TYPE_EDITTED = 1<<2, + TYPE_ADDED = 1<<3, + TYPE_DELETED = 1<<4, + TYPE_MISSING = 1<<5, + TYPE_RENAMED = 1<<6, + TYPE_CONFLICTED = 1<<7, + TYPE_MODIFIED = TYPE_EDITTED|TYPE_ADDED|TYPE_DELETED|TYPE_MISSING|TYPE_RENAMED|TYPE_CONFLICTED, + TYPE_REPO = TYPE_UNCHANGED|TYPE_MODIFIED, + TYPE_ALL = TYPE_UNKNOWN|TYPE_REPO + }; + + WorkspaceFile(const QFileInfo &info, Type type, const QString &repoPath) + { + FileInfo = info; + FileType = type; + FilePath = getRelativeFilename(repoPath); + Path = FileInfo.absolutePath(); + + // Strip the workspace path from the path + Q_ASSERT(Path.indexOf(repoPath)==0); + Path = Path.mid(repoPath.length()+1); + } + + bool isType(Type t) const + { + return FileType == t; + } + + void setType(Type t) + { + FileType = t; + } + + Type getType() const + { + return FileType; + } + + QFileInfo getFileInfo() const + { + return FileInfo; + } + + const QString &getFilePath() const + { + return FilePath; + } + + QString getFilename() const + { + return FileInfo.fileName(); + } + + const QString &getPath() const + { + return Path; + } + + QString getRelativeFilename(const QString &path) + { + QString abs_base_dir = QDir(path).absolutePath(); + + QString relative = FileInfo.absoluteFilePath(); + int index = relative.indexOf(abs_base_dir); + if(index<0) + return QString(""); + + return relative.right(relative.length() - abs_base_dir.length()-1); + } + +private: + QFileInfo FileInfo; + Type FileType; + QString FilePath; + QString Path; +}; + + +typedef QSet stringset_t; + +class Workspace +{ +public: + ~Workspace(); + + typedef QList filelist_t; + typedef QMap filemap_t; + + void clearState(); + + Bridge & fossil() { return bridge; } + const Bridge & fossil() const { return bridge; } + + static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, Bridge::UICallback &uiCallback); + void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted); + + QStandardItemModel &getFileModel() { return repoFileModel; } + QStandardItemModel &getDirModel() { return repoDirModel; } + QStandardItemModel &getStashModel() { return repoStashModel; } + filemap_t &getFiles() { return workspaceFiles; } + stringset_t &getPaths() { return pathSet; } + stashmap_t &getStashes() { return stashMap; } + +private: + Bridge bridge; + filemap_t workspaceFiles; + stringset_t pathSet; + stashmap_t stashMap; + + QStandardItemModel repoFileModel; + QStandardItemModel repoDirModel; + QStandardItemModel repoStashModel; +}; + +#endif // WORKSPACE_H From dbfc4f10dacbda0bb0d98519ab29713d7f61787e Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 11:43:31 +0000 Subject: [PATCH 41/90] Moved UICallback and ScopedCallback to Utils FossilOrigin-Name: 717fb7a390f81af33ad40913960a30ff9c1c7a75 --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/Bridge.cpp | 24 +----------------------- src/Bridge.h | 13 +------------ src/MainWindow.h | 2 +- src/Utils.h | 27 +++++++++++++++++++++++++++ src/Workspace.cpp | 4 ++-- src/Workspace.h | 7 +++---- 8 files changed, 47 insertions(+), 54 deletions(-) diff --git a/manifest b/manifest index 14a6fd9..98184c9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\smissing\sWorkspace.cpp/h -D 2015-04-30T11:37:04.334 +C Moved\sUICallback\sand\sScopedCallback\sto\sUtils +D 2015-04-30T11:43:31.832 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,8 +184,8 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 96aca0460c87ec2cdd154527a0583a00309ebcea -F src/Bridge.h 9a3a3a52eb64c673a9dedac1d5d15a44aac71bc7 +F src/Bridge.cpp 5e67a6fd18dd3fdbc7f94addb47f1a8e50064318 +F src/Bridge.h cc0d0128e2d286aa7d578d1213bed100ee4c458e F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 @@ -201,13 +201,13 @@ F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp f6ffb8c6d1283a812084094426d51a5ea601fa35 -F src/MainWindow.h a10364f15b68ca12a8ed7a48ac35dd4da3645e28 +F src/MainWindow.h d91eda93c4b0ad4de12cfe8e0f069639f1842e95 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca -F src/Utils.h 48ca8ab324068df2bf5120c961216c297b94cb45 -F src/Workspace.cpp dd657ecc61161e2a14e821424a76220cfd4ca8ce -F src/Workspace.h fa11507567ee6dc336e19d18dd9574da4823ae2f +F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 +F src/Workspace.cpp a1ca37e803d6bccb9ddf1f80df66148438e6ea21 +F src/Workspace.h 515d6ded914dd8be10a611ebbb0e9befc8d64174 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -217,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 8527bab97be43b2370eb03045dee3818fa8a2edf -R a0658af9a44eb2edc8f67837992ca8ff +P 2e7553cddf1db1c9e22e883276829a8032dc9afb +R 20e7fdb7267d96eb9c994d7779618370 U kostas -Z c61114eaf068b6a2a510be12e212e0db +Z e23a9cc7623bde69f6e9e851375dd322 diff --git a/manifest.uuid b/manifest.uuid index fbf752a..57bb451 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2e7553cddf1db1c9e22e883276829a8032dc9afb \ No newline at end of file +717fb7a390f81af33ad40913960a30ff9c1c7a75 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index b7567a2..af41135 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -14,29 +14,7 @@ static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; // 19: [5c46757d4b9765] on 2012-04-22 04:41:15 static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); -#define FOSSIL_CHECKOUT1 "_FOSSIL_" -#define FOSSIL_CHECKOUT2 ".fslckout" -#define FOSSIL_EXT "fossil" - - /////////////////////////////////////////////////////////////////////////////// -class ScopedFossilStatus -{ -public: - ScopedFossilStatus(Bridge::UICallback *callback, const QString &text) : uiCallback(callback) - { - uiCallback->beginProcess(text); - } - - ~ScopedFossilStatus() - { - uiCallback->endProcess(); - } -private: - Bridge::UICallback *uiCallback; -}; - -//------------------------------------------------------------------------------ RepoStatus Bridge::getRepoStatus() { QStringList res; @@ -499,7 +477,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi QString status_msg = QObject::tr("Running Fossil"); if(args.length() > 0) status_msg = QString("Fossil %0").arg(args[0].toCaseFolded()); - ScopedFossilStatus status(uiCallback, status_msg); + ScopedStatus status(uiCallback, status_msg); // Generate args file const QStringList *final_args = &args; diff --git a/src/Bridge.h b/src/Bridge.h index 9bc7036..2edc9ab 100644 --- a/src/Bridge.h +++ b/src/Bridge.h @@ -5,7 +5,7 @@ class QStringList; #include #include #include -#include +#include "Utils.h" typedef QMap stashmap_t; @@ -30,17 +30,6 @@ enum RepoStatus class Bridge { public: - class UICallback - { - public: - virtual void logText(const QString &text, bool isHTML)=0; - virtual void beginProcess(const QString &text)=0; - virtual void updateProcess(const QString &text)=0; - virtual void endProcess()=0; - virtual QMessageBox::StandardButton Query(const QString &title, const QString &query, QMessageBox::StandardButtons buttons)=0; - }; - - Bridge() : operationAborted(false) , uiCallback(0) diff --git a/src/MainWindow.h b/src/MainWindow.h index 6a9b610..685b978 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -116,7 +116,7 @@ private slots: void on_tableView_customContextMenuRequested(const QPoint &pos); private: - class MainWinUICallback : public Bridge::UICallback + class MainWinUICallback : public UICallback { public: MainWinUICallback() : mainWindow(0) diff --git a/src/Utils.h b/src/Utils.h index 36d66bb..ebeb4b6 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -18,5 +18,32 @@ QStringList QuotePaths(const QStringList &paths); bool ShowExplorerMenu(HWND hwnd, const QString &path, const QPoint &qpoint); #endif +class UICallback +{ +public: + virtual void logText(const QString &text, bool isHTML)=0; + virtual void beginProcess(const QString &text)=0; + virtual void updateProcess(const QString &text)=0; + virtual void endProcess()=0; + virtual QMessageBox::StandardButton Query(const QString &title, const QString &query, QMessageBox::StandardButtons buttons)=0; +}; + + +class ScopedStatus +{ +public: + ScopedStatus(UICallback *callback, const QString &text) : uiCallback(callback) + { + uiCallback->beginProcess(text); + } + + ~ScopedStatus() + { + uiCallback->endProcess(); + } + +private: + UICallback *uiCallback; +}; #endif // UTILS_H diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 841d5de..2ddd9d1 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -20,7 +20,7 @@ void Workspace::clearState() } //------------------------------------------------------------------------------ -bool Workspace::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort, Bridge::UICallback &uiCallback) +bool Workspace::scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool &abort, UICallback &uiCallback) { QDir dir(dirPath); @@ -53,7 +53,7 @@ bool Workspace::scanDirectory(QFileInfoList &entries, const QString& dirPath, co } //------------------------------------------------------------------------------ -void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted) +void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, UICallback &uiCallback, bool &operationAborted) { // Scan all workspace files QFileInfoList all_files; diff --git a/src/Workspace.h b/src/Workspace.h index cd2f8f3..baffbed 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -6,11 +6,10 @@ #include #include #include - #include "Bridge.h" ////////////////////////////////////////////////////////////////////////// -// RepoFile +// WorkspaceFile ////////////////////////////////////////////////////////////////////////// struct WorkspaceFile { @@ -111,8 +110,8 @@ public: Bridge & fossil() { return bridge; } const Bridge & fossil() const { return bridge; } - static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, Bridge::UICallback &uiCallback); - void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, Bridge::UICallback &uiCallback, bool &operationAborted); + static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, UICallback &uiCallback); + void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, UICallback &uiCallback, bool &operationAborted); QStandardItemModel &getFileModel() { return repoFileModel; } QStandardItemModel &getDirModel() { return repoDirModel; } From c59df3c7b07e14e8eaa5c3b21a20cc0e1dffbdc6 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 12:00:47 +0000 Subject: [PATCH 42/90] Cosmetic changes FossilOrigin-Name: c7b15ab434e33f5b73833256e97e2fabed8f1451 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/Bridge.cpp | 2 +- src/MainWindow.h | 2 -- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 98184c9..c605223 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Moved\sUICallback\sand\sScopedCallback\sto\sUtils -D 2015-04-30T11:43:31.832 +C Cosmetic\schanges +D 2015-04-30T12:00:47.495 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -184,7 +184,7 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp 5e67a6fd18dd3fdbc7f94addb47f1a8e50064318 +F src/Bridge.cpp ec8e4c38ade150c41dcc8742d1322554979e8d03 F src/Bridge.h cc0d0128e2d286aa7d578d1213bed100ee4c458e F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 @@ -201,7 +201,7 @@ F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp f6ffb8c6d1283a812084094426d51a5ea601fa35 -F src/MainWindow.h d91eda93c4b0ad4de12cfe8e0f069639f1842e95 +F src/MainWindow.h 4ce4e1cb3550ade8e41cbc5bcc465fdbcc13c342 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -217,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 2e7553cddf1db1c9e22e883276829a8032dc9afb -R 20e7fdb7267d96eb9c994d7779618370 +P 717fb7a390f81af33ad40913960a30ff9c1c7a75 +R 4149161be33e3e42f7c8fdad15ae0fe3 U kostas -Z e23a9cc7623bde69f6e9e851375dd322 +Z 44567a8ac9cdb0509589b8c3a26665fa diff --git a/manifest.uuid b/manifest.uuid index 57bb451..1b2f82d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -717fb7a390f81af33ad40913960a30ff9c1c7a75 \ No newline at end of file +c7b15ab434e33f5b73833256e97e2fabed8f1451 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Bridge.cpp index af41135..9dee807 100644 --- a/src/Bridge.cpp +++ b/src/Bridge.cpp @@ -731,6 +731,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi return true; } +//------------------------------------------------------------------------------ QString Bridge::getFossilPath() { // Use the user-specified fossil if available @@ -752,7 +753,6 @@ QString Bridge::getFossilPath() return fossil_exe; } - //------------------------------------------------------------------------------ bool Bridge::isWorkspace(const QString &path) { diff --git a/src/MainWindow.h b/src/MainWindow.h index 685b978..af0bf01 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -10,8 +10,6 @@ namespace Ui { class MainWindow; } - - ////////////////////////////////////////////////////////////////////////// // MainWindow ////////////////////////////////////////////////////////////////////////// From 33d196fbdbc8a8f220ce1076cf86a1f0399e1c54 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 12:15:14 +0000 Subject: [PATCH 43/90] Renamed Bridge to Fossil FossilOrigin-Name: 77abfe4126ef0adf7d0c70df7a2aac918bcc4128 --- fuel.pro | 4 +- manifest | 20 +++++----- manifest.uuid | 2 +- src/{Bridge.cpp => Fossil.cpp} | 68 +++++++++++++++++----------------- src/{Bridge.h => Fossil.h} | 10 ++--- src/MainWindow.h | 4 +- src/Workspace.h | 8 ++-- 7 files changed, 58 insertions(+), 58 deletions(-) rename src/{Bridge.cpp => Fossil.cpp} (92%) rename src/{Bridge.h => Fossil.h} (97%) diff --git a/fuel.pro b/fuel.pro index 5e7244e..ec1c28b 100644 --- a/fuel.pro +++ b/fuel.pro @@ -52,7 +52,7 @@ SOURCES += src/main.cpp\ src/LoggedProcess.cpp \ src/BrowserWidget.cpp \ src/CustomWebView.cpp \ - src/Bridge.cpp \ + src/Fossil.cpp \ src/Workspace.cpp HEADERS += src/MainWindow.h \ @@ -65,7 +65,7 @@ HEADERS += src/MainWindow.h \ src/LoggedProcess.h \ src/BrowserWidget.h \ src/CustomWebView.h \ - src/Bridge.h \ + src/Fossil.h \ src/Workspace.h FORMS += ui/MainWindow.ui \ diff --git a/manifest b/manifest index c605223..3590e41 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Cosmetic\schanges -D 2015-04-30T12:00:47.495 +C Renamed\sBridge\sto\sFossil +D 2015-04-30T12:15:14.026 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro 5db250757a6063a32663ab4813ec4d02912fa2f1 +F fuel.pro cda04943d336bd186ab428a81310d442aec94ca2 F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -184,8 +184,6 @@ F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f -F src/Bridge.cpp ec8e4c38ade150c41dcc8742d1322554979e8d03 -F src/Bridge.h cc0d0128e2d286aa7d578d1213bed100ee4c458e F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 @@ -198,16 +196,18 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df +F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 w src/Bridge.cpp +F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 w src/Bridge.h F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp f6ffb8c6d1283a812084094426d51a5ea601fa35 -F src/MainWindow.h 4ce4e1cb3550ade8e41cbc5bcc465fdbcc13c342 +F src/MainWindow.h 970c7e42d07499a86b1f6cc5cbe3921e1fc1f9e3 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 F src/Workspace.cpp a1ca37e803d6bccb9ddf1f80df66148438e6ea21 -F src/Workspace.h 515d6ded914dd8be10a611ebbb0e9befc8d64174 +F src/Workspace.h 681e3b434455c21613022c95d182ccb35879fc68 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -217,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 717fb7a390f81af33ad40913960a30ff9c1c7a75 -R 4149161be33e3e42f7c8fdad15ae0fe3 +P c7b15ab434e33f5b73833256e97e2fabed8f1451 +R ea2eae273fa42edf7d181d3dcc962763 U kostas -Z 44567a8ac9cdb0509589b8c3a26665fa +Z 9d3003eee2f50a485b1e0f3f2f9bf646 diff --git a/manifest.uuid b/manifest.uuid index 1b2f82d..c436601 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c7b15ab434e33f5b73833256e97e2fabed8f1451 \ No newline at end of file +77abfe4126ef0adf7d0c70df7a2aac918bcc4128 \ No newline at end of file diff --git a/src/Bridge.cpp b/src/Fossil.cpp similarity index 92% rename from src/Bridge.cpp rename to src/Fossil.cpp index 9dee807..3903978 100644 --- a/src/Bridge.cpp +++ b/src/Fossil.cpp @@ -1,4 +1,4 @@ -#include "Bridge.h" +#include "Fossil.h" #include #include #include @@ -15,7 +15,7 @@ static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); /////////////////////////////////////////////////////////////////////////////// -RepoStatus Bridge::getRepoStatus() +RepoStatus Fossil::getRepoStatus() { QStringList res; int exit_code = EXIT_FAILURE; @@ -57,7 +57,7 @@ RepoStatus Bridge::getRepoStatus() } //------------------------------------------------------------------------------ -bool Bridge::openRepository(const QString& repositoryPath, const QString& workspacePath) +bool Fossil::openRepository(const QString& repositoryPath, const QString& workspacePath) { QFileInfo fi(repositoryPath); @@ -75,7 +75,7 @@ bool Bridge::openRepository(const QString& repositoryPath, const QString& worksp } //------------------------------------------------------------------------------ -bool Bridge::newRepository(const QString& repositoryPath) +bool Fossil::newRepository(const QString& repositoryPath) { QFileInfo fi(repositoryPath); @@ -88,7 +88,7 @@ bool Bridge::newRepository(const QString& repositoryPath) } //------------------------------------------------------------------------------ -bool Bridge::closeRepository() +bool Fossil::closeRepository() { if(!runFossil(QStringList() << "close")) return false; @@ -99,25 +99,25 @@ bool Bridge::closeRepository() } //------------------------------------------------------------------------------ -bool Bridge::listFiles(QStringList &files) +bool Fossil::listFiles(QStringList &files) { return runFossil(QStringList() << "ls" << "-l", &files, RUNFLAGS_SILENT_ALL); } //------------------------------------------------------------------------------ -bool Bridge::pushRepository() +bool Fossil::pushRepository() { return runFossil(QStringList() << "push"); } //------------------------------------------------------------------------------ -bool Bridge::pullRepository() +bool Fossil::pullRepository() { return runFossil(QStringList() << "pull"); } //------------------------------------------------------------------------------ -bool Bridge::cloneRepository(const QString& repository, const QUrl& url, const QUrl& proxyUrl) +bool Fossil::cloneRepository(const QString& repository, const QUrl& url, const QUrl& proxyUrl) { // Actual command QStringList cmd = QStringList() << "clone"; @@ -151,7 +151,7 @@ bool Bridge::cloneRepository(const QString& repository, const QUrl& url, const Q } //------------------------------------------------------------------------------ -bool Bridge::getFossilVersion(QString& version) +bool Fossil::getFossilVersion(QString& version) { QStringList res; if(!runFossil(QStringList() << "version", &res, RUNFLAGS_SILENT_ALL) && res.length()==1) @@ -169,14 +169,14 @@ bool Bridge::getFossilVersion(QString& version) } //------------------------------------------------------------------------------ -bool Bridge::diffFile(const QString &repoFile) +bool Fossil::diffFile(const QString &repoFile) { // Run the diff detached return runFossil(QStringList() << "gdiff" << QuotePath(repoFile), 0, RUNFLAGS_DETACHED); } //------------------------------------------------------------------------------ -bool Bridge::commitFiles(const QStringList& fileList, const QString& comment) +bool Fossil::commitFiles(const QStringList& fileList, const QString& comment) { // Do commit QString comment_fname; @@ -210,7 +210,7 @@ bool Bridge::commitFiles(const QStringList& fileList, const QString& comment) } //------------------------------------------------------------------------------ -bool Bridge::addFiles(const QStringList& fileList) +bool Fossil::addFiles(const QStringList& fileList) { if(fileList.empty()) return false; @@ -220,7 +220,7 @@ bool Bridge::addFiles(const QStringList& fileList) } //------------------------------------------------------------------------------ -bool Bridge::removeFiles(const QStringList& fileList, bool deleteLocal) +bool Fossil::removeFiles(const QStringList& fileList, bool deleteLocal) { if(fileList.empty()) return false; @@ -243,7 +243,7 @@ bool Bridge::removeFiles(const QStringList& fileList, bool deleteLocal) } //------------------------------------------------------------------------------ -bool Bridge::revertFiles(const QStringList& fileList) +bool Fossil::revertFiles(const QStringList& fileList) { if(fileList.empty()) return false; @@ -253,7 +253,7 @@ bool Bridge::revertFiles(const QStringList& fileList) } //------------------------------------------------------------------------------ -bool Bridge::renameFile(const QString &beforePath, const QString &afterPath, bool renameLocal) +bool Fossil::renameFile(const QString &beforePath, const QString &afterPath, bool renameLocal) { // Ensure we can rename the file if(!QFileInfo(beforePath).exists() || QFileInfo(afterPath).exists()) @@ -273,7 +273,7 @@ bool Bridge::renameFile(const QString &beforePath, const QString &afterPath, boo } //------------------------------------------------------------------------------ -bool Bridge::undoRepository(QStringList &result, bool explainOnly) +bool Fossil::undoRepository(QStringList &result, bool explainOnly) { QStringList params; params << "undo"; @@ -286,7 +286,7 @@ bool Bridge::undoRepository(QStringList &result, bool explainOnly) } //------------------------------------------------------------------------------ -bool Bridge::updateRepository(QStringList &result, bool explainOnly) +bool Fossil::updateRepository(QStringList &result, bool explainOnly) { QStringList params; params << "update"; @@ -299,13 +299,13 @@ bool Bridge::updateRepository(QStringList &result, bool explainOnly) } //------------------------------------------------------------------------------ -bool Bridge::getFossilSettings(QStringList &result) +bool Fossil::getFossilSettings(QStringList &result) { return runFossil(QStringList() << "settings", &result, RUNFLAGS_SILENT_ALL); } //------------------------------------------------------------------------------ -bool Bridge::setFossilSetting(const QString& name, const QString& value, bool global) +bool Fossil::setFossilSetting(const QString& name, const QString& value, bool global) { QStringList params; @@ -321,7 +321,7 @@ bool Bridge::setFossilSetting(const QString& name, const QString& value, bool gl } //------------------------------------------------------------------------------ -bool Bridge::setRemoteUrl(const QString& url) +bool Fossil::setRemoteUrl(const QString& url) { QString u = url; @@ -334,7 +334,7 @@ bool Bridge::setRemoteUrl(const QString& url) } //------------------------------------------------------------------------------ -bool Bridge::getRemoteUrl(QString& url) +bool Fossil::getRemoteUrl(QString& url) { url.clear(); @@ -348,7 +348,7 @@ bool Bridge::getRemoteUrl(QString& url) } //------------------------------------------------------------------------------ -bool Bridge::stashNew(const QStringList& fileList, const QString& name, bool revert) +bool Fossil::stashNew(const QStringList& fileList, const QString& name, bool revert) { // Do Stash // Snapshot just records the changes into the stash @@ -362,7 +362,7 @@ bool Bridge::stashNew(const QStringList& fileList, const QString& name, bool rev } //------------------------------------------------------------------------------ -bool Bridge::stashList(stashmap_t& stashes) +bool Fossil::stashList(stashmap_t& stashes) { stashes.clear(); QStringList res; @@ -400,19 +400,19 @@ bool Bridge::stashList(stashmap_t& stashes) } //------------------------------------------------------------------------------ -bool Bridge::stashApply(const QString& name) +bool Fossil::stashApply(const QString& name) { return runFossil(QStringList() << "stash" << "apply" << name); } //------------------------------------------------------------------------------ -bool Bridge::stashDrop(const QString& name) +bool Fossil::stashDrop(const QString& name) { return runFossil(QStringList() << "stash" << "drop" << name); } //------------------------------------------------------------------------------ -bool Bridge::stashDiff(const QString& name) +bool Fossil::stashDiff(const QString& name) { return runFossil(QStringList() << "stash" << "diff" << name, 0); } @@ -433,7 +433,7 @@ static QString ParseFossilQuery(QString line) } //------------------------------------------------------------------------------ -bool Bridge::runFossil(const QStringList &args, QStringList *output, int runFlags) +bool Fossil::runFossil(const QStringList &args, QStringList *output, int runFlags) { int exit_code = EXIT_FAILURE; if(!runFossilRaw(args, output, &exit_code, runFlags)) @@ -445,7 +445,7 @@ bool Bridge::runFossil(const QStringList &args, QStringList *output, int runFlag //------------------------------------------------------------------------------ // Run fossil. Returns true if execution was successful regardless if fossil // issued an error -bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags) +bool Fossil::runFossilRaw(const QStringList &args, QStringList *output, int *exitCode, int runFlags) { bool silent_input = (runFlags & RUNFLAGS_SILENT_INPUT) != 0; bool silent_output = (runFlags & RUNFLAGS_SILENT_OUTPUT) != 0; @@ -732,7 +732,7 @@ bool Bridge::runFossilRaw(const QStringList &args, QStringList *output, int *exi } //------------------------------------------------------------------------------ -QString Bridge::getFossilPath() +QString Fossil::getFossilPath() { // Use the user-specified fossil if available QString fossil_path = fossilPath; @@ -754,7 +754,7 @@ QString Bridge::getFossilPath() } //------------------------------------------------------------------------------ -bool Bridge::isWorkspace(const QString &path) +bool Fossil::isWorkspace(const QString &path) { if(path.length()==0) return false; @@ -769,13 +769,13 @@ bool Bridge::isWorkspace(const QString &path) } //------------------------------------------------------------------------------ -bool Bridge::uiRunning() const +bool Fossil::uiRunning() const { return fossilUI.state() == QProcess::Running; } //------------------------------------------------------------------------------ -bool Bridge::startUI(const QString &httpPort) +bool Fossil::startUI(const QString &httpPort) { if(uiRunning()) { @@ -805,7 +805,7 @@ bool Bridge::startUI(const QString &httpPort) } //------------------------------------------------------------------------------ -void Bridge::stopUI() +void Fossil::stopUI() { if(uiRunning()) { diff --git a/src/Bridge.h b/src/Fossil.h similarity index 97% rename from src/Bridge.h rename to src/Fossil.h index 2edc9ab..da99952 100644 --- a/src/Bridge.h +++ b/src/Fossil.h @@ -1,5 +1,5 @@ -#ifndef BRIDGE_H -#define BRIDGE_H +#ifndef FOSSIL_H +#define FOSSIL_H class QStringList; #include @@ -27,10 +27,10 @@ enum RepoStatus REPO_OLD_SCHEMA }; -class Bridge +class Fossil { public: - Bridge() + Fossil() : operationAborted(false) , uiCallback(0) { @@ -129,4 +129,4 @@ private: }; -#endif // BRIDGE_H +#endif // FOSSIL_H diff --git a/src/MainWindow.h b/src/MainWindow.h index af0bf01..21c86b6 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -153,8 +153,8 @@ private: Workspace workspace; Workspace & getWorkspace() { return workspace; } - Bridge & fossil() { return workspace.fossil(); } - const Bridge & fossil() const { return workspace.fossil(); } + Fossil & fossil() { return workspace.fossil(); } + const Fossil & fossil() const { return workspace.fossil(); } Settings &settings; QStringList workspaceHistory; diff --git a/src/Workspace.h b/src/Workspace.h index baffbed..3eb1990 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -6,7 +6,7 @@ #include #include #include -#include "Bridge.h" +#include "Fossil.h" ////////////////////////////////////////////////////////////////////////// // WorkspaceFile @@ -107,8 +107,8 @@ public: void clearState(); - Bridge & fossil() { return bridge; } - const Bridge & fossil() const { return bridge; } + Fossil & fossil() { return bridge; } + const Fossil & fossil() const { return bridge; } static bool scanDirectory(QFileInfoList &entries, const QString& dirPath, const QString &baseDir, const QString ignoreSpec, const bool& abort, UICallback &uiCallback); void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, UICallback &uiCallback, bool &operationAborted); @@ -121,7 +121,7 @@ public: stashmap_t &getStashes() { return stashMap; } private: - Bridge bridge; + Fossil bridge; filemap_t workspaceFiles; stringset_t pathSet; stashmap_t stashMap; From 68d9279e28bd151818d8bcbe8a7b96c6ed6b5513 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 15:26:39 +0000 Subject: [PATCH 44/90] Create new branch named "new-workspace" FossilOrigin-Name: c5152d66a73c5f374ae24fa61c7c9e721e7bb821 --- manifest | 15 +++++++++------ manifest.uuid | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 3590e41..1e8d142 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sBridge\sto\sFossil -D 2015-04-30T12:15:14.026 +C Create\snew\sbranch\snamed\s"new-workspace" +D 2015-04-30T15:26:39.390 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,8 +196,8 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 w src/Bridge.cpp -F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 w src/Bridge.h +F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 w +F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 w F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp f6ffb8c6d1283a812084094426d51a5ea601fa35 @@ -217,7 +217,10 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P c7b15ab434e33f5b73833256e97e2fabed8f1451 +P 77abfe4126ef0adf7d0c70df7a2aac918bcc4128 R ea2eae273fa42edf7d181d3dcc962763 +T *branch * new-workspace +T *sym-new-workspace * +T -sym-refactor * U kostas -Z 9d3003eee2f50a485b1e0f3f2f9bf646 +Z b6f3c658fef370e052c3ceaf2c9aee98 diff --git a/manifest.uuid b/manifest.uuid index c436601..4fa2d7a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -77abfe4126ef0adf7d0c70df7a2aac918bcc4128 \ No newline at end of file +c5152d66a73c5f374ae24fa61c7c9e721e7bb821 \ No newline at end of file From b897cf7b1e25b490059c9762479781c836bbae50 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 16:23:15 +0000 Subject: [PATCH 45/90] Renamed tableView to fileTableView Renamed treeView to workspaceTreeView Renamed tableViewStash to stashTableView FossilOrigin-Name: 54059126aee6bb232373c1f134cc07ea0a6f4cca --- manifest | 20 +++---- manifest.uuid | 2 +- src/MainWindow.cpp | 138 ++++++++++++++++++++++----------------------- src/MainWindow.h | 8 +-- ui/MainWindow.ui | 70 +++++++++++------------ 5 files changed, 118 insertions(+), 120 deletions(-) diff --git a/manifest b/manifest index 3590e41..e22b4ba 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sBridge\sto\sFossil -D 2015-04-30T12:15:14.026 +C Renamed\stableView\sto\sfileTableView\nRenamed\streeView\sto\sworkspaceTreeView\nRenamed\stableViewStash\sto\sstashTableView +D 2015-04-30T16:23:15.640 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,12 +196,12 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 w src/Bridge.cpp -F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 w src/Bridge.h +F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 +F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp f6ffb8c6d1283a812084094426d51a5ea601fa35 -F src/MainWindow.h 970c7e42d07499a86b1f6cc5cbe3921e1fc1f9e3 +F src/MainWindow.cpp cbd80ad8b9bf4c090a913181e4725646677c9c0c +F src/MainWindow.h d8d376f2efbf47c7a0241bb574994dbcf92300fb F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,9 +215,9 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 +F ui/MainWindow.ui c02f609b7f3a33c9be5f420591466ae5e398a988 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P c7b15ab434e33f5b73833256e97e2fabed8f1451 -R ea2eae273fa42edf7d181d3dcc962763 +P 77abfe4126ef0adf7d0c70df7a2aac918bcc4128 +R ed2ea66d15f08ec954000571498b8a1b U kostas -Z 9d3003eee2f50a485b1e0f3f2f9bf646 +Z 56e75383c99242a3ba759cdca74a3ed4 diff --git a/manifest.uuid b/manifest.uuid index c436601..8157662 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -77abfe4126ef0adf7d0c70df7a2aac918bcc4128 \ No newline at end of file +54059126aee6bb232373c1f134cc07ea0a6f4cca \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 19e6541..f859a63 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -76,19 +76,19 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP QAction *separator = new QAction(this); separator->setSeparator(true); - // TableView - ui->tableView->setModel(&getWorkspace().getFileModel()); + // fileTableView + ui->fileTableView->setModel(&getWorkspace().getFileModel()); - ui->tableView->addAction(ui->actionDiff); - ui->tableView->addAction(ui->actionHistory); - ui->tableView->addAction(ui->actionOpenFile); - ui->tableView->addAction(ui->actionOpenContaining); - ui->tableView->addAction(separator); - ui->tableView->addAction(ui->actionAdd); - ui->tableView->addAction(ui->actionRevert); - ui->tableView->addAction(ui->actionRename); - ui->tableView->addAction(ui->actionDelete); - connect( ui->tableView, + ui->fileTableView->addAction(ui->actionDiff); + ui->fileTableView->addAction(ui->actionHistory); + ui->fileTableView->addAction(ui->actionOpenFile); + ui->fileTableView->addAction(ui->actionOpenContaining); + ui->fileTableView->addAction(separator); + ui->fileTableView->addAction(ui->actionAdd); + ui->fileTableView->addAction(ui->actionRevert); + ui->fileTableView->addAction(ui->actionRename); + ui->fileTableView->addAction(ui->actionDelete); + connect( ui->fileTableView, SIGNAL( dragOutEvent() ), SLOT( onFileViewDragOut() ), Qt::DirectConnection ); @@ -99,36 +99,36 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP getWorkspace().getFileModel().horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); // Needed on OSX as the preset value from the GUI editor is not always reflected - ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); + ui->fileTableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) - ui->tableView->horizontalHeader()->setMovable(true); + ui->fileTableView->horizontalHeader()->setMovable(true); #else - ui->tableView->horizontalHeader()->setSectionsMovable(true); + ui->fileTableView->horizontalHeader()->setSectionsMovable(true); #endif - ui->tableView->horizontalHeader()->setStretchLastSection(true); + ui->fileTableView->horizontalHeader()->setStretchLastSection(true); - // TreeView - ui->treeView->setModel(&getWorkspace().getDirModel()); - connect( ui->treeView->selectionModel(), + // workspaceTreeView + ui->workspaceTreeView->setModel(&getWorkspace().getDirModel()); + connect( ui->workspaceTreeView->selectionModel(), SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection &) ), - SLOT( onTreeViewSelectionChanged(const QItemSelection &, const QItemSelection &) ), + SLOT( onWorkspaceTreeViewSelectionChanged(const QItemSelection &, const QItemSelection &) ), Qt::DirectConnection ); - ui->treeView->addAction(ui->actionCommit); - ui->treeView->addAction(ui->actionOpenFolder); - ui->treeView->addAction(ui->actionAdd); - ui->treeView->addAction(ui->actionRevert); - ui->treeView->addAction(ui->actionDelete); - ui->treeView->addAction(separator); - ui->treeView->addAction(ui->actionRenameFolder); - ui->treeView->addAction(ui->actionOpenFolder); + ui->workspaceTreeView->addAction(ui->actionCommit); + ui->workspaceTreeView->addAction(ui->actionOpenFolder); + ui->workspaceTreeView->addAction(ui->actionAdd); + ui->workspaceTreeView->addAction(ui->actionRevert); + ui->workspaceTreeView->addAction(ui->actionDelete); + ui->workspaceTreeView->addAction(separator); + ui->workspaceTreeView->addAction(ui->actionRenameFolder); + ui->workspaceTreeView->addAction(ui->actionOpenFolder); // StashView - ui->tableViewStash->setModel(&getWorkspace().getStashModel()); - ui->tableViewStash->addAction(ui->actionApplyStash); - ui->tableViewStash->addAction(ui->actionDiffStash); - ui->tableViewStash->addAction(ui->actionDeleteStash); - ui->tableViewStash->horizontalHeader()->setSortIndicatorShown(false); + ui->stashTableView->setModel(&getWorkspace().getStashModel()); + ui->stashTableView->addAction(ui->actionApplyStash); + ui->stashTableView->addAction(ui->actionDiffStash); + ui->stashTableView->addAction(ui->actionDeleteStash); + ui->stashTableView->horizontalHeader()->setSortIndicatorShown(false); // Recent Workspaces // Locate a sequence of two separator actions in file menu @@ -621,8 +621,8 @@ void MainWindow::updateDirView() addPathToTree(*root, dir); } - ui->treeView->expandToDepth(0); - ui->treeView->sortByColumn(0, Qt::AscendingOrder); + ui->workspaceTreeView->expandToDepth(0); + ui->workspaceTreeView->sortByColumn(0, Qt::AscendingOrder); } //------------------------------------------------------------------------------ @@ -697,7 +697,7 @@ void MainWindow::updateFileView() ++item_id; } - ui->tableView->resizeRowsToContents(); + ui->fileTableView->resizeRowsToContents(); } //------------------------------------------------------------------------------ @@ -715,8 +715,8 @@ void MainWindow::updateStashView() item->setToolTip(it.key()); getWorkspace().getStashModel().appendRow(item); } - ui->tableViewStash->resizeColumnsToContents(); - ui->tableViewStash->resizeRowsToContents(); + ui->stashTableView->resizeColumnsToContents(); + ui->stashTableView->resizeRowsToContents(); } //------------------------------------------------------------------------------ @@ -773,14 +773,14 @@ void MainWindow::applySettings() if(store->contains("Width")) { int width = store->value("Width").toInt(); - ui->tableView->setColumnWidth(i, width); + ui->fileTableView->setColumnWidth(i, width); } if(store->contains("Index")) { int index = store->value("Index").toInt(); - int cur_index = ui->tableView->horizontalHeader()->visualIndex(i); - ui->tableView->horizontalHeader()->moveSection(cur_index, index); + int cur_index = ui->fileTableView->horizontalHeader()->visualIndex(i); + ui->fileTableView->horizontalHeader()->moveSection(cur_index, index); } } @@ -816,11 +816,11 @@ void MainWindow::applySettings() ui->actionViewAsList->setChecked(store->value("ViewAsList").toBool()); viewMode = store->value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE; } - ui->treeView->setVisible(viewMode == VIEWMODE_TREE); + ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); if(store->contains("ViewStash")) ui->actionViewStash->setChecked(store->value("ViewStash").toBool()); - ui->tableViewStash->setVisible(ui->actionViewStash->isChecked()); + ui->stashTableView->setVisible(ui->actionViewStash->isChecked()); } @@ -845,8 +845,8 @@ void MainWindow::updateSettings() for(int i=0; isetArrayIndex(i); - store->setValue("Width", ui->tableView->columnWidth(i)); - int index = ui->tableView->horizontalHeader()->visualIndex(i); + store->setValue("Width", ui->fileTableView->columnWidth(i)); + int index = ui->fileTableView->horizontalHeader()->visualIndex(i); store->setValue("Index", index); } store->endArray(); @@ -868,8 +868,8 @@ void MainWindow::selectRootDir() { if(viewMode==VIEWMODE_TREE) { - QModelIndex root_index = ui->treeView->model()->index(0, 0); - ui->treeView->selectionModel()->select(root_index, QItemSelectionModel::Select); + QModelIndex root_index = ui->workspaceTreeView->model()->index(0, 0); + ui->workspaceTreeView->selectionModel()->select(root_index, QItemSelectionModel::Select); } } @@ -894,7 +894,7 @@ void MainWindow::fossilBrowse(const QString &fossilUrl) //------------------------------------------------------------------------------ void MainWindow::getSelectionFilenames(QStringList &filenames, int includeMask, bool allIfEmpty) { - if(QApplication::focusWidget() == ui->treeView) + if(QApplication::focusWidget() == ui->workspaceTreeView) getDirViewSelection(filenames, includeMask, allIfEmpty); else getFileViewSelection(filenames, includeMask, allIfEmpty); @@ -904,7 +904,7 @@ void MainWindow::getSelectionFilenames(QStringList &filenames, int includeMask, void MainWindow::getSelectionPaths(stringset_t &paths) { // Determine the directories selected - QModelIndexList selection = ui->treeView->selectionModel()->selectedIndexes(); + QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) { const QModelIndex &mi = *mi_it; @@ -933,7 +933,7 @@ void MainWindow::getDirViewSelection(QStringList &filenames, int includeMask, bo // Determine the directories selected stringset_t paths; - QModelIndexList selection = ui->treeView->selectionModel()->selectedIndexes(); + QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); if(!(selection.empty() && allIfEmpty)) { getSelectionPaths(paths); @@ -977,12 +977,12 @@ void MainWindow::getDirViewSelection(QStringList &filenames, int includeMask, bo //------------------------------------------------------------------------------ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, bool allIfEmpty) { - QModelIndexList selection = ui->tableView->selectionModel()->selectedIndexes(); + QModelIndexList selection = ui->fileTableView->selectionModel()->selectedIndexes(); if(selection.empty() && allIfEmpty) { - ui->tableView->selectAll(); - selection = ui->tableView->selectionModel()->selectedIndexes(); - ui->tableView->clearSelection(); + ui->fileTableView->selectAll(); + selection = ui->fileTableView->selectionModel()->selectedIndexes(); + ui->fileTableView->clearSelection(); } for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) @@ -1010,12 +1010,12 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b //------------------------------------------------------------------------------ void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) { - QModelIndexList selection = ui->tableViewStash->selectionModel()->selectedIndexes(); + QModelIndexList selection = ui->stashTableView->selectionModel()->selectedIndexes(); if(selection.empty() && allIfEmpty) { - ui->tableViewStash->selectAll(); - selection = ui->tableViewStash->selectionModel()->selectedIndexes(); - ui->tableViewStash->clearSelection(); + ui->stashTableView->selectAll(); + selection = ui->stashTableView->selectionModel()->selectedIndexes(); + ui->stashTableView->clearSelection(); } for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) @@ -1103,7 +1103,7 @@ void MainWindow::on_actionHistory_triggered() } //------------------------------------------------------------------------------ -void MainWindow::on_tableView_doubleClicked(const QModelIndex &/*index*/) +void MainWindow::on_fileTableView_doubleClicked(const QModelIndex &/*index*/) { int action = settings.GetValue(FUEL_SETTING_FILE_DBLCLICK).toInt(); if(action==FILE_DLBCLICK_ACTION_DIFF) @@ -1502,7 +1502,7 @@ void MainWindow::on_actionViewIgnored_triggered() void MainWindow::on_actionViewAsList_triggered() { viewMode = ui->actionViewAsList->isChecked() ? VIEWMODE_LIST : VIEWMODE_TREE; - ui->treeView->setVisible(viewMode == VIEWMODE_TREE); + ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); updateFileView(); } @@ -1514,9 +1514,9 @@ QString MainWindow::getFossilHttpAddress() } //------------------------------------------------------------------------------ -void MainWindow::onTreeViewSelectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/) +void MainWindow::onWorkspaceTreeViewSelectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/) { - QModelIndexList selection = ui->treeView->selectionModel()->selectedIndexes(); + QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); int num_selected = selection.count(); // Do not modify the selection if nothing is selected @@ -1538,17 +1538,17 @@ void MainWindow::onTreeViewSelectionChanged(const QItemSelection &/*selected*/, //------------------------------------------------------------------------------ void MainWindow::on_actionOpenFolder_triggered() { - const QItemSelection &selection = ui->treeView->selectionModel()->selection(); + const QItemSelection &selection = ui->workspaceTreeView->selectionModel()->selection(); if(selection.indexes().count()!=1) return; QModelIndex index = selection.indexes().at(0); - on_treeView_doubleClicked(index); + on_workspaceTreeView_doubleClicked(index); } //------------------------------------------------------------------------------ -void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) +void MainWindow::on_workspaceTreeView_doubleClicked(const QModelIndex &index) { QString target = getWorkspace().getDirModel().data(index, REPODIRMODEL_ROLE_PATH).toString(); target = getCurrentWorkspace() + PATH_SEPARATOR + target; @@ -1730,7 +1730,7 @@ QMenu * MainWindow::createPopupMenu() //------------------------------------------------------------------------------ void MainWindow::on_actionViewStash_triggered() { - ui->tableViewStash->setVisible(ui->actionViewStash->isChecked()); + ui->stashTableView->setVisible(ui->actionViewStash->isChecked()); } //------------------------------------------------------------------------------ @@ -1886,13 +1886,13 @@ void MainWindow::on_textBrowser_customContextMenuRequested(const QPoint &pos) } //------------------------------------------------------------------------------ -void MainWindow::on_tableView_customContextMenuRequested(const QPoint &pos) +void MainWindow::on_fileTableView_customContextMenuRequested(const QPoint &pos) { QPoint gpos = QCursor::pos(); #ifdef Q_OS_WIN if(qApp->keyboardModifiers() & Qt::SHIFT) { - ui->tableView->selectionModel()->select(ui->tableView->indexAt(pos), QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Rows); + ui->fileTableView->selectionModel()->select(ui->fileTableView->indexAt(pos), QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Rows); QStringList fnames; getSelectionFilenames(fnames); @@ -1910,7 +1910,7 @@ void MainWindow::on_tableView_customContextMenuRequested(const QPoint &pos) #endif { QMenu *menu = new QMenu(this); - menu->addActions(ui->tableView->actions()); + menu->addActions(ui->fileTableView->actions()); menu->popup(gpos); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 21c86b6..41da3fe 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -67,7 +67,7 @@ private slots: // Manual slots. // Use a different naming scheme to prevent warnings from Qt's automatic signaling void onOpenRecent(); - void onTreeViewSelectionChanged(const class QItemSelection &selected, const class QItemSelection &deselected); + void onWorkspaceTreeViewSelectionChanged(const class QItemSelection &selected, const class QItemSelection &deselected); void onFileViewDragOut(); void onAbort(); @@ -79,8 +79,8 @@ private slots: void on_actionTimeline_triggered(); void on_actionHistory_triggered(); void on_actionClearLog_triggered(); - void on_tableView_doubleClicked(const QModelIndex &index); - void on_treeView_doubleClicked(const QModelIndex &index); + void on_fileTableView_doubleClicked(const QModelIndex &index); + void on_workspaceTreeView_doubleClicked(const QModelIndex &index); void on_actionOpenFile_triggered(); void on_actionPush_triggered(); void on_actionPull_triggered(); @@ -111,7 +111,7 @@ private slots: void on_actionDeleteStash_triggered(); void on_actionDiffStash_triggered(); void on_textBrowser_customContextMenuRequested(const QPoint &pos); - void on_tableView_customContextMenuRequested(const QPoint &pos); + void on_fileTableView_customContextMenuRequested(const QPoint &pos); private: class MainWinUICallback : public UICallback diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 6652298..55a5389 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -17,7 +17,7 @@ Fuel - + :/icons/icons/Battery-01.png:/icons/icons/Battery-01.png @@ -58,7 +58,7 @@ Qt::Horizontal - + 20 @@ -87,7 +87,7 @@ false - + 80 @@ -140,7 +140,7 @@ 30 - + 20 @@ -356,7 +356,7 @@ - + :/icons/icons/Button Refresh-01.png:/icons/icons/Button Refresh-01.png @@ -374,7 +374,7 @@ - + :/icons/icons/Save-01.png:/icons/icons/Save-01.png @@ -392,7 +392,7 @@ - + :/icons/icons/Document Copy-01.png:/icons/icons/Document Copy-01.png @@ -410,7 +410,7 @@ - + :/icons/icons/File New-01.png:/icons/icons/File New-01.png @@ -428,7 +428,7 @@ - + :/icons/icons/File Delete-01.png:/icons/icons/File Delete-01.png @@ -446,7 +446,7 @@ - + :/icons/icons/Document Blank-01.png:/icons/icons/Document Blank-01.png @@ -464,7 +464,7 @@ - + :/icons/icons/My Documents-01.png:/icons/icons/My Documents-01.png @@ -496,7 +496,7 @@ - + :/icons/icons/My Websites-01.png:/icons/icons/My Websites-01.png @@ -508,7 +508,7 @@ - + :/icons/icons/Button Upload-01.png:/icons/icons/Button Upload-01.png @@ -526,7 +526,7 @@ - + :/icons/icons/Button Download-01.png:/icons/icons/Button Download-01.png @@ -544,7 +544,7 @@ - + :/icons/icons/File Open-01.png:/icons/icons/File Open-01.png @@ -562,7 +562,7 @@ - + :/icons/icons/Button Turn Off-01.png:/icons/icons/Button Turn Off-01.png @@ -583,7 +583,7 @@ - + :/icons/icons/File History-01.png:/icons/icons/File History-01.png @@ -604,7 +604,7 @@ true - + :/icons/icons/Network MAC-01.png:/icons/icons/Network MAC-01.png @@ -619,7 +619,7 @@ - + :/icons/icons/Document-Revert-icon.png:/icons/icons/Document-Revert-icon.png @@ -634,7 +634,7 @@ - + :/icons/icons/Text Edit.png:/icons/icons/Text Edit.png @@ -649,7 +649,7 @@ - + :/icons/icons/Clock-01.png:/icons/icons/Clock-01.png @@ -664,7 +664,7 @@ - + :/icons/icons/Document-01.png:/icons/icons/Document-01.png @@ -682,7 +682,7 @@ - + :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png @@ -700,7 +700,7 @@ - + :/icons/icons/Button Reload-01.png:/icons/icons/Button Reload-01.png @@ -718,7 +718,7 @@ - + :/icons/icons/Battery-01.png:/icons/icons/Battery-01.png @@ -733,7 +733,7 @@ - + :/icons/icons/Button Play-01.png:/icons/icons/Button Play-01.png @@ -751,7 +751,7 @@ - + :/icons/icons/Gear-01.png:/icons/icons/Gear-01.png @@ -839,7 +839,7 @@ - + :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png @@ -854,7 +854,7 @@ - + :/icons/icons/Folder Open-01.png:/icons/icons/Folder Open-01.png @@ -869,7 +869,7 @@ - + :/icons/icons/Folder Add-01.png:/icons/icons/Folder Add-01.png @@ -881,7 +881,7 @@ - + :/icons/icons/Folder Open-01.png:/icons/icons/Folder Open-01.png @@ -913,7 +913,7 @@ - + :/icons/icons/Folder Delete-01.png:/icons/icons/Folder Delete-01.png @@ -922,7 +922,7 @@ - + :/icons/icons/Folder Explorer-01.png:/icons/icons/Folder Explorer-01.png @@ -944,8 +944,6 @@ 1 - - - + From 122e0e3b28e7bf7986cd092dd56a18ac70018539 Mon Sep 17 00:00:00 2001 From: kostas Date: Thu, 30 Apr 2015 16:51:00 +0000 Subject: [PATCH 46/90] Closed branch FossilOrigin-Name: e54f1cacad13f429891d89053a208cd340386a3b --- manifest | 16 +++++++--------- manifest.uuid | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 1e8d142..0e3d359 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Create\snew\sbranch\snamed\s"new-workspace" -D 2015-04-30T15:26:39.390 +C Closed\sbranch +D 2015-04-30T16:51:00.874 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,8 +196,8 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 w -F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 w +F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 +F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp f6ffb8c6d1283a812084094426d51a5ea601fa35 @@ -217,10 +217,8 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 8677f5c8bca5bf7561d5f64bfdd0cef5157c6ac7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 77abfe4126ef0adf7d0c70df7a2aac918bcc4128 +P c5152d66a73c5f374ae24fa61c7c9e721e7bb821 R ea2eae273fa42edf7d181d3dcc962763 -T *branch * new-workspace -T *sym-new-workspace * -T -sym-refactor * +T +closed * U kostas -Z b6f3c658fef370e052c3ceaf2c9aee98 +Z 587ab2b348930a050cf8c57e671a5c0b diff --git a/manifest.uuid b/manifest.uuid index 4fa2d7a..fb758b6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c5152d66a73c5f374ae24fa61c7c9e721e7bb821 \ No newline at end of file +e54f1cacad13f429891d89053a208cd340386a3b \ No newline at end of file From 2bf3de6c2be4d27d676b61d0c7af134ce6f3f713 Mon Sep 17 00:00:00 2001 From: kostas Date: Fri, 1 May 2015 19:04:02 +0000 Subject: [PATCH 47/90] Initial work on new workspace view FossilOrigin-Name: 64386745ebf2d2fa921a51383bd76241947b879c --- manifest | 18 ++-- manifest.uuid | 2 +- src/MainWindow.cpp | 210 +++++++++++++++++++++++++++++++++++++-------- src/MainWindow.h | 4 + src/Workspace.cpp | 1 - ui/MainWindow.ui | 70 +++++++-------- 6 files changed, 225 insertions(+), 80 deletions(-) diff --git a/manifest b/manifest index 1ff9601..00cf2e5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merged\srefactor\nAdded\smissing\sstatus\sUPDATED_BY_MERGE\s\nFixed\sparsing\sof\sfile\sstatus -D 2015-04-30T17:43:40.786 +C Initial\swork\son\snew\sworkspace\sview\n +D 2015-05-01T19:04:02.737 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,13 +200,13 @@ F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp b8d87316df5ca82d6ac9bb0960304ab39489a91f -F src/MainWindow.h d8d376f2efbf47c7a0241bb574994dbcf92300fb +F src/MainWindow.cpp 7f3b06953194c1aa46511b49906edab8c194930d +F src/MainWindow.h 5e0b71e6b795c32ae4207ffb44aa056b52674a10 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 -F src/Workspace.cpp 199ec5f5aee9e8d9997617aa879cb9a14dafcb1b +F src/Workspace.cpp 114daa2d44228ac253056fdf74a45e977d181475 F src/Workspace.h 9f1d34320abb378ae5a6e3360f8c8a5949029b88 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x @@ -215,9 +215,9 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui c02f609b7f3a33c9be5f420591466ae5e398a988 +F ui/MainWindow.ui ef46a06e46eb465703a8b7353b079c2e538104d7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P e54f1cacad13f429891d89053a208cd340386a3b 54059126aee6bb232373c1f134cc07ea0a6f4cca -R c8caf9794c01c2e9f28e7aab2d817e71 +P f82fab41453e6ccf28c60e89ce567635ffab25a3 +R eb515f213709887707816d20f04a41de U kostas -Z 2db0b96e08403561e015298ad9ef24fd +Z 79fc4cbaace7ceb95ba923e30451b76b diff --git a/manifest.uuid b/manifest.uuid index 7d1d459..a9ba285 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f82fab41453e6ccf28c60e89ce567635ffab25a3 \ No newline at end of file +64386745ebf2d2fa921a51383bd76241947b879c \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 8e705b6..c62ea12 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -38,6 +38,50 @@ enum REPODIRMODEL_ROLE_PATH = Qt::UserRole+1 }; +struct TreeViewItem +{ + enum + { + TYPE_UNKNOWN, + TYPE_WORKSPACE, + TYPE_FOLDER, + TYPE_STASHES, + TYPE_STASH, + TYPE_BRANCHES, + TYPE_BRANCH, + TYPE_TAGS, + TYPE_TAG, + TYPE_REMOTES, + TYPE_SETTINGS + }; + + TreeViewItem() + : Type(TYPE_UNKNOWN) + { + } + + TreeViewItem(int type, const QString &value) + : Type(type), Value(value) + { + } + + TreeViewItem(const TreeViewItem &other) + { + Type = other.Type; + Value = other.Value; + } + + int Type; + QString Value; + + operator QVariant() const + { + return QVariant::fromValue(*this); + } +}; +Q_DECLARE_METATYPE(TreeViewItem) + + //----------------------------------------------------------------------------- typedef QMap QStringMap; static QStringMap MakeKeyValues(QStringList lines) @@ -114,14 +158,16 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP SLOT( onWorkspaceTreeViewSelectionChanged(const QItemSelection &, const QItemSelection &) ), Qt::DirectConnection ); - ui->workspaceTreeView->addAction(ui->actionCommit); - ui->workspaceTreeView->addAction(ui->actionOpenFolder); - ui->workspaceTreeView->addAction(ui->actionAdd); - ui->workspaceTreeView->addAction(ui->actionRevert); - ui->workspaceTreeView->addAction(ui->actionDelete); - ui->workspaceTreeView->addAction(separator); - ui->workspaceTreeView->addAction(ui->actionRenameFolder); - ui->workspaceTreeView->addAction(ui->actionOpenFolder); + // Workspace Menus + menuWorkspace = new QMenu(this); + menuWorkspace->addAction(ui->actionCommit); + menuWorkspace->addAction(ui->actionOpenFolder); + menuWorkspace->addAction(ui->actionAdd); + menuWorkspace->addAction(ui->actionRevert); + menuWorkspace->addAction(ui->actionDelete); + menuWorkspace->addAction(separator); + menuWorkspace->addAction(ui->actionRenameFolder); + menuWorkspace->addAction(ui->actionOpenFolder); // StashView ui->stashTableView->setModel(&getWorkspace().getStashModel()); @@ -130,6 +176,12 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->stashTableView->addAction(ui->actionDeleteStash); ui->stashTableView->horizontalHeader()->setSortIndicatorShown(false); + // StashMenu + menuStashes = new QMenu(this); + menuStashes->addAction(ui->actionApplyStash); + menuStashes->addAction(ui->actionDiffStash); + menuStashes->addAction(ui->actionDeleteStash); + // Recent Workspaces // Locate a sequence of two separator actions in file menu QList file_actions = ui->menuFile->actions(); @@ -590,7 +642,7 @@ static void addPathToTree(QStandardItem &root, const QString &path) if(!found) // Generate it { QStandardItem *child = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), dir); - child->setData(fullpath); // keep the full path to simplify selection + child->setData(TreeViewItem(TreeViewItem::TYPE_FOLDER, fullpath), REPODIRMODEL_ROLE_PATH); parent->appendRow(child); parent = child; } @@ -605,24 +657,61 @@ void MainWindow::updateDirView() getWorkspace().getDirModel().clear(); QStringList header; - header << tr("Folders"); + header << fossil().getProjectName(); getWorkspace().getDirModel().setHorizontalHeaderLabels(header); - QStandardItem *root = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), fossil().getProjectName()); - root->setData(""); // Empty Path - root->setEditable(false); + QStandardItem *workspace = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), "Workspace"); + workspace->setData(TreeViewItem(TreeViewItem::TYPE_WORKSPACE, ""), REPODIRMODEL_ROLE_PATH); + workspace->setEditable(false); - getWorkspace().getDirModel().appendRow(root); - for(stringset_t::iterator it = getWorkspace().getPaths().begin(); it!=getWorkspace().getPaths().end(); ++it) + getWorkspace().getDirModel().appendRow(workspace); + if(viewMode == VIEWMODE_TREE) { - const QString &dir = *it; - if(dir.isEmpty()) - continue; + for(stringset_t::iterator it = getWorkspace().getPaths().begin(); it!=getWorkspace().getPaths().end(); ++it) + { + const QString &dir = *it; + if(dir.isEmpty()) + continue; - addPathToTree(*root, dir); + addPathToTree(*workspace, dir); + } } + + QStandardItem *branches = new QStandardItem(QIcon(":icons/icons/Document Organization Chart-01.png"), "Branches"); + branches->setData(TreeViewItem(TreeViewItem::TYPE_BRANCHES, ""), REPODIRMODEL_ROLE_PATH); + branches->setEditable(false); + getWorkspace().getDirModel().appendRow(branches); + + QStandardItem *stashes = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), "Stashes"); + stashes->setData(TreeViewItem(TreeViewItem::TYPE_STASHES, ""), REPODIRMODEL_ROLE_PATH); + stashes->setEditable(false); + getWorkspace().getDirModel().appendRow(stashes); + for(stashmap_t::const_iterator it= getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) + { + QStandardItem *stash = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), it.key()); + stash->setData(TreeViewItem(TreeViewItem::TYPE_STASH, it.value()), REPODIRMODEL_ROLE_PATH); + stashes->appendRow(stash); + } + + + QStandardItem *tags = new QStandardItem(QIcon(":icons/icons/Book-01.png"), "Tags"); + tags->setData(TreeViewItem(TreeViewItem::TYPE_TAGS, ""), REPODIRMODEL_ROLE_PATH); + tags->setEditable(false); + getWorkspace().getDirModel().appendRow(tags); + + QStandardItem *remotes = new QStandardItem(QIcon(":icons/icons/Network PC-01.png"), "Remotes"); + remotes->setData(TreeViewItem(TreeViewItem::TYPE_REMOTES, ""), REPODIRMODEL_ROLE_PATH); + remotes->setEditable(false); + getWorkspace().getDirModel().appendRow(remotes); + + QStandardItem *settings = new QStandardItem(QIcon(":icons/icons/Gear-01.png"), "Settings"); + settings->setData(TreeViewItem(TreeViewItem::TYPE_SETTINGS, ""), REPODIRMODEL_ROLE_PATH); + settings->setEditable(false); + getWorkspace().getDirModel().appendRow(settings); + + ui->workspaceTreeView->expandToDepth(0); - ui->workspaceTreeView->sortByColumn(0, Qt::AscendingOrder); + //ui->workspaceTreeView->sortByColumn(0, Qt::AscendingOrder); } //------------------------------------------------------------------------------ @@ -817,7 +906,7 @@ void MainWindow::applySettings() ui->actionViewAsList->setChecked(store->value("ViewAsList").toBool()); viewMode = store->value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE; } - ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); + //ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); if(store->contains("ViewStash")) ui->actionViewStash->setChecked(store->value("ViewStash").toBool()); @@ -867,6 +956,7 @@ void MainWindow::updateSettings() //------------------------------------------------------------------------------ void MainWindow::selectRootDir() { + // FIXME: KKK if(viewMode==VIEWMODE_TREE) { QModelIndex root_index = ui->workspaceTreeView->model()->index(0, 0); @@ -906,11 +996,15 @@ void MainWindow::getSelectionPaths(stringset_t &paths) { // Determine the directories selected QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); - for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) + foreach(const QModelIndex &mi, selection) { - const QModelIndex &mi = *mi_it; - QVariant data = getWorkspace().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); - paths.insert(data.toString()); + QVariant data = Workspace().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); + Q_ASSERT(data.isValid()); + TreeViewItem tv = data.value(); + if(tv.Type != TreeViewItem::TYPE_FOLDER) + continue; + + paths.insert(tv.Value); } } //------------------------------------------------------------------------------ @@ -1503,7 +1597,10 @@ void MainWindow::on_actionViewIgnored_triggered() void MainWindow::on_actionViewAsList_triggered() { viewMode = ui->actionViewAsList->isChecked() ? VIEWMODE_LIST : VIEWMODE_TREE; +#if 0 ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); +#endif + updateDirView(); updateFileView(); } @@ -1517,23 +1614,34 @@ QString MainWindow::getFossilHttpAddress() //------------------------------------------------------------------------------ void MainWindow::onWorkspaceTreeViewSelectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/) { - QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); - int num_selected = selection.count(); + QModelIndexList indices = ui->workspaceTreeView->selectionModel()->selectedIndexes(); // Do not modify the selection if nothing is selected - if(num_selected==0) + if(indices.empty()) return; - selectedDirs.clear(); + stringset_t new_dirs; - for(int i=0; iworkspaceTreeView->model()==&getWorkspace().getDirModel()); + //QVariant data = getWorkspace().getDirModel().data(id, REPODIRMODEL_ROLE_PATH); + QVariant data = id.model()->data(id, REPODIRMODEL_ROLE_PATH); + Q_ASSERT(data.isValid()); + TreeViewItem tv = data.value(); + + if(tv.Type != TreeViewItem::TYPE_FOLDER && tv.Type != TreeViewItem::TYPE_WORKSPACE) + continue; + + new_dirs.insert(tv.Value); } - updateFileView(); + // Update the selection if we have any new folders + if(!new_dirs.empty() && viewMode == VIEWMODE_TREE) + { + selectedDirs = new_dirs; + updateFileView(); + } } //------------------------------------------------------------------------------ @@ -1551,7 +1659,11 @@ void MainWindow::on_actionOpenFolder_triggered() //------------------------------------------------------------------------------ void MainWindow::on_workspaceTreeView_doubleClicked(const QModelIndex &index) { - QString target = getWorkspace().getDirModel().data(index, REPODIRMODEL_ROLE_PATH).toString(); + QVariant data = index.model()->data(index, REPODIRMODEL_ROLE_PATH); + Q_ASSERT(data.isValid()); + TreeViewItem tv = data.value(); + QString target = tv.Value; + target = getCurrentWorkspace() + PATH_SEPARATOR + target; QUrl url = QUrl::fromLocalFile(target); @@ -1917,6 +2029,34 @@ void MainWindow::on_fileTableView_customContextMenuRequested(const QPoint &pos) } +//------------------------------------------------------------------------------ +void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &) +{ + QModelIndexList indices = ui->workspaceTreeView->selectionModel()->selectedIndexes(); + + if(indices.empty()) + return; + + QMenu *menu = 0; + + // Get first selected item + const QModelIndex &mi = indices.first(); + QVariant data = getWorkspace().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); + Q_ASSERT(data.isValid()); + TreeViewItem tv = data.value(); + + if(tv.Type == TreeViewItem::TYPE_FOLDER || tv.Type == TreeViewItem::TYPE_WORKSPACE) + menu = menuWorkspace; + else if (tv.Type == TreeViewItem::TYPE_STASH || tv.Type == TreeViewItem::TYPE_STASHES) + menu = menuStashes; + + if(menu) + { + QPoint pos = QCursor::pos(); + menu->popup(pos); + } +} + //------------------------------------------------------------------------------ void MainWindow::dragEnterEvent(QDragEnterEvent *event) { diff --git a/src/MainWindow.h b/src/MainWindow.h index 41da3fe..83b62e2 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -112,6 +112,7 @@ private slots: void on_actionDiffStash_triggered(); void on_textBrowser_customContextMenuRequested(const QPoint &pos); void on_fileTableView_customContextMenuRequested(const QPoint &pos); + void on_workspaceTreeView_customContextMenuRequested(const QPoint &pos); private: class MainWinUICallback : public UICallback @@ -147,6 +148,9 @@ private: class QAction *recentWorkspaceActs[MAX_RECENT]; class QProgressBar *progressBar; class QShortcut *abortShortcut; + QMenu *menuWorkspace; + QMenu *menuStashes; + bool operationAborted; stringset_t selectedDirs; // The directory selected in the tree diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 613958d..0f6b763 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -120,7 +120,6 @@ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifie if(space_index==-1) continue; - //QString status_text = line.left(10).trimmed(); QString status_text = line.left(space_index); QString fname = line.right(line.length() - space_index).trimmed(); WorkspaceFile::Type type = WorkspaceFile::TYPE_UNKNOWN; diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 55a5389..a8ef19b 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -17,7 +17,7 @@ Fuel - + :/icons/icons/Battery-01.png:/icons/icons/Battery-01.png @@ -66,7 +66,7 @@ - Qt::ActionsContextMenu + Qt::CustomContextMenu QAbstractItemView::NoEditTriggers @@ -263,7 +263,7 @@ 0 0 865 - 22 + 23 @@ -356,7 +356,7 @@ - + :/icons/icons/Button Refresh-01.png:/icons/icons/Button Refresh-01.png @@ -374,7 +374,7 @@ - + :/icons/icons/Save-01.png:/icons/icons/Save-01.png @@ -392,7 +392,7 @@ - + :/icons/icons/Document Copy-01.png:/icons/icons/Document Copy-01.png @@ -410,7 +410,7 @@ - + :/icons/icons/File New-01.png:/icons/icons/File New-01.png @@ -428,7 +428,7 @@ - + :/icons/icons/File Delete-01.png:/icons/icons/File Delete-01.png @@ -446,7 +446,7 @@ - + :/icons/icons/Document Blank-01.png:/icons/icons/Document Blank-01.png @@ -464,7 +464,7 @@ - + :/icons/icons/My Documents-01.png:/icons/icons/My Documents-01.png @@ -496,11 +496,11 @@ - + :/icons/icons/My Websites-01.png:/icons/icons/My Websites-01.png - Clone... + C&lone... Clone a remote repository @@ -508,7 +508,7 @@ - + :/icons/icons/Button Upload-01.png:/icons/icons/Button Upload-01.png @@ -526,7 +526,7 @@ - + :/icons/icons/Button Download-01.png:/icons/icons/Button Download-01.png @@ -544,7 +544,7 @@ - + :/icons/icons/File Open-01.png:/icons/icons/File Open-01.png @@ -562,7 +562,7 @@ - + :/icons/icons/Button Turn Off-01.png:/icons/icons/Button Turn Off-01.png @@ -583,7 +583,7 @@ - + :/icons/icons/File History-01.png:/icons/icons/File History-01.png @@ -604,7 +604,7 @@ true - + :/icons/icons/Network MAC-01.png:/icons/icons/Network MAC-01.png @@ -619,7 +619,7 @@ - + :/icons/icons/Document-Revert-icon.png:/icons/icons/Document-Revert-icon.png @@ -634,7 +634,7 @@ - + :/icons/icons/Text Edit.png:/icons/icons/Text Edit.png @@ -649,7 +649,7 @@ - + :/icons/icons/Clock-01.png:/icons/icons/Clock-01.png @@ -664,7 +664,7 @@ - + :/icons/icons/Document-01.png:/icons/icons/Document-01.png @@ -682,7 +682,7 @@ - + :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png @@ -700,7 +700,7 @@ - + :/icons/icons/Button Reload-01.png:/icons/icons/Button Reload-01.png @@ -718,7 +718,7 @@ - + :/icons/icons/Battery-01.png:/icons/icons/Battery-01.png @@ -733,7 +733,7 @@ - + :/icons/icons/Button Play-01.png:/icons/icons/Button Play-01.png @@ -751,7 +751,7 @@ - + :/icons/icons/Gear-01.png:/icons/icons/Gear-01.png @@ -839,7 +839,7 @@ - + :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png @@ -854,7 +854,7 @@ - + :/icons/icons/Folder Open-01.png:/icons/icons/Folder Open-01.png @@ -869,7 +869,7 @@ - + :/icons/icons/Folder Add-01.png:/icons/icons/Folder Add-01.png @@ -881,7 +881,7 @@ - + :/icons/icons/Folder Open-01.png:/icons/icons/Folder Open-01.png @@ -913,7 +913,7 @@ - + :/icons/icons/Folder Delete-01.png:/icons/icons/Folder Delete-01.png @@ -922,7 +922,7 @@ - + :/icons/icons/Folder Explorer-01.png:/icons/icons/Folder Explorer-01.png @@ -944,6 +944,8 @@ 1 - + + + From 709d3b90bbb3cb9e58027dde87ac3e44d6019710 Mon Sep 17 00:00:00 2001 From: kostas Date: Fri, 1 May 2015 19:10:16 +0000 Subject: [PATCH 48/90] Fixed "open containing" FossilOrigin-Name: 63b2c047630f4f14ee0c1bd398d5df61433827dc --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/MainWindow.cpp | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 00cf2e5..5f23972 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Initial\swork\son\snew\sworkspace\sview\n -D 2015-05-01T19:04:02.737 +C Fixed\s"open\scontaining" +D 2015-05-01T19:10:16.075 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 7f3b06953194c1aa46511b49906edab8c194930d +F src/MainWindow.cpp 7c406918e1c646fe2415550e2dc7b687f0275dc5 F src/MainWindow.h 5e0b71e6b795c32ae4207ffb44aa056b52674a10 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -217,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui ef46a06e46eb465703a8b7353b079c2e538104d7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P f82fab41453e6ccf28c60e89ce567635ffab25a3 -R eb515f213709887707816d20f04a41de +P 64386745ebf2d2fa921a51383bd76241947b879c +R bb91efce0b5d15735a3aeaf0f8c07808 U kostas -Z 79fc4cbaace7ceb95ba923e30451b76b +Z 40a3e5164436792f1ef01526a22ec20c diff --git a/manifest.uuid b/manifest.uuid index a9ba285..ffa4106 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -64386745ebf2d2fa921a51383bd76241947b879c \ No newline at end of file +63b2c047630f4f14ee0c1bd398d5df61433827dc \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index c62ea12..8aa2926 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1662,9 +1662,11 @@ void MainWindow::on_workspaceTreeView_doubleClicked(const QModelIndex &index) QVariant data = index.model()->data(index, REPODIRMODEL_ROLE_PATH); Q_ASSERT(data.isValid()); TreeViewItem tv = data.value(); - QString target = tv.Value; - target = getCurrentWorkspace() + PATH_SEPARATOR + target; + if(tv.Type!=TreeViewItem::TYPE_FOLDER && tv.Type!=TreeViewItem::TYPE_WORKSPACE) + return; + + QString target = getCurrentWorkspace() + PATH_SEPARATOR + tv.Value; QUrl url = QUrl::fromLocalFile(target); QDesktopServices::openUrl(url); From e5d5c09f9949b4c53f71f927bf8bf1d5c462b875 Mon Sep 17 00:00:00 2001 From: kostas Date: Fri, 1 May 2015 19:13:19 +0000 Subject: [PATCH 49/90] Fixed getSelectionPaths FossilOrigin-Name: 268641002b332e82e893dacce6698a2c298c4f98 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/MainWindow.cpp | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 5f23972..0337d56 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\s"open\scontaining" -D 2015-05-01T19:10:16.075 +C Fixed\sgetSelectionPaths\n +D 2015-05-01T19:13:19.529 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 7c406918e1c646fe2415550e2dc7b687f0275dc5 +F src/MainWindow.cpp bdaa3a5c8dc96bc480bd8ee979abec791be403b2 F src/MainWindow.h 5e0b71e6b795c32ae4207ffb44aa056b52674a10 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -217,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui ef46a06e46eb465703a8b7353b079c2e538104d7 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 64386745ebf2d2fa921a51383bd76241947b879c -R bb91efce0b5d15735a3aeaf0f8c07808 +P 63b2c047630f4f14ee0c1bd398d5df61433827dc +R e18f69554275572e3401b0b43d69aa3d U kostas -Z 40a3e5164436792f1ef01526a22ec20c +Z c73159632c41ad626bc86208beab1c49 diff --git a/manifest.uuid b/manifest.uuid index ffa4106..31bd364 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -63b2c047630f4f14ee0c1bd398d5df61433827dc \ No newline at end of file +268641002b332e82e893dacce6698a2c298c4f98 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 8aa2926..77e1fb8 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -998,8 +998,9 @@ void MainWindow::getSelectionPaths(stringset_t &paths) QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); foreach(const QModelIndex &mi, selection) { - QVariant data = Workspace().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); + QVariant data = mi.model()->data(mi, REPODIRMODEL_ROLE_PATH); Q_ASSERT(data.isValid()); + TreeViewItem tv = data.value(); if(tv.Type != TreeViewItem::TYPE_FOLDER) continue; From d3b8900afdc544152e397a8e967aa48bffb4c1c5 Mon Sep 17 00:00:00 2001 From: kostas Date: Fri, 1 May 2015 19:29:12 +0000 Subject: [PATCH 50/90] Goodbye Stash View Working stash management in Workspace view FossilOrigin-Name: 1b0d47442df7a239ed11a048bde0073603b514f1 --- manifest | 18 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 62 ++++++++-------------------------------------- src/MainWindow.h | 4 +-- src/Workspace.h | 3 +-- ui/MainWindow.ui | 42 +------------------------------ 6 files changed, 23 insertions(+), 108 deletions(-) diff --git a/manifest b/manifest index 0337d56..085e540 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\sgetSelectionPaths\n -D 2015-05-01T19:13:19.529 +C Goodbye\sStash\sView\nWorking\sstash\smanagement\sin\sWorkspace\sview +D 2015-05-01T19:29:12.162 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,14 +200,14 @@ F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp bdaa3a5c8dc96bc480bd8ee979abec791be403b2 -F src/MainWindow.h 5e0b71e6b795c32ae4207ffb44aa056b52674a10 +F src/MainWindow.cpp 50bcfea121159016f6658abcece3208b6cbc6419 +F src/MainWindow.h d21a0e993f44dfa6c751613fc07325ec287a58cf F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 F src/Workspace.cpp 114daa2d44228ac253056fdf74a45e977d181475 -F src/Workspace.h 9f1d34320abb378ae5a6e3360f8c8a5949029b88 +F src/Workspace.h 28e8e466df6ddce0bb80e8c9dbec7355d53f2c78 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -215,9 +215,9 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui ef46a06e46eb465703a8b7353b079c2e538104d7 +F ui/MainWindow.ui b735238428bad38bbb5c03e09975e5bb0fa156ab F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 63b2c047630f4f14ee0c1bd398d5df61433827dc -R e18f69554275572e3401b0b43d69aa3d +P 268641002b332e82e893dacce6698a2c298c4f98 +R 88c5523fcc03ef8f78e0d4bd0720be73 U kostas -Z c73159632c41ad626bc86208beab1c49 +Z ce07e9006ea4abb3d7459eb4c758192a diff --git a/manifest.uuid b/manifest.uuid index 31bd364..18a911c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -268641002b332e82e893dacce6698a2c298c4f98 \ No newline at end of file +1b0d47442df7a239ed11a048bde0073603b514f1 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 77e1fb8..cf8b801 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -169,13 +169,6 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP menuWorkspace->addAction(ui->actionRenameFolder); menuWorkspace->addAction(ui->actionOpenFolder); - // StashView - ui->stashTableView->setModel(&getWorkspace().getStashModel()); - ui->stashTableView->addAction(ui->actionApplyStash); - ui->stashTableView->addAction(ui->actionDiffStash); - ui->stashTableView->addAction(ui->actionDeleteStash); - ui->stashTableView->horizontalHeader()->setSortIndicatorShown(false); - // StashMenu menuStashes = new QMenu(this); menuStashes->addAction(ui->actionApplyStash); @@ -608,7 +601,6 @@ void MainWindow::scanWorkspace() ); updateDirView(); updateFileView(); - updateStashView(); setBusy(false); setStatus(""); @@ -790,25 +782,6 @@ void MainWindow::updateFileView() ui->fileTableView->resizeRowsToContents(); } -//------------------------------------------------------------------------------ -void MainWindow::updateStashView() -{ - getWorkspace().getStashModel().clear(); - - QStringList header; - header << tr("Stashes"); - getWorkspace().getStashModel().setHorizontalHeaderLabels(header); - - for(stashmap_t::iterator it=getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) - { - QStandardItem *item = new QStandardItem(it.key()); - item->setToolTip(it.key()); - getWorkspace().getStashModel().appendRow(item); - } - ui->stashTableView->resizeColumnsToContents(); - ui->stashTableView->resizeRowsToContents(); -} - //------------------------------------------------------------------------------ void MainWindow::log(const QString &text, bool isHTML) { @@ -907,11 +880,6 @@ void MainWindow::applySettings() viewMode = store->value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE; } //ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); - - if(store->contains("ViewStash")) - ui->actionViewStash->setChecked(store->value("ViewStash").toBool()); - ui->stashTableView->setVisible(ui->actionViewStash->isChecked()); - } //------------------------------------------------------------------------------ @@ -1104,25 +1072,23 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b } } //------------------------------------------------------------------------------ -void MainWindow::getStashViewSelection(QStringList &stashNames, bool allIfEmpty) +void MainWindow::getStashViewSelection(QStringList &stashNames) { - QModelIndexList selection = ui->stashTableView->selectionModel()->selectedIndexes(); - if(selection.empty() && allIfEmpty) - { - ui->stashTableView->selectAll(); - selection = ui->stashTableView->selectionModel()->selectedIndexes(); - ui->stashTableView->clearSelection(); - } + QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); - for(QModelIndexList::iterator mi_it = selection.begin(); mi_it!=selection.end(); ++mi_it) + foreach(const QModelIndex &mi, selection) { - const QModelIndex &mi = *mi_it; + QVariant data = mi.model()->data(mi, REPODIRMODEL_ROLE_PATH); + Q_ASSERT(data.isValid()); + TreeViewItem tv = data.value(); - if(mi.column()!=0) + if(tv.Type != TreeViewItem::TYPE_STASH) continue; - QString name = getWorkspace().getStashModel().data(mi).toString(); + + QString name = mi.model()->data(mi, Qt::DisplayRole).toString(); stashNames.append(name); } + } //------------------------------------------------------------------------------ @@ -1625,8 +1591,6 @@ void MainWindow::onWorkspaceTreeViewSelectionChanged(const QItemSelection &/*sel foreach(const QModelIndex &id, indices) { - Q_ASSERT(ui->workspaceTreeView->model()==&getWorkspace().getDirModel()); - //QVariant data = getWorkspace().getDirModel().data(id, REPODIRMODEL_ROLE_PATH); QVariant data = id.model()->data(id, REPODIRMODEL_ROLE_PATH); Q_ASSERT(data.isValid()); TreeViewItem tv = data.value(); @@ -1843,12 +1807,6 @@ QMenu * MainWindow::createPopupMenu() return NULL; } -//------------------------------------------------------------------------------ -void MainWindow::on_actionViewStash_triggered() -{ - ui->stashTableView->setVisible(ui->actionViewStash->isChecked()); -} - //------------------------------------------------------------------------------ void MainWindow::on_actionNewStash_triggered() { diff --git a/src/MainWindow.h b/src/MainWindow.h index 83b62e2..c9f097e 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -36,7 +36,7 @@ private: void getSelectionFilenames(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); void getFileViewSelection(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); void getDirViewSelection(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); - void getStashViewSelection(QStringList &stashNames, bool allIfEmpty=false); + void getStashViewSelection(QStringList &stashNames); void getSelectionPaths(stringset_t &paths); void getAllFilenames(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL); bool startUI(); @@ -49,7 +49,6 @@ private: QString getFossilHttpAddress(); void updateDirView(); void updateFileView(); - void updateStashView(); void selectRootDir(); void fossilBrowse(const QString &fossilUrl); void dragEnterEvent(class QDragEnterEvent *event); @@ -105,7 +104,6 @@ private slots: void on_actionOpenRepository_triggered(); void on_actionCloseRepository_triggered(); void on_actionCloneRepository_triggered(); - void on_actionViewStash_triggered(); void on_actionNewStash_triggered(); void on_actionApplyStash_triggered(); void on_actionDeleteStash_triggered(); diff --git a/src/Workspace.h b/src/Workspace.h index 00823ba..0dcdb0d 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -116,7 +116,7 @@ public: QStandardItemModel &getFileModel() { return repoFileModel; } QStandardItemModel &getDirModel() { return repoDirModel; } - QStandardItemModel &getStashModel() { return repoStashModel; } + filemap_t &getFiles() { return workspaceFiles; } stringset_t &getPaths() { return pathSet; } stashmap_t &getStashes() { return stashMap; } @@ -129,7 +129,6 @@ private: QStandardItemModel repoFileModel; QStandardItemModel repoDirModel; - QStandardItemModel repoStashModel; }; #endif // WORKSPACE_H diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index a8ef19b..7041160 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -140,44 +140,6 @@ 30 - - - - 20 - 0 - - - - Qt::ActionsContextMenu - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::SelectRows - - - false - - - true - - - false - - - false - - - true - - - false - - @@ -190,7 +152,7 @@ QTabWidget::South - 1 + 0 @@ -296,8 +258,6 @@ - - From a48f81d1f5f854580eab90466ff91e08e1ba7c1c Mon Sep 17 00:00:00 2001 From: kostas Date: Fri, 1 May 2015 19:31:56 +0000 Subject: [PATCH 51/90] Renamed getStashViewSelection to getSelectionStashes FossilOrigin-Name: 82357d43ca742466e08d3794bdc9a4ab800ad867 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 8 ++++---- src/MainWindow.h | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 085e540..ab5fe0d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Goodbye\sStash\sView\nWorking\sstash\smanagement\sin\sWorkspace\sview -D 2015-05-01T19:29:12.162 +C Renamed\sgetStashViewSelection\sto\sgetSelectionStashes +D 2015-05-01T19:31:56.612 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 50bcfea121159016f6658abcece3208b6cbc6419 -F src/MainWindow.h d21a0e993f44dfa6c751613fc07325ec287a58cf +F src/MainWindow.cpp 96ebf7dd8ecbff629a334160079051f671cf57d9 +F src/MainWindow.h ef23aacdae4a6795fc19d9c24b3c76394a7b669d F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -217,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui b735238428bad38bbb5c03e09975e5bb0fa156ab F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 268641002b332e82e893dacce6698a2c298c4f98 -R 88c5523fcc03ef8f78e0d4bd0720be73 +P 1b0d47442df7a239ed11a048bde0073603b514f1 +R 7380968ed8535cfc03d075d0ca405f15 U kostas -Z ce07e9006ea4abb3d7459eb4c758192a +Z b61f064d91c92dc5af55c95f81df5c39 diff --git a/manifest.uuid b/manifest.uuid index 18a911c..892cf21 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1b0d47442df7a239ed11a048bde0073603b514f1 \ No newline at end of file +82357d43ca742466e08d3794bdc9a4ab800ad867 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index cf8b801..2e7ed74 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1072,7 +1072,7 @@ void MainWindow::getFileViewSelection(QStringList &filenames, int includeMask, b } } //------------------------------------------------------------------------------ -void MainWindow::getStashViewSelection(QStringList &stashNames) +void MainWindow::getSelectionStashes(QStringList &stashNames) { QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); @@ -1850,7 +1850,7 @@ void MainWindow::on_actionNewStash_triggered() void MainWindow::on_actionApplyStash_triggered() { QStringList stashes; - getStashViewSelection(stashes); + getSelectionStashes(stashes); bool delete_stashes = false; if(!FileActionDialog::run(this, tr("Apply Stash"), tr("The following stashes will be applied.")+"\n"+tr("Are you sure?"), stashes, tr("Delete after applying"), &delete_stashes)) @@ -1889,7 +1889,7 @@ void MainWindow::on_actionApplyStash_triggered() void MainWindow::on_actionDeleteStash_triggered() { QStringList stashes; - getStashViewSelection(stashes); + getSelectionStashes(stashes); if(stashes.empty()) return; @@ -1917,7 +1917,7 @@ void MainWindow::on_actionDeleteStash_triggered() void MainWindow::on_actionDiffStash_triggered() { QStringList stashes; - getStashViewSelection(stashes); + getSelectionStashes(stashes); if(stashes.length() != 1) return; diff --git a/src/MainWindow.h b/src/MainWindow.h index c9f097e..e188126 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -36,7 +36,7 @@ private: void getSelectionFilenames(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); void getFileViewSelection(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); void getDirViewSelection(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false); - void getStashViewSelection(QStringList &stashNames); + void getSelectionStashes(QStringList &stashNames); void getSelectionPaths(stringset_t &paths); void getAllFilenames(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL); bool startUI(); From 729caef32ebda5b1699c819451ee8a6c9f6e28ba Mon Sep 17 00:00:00 2001 From: kostas Date: Sat, 2 May 2015 12:44:09 +0000 Subject: [PATCH 52/90] Added tag and branch list to workspace view FossilOrigin-Name: 304f9bd6c61babe7abc522c1a1301fe3f1887505 --- manifest | 20 ++++++++-------- manifest.uuid | 2 +- src/Fossil.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++ src/Fossil.h | 3 +++ src/MainWindow.cpp | 30 ++++++++++++++++++------ src/Workspace.cpp | 9 ++++++++ src/Workspace.h | 4 ++++ 7 files changed, 107 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index ab5fe0d..a73a924 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sgetStashViewSelection\sto\sgetSelectionStashes -D 2015-05-01T19:31:56.612 +C Added\stag\sand\sbranch\slist\sto\sworkspace\sview +D 2015-05-02T12:44:09.110 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,18 +196,18 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp b54d136f05764535636da04bcc5f60b2eb97e5b6 -F src/Fossil.h e46ec6cdb5c23a34176050fbd90e561ac87c07f9 +F src/Fossil.cpp c19b0e9b510743e7a49c7f0d2b4c5eba4b93382e +F src/Fossil.h 33b6845a8adbc351f82c5256282671a6c3d864d2 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 96ebf7dd8ecbff629a334160079051f671cf57d9 +F src/MainWindow.cpp 87b8831f7035c4584c2b4b728ad0b72f17ac63f1 F src/MainWindow.h ef23aacdae4a6795fc19d9c24b3c76394a7b669d F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 -F src/Workspace.cpp 114daa2d44228ac253056fdf74a45e977d181475 -F src/Workspace.h 28e8e466df6ddce0bb80e8c9dbec7355d53f2c78 +F src/Workspace.cpp fca14549ff85125a9fb7fd8a2722198055ea9f9a +F src/Workspace.h 8c965e73a966432e45ce80f4a223167eeafc3abe F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -217,7 +217,7 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui b735238428bad38bbb5c03e09975e5bb0fa156ab F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 1b0d47442df7a239ed11a048bde0073603b514f1 -R 7380968ed8535cfc03d075d0ca405f15 +P 82357d43ca742466e08d3794bdc9a4ab800ad867 +R 32a798815197954f6956d147e48ec66c U kostas -Z b61f064d91c92dc5af55c95f81df5c39 +Z da4f0b035007563aa632b403c0d99df8 diff --git a/manifest.uuid b/manifest.uuid index 892cf21..2d0a0e3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -82357d43ca742466e08d3794bdc9a4ab800ad867 \ No newline at end of file +304f9bd6c61babe7abc522c1a1301fe3f1887505 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 3903978..122595c 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -417,6 +417,63 @@ bool Fossil::stashDiff(const QString& name) return runFossil(QStringList() << "stash" << "diff" << name, 0); } +//------------------------------------------------------------------------------ +bool Fossil::tagList(QStringList& tags) +{ + tags.clear(); + QStringList res; + + if(!runFossil(QStringList() << "tag" << "ls", &res, RUNFLAGS_SILENT_ALL)) + return false; + + foreach(const QString &line, res) + { + QString tag = line.trimmed(); + + if(tag.isEmpty()) + continue; + tags.append(tag); + } + tags.sort(); + return true; +} + +//------------------------------------------------------------------------------ +bool Fossil::branchList(QStringList& branches, QStringList& activeBranches) +{ + branches.clear(); + activeBranches.clear(); + QStringList res; + + if(!runFossil(QStringList() << "branch" , &res, RUNFLAGS_SILENT_ALL)) + return false; + + foreach(const QString &line, res) + { + QString name = line.trimmed(); + + if(name.isEmpty()) + continue; + + // Active branches start with a start + int active_index = name.indexOf('*'); + bool is_active = (active_index != -1) && active_index==0; + + // Strip + if(is_active) + { + name = name.mid(is_active+1).trimmed(); + activeBranches.append(name); + } + else + branches.append(name); + } + + branches.sort(); + activeBranches.sort(); + return true; +} + //------------------------------------------------------------------------------ static QString ParseFossilQuery(QString line) { diff --git a/src/Fossil.h b/src/Fossil.h index da99952..ac25a8f 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -110,6 +110,9 @@ public: void abortOperation() { operationAborted = true; } + bool tagList(QStringList& tags); + bool branchList(QStringList& branches, QStringList& activeBranches); + private: void log(const QString &text, bool isHTML=false) { diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2e7ed74..ef4d167 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -669,33 +669,49 @@ void MainWindow::updateDirView() } } + // Branches QStandardItem *branches = new QStandardItem(QIcon(":icons/icons/Document Organization Chart-01.png"), "Branches"); branches->setData(TreeViewItem(TreeViewItem::TYPE_BRANCHES, ""), REPODIRMODEL_ROLE_PATH); branches->setEditable(false); getWorkspace().getDirModel().appendRow(branches); + foreach(const QString &branch_name, getWorkspace().getBranches()) + { + QStandardItem *branch = new QStandardItem(QIcon(":icons/icons/Document Organization Chart-01.png"), branch_name); + branch->setData(TreeViewItem(TreeViewItem::TYPE_BRANCH, branch_name), REPODIRMODEL_ROLE_PATH); + branches->appendRow(branch); + } + // Tags + QStandardItem *tags = new QStandardItem(QIcon(":icons/icons/Book-01.png"), "Tags"); + tags->setData(TreeViewItem(TreeViewItem::TYPE_TAGS, ""), REPODIRMODEL_ROLE_PATH); + tags->setEditable(false); + getWorkspace().getDirModel().appendRow(tags); + foreach(const QString &tag_name, getWorkspace().getTags()) + { + QStandardItem *tag = new QStandardItem(QIcon(":icons/icons/Book-01.png"), tag_name); + tag->setData(TreeViewItem(TreeViewItem::TYPE_TAG, tag_name), REPODIRMODEL_ROLE_PATH); + tags->appendRow(tag); + } + + // Stashes QStandardItem *stashes = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), "Stashes"); stashes->setData(TreeViewItem(TreeViewItem::TYPE_STASHES, ""), REPODIRMODEL_ROLE_PATH); stashes->setEditable(false); getWorkspace().getDirModel().appendRow(stashes); for(stashmap_t::const_iterator it= getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) { - QStandardItem *stash = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), it.key()); + QStandardItem *stash = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), it.key()); stash->setData(TreeViewItem(TreeViewItem::TYPE_STASH, it.value()), REPODIRMODEL_ROLE_PATH); stashes->appendRow(stash); } - - QStandardItem *tags = new QStandardItem(QIcon(":icons/icons/Book-01.png"), "Tags"); - tags->setData(TreeViewItem(TreeViewItem::TYPE_TAGS, ""), REPODIRMODEL_ROLE_PATH); - tags->setEditable(false); - getWorkspace().getDirModel().appendRow(tags); - + // Remotes QStandardItem *remotes = new QStandardItem(QIcon(":icons/icons/Network PC-01.png"), "Remotes"); remotes->setData(TreeViewItem(TreeViewItem::TYPE_REMOTES, ""), REPODIRMODEL_ROLE_PATH); remotes->setEditable(false); getWorkspace().getDirModel().appendRow(remotes); + // Settings QStandardItem *settings = new QStandardItem(QIcon(":icons/icons/Gear-01.png"), "Settings"); settings->setData(TreeViewItem(TreeViewItem::TYPE_SETTINGS, ""), REPODIRMODEL_ROLE_PATH); settings->setEditable(false); diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 0f6b763..2dd4c06 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -186,6 +186,15 @@ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifie // Load the stash fossil().stashList(getStashes()); + + fossil().branchList(branchList, branchList); + + fossil().tagList(tagList); + // Fossil includes the branches in the tag list + // So remove them + foreach(const QString &name, branchList) + tagList.removeAll(name); + _done: uiCallback.endProcess(); } diff --git a/src/Workspace.h b/src/Workspace.h index 0dcdb0d..8d51b1a 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -120,12 +120,16 @@ public: filemap_t &getFiles() { return workspaceFiles; } stringset_t &getPaths() { return pathSet; } stashmap_t &getStashes() { return stashMap; } + QStringList &getTags() { return tagList; } + QStringList &getBranches() { return branchList; } private: Fossil bridge; filemap_t workspaceFiles; stringset_t pathSet; stashmap_t stashMap; + QStringList branchList; + QStringList tagList; QStandardItemModel repoFileModel; QStandardItemModel repoDirModel; From b3ba622ef2db6f35b618883665ebc341a3b94063 Mon Sep 17 00:00:00 2001 From: kostas Date: Sat, 2 May 2015 14:37:35 +0000 Subject: [PATCH 53/90] Renamed updateDirView to updateWorkspaceView Disabled sorting in the workspace view FossilOrigin-Name: 330e0819bba257c674afdadb1ab097cd7f7ffe61 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/MainWindow.cpp | 10 +++++----- src/MainWindow.h | 2 +- ui/MainWindow.ui | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index a73a924..721d49a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\stag\sand\sbranch\slist\sto\sworkspace\sview -D 2015-05-02T12:44:09.110 +C Renamed\supdateDirView\sto\supdateWorkspaceView\nDisabled\ssorting\sin\sthe\sworkspace\sview +D 2015-05-02T14:37:35.228 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp c19b0e9b510743e7a49c7f0d2b4c5eba4b93382e F src/Fossil.h 33b6845a8adbc351f82c5256282671a6c3d864d2 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 87b8831f7035c4584c2b4b728ad0b72f17ac63f1 -F src/MainWindow.h ef23aacdae4a6795fc19d9c24b3c76394a7b669d +F src/MainWindow.cpp 5ed1c10b7ac306fa2594f7dae36028ac3cce3730 +F src/MainWindow.h 13810b522080c52541112a68890f75d20e3d8f13 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca @@ -215,9 +215,9 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui b735238428bad38bbb5c03e09975e5bb0fa156ab +F ui/MainWindow.ui f18e1ca4dbbf1ad031dd6660e3b1bef927bf32e8 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 82357d43ca742466e08d3794bdc9a4ab800ad867 -R 32a798815197954f6956d147e48ec66c +P 304f9bd6c61babe7abc522c1a1301fe3f1887505 +R 8eb683509bb23eb5a25729fe59a5def6 U kostas -Z da4f0b035007563aa632b403c0d99df8 +Z e1f07217ec9a1e8b6c63138e70dfd9dd diff --git a/manifest.uuid b/manifest.uuid index 2d0a0e3..e22bdb0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -304f9bd6c61babe7abc522c1a1301fe3f1887505 \ No newline at end of file +330e0819bba257c674afdadb1ab097cd7f7ffe61 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ef4d167..a4d98cc 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -599,7 +599,7 @@ void MainWindow::scanWorkspace() uiCallback, operationAborted ); - updateDirView(); + updateWorkspaceView(); updateFileView(); setBusy(false); @@ -643,16 +643,16 @@ static void addPathToTree(QStandardItem &root, const QString &path) } //------------------------------------------------------------------------------ -void MainWindow::updateDirView() +void MainWindow::updateWorkspaceView() { // Directory View getWorkspace().getDirModel().clear(); QStringList header; - header << fossil().getProjectName(); + header << tr("Workspace"); getWorkspace().getDirModel().setHorizontalHeaderLabels(header); - QStandardItem *workspace = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), "Workspace"); + QStandardItem *workspace = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), tr("Files") ); workspace->setData(TreeViewItem(TreeViewItem::TYPE_WORKSPACE, ""), REPODIRMODEL_ROLE_PATH); workspace->setEditable(false); @@ -1583,7 +1583,7 @@ void MainWindow::on_actionViewAsList_triggered() #if 0 ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); #endif - updateDirView(); + updateWorkspaceView(); updateFileView(); } diff --git a/src/MainWindow.h b/src/MainWindow.h index e188126..6d9c57b 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -47,7 +47,7 @@ private: bool openWorkspace(const QString &path); void loadFossilSettings(); QString getFossilHttpAddress(); - void updateDirView(); + void updateWorkspaceView(); void updateFileView(); void selectRootDir(); void fossilBrowse(const QString &fossilUrl); diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 7041160..97b8d05 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -78,7 +78,7 @@ QAbstractItemView::SelectItems - true + false true From 4cd2e6e5b4b9726594ba6911dcd1c9598acb086f Mon Sep 17 00:00:00 2001 From: kostas Date: Sat, 2 May 2015 16:42:06 +0000 Subject: [PATCH 54/90] Added "Update to Revision" Action FossilOrigin-Name: 203cae37a6553c26a3844dcfdd3386eae9be288f --- fuel.pro | 13 ++++--- manifest | 25 ++++++------ manifest.uuid | 2 +- src/Fossil.cpp | 8 +++- src/Fossil.h | 2 +- src/MainWindow.cpp | 52 +++++++++++++++++++++++-- src/MainWindow.h | 3 ++ src/UpdateDialog.cpp | 34 +++++++++++++++++ src/UpdateDialog.h | 27 +++++++++++++ ui/MainWindow.ui | 16 ++++++++ ui/UpdateDialog.ui | 91 ++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 251 insertions(+), 22 deletions(-) create mode 100644 src/UpdateDialog.cpp create mode 100644 src/UpdateDialog.h create mode 100644 ui/UpdateDialog.ui diff --git a/fuel.pro b/fuel.pro index ec1c28b..94dd085 100644 --- a/fuel.pro +++ b/fuel.pro @@ -46,34 +46,37 @@ SOURCES += src/main.cpp\ src/CommitDialog.cpp \ src/FileActionDialog.cpp \ src/SettingsDialog.cpp \ + src/CloneDialog.cpp \ + src/UpdateDialog.cpp \ src/Utils.cpp \ src/FileTableView.cpp \ - src/CloneDialog.cpp \ src/LoggedProcess.cpp \ src/BrowserWidget.cpp \ src/CustomWebView.cpp \ src/Fossil.cpp \ - src/Workspace.cpp + src/Workspace.cpp HEADERS += src/MainWindow.h \ src/CommitDialog.h \ src/FileActionDialog.h \ src/SettingsDialog.h \ + src/CloneDialog.h \ + src/UpdateDialog.h \ src/Utils.h \ src/FileTableView.h \ - src/CloneDialog.h \ src/LoggedProcess.h \ src/BrowserWidget.h \ src/CustomWebView.h \ src/Fossil.h \ - src/Workspace.h + src/Workspace.h FORMS += ui/MainWindow.ui \ ui/CommitDialog.ui \ ui/FileActionDialog.ui \ ui/SettingsDialog.ui \ ui/CloneDialog.ui \ - ui/BrowserWidget.ui + ui/BrowserWidget.ui \ + ui/UpdateDialog.ui RESOURCES += \ rsrc/resources.qrc diff --git a/manifest b/manifest index 721d49a..76f6533 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\supdateDirView\sto\supdateWorkspaceView\nDisabled\ssorting\sin\sthe\sworkspace\sview -D 2015-05-02T14:37:35.228 +C Added\s"Update\sto\sRevision"\sAction\n +D 2015-05-02T16:42:06.752 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro cda04943d336bd186ab428a81310d442aec94ca2 +F fuel.pro ffc65a5de975124eeb22032c6d9595f77ef284d8 F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -196,14 +196,16 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp c19b0e9b510743e7a49c7f0d2b4c5eba4b93382e -F src/Fossil.h 33b6845a8adbc351f82c5256282671a6c3d864d2 +F src/Fossil.cpp 35ee3e88a14e6673e991a3c743a4fa7ab5697a24 +F src/Fossil.h 7c91732020730f33e50663b0e5c66e6c35ad5cdc F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 5ed1c10b7ac306fa2594f7dae36028ac3cce3730 -F src/MainWindow.h 13810b522080c52541112a68890f75d20e3d8f13 +F src/MainWindow.cpp 8ae32de39af8917cdb5a5c7efc221da4a61154a1 +F src/MainWindow.h 8377cf134d64d74855b1795463356a7a817b149f F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 +F src/UpdateDialog.cpp 54df56055ee5efe1170efbed495363fb14abc8e5 +F src/UpdateDialog.h e2252c7d555e161f946e99014a6e6c6b52b4b53c F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 F src/Workspace.cpp fca14549ff85125a9fb7fd8a2722198055ea9f9a @@ -215,9 +217,10 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui f18e1ca4dbbf1ad031dd6660e3b1bef927bf32e8 +F ui/MainWindow.ui 798a40a0fd715b0544f608543e09038e2b1fb69a F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 304f9bd6c61babe7abc522c1a1301fe3f1887505 -R 8eb683509bb23eb5a25729fe59a5def6 +F ui/UpdateDialog.ui 129596c2deb60211f25cefd785696ca7c7c56d42 +P 330e0819bba257c674afdadb1ab097cd7f7ffe61 +R 44924937e1415e3426bc0d8efcc11b99 U kostas -Z e1f07217ec9a1e8b6c63138e70dfd9dd +Z 30db0249ce1d6def72f41fe542e3c03a diff --git a/manifest.uuid b/manifest.uuid index e22bdb0..07b1594 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -330e0819bba257c674afdadb1ab097cd7f7ffe61 \ No newline at end of file +203cae37a6553c26a3844dcfdd3386eae9be288f \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 122595c..b786e54 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -286,7 +286,7 @@ bool Fossil::undoRepository(QStringList &result, bool explainOnly) } //------------------------------------------------------------------------------ -bool Fossil::updateRepository(QStringList &result, bool explainOnly) +bool Fossil::updateRepository(QStringList &result, const QString &revision, bool explainOnly) { QStringList params; params << "update"; @@ -294,6 +294,12 @@ bool Fossil::updateRepository(QStringList &result, bool explainOnly) if(explainOnly) params << "--nochange"; + if(revision.isEmpty()) + params << "--latest"; + else + params << revision; + + result.clear(); return runFossil(params, &result); } diff --git a/src/Fossil.h b/src/Fossil.h index ac25a8f..9b0da68 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -83,7 +83,7 @@ public: bool pullRepository(); bool cloneRepository(const QString &repository, const QUrl &url, const QUrl &proxyUrl); bool undoRepository(QStringList& result, bool explainOnly); - bool updateRepository(QStringList& result, bool explainOnly); + bool updateRepository(QStringList& result, const QString& revision, bool explainOnly); bool getFossilVersion(QString &version); bool uiRunning() const; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index a4d98cc..ef14e69 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -15,6 +15,7 @@ #include "CommitDialog.h" #include "FileActionDialog.h" #include "CloneDialog.h" +#include "UpdateDialog.h" #include "Utils.h" //----------------------------------------------------------------------------- @@ -1455,10 +1456,10 @@ void MainWindow::on_actionUpdate_triggered() QStringList res; // Do test update - if(!fossil().updateRepository(res, true)) + if(!fossil().updateRepository(res, "", true)) return; - // Fixme: parse "changes: None. Already up-to-date" and avoid dialog + // FIXME: parse "changes: None. Already up-to-date" and avoid dialog if(res.length()==0) return; @@ -1467,11 +1468,55 @@ void MainWindow::on_actionUpdate_triggered() return; // Do update - fossil().updateRepository(res, false); + fossil().updateRepository(res, "", false); refresh(); } +//------------------------------------------------------------------------------ +void MainWindow::on_actionUpdateRevision_triggered() +{ + updateRevision(""); +} + +//------------------------------------------------------------------------------ +void MainWindow::updateRevision(const QString &revision) +{ + QStringList versions; + versions.append(tr("Latest version")); + versions += getWorkspace().getBranches(); + versions += getWorkspace().getTags(); + const QString latest = tr("Latest version"); + QString defaultval = latest; + + if(!revision.isEmpty()) + defaultval = revision; + + QString selected_revision = UpdateDialog::run(this, versions, defaultval); + + if(selected_revision.isEmpty()) + return; + else if(selected_revision == latest) + selected_revision = ""; // Empty revision is "latest" + + QStringList res; + + // Do test update + if(!fossil().updateRepository(res, selected_revision, true)) + return; + + // FIXME: parse "changes: None. Already up-to-date" and avoid dialog + if(res.length()==0) + return; + + if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) + return; + + // Do update + fossil().updateRepository(res, selected_revision, false); + refresh(); +} + //------------------------------------------------------------------------------ void MainWindow::loadFossilSettings() { @@ -2160,3 +2205,4 @@ QMessageBox::StandardButton MainWindow::MainWinUICallback::Query(const QString & { return DialogQuery(mainWindow, title, query, buttons); } + diff --git a/src/MainWindow.h b/src/MainWindow.h index 6d9c57b..be65bae 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -28,6 +28,7 @@ private: void scanWorkspace(); void applySettings(); void updateSettings(); + void updateRevision(const QString& revision); const QString &getCurrentWorkspace(); void setCurrentWorkspace(const QString &workspace); void log(const QString &text, bool isHTML=false); @@ -112,6 +113,8 @@ private slots: void on_fileTableView_customContextMenuRequested(const QPoint &pos); void on_workspaceTreeView_customContextMenuRequested(const QPoint &pos); + void on_actionUpdateRevision_triggered(); + private: class MainWinUICallback : public UICallback { diff --git a/src/UpdateDialog.cpp b/src/UpdateDialog.cpp new file mode 100644 index 0000000..18f7725 --- /dev/null +++ b/src/UpdateDialog.cpp @@ -0,0 +1,34 @@ +#include "UpdateDialog.h" +#include "ui_UpdateDialog.h" +#include "Utils.h" + +//----------------------------------------------------------------------------- +UpdateDialog::UpdateDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue) : + QDialog(parent), + ui(new Ui::UpdateDialog), + completer(completions, parent) +{ + ui->setupUi(this); + ui->cmbRevision->setCompleter(&completer); + + ui->cmbRevision->addItems(completions); + + if(!defaultValue.isEmpty()) + ui->cmbRevision->setCurrentText(defaultValue); +} + +//----------------------------------------------------------------------------- +UpdateDialog::~UpdateDialog() +{ + delete ui; +} + +//----------------------------------------------------------------------------- +QString UpdateDialog::run(QWidget *parent, const QStringList &completions, const QString &defaultValue) +{ + UpdateDialog dlg(parent, completions, defaultValue); + + if(dlg.exec() != QDialog::Accepted) + return QString(""); + return dlg.ui->cmbRevision->currentText(); +} diff --git a/src/UpdateDialog.h b/src/UpdateDialog.h new file mode 100644 index 0000000..590aafd --- /dev/null +++ b/src/UpdateDialog.h @@ -0,0 +1,27 @@ +#ifndef UPDATEDIALOG_H +#define UPDATEDIALOG_H + +#include +#include + +namespace Ui { + class UpdateDialog; +} + +class UpdateDialog : public QDialog +{ + Q_OBJECT + +public: + explicit UpdateDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue); + ~UpdateDialog(); + + static QString run(QWidget *parent, const QStringList &completions, const QString &defaultValue); + + +private: + Ui::UpdateDialog *ui; + QCompleter completer; +}; + +#endif // UPDATEDIALOG_H diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 97b8d05..6f79fca 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -293,6 +293,7 @@ + @@ -889,6 +890,21 @@ Diff Stash + + + + :/icons/icons/Button Forward-01.png:/icons/icons/Button Forward-01.png + + + UpdateRevision + + + Update the workspace to a specific revision + + + Ctrl+Shift+U + + diff --git a/ui/UpdateDialog.ui b/ui/UpdateDialog.ui new file mode 100644 index 0000000..555ad45 --- /dev/null +++ b/ui/UpdateDialog.ui @@ -0,0 +1,91 @@ + + + UpdateDialog + + + Qt::WindowModal + + + + 0 + 0 + 478 + 81 + + + + Update Workspace + + + true + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Revision + + + + + + + true + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + UpdateDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + UpdateDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + From cc029b674feff64a0d3a17d3d2e96e247e8bba1c Mon Sep 17 00:00:00 2001 From: kostas Date: Sat, 2 May 2015 18:22:31 +0000 Subject: [PATCH 55/90] Parse the workspace active tags and revision FossilOrigin-Name: 2bf8e2a8aba307659c07044e1e6d155d287ac6b6 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/Fossil.cpp | 25 +++++++++++++++++++++++++ src/Fossil.h | 9 +++++++++ 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 76f6533..7f61a0f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\s"Update\sto\sRevision"\sAction\n -D 2015-05-02T16:42:06.752 +C Parse\sthe\sworkspace\sactive\stags\sand\srevision\n +D 2015-05-02T18:22:31.909 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,8 +196,8 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 35ee3e88a14e6673e991a3c743a4fa7ab5697a24 -F src/Fossil.h 7c91732020730f33e50663b0e5c66e6c35ad5cdc +F src/Fossil.cpp 8abdf4c95dfd2728fb11a2a07ea5c05eabba27d6 +F src/Fossil.h 7954818fa3168d56901f8549ca5ae56987f48a6a F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp 8ae32de39af8917cdb5a5c7efc221da4a61154a1 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 798a40a0fd715b0544f608543e09038e2b1fb69a F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b F ui/UpdateDialog.ui 129596c2deb60211f25cefd785696ca7c7c56d42 -P 330e0819bba257c674afdadb1ab097cd7f7ffe61 -R 44924937e1415e3426bc0d8efcc11b99 +P 203cae37a6553c26a3844dcfdd3386eae9be288f +R f1ac3114a2193bf3db758206b5ce489e U kostas -Z 30db0249ce1d6def72f41fe542e3c03a +Z 9e4990ffad6b2eda98502a8702251545 diff --git a/manifest.uuid b/manifest.uuid index 07b1594..fd1be95 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -203cae37a6553c26a3844dcfdd3386eae9be288f \ No newline at end of file +2bf8e2a8aba307659c07044e1e6d155d287ac6b6 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index b786e54..2d5ea6f 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -50,6 +50,21 @@ RepoStatus Fossil::getRepoStatus() projectName = value; else if(key=="repository") repositoryFile = value; + else if(key=="checkout") + { + // f2121dad5e4565f55ed9ef882484dd5934af565f 2015-04-26 17:27:39 UTC + QStringList tokens = value.split(' ', QString::SkipEmptyParts); + Q_ASSERT(tokens.length()>0); + currentRevision = tokens[0].trimmed(); + } + else if(key=="tags") + { + currentTags.clear(); + QStringList tokens = value.split(',', QString::SkipEmptyParts); + foreach(const QString &tag, tokens) + currentTags.append(tag); + currentTags.sort(); + } } } @@ -444,6 +459,16 @@ bool Fossil::tagList(QStringList& tags) return true; } +//------------------------------------------------------------------------------ +bool Fossil::tagNew(const QString& name, const QString& revision) +{ + QStringList res; + + if(!runFossil(QStringList() << "tag" << "add" << name << revision, &res, RUNFLAGS_SILENT_ALL)) + return false; + return true; +} + //------------------------------------------------------------------------------ bool Fossil::branchList(QStringList& branches, QStringList& activeBranches) { diff --git a/src/Fossil.h b/src/Fossil.h index 9b0da68..b34f77f 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -3,6 +3,7 @@ class QStringList; #include +#include #include #include #include "Utils.h" @@ -111,8 +112,14 @@ public: void abortOperation() { operationAborted = true; } bool tagList(QStringList& tags); + bool tagNew(const QString& name, const QString& revision); + bool tagDelete(const QString& name); + bool branchList(QStringList& branches, QStringList& activeBranches); + const QString &getCurrentRevision() const { return currentRevision; } + const QStringList &getCurrentTags() const { return currentTags; } + private: void log(const QString &text, bool isHTML=false) { @@ -128,6 +135,8 @@ private: QString fossilPath; // The value from the settings QString repositoryFile; QString projectName; + QString currentRevision; + QStringList currentTags; QProcess fossilUI; }; From 3c1ca98ca67abedbb18b1a15ff9534bbbffe9511 Mon Sep 17 00:00:00 2001 From: kostas Date: Sat, 2 May 2015 18:22:55 +0000 Subject: [PATCH 56/90] Minor fixes FossilOrigin-Name: 48ae56dfa79bc35a51145dd9549e4f3760e76b7f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/CommitDialog.cpp | 4 ++-- src/CommitDialog.h | 12 ++++++------ 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 7f61a0f..ac6af7e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Parse\sthe\sworkspace\sactive\stags\sand\srevision\n -D 2015-05-02T18:22:31.909 +C Minor\sfixes +D 2015-05-02T18:22:55.606 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -188,8 +188,8 @@ F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 F src/CloneDialog.h 8813d91f893eb3eb86a4ea5e50f9a53a0ea07047 -F src/CommitDialog.cpp 5300522ac11bc1096a11a6ce22f8c1665d4afc05 -F src/CommitDialog.h f1ee8db92103164e7db55a8407ccdcff24571b72 +F src/CommitDialog.cpp 6d9b8287c26c1f8fbe5b40971d41dc0f7132c4cf +F src/CommitDialog.h 45fa33c4745cbb54b3cd3d56e6341ae84058ce54 F src/CustomWebView.cpp b7dd0c41977c2cba005df07ed8967ba6f58d07d9 F src/CustomWebView.h fbc8ee55812d1acb3c3b2bc31be7533e8a112822 F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 798a40a0fd715b0544f608543e09038e2b1fb69a F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b F ui/UpdateDialog.ui 129596c2deb60211f25cefd785696ca7c7c56d42 -P 203cae37a6553c26a3844dcfdd3386eae9be288f -R f1ac3114a2193bf3db758206b5ce489e +P 2bf8e2a8aba307659c07044e1e6d155d287ac6b6 +R 9ec2464989774dd3cf301c6239b3e097 U kostas -Z 9e4990ffad6b2eda98502a8702251545 +Z 6bbfd3e22c509dd5f01fbba39ce51089 diff --git a/manifest.uuid b/manifest.uuid index fd1be95..838bfd9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2bf8e2a8aba307659c07044e1e6d155d287ac6b6 \ No newline at end of file +48ae56dfa79bc35a51145dd9549e4f3760e76b7f \ No newline at end of file diff --git a/src/CommitDialog.cpp b/src/CommitDialog.cpp index 0322c39..b27e725 100644 --- a/src/CommitDialog.cpp +++ b/src/CommitDialog.cpp @@ -4,7 +4,7 @@ #include "ui_CommitDialog.h" #include "MainWindow.h" // Ugly. I know. -CommitDialog::CommitDialog(QWidget *parent, QString title, QStringList &files, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue) : +CommitDialog::CommitDialog(QWidget *parent, const QString &title, QStringList &files, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue) : QDialog(parent, Qt::Sheet), ui(new Ui::CommitDialog) { @@ -77,7 +77,7 @@ CommitDialog::~CommitDialog() } //------------------------------------------------------------------------------ -bool CommitDialog::run(QWidget *parent, QString title, QStringList &files, QString &commitMsg, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue) +bool CommitDialog::run(QWidget *parent, const QString &title, QStringList &files, QString &commitMsg, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue) { CommitDialog dlg(parent, title, files, history, singleLineEntry, checkBoxText, checkBoxValue); int res = dlg.exec(); diff --git a/src/CommitDialog.h b/src/CommitDialog.h index 4825d11..dd3129e 100644 --- a/src/CommitDialog.h +++ b/src/CommitDialog.h @@ -5,18 +5,18 @@ #include namespace Ui { - class CommitDialog; + class CommitDialog; } class CommitDialog : public QDialog { - Q_OBJECT + Q_OBJECT public: - explicit CommitDialog(QWidget *parent, QString title, QStringList &files, const QStringList *history=0, bool singleLineEntry=false, const QString *checkBoxText=0, bool *checkBoxValue=0); - ~CommitDialog(); + explicit CommitDialog(QWidget *parent, const 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 title, QStringList &files, QString &commitMsg, const QStringList *history=0, bool singleLineEntry=false, const QString *checkBoxText=0, bool *checkBoxValue=0); + static bool run(QWidget *parent, const 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); @@ -24,7 +24,7 @@ private slots: void on_listView_clicked(const QModelIndex &index); private: - Ui::CommitDialog *ui; + Ui::CommitDialog *ui; QStandardItemModel itemModel; QStringList commitMessages; }; From 3987a35083d769d5942e6bf34d644bf2f2717dca Mon Sep 17 00:00:00 2001 From: kostas Date: Sat, 2 May 2015 18:23:46 +0000 Subject: [PATCH 57/90] Added support for tagging revisions FossilOrigin-Name: 579a9a1fb06478cd37359eb106dcabc9c9c5fa5c --- manifest | 22 ++++---- manifest.uuid | 2 +- src/MainWindow.cpp | 125 ++++++++++++++++++++++++++++++------------- src/MainWindow.h | 11 ++++ src/UpdateDialog.cpp | 21 +++++++- src/UpdateDialog.h | 4 +- ui/MainWindow.ui | 39 +++++++++++++- ui/UpdateDialog.ui | 18 ++++--- 8 files changed, 180 insertions(+), 62 deletions(-) diff --git a/manifest b/manifest index ac6af7e..5e16ff0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\sfixes -D 2015-05-02T18:22:55.606 +C Added\ssupport\sfor\stagging\srevisions +D 2015-05-02T18:23:46.760 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,12 +200,12 @@ F src/Fossil.cpp 8abdf4c95dfd2728fb11a2a07ea5c05eabba27d6 F src/Fossil.h 7954818fa3168d56901f8549ca5ae56987f48a6a F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 8ae32de39af8917cdb5a5c7efc221da4a61154a1 -F src/MainWindow.h 8377cf134d64d74855b1795463356a7a817b149f +F src/MainWindow.cpp 03761f68b681f469b3c01cff7ff6a084c90c1fb4 +F src/MainWindow.h e8b8be6b33e68a894d6ed84597f4767c83daf750 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/UpdateDialog.cpp 54df56055ee5efe1170efbed495363fb14abc8e5 -F src/UpdateDialog.h e2252c7d555e161f946e99014a6e6c6b52b4b53c +F src/UpdateDialog.cpp 5f9ff02aeed08ab3a69d0a9a3b3efeefbc38f3d4 +F src/UpdateDialog.h 93c6ad9bd814f23e431c67bcd01928f33e10a80b F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 F src/Workspace.cpp fca14549ff85125a9fb7fd8a2722198055ea9f9a @@ -217,10 +217,10 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 798a40a0fd715b0544f608543e09038e2b1fb69a +F ui/MainWindow.ui 90bbd2df0afd46e82d4a850882a22f30d3bffe38 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -F ui/UpdateDialog.ui 129596c2deb60211f25cefd785696ca7c7c56d42 -P 2bf8e2a8aba307659c07044e1e6d155d287ac6b6 -R 9ec2464989774dd3cf301c6239b3e097 +F ui/UpdateDialog.ui 636fd495d481ade1f20a65f79b538b9a49bbf1fa +P 48ae56dfa79bc35a51145dd9549e4f3760e76b7f +R 6c39d1dbde8de7bab3b96245abf117bf U kostas -Z 6bbfd3e22c509dd5f01fbba39ce51089 +Z 1552aaa7605ace7a9b84f678a9f0da07 diff --git a/manifest.uuid b/manifest.uuid index 838bfd9..cfaac59 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -48ae56dfa79bc35a51145dd9549e4f3760e76b7f \ No newline at end of file +579a9a1fb06478cd37359eb106dcabc9c9c5fa5c \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ef14e69..f03ac52 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -18,6 +18,8 @@ #include "UpdateDialog.h" #include "Utils.h" +#define LATEST_VERSION "Latest" + //----------------------------------------------------------------------------- enum { @@ -176,6 +178,13 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP menuStashes->addAction(ui->actionDiffStash); menuStashes->addAction(ui->actionDeleteStash); + // TagsMenu + menuTags = new QMenu(this); + menuTags->addAction(ui->actionNewTag); + menuTags->addAction(ui->actionDeleteTag); + menuTags->addAction(ui->actionUpdateRevision); + + // Recent Workspaces // Locate a sequence of two separator actions in file menu QList file_actions = ui->menuFile->actions(); @@ -603,6 +612,14 @@ void MainWindow::scanWorkspace() updateWorkspaceView(); updateFileView(); + // Build default versions list + const QString latest = tr(LATEST_VERSION); + + versionList.clear(); + versionList.append(latest); + versionList += getWorkspace().getBranches(); + versionList += getWorkspace().getTags(); + setBusy(false); setStatus(""); } @@ -1479,44 +1496,6 @@ void MainWindow::on_actionUpdateRevision_triggered() updateRevision(""); } -//------------------------------------------------------------------------------ -void MainWindow::updateRevision(const QString &revision) -{ - QStringList versions; - versions.append(tr("Latest version")); - versions += getWorkspace().getBranches(); - versions += getWorkspace().getTags(); - const QString latest = tr("Latest version"); - QString defaultval = latest; - - if(!revision.isEmpty()) - defaultval = revision; - - QString selected_revision = UpdateDialog::run(this, versions, defaultval); - - if(selected_revision.isEmpty()) - return; - else if(selected_revision == latest) - selected_revision = ""; // Empty revision is "latest" - - QStringList res; - - // Do test update - if(!fossil().updateRepository(res, selected_revision, true)) - return; - - // FIXME: parse "changes: None. Already up-to-date" and avoid dialog - if(res.length()==0) - return; - - if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) - return; - - // Do update - fossil().updateRepository(res, selected_revision, false); - refresh(); -} - //------------------------------------------------------------------------------ void MainWindow::loadFossilSettings() { @@ -2071,6 +2050,8 @@ void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &) menu = menuWorkspace; else if (tv.Type == TreeViewItem::TYPE_STASH || tv.Type == TreeViewItem::TYPE_STASHES) menu = menuStashes; + else if (tv.Type == TreeViewItem::TYPE_TAG || tv.Type == TreeViewItem::TYPE_TAGS) + menu = menuTags; if(menu) { @@ -2206,3 +2187,71 @@ QMessageBox::StandardButton MainWindow::MainWinUICallback::Query(const QString & return DialogQuery(mainWindow, title, query, buttons); } +//------------------------------------------------------------------------------ +void MainWindow::updateRevision(const QString &revision) +{ + const QString latest = tr(LATEST_VERSION); + QString defaultval = latest; + + if(!revision.isEmpty()) + defaultval = revision; + + QString selected_revision = UpdateDialog::runUpdate(this, tr("Update workspace"), versionList, defaultval).trimmed(); + + if(selected_revision.isEmpty()) + return; + else if(selected_revision == latest) + selected_revision = ""; // Empty revision is "latest" + + QStringList res; + + // Do test update + if(!fossil().updateRepository(res, selected_revision, true)) + return; + + // FIXME: parse "changes: None. Already up-to-date" and avoid dialog + if(res.length()==0) + return; + + if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) + return; + + // Do update + fossil().updateRepository(res, selected_revision, false); + refresh(); +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionNewTag_triggered() +{ + // Default to current revision + QString revision = fossil().getCurrentRevision(); + + QString name; + if(!UpdateDialog::runNewTag(this, tr("New tag"), versionList, revision, revision, name)) + return; + + if(name.isEmpty() || getWorkspace().getTags().contains(name) || getWorkspace().getBranches().contains(name)) + return; + + fossil().tagNew(name, revision); + refresh(); +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionDeleteTag_triggered() +{ + +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionNewBranch_triggered() +{ + +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionMergeBranch_triggered() +{ + +} diff --git a/src/MainWindow.h b/src/MainWindow.h index be65bae..d4322b7 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -115,6 +115,14 @@ private slots: void on_actionUpdateRevision_triggered(); + void on_actionNewTag_triggered(); + + void on_actionDeleteTag_triggered(); + + void on_actionNewBranch_triggered(); + + void on_actionMergeBranch_triggered(); + private: class MainWinUICallback : public UICallback { @@ -151,9 +159,12 @@ private: class QShortcut *abortShortcut; QMenu *menuWorkspace; QMenu *menuStashes; + QMenu *menuTags; + //QMenu *menuBranches; bool operationAborted; stringset_t selectedDirs; // The directory selected in the tree + QStringList versionList; Workspace workspace; Workspace & getWorkspace() { return workspace; } diff --git a/src/UpdateDialog.cpp b/src/UpdateDialog.cpp index 18f7725..b6a3708 100644 --- a/src/UpdateDialog.cpp +++ b/src/UpdateDialog.cpp @@ -24,11 +24,28 @@ UpdateDialog::~UpdateDialog() } //----------------------------------------------------------------------------- -QString UpdateDialog::run(QWidget *parent, const QStringList &completions, const QString &defaultValue) +QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue) { UpdateDialog dlg(parent, completions, defaultValue); + dlg.setWindowTitle(title); + dlg.ui->label_3->setVisible(false); + dlg.ui->lineName->setVisible(false); if(dlg.exec() != QDialog::Accepted) return QString(""); - return dlg.ui->cmbRevision->currentText(); + return dlg.ui->cmbRevision->currentText().trimmed(); +} + +//----------------------------------------------------------------------------- +bool UpdateDialog::runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name) +{ + UpdateDialog dlg(parent, completions, defaultValue); + dlg.setWindowTitle(title); + + if(dlg.exec() != QDialog::Accepted) + return false; + + revision = dlg.ui->cmbRevision->currentText().trimmed(); + name = dlg.ui->lineName->text().trimmed(); + return true; } diff --git a/src/UpdateDialog.h b/src/UpdateDialog.h index 590aafd..fc4498e 100644 --- a/src/UpdateDialog.h +++ b/src/UpdateDialog.h @@ -16,8 +16,8 @@ public: explicit UpdateDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue); ~UpdateDialog(); - static QString run(QWidget *parent, const QStringList &completions, const QString &defaultValue); - + static QString runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue); + static bool runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name); private: Ui::UpdateDialog *ui; diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 6f79fca..1d4c60e 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -896,7 +896,7 @@ :/icons/icons/Button Forward-01.png:/icons/icons/Button Forward-01.png - UpdateRevision + Update to Revision Update the workspace to a specific revision @@ -905,6 +905,43 @@ Ctrl+Shift+U + + + + :/icons/icons/Highlighter Yellow-01.png:/icons/icons/Highlighter Yellow-01.png + + + New Tag + + + Tag current revision + + + + + Delete Tag + + + Delete tag + + + + + + :/icons/icons/Document Organization Chart-01.png:/icons/icons/Document Organization Chart-01.png + + + New Branch + + + Create a branch from the current revision + + + + + Merge Branch + + diff --git a/ui/UpdateDialog.ui b/ui/UpdateDialog.ui index 555ad45..7f2275e 100644 --- a/ui/UpdateDialog.ui +++ b/ui/UpdateDialog.ui @@ -10,21 +10,15 @@ 0 0 478 - 81 + 113 - - Update Workspace - true - - QFormLayout::AllNonFixedFieldsGrow - @@ -39,6 +33,16 @@ + + + + Name + + + + + + From 8e21224a5e65f710271d537b50393117b61a3513 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 09:22:18 +0000 Subject: [PATCH 58/90] Prevent unnecessary dialog when updating with no new changes FossilOrigin-Name: f718ab845eb859700e230090f2fcbc7ddb068e62 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/MainWindow.cpp | 44 ++++++++++++++------------------------------ src/Utils.cpp | 23 +++++++++++++++++++++++ src/Utils.h | 4 ++++ 5 files changed, 50 insertions(+), 39 deletions(-) diff --git a/manifest b/manifest index 5e16ff0..b6409c0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\ssupport\sfor\stagging\srevisions -D 2015-05-02T18:23:46.760 +C Prevent\sunnecessary\sdialog\swhen\supdating\swith\sno\snew\schanges +D 2015-05-03T09:22:18.712 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,14 +200,14 @@ F src/Fossil.cpp 8abdf4c95dfd2728fb11a2a07ea5c05eabba27d6 F src/Fossil.h 7954818fa3168d56901f8549ca5ae56987f48a6a F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 03761f68b681f469b3c01cff7ff6a084c90c1fb4 +F src/MainWindow.cpp b7d4d636adeb84fece029e234c5eae89576c2dcf F src/MainWindow.h e8b8be6b33e68a894d6ed84597f4767c83daf750 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/UpdateDialog.cpp 5f9ff02aeed08ab3a69d0a9a3b3efeefbc38f3d4 F src/UpdateDialog.h 93c6ad9bd814f23e431c67bcd01928f33e10a80b -F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca -F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 +F src/Utils.cpp 0a95368bb776a5c34c5baa94e490795ac28085db +F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b F src/Workspace.cpp fca14549ff85125a9fb7fd8a2722198055ea9f9a F src/Workspace.h 8c965e73a966432e45ce80f4a223167eeafc3abe F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 90bbd2df0afd46e82d4a850882a22f30d3bffe38 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b F ui/UpdateDialog.ui 636fd495d481ade1f20a65f79b538b9a49bbf1fa -P 48ae56dfa79bc35a51145dd9549e4f3760e76b7f -R 6c39d1dbde8de7bab3b96245abf117bf +P 579a9a1fb06478cd37359eb106dcabc9c9c5fa5c +R 30503d6fb517411a767917fc163e9df3 U kostas -Z 1552aaa7605ace7a9b84f678a9f0da07 +Z 75fb60e450053acd43b176a1071af21e diff --git a/manifest.uuid b/manifest.uuid index cfaac59..33bcca8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -579a9a1fb06478cd37359eb106dcabc9c9c5fa5c \ No newline at end of file +f718ab845eb859700e230090f2fcbc7ddb068e62 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index f03ac52..5ed5f2e 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -85,33 +85,6 @@ struct TreeViewItem Q_DECLARE_METATYPE(TreeViewItem) -//----------------------------------------------------------------------------- -typedef QMap QStringMap; -static QStringMap MakeKeyValues(QStringList lines) -{ - QStringMap res; - - foreach(QString l, lines) - { - l = l.trimmed(); - int index = l.indexOf(' '); - - QString key; - QString value; - if(index!=-1) - { - key = l.left(index).trimmed(); - value = l.mid(index).trimmed(); - } - else - key = l; - - res.insert(key, value); - } - return res; -} - - /////////////////////////////////////////////////////////////////////////////// MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspacePath) : QMainWindow(parent), @@ -1476,11 +1449,15 @@ void MainWindow::on_actionUpdate_triggered() if(!fossil().updateRepository(res, "", true)) return; - // FIXME: parse "changes: None. Already up-to-date" and avoid dialog - if(res.length()==0) return; + QStringMap kv; + ParseProperties(kv, res, ':'); + // If no changes exit + if(kv.contains("changes") && kv["changes"].indexOf("None.")) + return; + if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) return; @@ -1505,7 +1482,8 @@ void MainWindow::loadFossilSettings() if(!fossil().getFossilSettings(out)) return; - QStringMap kv = MakeKeyValues(out); + QStringMap kv; + ParseProperties(kv, out); for(Settings::mappings_t::iterator it=settings.GetMappings().begin(); it!=settings.GetMappings().end(); ++it) { @@ -2213,6 +2191,12 @@ void MainWindow::updateRevision(const QString &revision) if(res.length()==0) return; + QStringMap kv; + ParseProperties(kv, res, ':'); + // If no changes exit + if(kv.contains("changes") && kv["changes"].indexOf("None.")) + return; + if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) return; diff --git a/src/Utils.cpp b/src/Utils.cpp index 89a8d50..e9e94f3 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -306,3 +306,26 @@ bool ShowExplorerMenu(HWND hwnd, const QString &path, const QPoint &qpoint) #endif +//----------------------------------------------------------------------------- +void ParseProperties(QStringMap &properties, const QStringList &lines, QChar separator) +{ + properties.clear(); + foreach(QString l, lines) + { + l = l.trimmed(); + int index = l.indexOf(separator); + + QString key; + QString value; + if(index!=-1) + { + key = l.left(index).trimmed(); + value = l.mid(index).trimmed(); + } + else + key = l; + + properties.insert(key, value); + } +} + diff --git a/src/Utils.h b/src/Utils.h index ebeb4b6..fd2a232 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -3,6 +3,7 @@ #include #include +#include #define COUNTOF(array) (sizeof(array)/sizeof(array[0])) #define FOSSIL_CHECKOUT1 "_FOSSIL_" @@ -14,6 +15,9 @@ QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, c QString QuotePath(const QString &path); QStringList QuotePaths(const QStringList &paths); +typedef QMap QStringMap; +void ParseProperties(QStringMap &properties, const QStringList &lines, QChar separator=' '); + #ifdef Q_OS_WIN bool ShowExplorerMenu(HWND hwnd, const QString &path, const QPoint &qpoint); #endif From 9777e1e2da64b55850e4c7a9ed55a480bf7ba884 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 10:05:46 +0000 Subject: [PATCH 59/90] Support for deleting tags When parsing tags, also keep track of the checkin uuid Fixed key-value parsing Prevent apply stash when nothing is selected FossilOrigin-Name: 72ac541c4c28f83c94c371f2d81e116b8f3cf261 --- manifest | 24 ++++++++++++------------ manifest.uuid | 2 +- src/Fossil.cpp | 40 +++++++++++++++++++++++++++++++++------- src/Fossil.h | 4 ++-- src/MainWindow.cpp | 34 ++++++++++++++++++++++++++++------ src/MainWindow.h | 2 ++ src/Utils.cpp | 2 +- src/Workspace.cpp | 4 ++-- src/Workspace.h | 5 +++-- 9 files changed, 84 insertions(+), 33 deletions(-) diff --git a/manifest b/manifest index b6409c0..de0b505 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Prevent\sunnecessary\sdialog\swhen\supdating\swith\sno\snew\schanges -D 2015-05-03T09:22:18.712 +C Support\sfor\sdeleting\stags\nWhen\sparsing\stags,\salso\skeep\strack\sof\sthe\scheckin\suuid\nFixed\skey-value\sparsing\nPrevent\sapply\sstash\swhen\snothing\sis\sselected +D 2015-05-03T10:05:46.143 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,20 +196,20 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 8abdf4c95dfd2728fb11a2a07ea5c05eabba27d6 -F src/Fossil.h 7954818fa3168d56901f8549ca5ae56987f48a6a +F src/Fossil.cpp 46edbf48a7f09c0673136c726f62cf3e95e92f1e +F src/Fossil.h 7e45c12f80c06af78bf7a13cce75e0b105e0b99a F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp b7d4d636adeb84fece029e234c5eae89576c2dcf -F src/MainWindow.h e8b8be6b33e68a894d6ed84597f4767c83daf750 +F src/MainWindow.cpp b671fe2af7eb0c0abfecfde6840e1871d81b8b2e +F src/MainWindow.h dffe67ceb1d7a51b858ce8a0fb688bfa7e90c5be F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/UpdateDialog.cpp 5f9ff02aeed08ab3a69d0a9a3b3efeefbc38f3d4 F src/UpdateDialog.h 93c6ad9bd814f23e431c67bcd01928f33e10a80b -F src/Utils.cpp 0a95368bb776a5c34c5baa94e490795ac28085db +F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b -F src/Workspace.cpp fca14549ff85125a9fb7fd8a2722198055ea9f9a -F src/Workspace.h 8c965e73a966432e45ce80f4a223167eeafc3abe +F src/Workspace.cpp 329b9ecd8363089b5fb230c0fd3606f2e9dab73a +F src/Workspace.h 890fdb5f6b768809bc962374d22422dbfb6e89a1 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 90bbd2df0afd46e82d4a850882a22f30d3bffe38 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b F ui/UpdateDialog.ui 636fd495d481ade1f20a65f79b538b9a49bbf1fa -P 579a9a1fb06478cd37359eb106dcabc9c9c5fa5c -R 30503d6fb517411a767917fc163e9df3 +P f718ab845eb859700e230090f2fcbc7ddb068e62 +R 197606d9fc8722007f17afea79985f5b U kostas -Z 75fb60e450053acd43b176a1071af21e +Z ca089f166e60a5d33f43d6190be818dc diff --git a/manifest.uuid b/manifest.uuid index 33bcca8..2c802b5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f718ab845eb859700e230090f2fcbc7ddb068e62 \ No newline at end of file +72ac541c4c28f83c94c371f2d81e116b8f3cf261 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 2d5ea6f..609d08f 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -439,23 +439,38 @@ bool Fossil::stashDiff(const QString& name) } //------------------------------------------------------------------------------ -bool Fossil::tagList(QStringList& tags) +bool Fossil::tagList(QStringMap& tags) { tags.clear(); - QStringList res; + QStringList tagnames; - if(!runFossil(QStringList() << "tag" << "ls", &res, RUNFLAGS_SILENT_ALL)) + if(!runFossil(QStringList() << "tag" << "ls", &tagnames, RUNFLAGS_SILENT_ALL)) return false; - foreach(const QString &line, res) + QStringList info; + foreach(const QString &line, tagnames) { QString tag = line.trimmed(); if(tag.isEmpty()) continue; - tags.append(tag); + + info.clear(); + + if(!runFossil(QStringList() << "info" << tag, &info, RUNFLAGS_SILENT_ALL)) + return false; + + QStringMap props; + ParseProperties(props, info, ':'); + Q_ASSERT(props.contains("uuid")); + + // uuid: 0e29a46f036d2e0cc89727190ad34c2dfdc5737c 2015-04-27 15:41:45 UTC + QStringList uuid = props["uuid"].trimmed().split(' '); + Q_ASSERT(uuid.length()>0); + + QString revision = uuid[0].trimmed(); + tags.insert(tag, revision); } - tags.sort(); return true; } @@ -464,11 +479,22 @@ bool Fossil::tagNew(const QString& name, const QString& revision) { QStringList res; - if(!runFossil(QStringList() << "tag" << "add" << name << revision, &res, RUNFLAGS_SILENT_ALL)) + if(!runFossil(QStringList() << "tag" << "add" << name << revision, &res)) return false; return true; } +//------------------------------------------------------------------------------ +bool Fossil::tagDelete(const QString& name, const QString &revision) +{ + QStringList res; + + if(!runFossil(QStringList() << "tag" << "cancel" << name << revision, &res)) + return false; + + return true; +} + //------------------------------------------------------------------------------ bool Fossil::branchList(QStringList& branches, QStringList& activeBranches) { diff --git a/src/Fossil.h b/src/Fossil.h index b34f77f..bbcb37c 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -111,9 +111,9 @@ public: void abortOperation() { operationAborted = true; } - bool tagList(QStringList& tags); + bool tagList(QStringMap& tags); bool tagNew(const QString& name, const QString& revision); - bool tagDelete(const QString& name); + bool tagDelete(const QString& name, const QString& revision); bool branchList(QStringList& branches, QStringList& activeBranches); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 5ed5f2e..979841f 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -591,7 +591,10 @@ void MainWindow::scanWorkspace() versionList.clear(); versionList.append(latest); versionList += getWorkspace().getBranches(); - versionList += getWorkspace().getTags(); + versionList += getWorkspace().getTags().keys(); + + selectedTags.clear(); + selectedBranches.clear(); setBusy(false); setStatus(""); @@ -677,8 +680,9 @@ void MainWindow::updateWorkspaceView() tags->setData(TreeViewItem(TreeViewItem::TYPE_TAGS, ""), REPODIRMODEL_ROLE_PATH); tags->setEditable(false); getWorkspace().getDirModel().appendRow(tags); - foreach(const QString &tag_name, getWorkspace().getTags()) + for(QStringMap::const_iterator it=getWorkspace().getTags().begin(); it!=getWorkspace().getTags().end(); ++it) { + const QString &tag_name = it.key(); QStandardItem *tag = new QStandardItem(QIcon(":icons/icons/Book-01.png"), tag_name); tag->setData(TreeViewItem(TreeViewItem::TYPE_TAG, tag_name), REPODIRMODEL_ROLE_PATH); tags->appendRow(tag); @@ -1613,10 +1617,12 @@ void MainWindow::onWorkspaceTreeViewSelectionChanged(const QItemSelection &/*sel Q_ASSERT(data.isValid()); TreeViewItem tv = data.value(); - if(tv.Type != TreeViewItem::TYPE_FOLDER && tv.Type != TreeViewItem::TYPE_WORKSPACE) - continue; - - new_dirs.insert(tv.Value); + if(tv.Type == TreeViewItem::TYPE_FOLDER || tv.Type == TreeViewItem::TYPE_WORKSPACE) + new_dirs.insert(tv.Value); + else if(tv.Type == TreeViewItem::TYPE_TAG) + selectedTags.append(tv.Value); + else if(tv.Type == TreeViewItem::TYPE_BRANCH) + selectedBranches.append(tv.Value); } // Update the selection if we have any new folders @@ -1870,6 +1876,9 @@ void MainWindow::on_actionApplyStash_triggered() QStringList stashes; getSelectionStashes(stashes); + if(stashes.empty()) + return; + bool delete_stashes = false; if(!FileActionDialog::run(this, tr("Apply Stash"), tr("The following stashes will be applied.")+"\n"+tr("Are you sure?"), stashes, tr("Delete after applying"), &delete_stashes)) return; @@ -2225,7 +2234,20 @@ void MainWindow::on_actionNewTag_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionDeleteTag_triggered() { + if(selectedTags.size()!=1) + return; + const QString &tagname = selectedTags.first(); + + if(QMessageBox::Yes != DialogQuery(this, tr("Delete Tag"), tr("Are you sure want to delete the tag %0 ?").arg(tagname))) + return; + + Q_ASSERT(getWorkspace().getTags().contains(tagname)); + + const QString &revision = getWorkspace().getTags()[tagname]; + + fossil().tagDelete(tagname, revision); + refresh(); } //------------------------------------------------------------------------------ diff --git a/src/MainWindow.h b/src/MainWindow.h index d4322b7..07f6afb 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -164,6 +164,8 @@ private: bool operationAborted; stringset_t selectedDirs; // The directory selected in the tree + QStringList selectedTags; + QStringList selectedBranches; QStringList versionList; Workspace workspace; diff --git a/src/Utils.cpp b/src/Utils.cpp index e9e94f3..9c89d50 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -320,7 +320,7 @@ void ParseProperties(QStringMap &properties, const QStringList &lines, QChar sep if(index!=-1) { key = l.left(index).trimmed(); - value = l.mid(index).trimmed(); + value = l.mid(index+1).trimmed(); } else key = l; diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 2dd4c06..761e29d 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -189,11 +189,11 @@ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifie fossil().branchList(branchList, branchList); - fossil().tagList(tagList); + fossil().tagList(tags); // Fossil includes the branches in the tag list // So remove them foreach(const QString &name, branchList) - tagList.removeAll(name); + tags.remove(name); _done: uiCallback.endProcess(); diff --git a/src/Workspace.h b/src/Workspace.h index 8d51b1a..b8bd645 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -6,6 +6,7 @@ #include #include #include +#include "Utils.h" #include "Fossil.h" ////////////////////////////////////////////////////////////////////////// @@ -120,7 +121,7 @@ public: filemap_t &getFiles() { return workspaceFiles; } stringset_t &getPaths() { return pathSet; } stashmap_t &getStashes() { return stashMap; } - QStringList &getTags() { return tagList; } + QStringMap &getTags() { return tags; } QStringList &getBranches() { return branchList; } private: @@ -129,7 +130,7 @@ private: stringset_t pathSet; stashmap_t stashMap; QStringList branchList; - QStringList tagList; + QStringMap tags; QStandardItemModel repoFileModel; QStandardItemModel repoDirModel; From f9eda348be82b42e98175ed68cb1d248cf20a52c Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 10:26:29 +0000 Subject: [PATCH 60/90] Fixed up-to-date workspace check Added icons for tag operations FossilOrigin-Name: 87468705beaaef842877ab8459e287a61edf4bc3 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 6 +++--- ui/MainWindow.ui | 8 ++++++++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index de0b505..af91f79 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Support\sfor\sdeleting\stags\nWhen\sparsing\stags,\salso\skeep\strack\sof\sthe\scheckin\suuid\nFixed\skey-value\sparsing\nPrevent\sapply\sstash\swhen\snothing\sis\sselected -D 2015-05-03T10:05:46.143 +C Fixed\sup-to-date\sworkspace\scheck\nAdded\sicons\sfor\stag\soperations +D 2015-05-03T10:26:29.811 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp 46edbf48a7f09c0673136c726f62cf3e95e92f1e F src/Fossil.h 7e45c12f80c06af78bf7a13cce75e0b105e0b99a F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp b671fe2af7eb0c0abfecfde6840e1871d81b8b2e +F src/MainWindow.cpp 032fec25b6f679d2863839095c9039ff4bf4b41d F src/MainWindow.h dffe67ceb1d7a51b858ce8a0fb688bfa7e90c5be F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 @@ -217,10 +217,10 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 90bbd2df0afd46e82d4a850882a22f30d3bffe38 +F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b F ui/UpdateDialog.ui 636fd495d481ade1f20a65f79b538b9a49bbf1fa -P f718ab845eb859700e230090f2fcbc7ddb068e62 -R 197606d9fc8722007f17afea79985f5b +P 72ac541c4c28f83c94c371f2d81e116b8f3cf261 +R fd6aaebd153d8868db1e625f9440db3c U kostas -Z ca089f166e60a5d33f43d6190be818dc +Z 43ffc6ff0a38aa6f520fbb26747d7238 diff --git a/manifest.uuid b/manifest.uuid index 2c802b5..050962e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -72ac541c4c28f83c94c371f2d81e116b8f3cf261 \ No newline at end of file +87468705beaaef842877ab8459e287a61edf4bc3 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 979841f..3fb97c9 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1459,7 +1459,7 @@ void MainWindow::on_actionUpdate_triggered() QStringMap kv; ParseProperties(kv, res, ':'); // If no changes exit - if(kv.contains("changes") && kv["changes"].indexOf("None.")) + if(kv.contains("changes") && kv["changes"].indexOf("None.")!=-1) return; if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) @@ -2203,7 +2203,7 @@ void MainWindow::updateRevision(const QString &revision) QStringMap kv; ParseProperties(kv, res, ':'); // If no changes exit - if(kv.contains("changes") && kv["changes"].indexOf("None.")) + if(kv.contains("changes") && kv["changes"].indexOf("None.")!=-1) return; if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) @@ -2239,7 +2239,7 @@ void MainWindow::on_actionDeleteTag_triggered() const QString &tagname = selectedTags.first(); - if(QMessageBox::Yes != DialogQuery(this, tr("Delete Tag"), tr("Are you sure want to delete the tag %0 ?").arg(tagname))) + if(QMessageBox::Yes != DialogQuery(this, tr("Delete Tag"), tr("Are you sure want to delete the tag '%0' ?").arg(tagname))) return; Q_ASSERT(getWorkspace().getTags().contains(tagname)); diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 1d4c60e..c5ca02e 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -918,6 +918,10 @@ + + + :/icons/icons/Button Close-01.png:/icons/icons/Button Close-01.png + Delete Tag @@ -938,6 +942,10 @@ + + + :/icons/icons/Document Flow Chart-01.png:/icons/icons/Document Flow Chart-01.png + Merge Branch From cdba8c05f6cdd693215e652f0fed8fb9336e36fb Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 11:44:04 +0000 Subject: [PATCH 61/90] Added merge support FossilOrigin-Name: ac65fbf8d33a9e64fb97bd8652a43b4d11c8e538 --- manifest | 26 +++++++-------- manifest.uuid | 2 +- src/Fossil.cpp | 37 +++++++++++++++++++++ src/Fossil.h | 2 ++ src/MainWindow.cpp | 79 ++++++++++++++++++++++++++++++++++++++++---- src/MainWindow.h | 9 ++--- src/UpdateDialog.cpp | 33 +++++++++++++++++- src/UpdateDialog.h | 1 + src/Workspace.cpp | 2 +- ui/UpdateDialog.ui | 26 +++++++++++++-- 10 files changed, 186 insertions(+), 31 deletions(-) diff --git a/manifest b/manifest index af91f79..35a016b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\sup-to-date\sworkspace\scheck\nAdded\sicons\sfor\stag\soperations -D 2015-05-03T10:26:29.811 +C Added\smerge\ssupport +D 2015-05-03T11:44:04.852 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,19 +196,19 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 46edbf48a7f09c0673136c726f62cf3e95e92f1e -F src/Fossil.h 7e45c12f80c06af78bf7a13cce75e0b105e0b99a +F src/Fossil.cpp 57363e0f487f325ba2eae6fdcf29756c9b1ae4a9 +F src/Fossil.h fb34964797dc10cea02bdf2e3f2c97a74fddafc5 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 032fec25b6f679d2863839095c9039ff4bf4b41d -F src/MainWindow.h dffe67ceb1d7a51b858ce8a0fb688bfa7e90c5be +F src/MainWindow.cpp 7ae75136eb3a2f867de4281cbe428a176c3d11c8 +F src/MainWindow.h a4f3c753debe65d6231721c9948c4e8dee699021 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/UpdateDialog.cpp 5f9ff02aeed08ab3a69d0a9a3b3efeefbc38f3d4 -F src/UpdateDialog.h 93c6ad9bd814f23e431c67bcd01928f33e10a80b +F src/UpdateDialog.cpp 08b0261de45babd947a0fbbd5af6bf8b58b74735 +F src/UpdateDialog.h bf04816f3cc5425beaaca72ca05bcc793d4ca204 F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b -F src/Workspace.cpp 329b9ecd8363089b5fb230c0fd3606f2e9dab73a +F src/Workspace.cpp 12edd94656a0aaef20798f883b59af3074466cec F src/Workspace.h 890fdb5f6b768809bc962374d22422dbfb6e89a1 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x @@ -219,8 +219,8 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -F ui/UpdateDialog.ui 636fd495d481ade1f20a65f79b538b9a49bbf1fa -P 72ac541c4c28f83c94c371f2d81e116b8f3cf261 -R fd6aaebd153d8868db1e625f9440db3c +F ui/UpdateDialog.ui cd909f40c16e439181664e53bc3e86c2df647e3f +P 87468705beaaef842877ab8459e287a61edf4bc3 +R 5791f89a3c32b1103d6b1aa0c81d25f4 U kostas -Z 43ffc6ff0a38aa6f520fbb26747d7238 +Z 6e82b9757fd44eb9f7e8cfc7e84094f4 diff --git a/manifest.uuid b/manifest.uuid index 050962e..803c95d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -87468705beaaef842877ab8459e287a61edf4bc3 \ No newline at end of file +ac65fbf8d33a9e64fb97bd8652a43b4d11c8e538 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 609d08f..b00f79e 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -531,6 +531,43 @@ bool Fossil::branchList(QStringList& branches, QStringList& activeBranches) return true; } +//------------------------------------------------------------------------------ +bool Fossil::branchNew(const QString& name, const QString& revisionBasis, bool isPrivate) +{ + QStringList params; + + params <<"branch" << "new" << name << revisionBasis; + + if(isPrivate) + params << "--private"; + + QStringList res; + + if(!runFossil(params, &res)) + return false; + return true; +} + +//------------------------------------------------------------------------------ +bool Fossil::branchMerge(QStringList &res, const QString& revision, bool integrate, bool testOnly) +{ + QStringList params; + + params <<"merge"; + + if(integrate) + params << "--integrate"; + + if(testOnly) + params << "--dry-run"; + + params << revision; + + if(!runFossil(params, &res)) + return false; + return true; +} + //------------------------------------------------------------------------------ static QString ParseFossilQuery(QString line) { diff --git a/src/Fossil.h b/src/Fossil.h index bbcb37c..ca6d5c9 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -116,6 +116,8 @@ public: bool tagDelete(const QString& name, const QString& revision); bool branchList(QStringList& branches, QStringList& activeBranches); + bool branchNew(const QString& name, const QString& revisionBasis, bool isPrivate=false); + bool branchMerge(QStringList& res, const QString& revision, bool integrate, bool testOnly); const QString &getCurrentRevision() const { return currentRevision; } const QStringList &getCurrentTags() const { return currentTags; } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 3fb97c9..c02fceb 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -18,7 +18,8 @@ #include "UpdateDialog.h" #include "Utils.h" -#define LATEST_VERSION "Latest" +#define LATEST_VERSION "Latest Revision" +#define CURRENT_VERSION "Current Revision" //----------------------------------------------------------------------------- enum @@ -147,6 +148,8 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP // StashMenu menuStashes = new QMenu(this); + menuStashes->addAction(ui->actionNewStash); + menuStashes->addAction(separator); menuStashes->addAction(ui->actionApplyStash); menuStashes->addAction(ui->actionDiffStash); menuStashes->addAction(ui->actionDeleteStash); @@ -154,9 +157,16 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP // TagsMenu menuTags = new QMenu(this); menuTags->addAction(ui->actionNewTag); + menuTags->addAction(separator); menuTags->addAction(ui->actionDeleteTag); menuTags->addAction(ui->actionUpdateRevision); + // BranchesMenu + menuBranches = new QMenu(this); + menuBranches->addAction(ui->actionNewBranch); + menuBranches->addAction(separator); + menuBranches->addAction(ui->actionMergeBranch); + menuBranches->addAction(ui->actionUpdateRevision); // Recent Workspaces // Locate a sequence of two separator actions in file menu @@ -586,10 +596,7 @@ void MainWindow::scanWorkspace() updateFileView(); // Build default versions list - const QString latest = tr(LATEST_VERSION); - versionList.clear(); - versionList.append(latest); versionList += getWorkspace().getBranches(); versionList += getWorkspace().getTags().keys(); @@ -1474,7 +1481,13 @@ void MainWindow::on_actionUpdate_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionUpdateRevision_triggered() { - updateRevision(""); + QStringList selected = selectedBranches + selectedTags; + + QString revision; + if(!selected.isEmpty()) + revision = selected.first(); + + updateRevision(revision); } //------------------------------------------------------------------------------ @@ -1610,6 +1623,8 @@ void MainWindow::onWorkspaceTreeViewSelectionChanged(const QItemSelection &/*sel return; stringset_t new_dirs; + selectedTags.clear(); + selectedBranches.clear(); foreach(const QModelIndex &id, indices) { @@ -2039,6 +2054,8 @@ void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &) menu = menuStashes; else if (tv.Type == TreeViewItem::TYPE_TAG || tv.Type == TreeViewItem::TYPE_TAGS) menu = menuTags; + else if (tv.Type == TreeViewItem::TYPE_BRANCH || tv.Type == TreeViewItem::TYPE_BRANCHES) + menu = menuBranches; if(menu) { @@ -2221,11 +2238,14 @@ void MainWindow::on_actionNewTag_triggered() QString revision = fossil().getCurrentRevision(); QString name; - if(!UpdateDialog::runNewTag(this, tr("New tag"), versionList, revision, revision, name)) + if(!UpdateDialog::runNewTag(this, tr("New Tag"), versionList, revision, revision, name)) return; if(name.isEmpty() || getWorkspace().getTags().contains(name) || getWorkspace().getBranches().contains(name)) + { + QMessageBox::critical(this, tr("Error"), tr("Invalid name."), QMessageBox::Ok ); return; + } fossil().tagNew(name, revision); refresh(); @@ -2253,11 +2273,58 @@ void MainWindow::on_actionDeleteTag_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionNewBranch_triggered() { + // Default to current revision + QString revision = fossil().getCurrentRevision(); + QString branch_name; + if(!UpdateDialog::runNewTag(this, tr("New Branch"), versionList, revision, revision, branch_name)) + return; + + if(branch_name.isEmpty() || getWorkspace().getTags().contains(branch_name) || getWorkspace().getBranches().contains(branch_name)) + { + QMessageBox::critical(this, tr("Error"), tr("Invalid name."), QMessageBox::Ok ); + return; + } + + if(!fossil().branchNew(branch_name, revision, false)) + return; + + if(QMessageBox::Yes == DialogQuery(this, tr("New Branch"), tr("Would you like to check-out the branch '%0' ?").arg(branch_name))) + updateRevision(branch_name); + else + refresh(); +} +//------------------------------------------------------------------------------ +void MainWindow::MergeRevision(const QString &defaultRevision) +{ + QStringList res; + QString revision = defaultRevision; + + bool integrate = false; + revision = UpdateDialog::runMerge(this, tr("Merge"), versionList, revision, integrate); + + if(revision.isEmpty()) + return; + + // Do test merge + if(!fossil().branchMerge(res, revision, integrate, true)) + return; + + if(!FileActionDialog::run(this, tr("Merge"), tr("The following changesd will be made.")+"\n"+tr("Are you sure?"), res)) + return; + + // Do update + fossil().branchMerge(res, revision, integrate, false); + + refresh(); } //------------------------------------------------------------------------------ void MainWindow::on_actionMergeBranch_triggered() { + QString revision; + if(!selectedBranches.isEmpty()) + revision = selectedBranches.first(); + MergeRevision(revision); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 07f6afb..96389d0 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -51,6 +51,8 @@ private: void updateWorkspaceView(); void updateFileView(); void selectRootDir(); + void MergeRevision(const QString& defaultRevision); + void fossilBrowse(const QString &fossilUrl); void dragEnterEvent(class QDragEnterEvent *event); void dropEvent(class QDropEvent *event); @@ -112,15 +114,10 @@ private slots: void on_textBrowser_customContextMenuRequested(const QPoint &pos); void on_fileTableView_customContextMenuRequested(const QPoint &pos); void on_workspaceTreeView_customContextMenuRequested(const QPoint &pos); - void on_actionUpdateRevision_triggered(); - void on_actionNewTag_triggered(); - void on_actionDeleteTag_triggered(); - void on_actionNewBranch_triggered(); - void on_actionMergeBranch_triggered(); private: @@ -160,7 +157,7 @@ private: QMenu *menuWorkspace; QMenu *menuStashes; QMenu *menuTags; - //QMenu *menuBranches; + QMenu *menuBranches; bool operationAborted; stringset_t selectedDirs; // The directory selected in the tree diff --git a/src/UpdateDialog.cpp b/src/UpdateDialog.cpp index b6a3708..9fdae32 100644 --- a/src/UpdateDialog.cpp +++ b/src/UpdateDialog.cpp @@ -28,20 +28,51 @@ QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QSt { UpdateDialog dlg(parent, completions, defaultValue); dlg.setWindowTitle(title); - dlg.ui->label_3->setVisible(false); + dlg.ui->lblName->setVisible(false); dlg.ui->lineName->setVisible(false); + dlg.ui->lblIntegrate->setVisible(false); + dlg.ui->chkIntegrate->setVisible(false); + + dlg.adjustSize(); if(dlg.exec() != QDialog::Accepted) return QString(""); return dlg.ui->cmbRevision->currentText().trimmed(); } +//----------------------------------------------------------------------------- +QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, bool &integrate) +{ + UpdateDialog dlg(parent, completions, defaultValue); + dlg.setWindowTitle(title); + dlg.ui->lblName->setVisible(false); + dlg.ui->lineName->setVisible(false); + dlg.ui->lblIntegrate->setVisible(true); + dlg.ui->chkIntegrate->setVisible(true); + dlg.ui->chkIntegrate->setChecked(integrate); + dlg.adjustSize(); + + if(dlg.exec() != QDialog::Accepted) + return QString(""); + + integrate = dlg.ui->chkIntegrate->checkState() == Qt::Checked; + + return dlg.ui->cmbRevision->currentText().trimmed(); +} + + //----------------------------------------------------------------------------- bool UpdateDialog::runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name) { UpdateDialog dlg(parent, completions, defaultValue); dlg.setWindowTitle(title); + dlg.ui->lblName->setVisible(true); + dlg.ui->lineName->setVisible(true); + dlg.ui->lblIntegrate->setVisible(false); + dlg.ui->chkIntegrate->setVisible(false); + dlg.adjustSize(); + if(dlg.exec() != QDialog::Accepted) return false; diff --git a/src/UpdateDialog.h b/src/UpdateDialog.h index fc4498e..466bf30 100644 --- a/src/UpdateDialog.h +++ b/src/UpdateDialog.h @@ -17,6 +17,7 @@ public: ~UpdateDialog(); static QString runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue); + static QString runMerge(QWidget* parent, const QString& title, const QStringList& completions, const QString& defaultValue, bool& integrate); static bool runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name); private: diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 761e29d..2cf1baf 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -148,7 +148,7 @@ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifie type = WorkspaceFile::TYPE_UNCHANGED; else if(status_text=="CONFLICT") type = WorkspaceFile::TYPE_CONFLICTED; - else if(status_text=="UPDATED_BY_MERGE") + else if(status_text=="UPDATED_BY_MERGE" || status_text=="ADDED_BY_MERGE" || status_text=="ADDED_BY_INTEGRATE" || status_text=="UPDATED_BY_INTEGRATE") type = WorkspaceFile::TYPE_MERGED; // Filter unwanted file types diff --git a/ui/UpdateDialog.ui b/ui/UpdateDialog.ui index 7f2275e..5a17f54 100644 --- a/ui/UpdateDialog.ui +++ b/ui/UpdateDialog.ui @@ -10,9 +10,15 @@ 0 0 478 - 113 + 146 + + + 400 + 0 + + true @@ -20,7 +26,7 @@ - + Revision @@ -34,7 +40,7 @@ - + Name @@ -43,6 +49,20 @@ + + + + Integrate + + + + + + + + + + From 894f980a7cec55afbab04b9888280462e5d264c6 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 12:27:11 +0000 Subject: [PATCH 62/90] Commits are now allowed when a merge integration has occured even when no files are modified Support for forced merges Context menus are offset by a pixel to prevent unintended clicks FossilOrigin-Name: b0f81bc9c4d226d8406f65d9ad02099205d7e067 --- manifest | 26 +++++++++++++------------- manifest.uuid | 2 +- src/Fossil.cpp | 11 ++++++++++- src/Fossil.h | 4 +++- src/MainWindow.cpp | 17 ++++++++++------- src/UpdateDialog.cpp | 12 +++++++++++- src/UpdateDialog.h | 2 +- src/Workspace.cpp | 19 ++++++++++++++++++- src/Workspace.h | 2 ++ ui/UpdateDialog.ui | 16 +++++++++++++++- 10 files changed, 84 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index 35a016b..7fe063f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\smerge\ssupport -D 2015-05-03T11:44:04.852 +C Commits\sare\snow\sallowed\swhen\sa\smerge\sintegration\shas\soccured\seven\swhen\sno\sfiles\sare\smodified\nSupport\sfor\sforced\smerges\nContext\smenus\sare\soffset\sby\sa\spixel\sto\sprevent\sunintended\sclicks\n +D 2015-05-03T12:27:11.377 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,20 +196,20 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 57363e0f487f325ba2eae6fdcf29756c9b1ae4a9 -F src/Fossil.h fb34964797dc10cea02bdf2e3f2c97a74fddafc5 +F src/Fossil.cpp 01b620c7ca283be385211e8276aad98dc642b0ef +F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 7ae75136eb3a2f867de4281cbe428a176c3d11c8 +F src/MainWindow.cpp 1ea5808d0ad4cff7adaa7c910a4438bef3245cbc F src/MainWindow.h a4f3c753debe65d6231721c9948c4e8dee699021 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/UpdateDialog.cpp 08b0261de45babd947a0fbbd5af6bf8b58b74735 -F src/UpdateDialog.h bf04816f3cc5425beaaca72ca05bcc793d4ca204 +F src/UpdateDialog.cpp 4dd021bc57dde4f6e3f444f5f8a02f5a4a736478 +F src/UpdateDialog.h b3ecf0401659a9e48a4f832bd996fe27c6d15f40 F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b -F src/Workspace.cpp 12edd94656a0aaef20798f883b59af3074466cec -F src/Workspace.h 890fdb5f6b768809bc962374d22422dbfb6e89a1 +F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 +F src/Workspace.h e13d21c15f27c2b36368a06f4316f261ff782814 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -219,8 +219,8 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -F ui/UpdateDialog.ui cd909f40c16e439181664e53bc3e86c2df647e3f -P 87468705beaaef842877ab8459e287a61edf4bc3 -R 5791f89a3c32b1103d6b1aa0c81d25f4 +F ui/UpdateDialog.ui 392cdba296dd4b79145992a85e79748e7c34580d +P ac65fbf8d33a9e64fb97bd8652a43b4d11c8e538 +R 999f69cdb7954fc29187e1f6edb999d1 U kostas -Z 6e82b9757fd44eb9f7e8cfc7e84094f4 +Z 5cfca8d448bbfd5145ee8de41f944a10 diff --git a/manifest.uuid b/manifest.uuid index 803c95d..39bbfab 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ac65fbf8d33a9e64fb97bd8652a43b4d11c8e538 \ No newline at end of file +b0f81bc9c4d226d8406f65d9ad02099205d7e067 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index b00f79e..3852cfb 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -119,6 +119,12 @@ bool Fossil::listFiles(QStringList &files) return runFossil(QStringList() << "ls" << "-l", &files, RUNFLAGS_SILENT_ALL); } +//------------------------------------------------------------------------------ +bool Fossil::status(QStringList &result) +{ + return runFossil(QStringList() << "status", &result, RUNFLAGS_SILENT_ALL); +} + //------------------------------------------------------------------------------ bool Fossil::pushRepository() { @@ -549,7 +555,7 @@ bool Fossil::branchNew(const QString& name, const QString& revisionBasis, bool i } //------------------------------------------------------------------------------ -bool Fossil::branchMerge(QStringList &res, const QString& revision, bool integrate, bool testOnly) +bool Fossil::branchMerge(QStringList &res, const QString& revision, bool integrate, bool force, bool testOnly) { QStringList params; @@ -558,6 +564,9 @@ bool Fossil::branchMerge(QStringList &res, const QString& revision, bool integra if(integrate) params << "--integrate"; + if(force) + params << "--force"; + if(testOnly) params << "--dry-run"; diff --git a/src/Fossil.h b/src/Fossil.h index ca6d5c9..093f306 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -92,6 +92,8 @@ public: void stopUI(); bool listFiles(QStringList &files); + bool status(QStringList& result); + bool diffFile(const QString &repoFile); bool commitFiles(const QStringList &fileList, const QString &comment); bool addFiles(const QStringList& fileList); @@ -117,7 +119,7 @@ public: bool branchList(QStringList& branches, QStringList& activeBranches); bool branchNew(const QString& name, const QString& revisionBasis, bool isPrivate=false); - bool branchMerge(QStringList& res, const QString& revision, bool integrate, bool testOnly); + bool branchMerge(QStringList& res, const QString& revision, bool integrate, bool force, bool testOnly); const QString &getCurrentRevision() const { return currentRevision; } const QStringList &getCurrentTags() const { return currentTags; } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index c02fceb..67fee15 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1240,7 +1240,7 @@ void MainWindow::on_actionCommit_triggered() QStringList commit_files; getSelectionFilenames(commit_files, WorkspaceFile::TYPE_MODIFIED, true); - if(commit_files.empty()) + if(commit_files.empty() && !getWorkspace().otherChanges()) return; QStringList commit_msgs = settings.GetValue(FUEL_SETTING_COMMIT_MSG).toStringList(); @@ -1260,7 +1260,7 @@ void MainWindow::on_actionCommit_triggered() return; // Since via the commit dialog the user can deselect all files - if(commit_files.empty()) + if(commit_files.empty() && !getWorkspace().otherChanges()) return; // Do commit @@ -2004,7 +2004,7 @@ void MainWindow::on_textBrowser_customContextMenuRequested(const QPoint &pos) //------------------------------------------------------------------------------ void MainWindow::on_fileTableView_customContextMenuRequested(const QPoint &pos) { - QPoint gpos = QCursor::pos(); + QPoint gpos = QCursor::pos() + QPoint(1, 1); #ifdef Q_OS_WIN if(qApp->keyboardModifiers() & Qt::SHIFT) { @@ -2059,7 +2059,7 @@ void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &) if(menu) { - QPoint pos = QCursor::pos(); + QPoint pos = QCursor::pos() + QPoint(1, 1); menu->popup(pos); } } @@ -2301,20 +2301,23 @@ void MainWindow::MergeRevision(const QString &defaultRevision) QString revision = defaultRevision; bool integrate = false; - revision = UpdateDialog::runMerge(this, tr("Merge"), versionList, revision, integrate); + bool force = false; + revision = UpdateDialog::runMerge(this, tr("Merge"), versionList, revision, integrate, force); if(revision.isEmpty()) return; // Do test merge - if(!fossil().branchMerge(res, revision, integrate, true)) + if(!fossil().branchMerge(res, revision, integrate, force, true)) return; if(!FileActionDialog::run(this, tr("Merge"), tr("The following changesd will be made.")+"\n"+tr("Are you sure?"), res)) return; // Do update - fossil().branchMerge(res, revision, integrate, false); + fossil().branchMerge(res, revision, integrate, force, false); + + log(tr("Merge completed. Don't forget to commit!")+"\n"); refresh(); } diff --git a/src/UpdateDialog.cpp b/src/UpdateDialog.cpp index 9fdae32..aacdc1d 100644 --- a/src/UpdateDialog.cpp +++ b/src/UpdateDialog.cpp @@ -32,6 +32,8 @@ QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QSt dlg.ui->lineName->setVisible(false); dlg.ui->lblIntegrate->setVisible(false); dlg.ui->chkIntegrate->setVisible(false); + dlg.ui->lblForce->setVisible(false); + dlg.ui->chkForce->setVisible(false); dlg.adjustSize(); @@ -41,7 +43,7 @@ QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QSt } //----------------------------------------------------------------------------- -QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, bool &integrate) +QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, bool &integrate, bool &force) { UpdateDialog dlg(parent, completions, defaultValue); dlg.setWindowTitle(title); @@ -50,12 +52,17 @@ QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStr dlg.ui->lblIntegrate->setVisible(true); dlg.ui->chkIntegrate->setVisible(true); dlg.ui->chkIntegrate->setChecked(integrate); + dlg.ui->lblForce->setVisible(true); + dlg.ui->chkForce->setVisible(true); + dlg.ui->chkForce->setChecked(force); + dlg.adjustSize(); if(dlg.exec() != QDialog::Accepted) return QString(""); integrate = dlg.ui->chkIntegrate->checkState() == Qt::Checked; + force = dlg.ui->chkForce->checkState() == Qt::Checked; return dlg.ui->cmbRevision->currentText().trimmed(); } @@ -71,6 +78,9 @@ bool UpdateDialog::runNewTag(QWidget *parent, const QString &title, const QStrin dlg.ui->lineName->setVisible(true); dlg.ui->lblIntegrate->setVisible(false); dlg.ui->chkIntegrate->setVisible(false); + dlg.ui->lblForce->setVisible(false); + dlg.ui->chkForce->setVisible(false); + dlg.adjustSize(); if(dlg.exec() != QDialog::Accepted) diff --git a/src/UpdateDialog.h b/src/UpdateDialog.h index 466bf30..5714f00 100644 --- a/src/UpdateDialog.h +++ b/src/UpdateDialog.h @@ -17,7 +17,7 @@ public: ~UpdateDialog(); static QString runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue); - static QString runMerge(QWidget* parent, const QString& title, const QStringList& completions, const QString& defaultValue, bool& integrate); + static QString runMerge(QWidget* parent, const QString& title, const QStringList& completions, const QString& defaultValue, bool& integrate, bool& force); static bool runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name); private: diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 2cf1baf..fb5c467 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -17,6 +17,10 @@ void Workspace::clearState() getFiles().clear(); getPaths().clear(); + stashMap.clear(); + branchList.clear(); + tags.clear(); + isIntegrated = false; } //------------------------------------------------------------------------------ @@ -184,7 +188,20 @@ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifie getPaths().insert(path); } - // Load the stash + // Check if the repository needs integration + res.clear(); + fossil().status(res); + isIntegrated = false; + foreach(const QString &l, res) + { + if(l.trimmed().indexOf("INTEGRATE")==0) + { + isIntegrated = true; + break; + } + } + + // Load the stashes, branches and tags fossil().stashList(getStashes()); fossil().branchList(branchList, branchList); diff --git a/src/Workspace.h b/src/Workspace.h index b8bd645..e7db2eb 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -123,6 +123,7 @@ public: stashmap_t &getStashes() { return stashMap; } QStringMap &getTags() { return tags; } QStringList &getBranches() { return branchList; } + bool otherChanges() const { return isIntegrated; } private: Fossil bridge; @@ -131,6 +132,7 @@ private: stashmap_t stashMap; QStringList branchList; QStringMap tags; + bool isIntegrated; QStandardItemModel repoFileModel; QStandardItemModel repoDirModel; diff --git a/ui/UpdateDialog.ui b/ui/UpdateDialog.ui index 5a17f54..b588ddf 100644 --- a/ui/UpdateDialog.ui +++ b/ui/UpdateDialog.ui @@ -10,7 +10,7 @@ 0 0 478 - 146 + 177 @@ -56,6 +56,13 @@ + + + + Force + + + @@ -63,6 +70,13 @@ + + + + + + + From 90bc163bea48f1538898c35ff7fa0ed0380ff8ca Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 12:43:46 +0000 Subject: [PATCH 63/90] Added tag and revision display on status bar FossilOrigin-Name: b64d5954b1e1baf7e69d56b2ec8c31584141cebb --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 22 +++++++++++++++++++++- src/MainWindow.h | 2 ++ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 7fe063f..1cc6301 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Commits\sare\snow\sallowed\swhen\sa\smerge\sintegration\shas\soccured\seven\swhen\sno\sfiles\sare\smodified\nSupport\sfor\sforced\smerges\nContext\smenus\sare\soffset\sby\sa\spixel\sto\sprevent\sunintended\sclicks\n -D 2015-05-03T12:27:11.377 +C Added\stag\sand\srevision\sdisplay\son\sstatus\sbar +D 2015-05-03T12:43:46.492 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp 01b620c7ca283be385211e8276aad98dc642b0ef F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 1ea5808d0ad4cff7adaa7c910a4438bef3245cbc -F src/MainWindow.h a4f3c753debe65d6231721c9948c4e8dee699021 +F src/MainWindow.cpp 552a6bab2ae5a643e9b27105001ef469753ad5e1 +F src/MainWindow.h e6797adc543fd07a117a4eacc202fb166ec6665a F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/UpdateDialog.cpp 4dd021bc57dde4f6e3f444f5f8a02f5a4a736478 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b F ui/UpdateDialog.ui 392cdba296dd4b79145992a85e79748e7c34580d -P ac65fbf8d33a9e64fb97bd8652a43b4d11c8e538 -R 999f69cdb7954fc29187e1f6edb999d1 +P b0f81bc9c4d226d8406f65d9ad02099205d7e067 +R 402b4d45ccb228937c1b7de260a0504d U kostas -Z 5cfca8d448bbfd5145ee8de41f944a10 +Z 9772818e668c26ddadfe640ce4f9be25 diff --git a/manifest.uuid b/manifest.uuid index 39bbfab..2380d8f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b0f81bc9c4d226d8406f65d9ad02099205d7e067 \ No newline at end of file +b64d5954b1e1baf7e69d56b2ec8c31584141cebb \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 67fee15..6c50c12 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include "CommitDialog.h" @@ -193,6 +194,15 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP // TabWidget ui->tabWidget->setCurrentIndex(TAB_LOG); + lblRevision = new QLabel(); + ui->statusBar->insertPermanentWidget(0, lblRevision); + lblRevision->setVisible(true); + + lblTags = new QLabel(); + ui->statusBar->insertPermanentWidget(1, lblTags); + lblTags->setVisible(true); + + // Construct ProgressBar progressBar = new QProgressBar(); progressBar->setMinimum(0); @@ -200,9 +210,10 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP progressBar->setMaximumSize(170, 16); progressBar->setAlignment(Qt::AlignCenter); progressBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - ui->statusBar->insertPermanentWidget(0, progressBar); + ui->statusBar->insertPermanentWidget(2, progressBar); progressBar->setVisible(false); + #ifdef Q_OS_MACX // Native applications on OSX don't have menu icons foreach(QAction *a, ui->menuBar->actions()) @@ -605,6 +616,11 @@ void MainWindow::scanWorkspace() setBusy(false); setStatus(""); + lblRevision->setText(tr("Revision: %0").arg(fossil().getCurrentRevision())); + lblRevision->setVisible(true); + + lblTags->setText(tr("Tags: %0").arg(fossil().getCurrentTags().join(' '))); + lblTags->setVisible(true); } //------------------------------------------------------------------------------ @@ -2164,6 +2180,8 @@ void MainWindow::MainWinUICallback::beginProcess(const QString& text) { Q_ASSERT(mainWindow); mainWindow->ui->statusBar->showMessage(text); + mainWindow->lblTags->setHidden(true); + mainWindow->lblRevision->setHidden(true); mainWindow->progressBar->setHidden(false); QCoreApplication::processEvents(); } @@ -2181,6 +2199,8 @@ void MainWindow::MainWinUICallback::endProcess() { Q_ASSERT(mainWindow); mainWindow->ui->statusBar->clearMessage(); + mainWindow->lblTags->setHidden(false); + mainWindow->lblRevision->setHidden(false); mainWindow->progressBar->setHidden(true); QCoreApplication::processEvents(); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 96389d0..567eb0e 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -153,6 +153,8 @@ private: Ui::MainWindow *ui; class QAction *recentWorkspaceActs[MAX_RECENT]; class QProgressBar *progressBar; + class QLabel *lblRevision; + class QLabel *lblTags; class QShortcut *abortShortcut; QMenu *menuWorkspace; QMenu *menuStashes; From 9786af1d2b08bfdae159453f0f7e28a02e4449dc Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 14:41:54 +0000 Subject: [PATCH 64/90] Made tag references explicit with "tag:" to prevent clashes with filesystem objects with the same name FossilOrigin-Name: 71aeb47a33d20919a71efc23d973c5f6a3c3bb90 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/Fossil.cpp | 10 ++++++++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 1cc6301..e8bd21b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\stag\sand\srevision\sdisplay\son\sstatus\sbar -D 2015-05-03T12:43:46.492 +C Made\stag\sreferences\sexplicit\swith\s"tag:"\sto\sprevent\sclashes\swith\sfilesystem\sobjects\swith\sthe\ssame\sname +D 2015-05-03T14:41:54.154 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,7 +196,7 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 01b620c7ca283be385211e8276aad98dc642b0ef +F src/Fossil.cpp f27b97eaf068275a0e8558dd2b739f9c7b61774a F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b F ui/UpdateDialog.ui 392cdba296dd4b79145992a85e79748e7c34580d -P b0f81bc9c4d226d8406f65d9ad02099205d7e067 -R 402b4d45ccb228937c1b7de260a0504d +P b64d5954b1e1baf7e69d56b2ec8c31584141cebb +R c4ee61e1b2e9e65e210979f3618ea057 U kostas -Z 9772818e668c26ddadfe640ce4f9be25 +Z 4e196455c7fb9e67c5070f7ff39d102c diff --git a/manifest.uuid b/manifest.uuid index 2380d8f..c897223 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b64d5954b1e1baf7e69d56b2ec8c31584141cebb \ No newline at end of file +71aeb47a33d20919a71efc23d973c5f6a3c3bb90 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 3852cfb..d73d078 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -463,7 +463,7 @@ bool Fossil::tagList(QStringMap& tags) info.clear(); - if(!runFossil(QStringList() << "info" << tag, &info, RUNFLAGS_SILENT_ALL)) + if(!runFossil(QStringList() << "info" << "tag:"+tag, &info, RUNFLAGS_SILENT_ALL)) return false; QStringMap props; @@ -495,7 +495,7 @@ bool Fossil::tagDelete(const QString& name, const QString &revision) { QStringList res; - if(!runFossil(QStringList() << "tag" << "cancel" << name << revision, &res)) + if(!runFossil(QStringList() << "tag" << "cancel" << "tag:"+name << revision, &res)) return false; return true; @@ -731,6 +731,12 @@ bool Fossil::runFossilRaw(const QStringList &args, QStringList *output, int *exi buffer += decoder->toUnicode(input); + + #ifdef QT_DEBUG // breakpint + //if(buffer.indexOf("SQLITE_CANTOPEN")!=-1) + // qDebug() << "Breakpoint\n"; + #endif + QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); if(buffer.isEmpty()) From 234f27302c513ac907f99b294195eb3ebd922b62 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 14:47:53 +0000 Subject: [PATCH 65/90] Renamed UpdateDialog to RevisionDialog FossilOrigin-Name: 9704609d5e9ccbadfce2ed96e74893f97e453e0f --- fuel.pro | 6 +++--- manifest | 20 +++++++++--------- manifest.uuid | 2 +- src/MainWindow.cpp | 10 ++++----- src/{UpdateDialog.cpp => RevisionDialog.cpp} | 22 ++++++++++---------- src/{UpdateDialog.h => RevisionDialog.h} | 16 +++++++------- ui/{UpdateDialog.ui => RevisionDialog.ui} | 8 +++---- 7 files changed, 42 insertions(+), 42 deletions(-) rename src/{UpdateDialog.cpp => RevisionDialog.cpp} (73%) rename src/{UpdateDialog.h => RevisionDialog.h} (66%) rename ui/{UpdateDialog.ui => RevisionDialog.ui} (94%) diff --git a/fuel.pro b/fuel.pro index 94dd085..f1ca1db 100644 --- a/fuel.pro +++ b/fuel.pro @@ -47,7 +47,7 @@ SOURCES += src/main.cpp\ src/FileActionDialog.cpp \ src/SettingsDialog.cpp \ src/CloneDialog.cpp \ - src/UpdateDialog.cpp \ + src/RevisionDialog.cpp \ src/Utils.cpp \ src/FileTableView.cpp \ src/LoggedProcess.cpp \ @@ -61,7 +61,7 @@ HEADERS += src/MainWindow.h \ src/FileActionDialog.h \ src/SettingsDialog.h \ src/CloneDialog.h \ - src/UpdateDialog.h \ + src/RevisionDialog.h \ src/Utils.h \ src/FileTableView.h \ src/LoggedProcess.h \ @@ -76,7 +76,7 @@ FORMS += ui/MainWindow.ui \ ui/SettingsDialog.ui \ ui/CloneDialog.ui \ ui/BrowserWidget.ui \ - ui/UpdateDialog.ui + ui/RevisionDialog.ui RESOURCES += \ rsrc/resources.qrc diff --git a/manifest b/manifest index e8bd21b..a38c1e0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Made\stag\sreferences\sexplicit\swith\s"tag:"\sto\sprevent\sclashes\swith\sfilesystem\sobjects\swith\sthe\ssame\sname -D 2015-05-03T14:41:54.154 +C Renamed\sUpdateDialog\sto\sRevisionDialog +D 2015-05-03T14:47:53.844 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro ffc65a5de975124eeb22032c6d9595f77ef284d8 +F fuel.pro 6199ecb89dd8cc9a1d5357ebcac774edc302ef0d F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -200,12 +200,12 @@ F src/Fossil.cpp f27b97eaf068275a0e8558dd2b739f9c7b61774a F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 552a6bab2ae5a643e9b27105001ef469753ad5e1 +F src/MainWindow.cpp d430100fd7dce89899830505869d30d7fe78c80d F src/MainWindow.h e6797adc543fd07a117a4eacc202fb166ec6665a +F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c w src/UpdateDialog.cpp +F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 w src/UpdateDialog.h F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/UpdateDialog.cpp 4dd021bc57dde4f6e3f444f5f8a02f5a4a736478 -F src/UpdateDialog.h b3ecf0401659a9e48a4f832bd996fe27c6d15f40 F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 @@ -218,9 +218,9 @@ F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 +F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd w ui/UpdateDialog.ui F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -F ui/UpdateDialog.ui 392cdba296dd4b79145992a85e79748e7c34580d -P b64d5954b1e1baf7e69d56b2ec8c31584141cebb -R c4ee61e1b2e9e65e210979f3618ea057 +P 71aeb47a33d20919a71efc23d973c5f6a3c3bb90 +R f78244cea8d27d8c7919d636f9f5d003 U kostas -Z 4e196455c7fb9e67c5070f7ff39d102c +Z 077b53fc9177948b0f7f836370f27e76 diff --git a/manifest.uuid b/manifest.uuid index c897223..ff4b9ae 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -71aeb47a33d20919a71efc23d973c5f6a3c3bb90 \ No newline at end of file +9704609d5e9ccbadfce2ed96e74893f97e453e0f \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 6c50c12..c5fd490 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -16,7 +16,7 @@ #include "CommitDialog.h" #include "FileActionDialog.h" #include "CloneDialog.h" -#include "UpdateDialog.h" +#include "RevisionDialog.h" #include "Utils.h" #define LATEST_VERSION "Latest Revision" @@ -2220,7 +2220,7 @@ void MainWindow::updateRevision(const QString &revision) if(!revision.isEmpty()) defaultval = revision; - QString selected_revision = UpdateDialog::runUpdate(this, tr("Update workspace"), versionList, defaultval).trimmed(); + QString selected_revision = RevisionDialog::runUpdate(this, tr("Update workspace"), versionList, defaultval).trimmed(); if(selected_revision.isEmpty()) return; @@ -2258,7 +2258,7 @@ void MainWindow::on_actionNewTag_triggered() QString revision = fossil().getCurrentRevision(); QString name; - if(!UpdateDialog::runNewTag(this, tr("New Tag"), versionList, revision, revision, name)) + if(!RevisionDialog::runNewTag(this, tr("New Tag"), versionList, revision, revision, name)) return; if(name.isEmpty() || getWorkspace().getTags().contains(name) || getWorkspace().getBranches().contains(name)) @@ -2297,7 +2297,7 @@ void MainWindow::on_actionNewBranch_triggered() QString revision = fossil().getCurrentRevision(); QString branch_name; - if(!UpdateDialog::runNewTag(this, tr("New Branch"), versionList, revision, revision, branch_name)) + if(!RevisionDialog::runNewTag(this, tr("New Branch"), versionList, revision, revision, branch_name)) return; if(branch_name.isEmpty() || getWorkspace().getTags().contains(branch_name) || getWorkspace().getBranches().contains(branch_name)) @@ -2322,7 +2322,7 @@ void MainWindow::MergeRevision(const QString &defaultRevision) bool integrate = false; bool force = false; - revision = UpdateDialog::runMerge(this, tr("Merge"), versionList, revision, integrate, force); + revision = RevisionDialog::runMerge(this, tr("Merge"), versionList, revision, integrate, force); if(revision.isEmpty()) return; diff --git a/src/UpdateDialog.cpp b/src/RevisionDialog.cpp similarity index 73% rename from src/UpdateDialog.cpp rename to src/RevisionDialog.cpp index aacdc1d..0f2ca8b 100644 --- a/src/UpdateDialog.cpp +++ b/src/RevisionDialog.cpp @@ -1,11 +1,11 @@ -#include "UpdateDialog.h" -#include "ui_UpdateDialog.h" +#include "RevisionDialog.h" +#include "ui_RevisionDialog.h" #include "Utils.h" //----------------------------------------------------------------------------- -UpdateDialog::UpdateDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue) : +RevisionDialog::RevisionDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue) : QDialog(parent), - ui(new Ui::UpdateDialog), + ui(new Ui::RevisionDialog), completer(completions, parent) { ui->setupUi(this); @@ -18,15 +18,15 @@ UpdateDialog::UpdateDialog(QWidget *parent, const QStringList &completions, cons } //----------------------------------------------------------------------------- -UpdateDialog::~UpdateDialog() +RevisionDialog::~RevisionDialog() { delete ui; } //----------------------------------------------------------------------------- -QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue) +QString RevisionDialog::runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue) { - UpdateDialog dlg(parent, completions, defaultValue); + RevisionDialog dlg(parent, completions, defaultValue); dlg.setWindowTitle(title); dlg.ui->lblName->setVisible(false); dlg.ui->lineName->setVisible(false); @@ -43,9 +43,9 @@ QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QSt } //----------------------------------------------------------------------------- -QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, bool &integrate, bool &force) +QString RevisionDialog::runMerge(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, bool &integrate, bool &force) { - UpdateDialog dlg(parent, completions, defaultValue); + RevisionDialog dlg(parent, completions, defaultValue); dlg.setWindowTitle(title); dlg.ui->lblName->setVisible(false); dlg.ui->lineName->setVisible(false); @@ -69,9 +69,9 @@ QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStr //----------------------------------------------------------------------------- -bool UpdateDialog::runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name) +bool RevisionDialog::runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name) { - UpdateDialog dlg(parent, completions, defaultValue); + RevisionDialog dlg(parent, completions, defaultValue); dlg.setWindowTitle(title); dlg.ui->lblName->setVisible(true); diff --git a/src/UpdateDialog.h b/src/RevisionDialog.h similarity index 66% rename from src/UpdateDialog.h rename to src/RevisionDialog.h index 5714f00..42f678a 100644 --- a/src/UpdateDialog.h +++ b/src/RevisionDialog.h @@ -1,28 +1,28 @@ -#ifndef UPDATEDIALOG_H -#define UPDATEDIALOG_H +#ifndef REVISIONDIALOG_H +#define REVISIONDIALOG_H #include #include namespace Ui { - class UpdateDialog; + class RevisionDialog; } -class UpdateDialog : public QDialog +class RevisionDialog : public QDialog { Q_OBJECT public: - explicit UpdateDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue); - ~UpdateDialog(); + explicit RevisionDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue); + ~RevisionDialog(); static QString runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue); static QString runMerge(QWidget* parent, const QString& title, const QStringList& completions, const QString& defaultValue, bool& integrate, bool& force); static bool runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name); private: - Ui::UpdateDialog *ui; + Ui::RevisionDialog *ui; QCompleter completer; }; -#endif // UPDATEDIALOG_H +#endif // REVISIONDIALOG_H diff --git a/ui/UpdateDialog.ui b/ui/RevisionDialog.ui similarity index 94% rename from ui/UpdateDialog.ui rename to ui/RevisionDialog.ui index b588ddf..f2bb9a1 100644 --- a/ui/UpdateDialog.ui +++ b/ui/RevisionDialog.ui @@ -1,7 +1,7 @@ - UpdateDialog - + RevisionDialog + Qt::WindowModal @@ -96,7 +96,7 @@ buttonBox accepted() - UpdateDialog + RevisionDialog accept() @@ -112,7 +112,7 @@ buttonBox rejected() - UpdateDialog + RevisionDialog reject() From 1a395023d419c97a04e345b3035e3776564333ef Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 14:52:59 +0000 Subject: [PATCH 66/90] Cleanups FossilOrigin-Name: c179d505cea29fe7e6b9c1b149bbd46eb6a0b009 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/MainWindow.cpp | 16 ++++++---------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index a38c1e0..48c0646 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sUpdateDialog\sto\sRevisionDialog -D 2015-05-03T14:47:53.844 +C Cleanups +D 2015-05-03T14:52:59.139 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,10 +200,10 @@ F src/Fossil.cpp f27b97eaf068275a0e8558dd2b739f9c7b61774a F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp d430100fd7dce89899830505869d30d7fe78c80d +F src/MainWindow.cpp bf2fb9a33bd5e3b3018d6eebcce0dcdd6817f38e F src/MainWindow.h e6797adc543fd07a117a4eacc202fb166ec6665a -F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c w src/UpdateDialog.cpp -F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 w src/UpdateDialog.h +F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c +F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 @@ -218,9 +218,9 @@ F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 -F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd w ui/UpdateDialog.ui +F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 71aeb47a33d20919a71efc23d973c5f6a3c3bb90 -R f78244cea8d27d8c7919d636f9f5d003 +P 9704609d5e9ccbadfce2ed96e74893f97e453e0f +R 504f4c50865a254bc523ba40c7e39978 U kostas -Z 077b53fc9177948b0f7f836370f27e76 +Z 5d7c10b74310a360858f5d60d0e3715c diff --git a/manifest.uuid b/manifest.uuid index ff4b9ae..0964e5b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9704609d5e9ccbadfce2ed96e74893f97e453e0f \ No newline at end of file +c179d505cea29fe7e6b9c1b149bbd46eb6a0b009 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index c5fd490..706368e 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -19,8 +19,7 @@ #include "RevisionDialog.h" #include "Utils.h" -#define LATEST_VERSION "Latest Revision" -#define CURRENT_VERSION "Current Revision" +#define REVISION_LATEST "Latest" //----------------------------------------------------------------------------- enum @@ -2214,7 +2213,7 @@ QMessageBox::StandardButton MainWindow::MainWinUICallback::Query(const QString & //------------------------------------------------------------------------------ void MainWindow::updateRevision(const QString &revision) { - const QString latest = tr(LATEST_VERSION); + const QString latest = tr(REVISION_LATEST); QString defaultval = latest; if(!revision.isEmpty()) @@ -2233,7 +2232,6 @@ void MainWindow::updateRevision(const QString &revision) if(!fossil().updateRepository(res, selected_revision, true)) return; - // FIXME: parse "changes: None. Already up-to-date" and avoid dialog if(res.length()==0) return; @@ -2309,10 +2307,8 @@ void MainWindow::on_actionNewBranch_triggered() if(!fossil().branchNew(branch_name, revision, false)) return; - if(QMessageBox::Yes == DialogQuery(this, tr("New Branch"), tr("Would you like to check-out the branch '%0' ?").arg(branch_name))) - updateRevision(branch_name); - else - refresh(); + // Update to this branch. + updateRevision(branch_name); } //------------------------------------------------------------------------------ void MainWindow::MergeRevision(const QString &defaultRevision) @@ -2322,7 +2318,7 @@ void MainWindow::MergeRevision(const QString &defaultRevision) bool integrate = false; bool force = false; - revision = RevisionDialog::runMerge(this, tr("Merge"), versionList, revision, integrate, force); + revision = RevisionDialog::runMerge(this, tr("Merge Branch"), versionList, revision, integrate, force); if(revision.isEmpty()) return; @@ -2331,7 +2327,7 @@ void MainWindow::MergeRevision(const QString &defaultRevision) if(!fossil().branchMerge(res, revision, integrate, force, true)) return; - if(!FileActionDialog::run(this, tr("Merge"), tr("The following changesd will be made.")+"\n"+tr("Are you sure?"), res)) + if(!FileActionDialog::run(this, tr("Merge"), tr("The following changes will be applied.")+"\n"+tr("Are you sure?"), res)) return; // Do update From 435d1571e7483ee856913394b19fd770a1a41abb Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 15:27:24 +0000 Subject: [PATCH 67/90] Renamed REPODIRMODEL_ROLE_PATH to Renamed TreeViewItem to WorkspaceItem FossilOrigin-Name: 07f3a4f2e0f2a67172434d4336bec1dea1fc5856 --- manifest | 12 ++++---- manifest.uuid | 2 +- src/MainWindow.cpp | 72 +++++++++++++++++++++++----------------------- 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/manifest b/manifest index 48c0646..7ad4468 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Cleanups -D 2015-05-03T14:52:59.139 +C Renamed\sREPODIRMODEL_ROLE_PATH\sto\s\nRenamed\sTreeViewItem\sto\sWorkspaceItem\n +D 2015-05-03T15:27:24.382 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp f27b97eaf068275a0e8558dd2b739f9c7b61774a F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp bf2fb9a33bd5e3b3018d6eebcce0dcdd6817f38e +F src/MainWindow.cpp 0ac9252f14037dc8eb0533c51eec6d81b87c2705 F src/MainWindow.h e6797adc543fd07a117a4eacc202fb166ec6665a F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 9704609d5e9ccbadfce2ed96e74893f97e453e0f -R 504f4c50865a254bc523ba40c7e39978 +P c179d505cea29fe7e6b9c1b149bbd46eb6a0b009 +R f645ada195980983be970129e402fce2 U kostas -Z 5d7c10b74310a360858f5d60d0e3715c +Z af9364389f462e204ab5f0db7259e8f2 diff --git a/manifest.uuid b/manifest.uuid index 0964e5b..4174e03 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c179d505cea29fe7e6b9c1b149bbd46eb6a0b009 \ No newline at end of file +07f3a4f2e0f2a67172434d4336bec1dea1fc5856 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 706368e..0463717 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -39,10 +39,10 @@ enum enum { - REPODIRMODEL_ROLE_PATH = Qt::UserRole+1 + ROLE_WORKSPACE_ITEM = Qt::UserRole+1 }; -struct TreeViewItem +struct WorkspaceItem { enum { @@ -59,17 +59,17 @@ struct TreeViewItem TYPE_SETTINGS }; - TreeViewItem() + WorkspaceItem() : Type(TYPE_UNKNOWN) { } - TreeViewItem(int type, const QString &value) + WorkspaceItem(int type, const QString &value) : Type(type), Value(value) { } - TreeViewItem(const TreeViewItem &other) + WorkspaceItem(const WorkspaceItem &other) { Type = other.Type; Value = other.Value; @@ -83,7 +83,7 @@ struct TreeViewItem return QVariant::fromValue(*this); } }; -Q_DECLARE_METATYPE(TreeViewItem) +Q_DECLARE_METATYPE(WorkspaceItem) /////////////////////////////////////////////////////////////////////////////// @@ -650,7 +650,7 @@ static void addPathToTree(QStandardItem &root, const QString &path) if(!found) // Generate it { QStandardItem *child = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), dir); - child->setData(TreeViewItem(TreeViewItem::TYPE_FOLDER, fullpath), REPODIRMODEL_ROLE_PATH); + child->setData(WorkspaceItem(WorkspaceItem::TYPE_FOLDER, fullpath), ROLE_WORKSPACE_ITEM); parent->appendRow(child); parent = child; } @@ -669,7 +669,7 @@ void MainWindow::updateWorkspaceView() getWorkspace().getDirModel().setHorizontalHeaderLabels(header); QStandardItem *workspace = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), tr("Files") ); - workspace->setData(TreeViewItem(TreeViewItem::TYPE_WORKSPACE, ""), REPODIRMODEL_ROLE_PATH); + workspace->setData(WorkspaceItem(WorkspaceItem::TYPE_WORKSPACE, ""), ROLE_WORKSPACE_ITEM); workspace->setEditable(false); getWorkspace().getDirModel().appendRow(workspace); @@ -687,50 +687,50 @@ void MainWindow::updateWorkspaceView() // Branches QStandardItem *branches = new QStandardItem(QIcon(":icons/icons/Document Organization Chart-01.png"), "Branches"); - branches->setData(TreeViewItem(TreeViewItem::TYPE_BRANCHES, ""), REPODIRMODEL_ROLE_PATH); + branches->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCHES, ""), ROLE_WORKSPACE_ITEM); branches->setEditable(false); getWorkspace().getDirModel().appendRow(branches); foreach(const QString &branch_name, getWorkspace().getBranches()) { QStandardItem *branch = new QStandardItem(QIcon(":icons/icons/Document Organization Chart-01.png"), branch_name); - branch->setData(TreeViewItem(TreeViewItem::TYPE_BRANCH, branch_name), REPODIRMODEL_ROLE_PATH); + branch->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCH, branch_name), ROLE_WORKSPACE_ITEM); branches->appendRow(branch); } // Tags QStandardItem *tags = new QStandardItem(QIcon(":icons/icons/Book-01.png"), "Tags"); - tags->setData(TreeViewItem(TreeViewItem::TYPE_TAGS, ""), REPODIRMODEL_ROLE_PATH); + tags->setData(WorkspaceItem(WorkspaceItem::TYPE_TAGS, ""), ROLE_WORKSPACE_ITEM); tags->setEditable(false); getWorkspace().getDirModel().appendRow(tags); for(QStringMap::const_iterator it=getWorkspace().getTags().begin(); it!=getWorkspace().getTags().end(); ++it) { const QString &tag_name = it.key(); QStandardItem *tag = new QStandardItem(QIcon(":icons/icons/Book-01.png"), tag_name); - tag->setData(TreeViewItem(TreeViewItem::TYPE_TAG, tag_name), REPODIRMODEL_ROLE_PATH); + tag->setData(WorkspaceItem(WorkspaceItem::TYPE_TAG, tag_name), ROLE_WORKSPACE_ITEM); tags->appendRow(tag); } // Stashes QStandardItem *stashes = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), "Stashes"); - stashes->setData(TreeViewItem(TreeViewItem::TYPE_STASHES, ""), REPODIRMODEL_ROLE_PATH); + stashes->setData(WorkspaceItem(WorkspaceItem::TYPE_STASHES, ""), ROLE_WORKSPACE_ITEM); stashes->setEditable(false); getWorkspace().getDirModel().appendRow(stashes); for(stashmap_t::const_iterator it= getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) { QStandardItem *stash = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), it.key()); - stash->setData(TreeViewItem(TreeViewItem::TYPE_STASH, it.value()), REPODIRMODEL_ROLE_PATH); + stash->setData(WorkspaceItem(WorkspaceItem::TYPE_STASH, it.value()), ROLE_WORKSPACE_ITEM); stashes->appendRow(stash); } // Remotes QStandardItem *remotes = new QStandardItem(QIcon(":icons/icons/Network PC-01.png"), "Remotes"); - remotes->setData(TreeViewItem(TreeViewItem::TYPE_REMOTES, ""), REPODIRMODEL_ROLE_PATH); + remotes->setData(WorkspaceItem(WorkspaceItem::TYPE_REMOTES, ""), ROLE_WORKSPACE_ITEM); remotes->setEditable(false); getWorkspace().getDirModel().appendRow(remotes); // Settings QStandardItem *settings = new QStandardItem(QIcon(":icons/icons/Gear-01.png"), "Settings"); - settings->setData(TreeViewItem(TreeViewItem::TYPE_SETTINGS, ""), REPODIRMODEL_ROLE_PATH); + settings->setData(WorkspaceItem(WorkspaceItem::TYPE_SETTINGS, ""), ROLE_WORKSPACE_ITEM); settings->setEditable(false); getWorkspace().getDirModel().appendRow(settings); @@ -999,11 +999,11 @@ void MainWindow::getSelectionPaths(stringset_t &paths) QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes(); foreach(const QModelIndex &mi, selection) { - QVariant data = mi.model()->data(mi, REPODIRMODEL_ROLE_PATH); + QVariant data = mi.model()->data(mi, ROLE_WORKSPACE_ITEM); Q_ASSERT(data.isValid()); - TreeViewItem tv = data.value(); - if(tv.Type != TreeViewItem::TYPE_FOLDER) + WorkspaceItem tv = data.value(); + if(tv.Type != WorkspaceItem::TYPE_FOLDER) continue; paths.insert(tv.Value); @@ -1111,11 +1111,11 @@ void MainWindow::getSelectionStashes(QStringList &stashNames) foreach(const QModelIndex &mi, selection) { - QVariant data = mi.model()->data(mi, REPODIRMODEL_ROLE_PATH); + QVariant data = mi.model()->data(mi, ROLE_WORKSPACE_ITEM); Q_ASSERT(data.isValid()); - TreeViewItem tv = data.value(); + WorkspaceItem tv = data.value(); - if(tv.Type != TreeViewItem::TYPE_STASH) + if(tv.Type != WorkspaceItem::TYPE_STASH) continue; QString name = mi.model()->data(mi, Qt::DisplayRole).toString(); @@ -1643,15 +1643,15 @@ void MainWindow::onWorkspaceTreeViewSelectionChanged(const QItemSelection &/*sel foreach(const QModelIndex &id, indices) { - QVariant data = id.model()->data(id, REPODIRMODEL_ROLE_PATH); + QVariant data = id.model()->data(id, ROLE_WORKSPACE_ITEM); Q_ASSERT(data.isValid()); - TreeViewItem tv = data.value(); + WorkspaceItem tv = data.value(); - if(tv.Type == TreeViewItem::TYPE_FOLDER || tv.Type == TreeViewItem::TYPE_WORKSPACE) + if(tv.Type == WorkspaceItem::TYPE_FOLDER || tv.Type == WorkspaceItem::TYPE_WORKSPACE) new_dirs.insert(tv.Value); - else if(tv.Type == TreeViewItem::TYPE_TAG) + else if(tv.Type == WorkspaceItem::TYPE_TAG) selectedTags.append(tv.Value); - else if(tv.Type == TreeViewItem::TYPE_BRANCH) + else if(tv.Type == WorkspaceItem::TYPE_BRANCH) selectedBranches.append(tv.Value); } @@ -1678,11 +1678,11 @@ void MainWindow::on_actionOpenFolder_triggered() //------------------------------------------------------------------------------ void MainWindow::on_workspaceTreeView_doubleClicked(const QModelIndex &index) { - QVariant data = index.model()->data(index, REPODIRMODEL_ROLE_PATH); + QVariant data = index.model()->data(index, ROLE_WORKSPACE_ITEM); Q_ASSERT(data.isValid()); - TreeViewItem tv = data.value(); + WorkspaceItem tv = data.value(); - if(tv.Type!=TreeViewItem::TYPE_FOLDER && tv.Type!=TreeViewItem::TYPE_WORKSPACE) + if(tv.Type!=WorkspaceItem::TYPE_FOLDER && tv.Type!=WorkspaceItem::TYPE_WORKSPACE) return; QString target = getCurrentWorkspace() + PATH_SEPARATOR + tv.Value; @@ -2059,17 +2059,17 @@ void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &) // Get first selected item const QModelIndex &mi = indices.first(); - QVariant data = getWorkspace().getDirModel().data(mi, REPODIRMODEL_ROLE_PATH); + QVariant data = getWorkspace().getDirModel().data(mi, ROLE_WORKSPACE_ITEM); Q_ASSERT(data.isValid()); - TreeViewItem tv = data.value(); + WorkspaceItem tv = data.value(); - if(tv.Type == TreeViewItem::TYPE_FOLDER || tv.Type == TreeViewItem::TYPE_WORKSPACE) + if(tv.Type == WorkspaceItem::TYPE_FOLDER || tv.Type == WorkspaceItem::TYPE_WORKSPACE) menu = menuWorkspace; - else if (tv.Type == TreeViewItem::TYPE_STASH || tv.Type == TreeViewItem::TYPE_STASHES) + else if (tv.Type == WorkspaceItem::TYPE_STASH || tv.Type == WorkspaceItem::TYPE_STASHES) menu = menuStashes; - else if (tv.Type == TreeViewItem::TYPE_TAG || tv.Type == TreeViewItem::TYPE_TAGS) + else if (tv.Type == WorkspaceItem::TYPE_TAG || tv.Type == WorkspaceItem::TYPE_TAGS) menu = menuTags; - else if (tv.Type == TreeViewItem::TYPE_BRANCH || tv.Type == TreeViewItem::TYPE_BRANCHES) + else if (tv.Type == WorkspaceItem::TYPE_BRANCH || tv.Type == WorkspaceItem::TYPE_BRANCHES) menu = menuBranches; if(menu) From 8afb6c280ca4ca009fc5b3c3eb04cfa0168e7e0d Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 15:37:36 +0000 Subject: [PATCH 68/90] Merged UpdateRevision into Update Disabled unimplemented Remotes and Settings workspace items FossilOrigin-Name: a297f70942e3dccf9904c054fb9e633edb9c59cb --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/MainWindow.cpp | 35 ++++------------------------------- src/MainWindow.h | 1 - ui/MainWindow.ui | 18 +----------------- 5 files changed, 14 insertions(+), 58 deletions(-) diff --git a/manifest b/manifest index 7ad4468..1d71e91 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sREPODIRMODEL_ROLE_PATH\sto\s\nRenamed\sTreeViewItem\sto\sWorkspaceItem\n -D 2015-05-03T15:27:24.382 +C Merged\sUpdateRevision\sinto\sUpdate\nDisabled\sunimplemented\sRemotes\sand\sSettings\sworkspace\sitems +D 2015-05-03T15:37:36.581 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp f27b97eaf068275a0e8558dd2b739f9c7b61774a F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 0ac9252f14037dc8eb0533c51eec6d81b87c2705 -F src/MainWindow.h e6797adc543fd07a117a4eacc202fb166ec6665a +F src/MainWindow.cpp 0a5183c05ff08b635cd9517182b2357240ea52be +F src/MainWindow.h 725b4b5ed259029fd3de4bda65ca89f35c37e55e F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 @@ -217,10 +217,10 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 +F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P c179d505cea29fe7e6b9c1b149bbd46eb6a0b009 -R f645ada195980983be970129e402fce2 +P 07f3a4f2e0f2a67172434d4336bec1dea1fc5856 +R 99002beae8d92d0dad7136d0a700f184 U kostas -Z af9364389f462e204ab5f0db7259e8f2 +Z 062c1bdf7b6c35cfdeda74b3f8d3385e diff --git a/manifest.uuid b/manifest.uuid index 4174e03..39bde2f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -07f3a4f2e0f2a67172434d4336bec1dea1fc5856 \ No newline at end of file +a297f70942e3dccf9904c054fb9e633edb9c59cb \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 0463717..760efc4 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -159,14 +159,14 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP menuTags->addAction(ui->actionNewTag); menuTags->addAction(separator); menuTags->addAction(ui->actionDeleteTag); - menuTags->addAction(ui->actionUpdateRevision); + menuTags->addAction(ui->actionUpdate); // BranchesMenu menuBranches = new QMenu(this); menuBranches->addAction(ui->actionNewBranch); menuBranches->addAction(separator); menuBranches->addAction(ui->actionMergeBranch); - menuBranches->addAction(ui->actionUpdateRevision); + menuBranches->addAction(ui->actionUpdate); // Recent Workspaces // Locate a sequence of two separator actions in file menu @@ -722,6 +722,7 @@ void MainWindow::updateWorkspaceView() stashes->appendRow(stash); } +#if 0 // Unimplemented for now // Remotes QStandardItem *remotes = new QStandardItem(QIcon(":icons/icons/Network PC-01.png"), "Remotes"); remotes->setData(WorkspaceItem(WorkspaceItem::TYPE_REMOTES, ""), ROLE_WORKSPACE_ITEM); @@ -733,8 +734,7 @@ void MainWindow::updateWorkspaceView() settings->setData(WorkspaceItem(WorkspaceItem::TYPE_SETTINGS, ""), ROLE_WORKSPACE_ITEM); settings->setEditable(false); getWorkspace().getDirModel().appendRow(settings); - - +#endif ui->workspaceTreeView->expandToDepth(0); //ui->workspaceTreeView->sortByColumn(0, Qt::AscendingOrder); } @@ -1468,33 +1468,6 @@ void MainWindow::on_actionAbout_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionUpdate_triggered() -{ - QStringList res; - - // Do test update - if(!fossil().updateRepository(res, "", true)) - return; - - if(res.length()==0) - return; - - QStringMap kv; - ParseProperties(kv, res, ':'); - // If no changes exit - if(kv.contains("changes") && kv["changes"].indexOf("None.")!=-1) - return; - - if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) - return; - - // Do update - fossil().updateRepository(res, "", false); - - refresh(); -} - -//------------------------------------------------------------------------------ -void MainWindow::on_actionUpdateRevision_triggered() { QStringList selected = selectedBranches + selectedTags; diff --git a/src/MainWindow.h b/src/MainWindow.h index 567eb0e..a2cc858 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -114,7 +114,6 @@ private slots: void on_textBrowser_customContextMenuRequested(const QPoint &pos); void on_fileTableView_customContextMenuRequested(const QPoint &pos); void on_workspaceTreeView_customContextMenuRequested(const QPoint &pos); - void on_actionUpdateRevision_triggered(); void on_actionNewTag_triggered(); void on_actionDeleteTag_triggered(); void on_actionNewBranch_triggered(); diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index c5ca02e..e53e724 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -293,7 +293,6 @@ - @@ -701,7 +700,7 @@ Update - Update the workspace to the latest version + Update the workspace to a revision Update the workspace to the latest version @@ -890,21 +889,6 @@ Diff Stash - - - - :/icons/icons/Button Forward-01.png:/icons/icons/Button Forward-01.png - - - Update to Revision - - - Update the workspace to a specific revision - - - Ctrl+Shift+U - - From 3b1599911760863fddcf9cc61cd360932ce16ed1 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 3 May 2015 17:57:33 +0000 Subject: [PATCH 69/90] Fixed bug where a fossil output line would not be output under certain conditions FossilOrigin-Name: 2744a0db324c05cb0f4e2e73128d8c3837d66479 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/Fossil.cpp | 44 +++++++++++++++++++++++++++++++++++++------- src/Fossil.h | 3 ++- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 1d71e91..0d94c75 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merged\sUpdateRevision\sinto\sUpdate\nDisabled\sunimplemented\sRemotes\sand\sSettings\sworkspace\sitems -D 2015-05-03T15:37:36.581 +C Fixed\sbug\swhere\sa\sfossil\soutput\sline\swould\snot\sbe\soutput\sunder\scertain\sconditions +D 2015-05-03T17:57:33.003 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,8 +196,8 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp f27b97eaf068275a0e8558dd2b739f9c7b61774a -F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e +F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c +F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/MainWindow.cpp 0a5183c05ff08b635cd9517182b2357240ea52be @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 07f3a4f2e0f2a67172434d4336bec1dea1fc5856 -R 99002beae8d92d0dad7136d0a700f184 +P a297f70942e3dccf9904c054fb9e633edb9c59cb +R e0fe347c0fa4907206bddff7538284f8 U kostas -Z 062c1bdf7b6c35cfdeda74b3f8d3385e +Z 101db116ff5c22dbcc32decf8bc34dd6 diff --git a/manifest.uuid b/manifest.uuid index 39bde2f..fce10bd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a297f70942e3dccf9904c054fb9e633edb9c59cb \ No newline at end of file +2744a0db324c05cb0f4e2e73128d8c3837d66479 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index d73d078..05a163b 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -725,14 +725,34 @@ bool Fossil::runFossilRaw(const QStringList &args, QStringList *output, int *exi process.getLogAndClear(input); #ifdef QT_DEBUG // Log fossil output in debug builds - if(!input.isEmpty()) + if(!input.isEmpty() && (runFlags & RUNFLAGS_DEBUG) ) qDebug() << "[" << ++input_index << "] '" << input.data() << "'\n"; #endif buffer += decoder->toUnicode(input); - - - #ifdef QT_DEBUG // breakpint +#if 0 // Keep this for now to simulate bad parses + if(runFlags & RUNFLAGS_DEBUG) + { + static int debug=1; + if(debug==1) + { + buffer = " 4: [df2233aabe09ef] on 2013-02-03 02:51:33\n" + " History\n" + " 5: [df2233aabe09ef] on 2013-02-15 03:55:37\n" + " "; + debug++; + } + else if(debug==2) + { + buffer = " Diff\n" + " "; + debug++; + } + else + buffer=""; + } +#endif + #ifdef QT_DEBUG // breakpoint //if(buffer.indexOf("SQLITE_CANTOPEN")!=-1) // qDebug() << "Breakpoint\n"; #endif @@ -759,9 +779,12 @@ bool Fossil::runFossilRaw(const QStringList &args, QStringList *output, int *exi if(last_line_start>0) { int before_last_line_start = buffer.lastIndexOf(EOL_MARK, last_line_start-1); - // No line before ? + + // No new-line before ? if(before_last_line_start==-1) before_last_line_start = 0; // Use entire line + else + ++before_last_line_start; // Skip new-line // Extract previous line before_last_line = buffer.mid(before_last_line_start, last_line_start-before_last_line_start); @@ -785,12 +808,19 @@ bool Fossil::runFossilRaw(const QStringList &args, QStringList *output, int *exi QStringList log_lines = buffer.left(last_line_start).split(EOL_MARK); for(int l=0; l0 && l==log_lines.length()-1 && buffer[buffer.length()-1] != EOL_MARK ) + // Skip last line if we have a query. This will be handled manually further down + if(have_query && l==log_lines.length()-1) continue; QString line = log_lines[l].trimmed(); + #ifdef QT_DEBUG + if(runFlags & RUNFLAGS_DEBUG) + { + qDebug() << "LINE: " << line << "\n"; + } + #endif + if(line.isEmpty()) continue; diff --git a/src/Fossil.h b/src/Fossil.h index 093f306..e1bb325 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -18,7 +18,8 @@ enum RunFlags RUNFLAGS_SILENT_INPUT = 1<<0, RUNFLAGS_SILENT_OUTPUT = 1<<1, RUNFLAGS_SILENT_ALL = RUNFLAGS_SILENT_INPUT | RUNFLAGS_SILENT_OUTPUT, - RUNFLAGS_DETACHED = 1<<2 + RUNFLAGS_DETACHED = 1<<2, + RUNFLAGS_DEBUG = 1<<3, }; enum RepoStatus From 285e6795f2f7cdcbd0f3ae25790d92e729fa5b48 Mon Sep 17 00:00:00 2001 From: kostas Date: Tue, 5 May 2015 12:41:04 +0000 Subject: [PATCH 70/90] Fixed windows build FossilOrigin-Name: 9eea1bac1b8780266c9eac0e31d9d9246854e6ac --- fuel.pro | 3 ++- manifest | 14 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/fuel.pro b/fuel.pro index f1ca1db..4cdc75a 100644 --- a/fuel.pro +++ b/fuel.pro @@ -2,10 +2,11 @@ # Fuel #------------------------------------------------- -QT += core gui webkit +QT = core gui webkit contains(QT_VERSION, ^5\\..*) { QT += widgets webkitwidgets + QT -= quick multimediawidgets opengl printsupport qml multimedia positioning sensors } TARGET = Fuel diff --git a/manifest b/manifest index 2e7e729..d598a43 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merged\swith\strunk\nPorted\sthe\sicon\scache -D 2015-05-03T19:27:50.028 +C Fixed\swindows\sbuild\n +D 2015-05-05T12:41:04.779 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro 6199ecb89dd8cc9a1d5357ebcac774edc302ef0d +F fuel.pro d64e2a78105bf9ecbb288a17b2706afcc4c12514 F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -200,7 +200,7 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp e56d3fe486a388a27f39648de7a58fab8be2824e +F src/MainWindow.cpp 6a50f409c7cb2aa5389183854a4dbe8de3c9cfef F src/MainWindow.h 2b84fe52f8184364d63a7c9518500017b866e8ea F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 2744a0db324c05cb0f4e2e73128d8c3837d66479 964b28f34fae482959ce8a96cbc6106f8702fb33 -R 5246702db3f74ca03143a4c68bf370e8 +P 713625d58306a081885455e8f3869723fe649fdd +R 3f2a9c7e59766c3afa452fa6b694203b U kostas -Z 59727ab2a076e48750a62615838a345e +Z a45941c84960e7cd1bcf66f0580b2931 diff --git a/manifest.uuid b/manifest.uuid index 3dc7187..8af0d99 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -713625d58306a081885455e8f3869723fe649fdd \ No newline at end of file +9eea1bac1b8780266c9eac0e31d9d9246854e6ac \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 80c99cf..3de5ad6 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -2015,7 +2015,7 @@ void MainWindow::on_fileTableView_customContextMenuRequested(const QPoint &pos) if(fnames.size()==1) { - QString fname = getCurrentWorkspace() + PATH_SEP + fnames[0]; + QString fname = getCurrentWorkspace() + PATH_SEPARATOR + fnames[0]; fname = QDir::toNativeSeparators(fname); if(ShowExplorerMenu((HWND)winId(), fname, gpos)) refresh(); From 4252085d9da4487d8bdd7cec35633d20b0ffe9b5 Mon Sep 17 00:00:00 2001 From: kostas Date: Tue, 12 May 2015 18:01:31 +0000 Subject: [PATCH 71/90] Renamed organisation name back to "fuel-scm.org" FossilOrigin-Name: 0bdfeb81b088e0b1476518a320428b235967936f --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/main.cpp | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index d598a43..d27a787 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\swindows\sbuild\n -D 2015-05-05T12:41:04.779 +C Renamed\sorganisation\sname\sback\sto\s"fuel-scm.org" +D 2015-05-12T18:01:31.611 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -210,7 +210,7 @@ F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 F src/Workspace.h e13d21c15f27c2b36368a06f4316f261ff782814 -F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b +F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0 F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 713625d58306a081885455e8f3869723fe649fdd -R 3f2a9c7e59766c3afa452fa6b694203b +P 9eea1bac1b8780266c9eac0e31d9d9246854e6ac +R 3c799002119213ea44b7e7ff73f556ec U kostas -Z a45941c84960e7cd1bcf66f0580b2931 +Z 5e69aac744baa1274bf632c8186dc572 diff --git a/manifest.uuid b/manifest.uuid index 8af0d99..2b75155 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9eea1bac1b8780266c9eac0e31d9d9246854e6ac \ No newline at end of file +0bdfeb81b088e0b1476518a320428b235967936f \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 100b096..98cbd88 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,7 +6,7 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); app.setApplicationName("Fuel"); app.setApplicationVersion("2.0.0"); - app.setOrganizationDomain("fuelscm.org"); + app.setOrganizationDomain("fuel-scm.org"); app.setOrganizationName("Fuel-SCM"); From adbd44da3ac12a326cb32862e8587c2f7dcbccac Mon Sep 17 00:00:00 2001 From: kostas Date: Tue, 12 May 2015 19:13:27 +0000 Subject: [PATCH 72/90] The header of the workspace view is no longer regenerated every refresh FossilOrigin-Name: d1823f2de2e505cae5c738292e71f54e54908ea0 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/MainWindow.cpp | 13 +++++++------ 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index d27a787..2eef9c8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sorganisation\sname\sback\sto\s"fuel-scm.org" -D 2015-05-12T18:01:31.611 +C The\sheader\sof\sthe\sworkspace\sview\sis\sno\slonger\sregenerated\severy\srefresh\n +D 2015-05-12T19:13:27.768 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 6a50f409c7cb2aa5389183854a4dbe8de3c9cfef +F src/MainWindow.cpp fe78b884abb2e123c2526ed28eda3b7d88d27843 F src/MainWindow.h 2b84fe52f8184364d63a7c9518500017b866e8ea F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 9eea1bac1b8780266c9eac0e31d9d9246854e6ac -R 3c799002119213ea44b7e7ff73f556ec +P 0bdfeb81b088e0b1476518a320428b235967936f +R 2d33b0f451ed31f3d6f54ffd9cf1f7d3 U kostas -Z 5e69aac744baa1274bf632c8186dc572 +Z 23fe2012ed952500a94dffca4949ebb4 diff --git a/manifest.uuid b/manifest.uuid index 2b75155..6953b61 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0bdfeb81b088e0b1476518a320428b235967936f \ No newline at end of file +d1823f2de2e505cae5c738292e71f54e54908ea0 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 3de5ad6..5f13141 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -129,6 +129,11 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP // workspaceTreeView ui->workspaceTreeView->setModel(&getWorkspace().getDirModel()); + + header.clear(); + header << tr("Workspace"); + getWorkspace().getDirModel().setHorizontalHeaderLabels(header); + connect( ui->workspaceTreeView->selectionModel(), SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection &) ), SLOT( onWorkspaceTreeViewSelectionChanged(const QItemSelection &, const QItemSelection &) ), @@ -660,12 +665,8 @@ static void addPathToTree(QStandardItem &root, const QString &path, const QIcon //------------------------------------------------------------------------------ void MainWindow::updateWorkspaceView() { - // Directory View - getWorkspace().getDirModel().clear(); - - QStringList header; - header << tr("Workspace"); - getWorkspace().getDirModel().setHorizontalHeaderLabels(header); + // Clear content except headers + getWorkspace().getDirModel().removeRows(0, getWorkspace().getDirModel().rowCount()); QStandardItem *workspace = new QStandardItem(getInternalIcon(":icons/icons/Folder-01.png"), tr("Files") ); workspace->setData(WorkspaceItem(WorkspaceItem::TYPE_WORKSPACE, ""), ROLE_WORKSPACE_ITEM); From 91163a8502c11d72849d667a16ba6d64606d6a07 Mon Sep 17 00:00:00 2001 From: kostas Date: Tue, 12 May 2015 20:38:16 +0000 Subject: [PATCH 73/90] Added SearchBox FossilOrigin-Name: 097bed86191fae72e1bf76078b8e9d8da37b2932 --- fuel.pro | 192 +++++++++++++++++++++++---------------------- manifest | 18 +++-- manifest.uuid | 2 +- src/MainWindow.cpp | 64 ++++++++++++--- src/MainWindow.h | 4 + src/SearchBox.cpp | 24 ++++++ src/SearchBox.h | 23 ++++++ 7 files changed, 214 insertions(+), 113 deletions(-) create mode 100644 src/SearchBox.cpp create mode 100644 src/SearchBox.h diff --git a/fuel.pro b/fuel.pro index 4cdc75a..ab026b9 100644 --- a/fuel.pro +++ b/fuel.pro @@ -1,95 +1,97 @@ -#------------------------------------------------- -# Fuel -#------------------------------------------------- - -QT = core gui webkit - -contains(QT_VERSION, ^5\\..*) { - QT += widgets webkitwidgets - QT -= quick multimediawidgets opengl printsupport qml multimedia positioning sensors -} - -TARGET = Fuel -TEMPLATE = app - -win32 { - RC_FILE = rsrc/fuel.rc - LIBS += -luser32 -lshell32 -luuid -} - -macx { - ICON = rsrc/icons/fuel.icns -} - -unix:!macx { - TARGET = fuel - ICON = rsrc/icons/fuel.png - PREFIX = /usr - BINDIR = $$PREFIX/bin - DATADIR = $$PREFIX/share - target.path = $$BINDIR - - desktop.path = $$DATADIR/applications - desktop.files += rsrc/fuel.desktop - - icon.path = $$DATADIR/icons/hicolor/256x256/apps - icon.files += rsrc/icons/fuel.png - - INSTALLS += target desktop icon - system(intl/convert.sh) -} - - -INCLUDEPATH += src - -SOURCES += src/main.cpp\ - src/MainWindow.cpp \ - src/CommitDialog.cpp \ - src/FileActionDialog.cpp \ - src/SettingsDialog.cpp \ - src/CloneDialog.cpp \ - src/RevisionDialog.cpp \ - src/Utils.cpp \ - src/FileTableView.cpp \ - src/LoggedProcess.cpp \ - src/BrowserWidget.cpp \ - src/CustomWebView.cpp \ - src/Fossil.cpp \ - src/Workspace.cpp - -HEADERS += src/MainWindow.h \ - src/CommitDialog.h \ - src/FileActionDialog.h \ - src/SettingsDialog.h \ - src/CloneDialog.h \ - src/RevisionDialog.h \ - src/Utils.h \ - src/FileTableView.h \ - src/LoggedProcess.h \ - src/BrowserWidget.h \ - src/CustomWebView.h \ - src/Fossil.h \ - src/Workspace.h - -FORMS += ui/MainWindow.ui \ - ui/CommitDialog.ui \ - ui/FileActionDialog.ui \ - ui/SettingsDialog.ui \ - ui/CloneDialog.ui \ - ui/BrowserWidget.ui \ - ui/RevisionDialog.ui - -RESOURCES += \ - rsrc/resources.qrc - -CODECFORTR = UTF-8 - -TRANSLATIONS += \ - intl/en_US.ts \ - intl/el_GR.ts \ - intl/de_DE.ts \ - intl/es_ES.ts \ - intl/fr_FR.ts \ - intl/ru_RU.ts \ - intl/pt_PT.ts - +#------------------------------------------------- +# Fuel +#------------------------------------------------- + +QT = core gui webkit + +contains(QT_VERSION, ^5\\..*) { + QT += widgets webkitwidgets + QT -= quick multimediawidgets opengl printsupport qml multimedia positioning sensors +} + +TARGET = Fuel +TEMPLATE = app + +win32 { + RC_FILE = rsrc/fuel.rc + LIBS += -luser32 -lshell32 -luuid +} + +macx { + ICON = rsrc/icons/fuel.icns +} + +unix:!macx { + TARGET = fuel + ICON = rsrc/icons/fuel.png + PREFIX = /usr + BINDIR = $$PREFIX/bin + DATADIR = $$PREFIX/share + target.path = $$BINDIR + + desktop.path = $$DATADIR/applications + desktop.files += rsrc/fuel.desktop + + icon.path = $$DATADIR/icons/hicolor/256x256/apps + icon.files += rsrc/icons/fuel.png + + INSTALLS += target desktop icon + system(intl/convert.sh) +} + + +INCLUDEPATH += src + +SOURCES += src/main.cpp\ + src/MainWindow.cpp \ + src/CommitDialog.cpp \ + src/FileActionDialog.cpp \ + src/SettingsDialog.cpp \ + src/CloneDialog.cpp \ + src/RevisionDialog.cpp \ + src/Utils.cpp \ + src/FileTableView.cpp \ + src/LoggedProcess.cpp \ + src/BrowserWidget.cpp \ + src/CustomWebView.cpp \ + src/Fossil.cpp \ + src/Workspace.cpp \ + src/SearchBox.cpp + +HEADERS += src/MainWindow.h \ + src/CommitDialog.h \ + src/FileActionDialog.h \ + src/SettingsDialog.h \ + src/CloneDialog.h \ + src/RevisionDialog.h \ + src/Utils.h \ + src/FileTableView.h \ + src/LoggedProcess.h \ + src/BrowserWidget.h \ + src/CustomWebView.h \ + src/Fossil.h \ + src/Workspace.h \ + src/SearchBox.h + +FORMS += ui/MainWindow.ui \ + ui/CommitDialog.ui \ + ui/FileActionDialog.ui \ + ui/SettingsDialog.ui \ + ui/CloneDialog.ui \ + ui/BrowserWidget.ui \ + ui/RevisionDialog.ui + +RESOURCES += \ + rsrc/resources.qrc + +CODECFORTR = UTF-8 + +TRANSLATIONS += \ + intl/en_US.ts \ + intl/el_GR.ts \ + intl/de_DE.ts \ + intl/es_ES.ts \ + intl/fr_FR.ts \ + intl/ru_RU.ts \ + intl/pt_PT.ts + diff --git a/manifest b/manifest index 2eef9c8..66888be 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\sheader\sof\sthe\sworkspace\sview\sis\sno\slonger\sregenerated\severy\srefresh\n -D 2015-05-12T19:13:27.768 +C Added\sSearchBox +D 2015-05-12T20:38:16.320 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro d64e2a78105bf9ecbb288a17b2706afcc4c12514 +F fuel.pro b1813a5c54474ca67e484aec4cc9a246ca9a1b07 F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -200,10 +200,12 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp fe78b884abb2e123c2526ed28eda3b7d88d27843 -F src/MainWindow.h 2b84fe52f8184364d63a7c9518500017b866e8ea +F src/MainWindow.cpp a4ce4ef0d6a49829b23d26954aa866c7ed154370 +F src/MainWindow.h 7a2ac41cdd205acccd64a5314f25621ecb616288 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 +F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba +F src/SearchBox.h 0c78d3a68136dab3e0e71b83ae36f22bd2688ab2 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 @@ -220,7 +222,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 0bdfeb81b088e0b1476518a320428b235967936f -R 2d33b0f451ed31f3d6f54ffd9cf1f7d3 +P d1823f2de2e505cae5c738292e71f54e54908ea0 +R f18b61f87c30ab5d96166c7cdb065ec4 U kostas -Z 23fe2012ed952500a94dffca4949ebb4 +Z 94fdd6bb117bbef8d98dd141fa290c48 diff --git a/manifest.uuid b/manifest.uuid index 6953b61..6294e72 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d1823f2de2e505cae5c738292e71f54e54908ea0 \ No newline at end of file +097bed86191fae72e1bf76078b8e9d8da37b2932 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 5f13141..fde70fa 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -12,6 +12,7 @@ #include #include #include +#include "SearchBox.h" #include "CommitDialog.h" #include "FileActionDialog.h" #include "CloneDialog.h" @@ -84,7 +85,6 @@ struct WorkspaceItem }; Q_DECLARE_METATYPE(WorkspaceItem) - /////////////////////////////////////////////////////////////////////////////// MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspacePath) : QMainWindow(parent), @@ -230,6 +230,30 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP abortShortcut->setEnabled(false); connect(abortShortcut, SIGNAL(activated()), this, SLOT(onAbort())); + // Searchbox + // Add spacer to pad to right + QWidget* spacer = new QWidget(); + spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + ui->mainToolBar->addWidget(spacer); + + // Search shortcut + searchShortcut = new QShortcut(QKeySequence(QKeySequence::Find), this); + searchShortcut->setContext(Qt::ApplicationShortcut); + searchShortcut->setEnabled(true); + connect(searchShortcut, SIGNAL(activated()), this, SLOT(onSearch())); + + + // Create SearchBox + searchBox = new SearchBox(this); + searchBox->setPlaceholderText(tr("Find (%0)").arg(searchShortcut->key().toString())); + searchBox->setMaximumWidth(450); + ui->mainToolBar->addWidget(searchBox); + + connect( searchBox, + SIGNAL( textChanged(const QString&)), + SLOT( onSearchBoxTextChanged(const QString&)), + Qt::DirectConnection ); + viewMode = VIEWMODE_TREE; uiCallback.init(this); @@ -373,6 +397,7 @@ bool MainWindow::openWorkspace(const QString &path) // Select the Root of the tree to update the file view selectRootDir(); + searchBox->clear(); return true; } @@ -760,38 +785,46 @@ void MainWindow::updateFileView() bool display_path = viewMode==VIEWMODE_LIST || selectedDirs.count() > 1; + const QString &status_unknown = QString(tr("Unknown")); + const QString &search_text = searchBox->text(); + size_t item_id=0; for(Workspace::filemap_t::iterator it = getWorkspace().getFiles().begin(); it!=getWorkspace().getFiles().end(); ++it) { const WorkspaceFile &e = *it.value(); - QString path = e.getPath(); + const QString &path = e.getPath(); + const QString &file_path = e.getFilePath(); + QString native_file_path = QDir::toNativeSeparators(file_path); + + // Apply filter if available + if(!search_text.isEmpty() && !native_file_path.contains(search_text, Qt::CaseInsensitive)) + continue; // In Tree mode, filter all items not included in the current dir if(viewMode==VIEWMODE_TREE && !selectedDirs.contains(path)) continue; // Status Column - QString status_text = QString(tr("Unknown")); + const QString *status_text = &status_unknown; const char *status_icon_path= ":icons/icons/Button Blank Gray-01.png"; // Default icon for(size_t t=0; tsetToolTip(status_text); + QStandardItem *status = new QStandardItem(getInternalIcon(status_icon_path), *status_text); + status->setToolTip(*status_text); getWorkspace().getFileModel().setItem(item_id, COLUMN_STATUS, status); QFileInfo finfo = e.getFileInfo(); QString icon_type = iconProvider.type(finfo); - if(!iconCache.contains(icon_type)) iconCache.insert(icon_type, iconProvider.icon(finfo)); @@ -801,13 +834,13 @@ void MainWindow::updateFileView() getWorkspace().getFileModel().setItem(item_id, COLUMN_PATH, new QStandardItem(path)); if(display_path) - filename_item = new QStandardItem(*icon, QDir::toNativeSeparators(e.getFilePath())); + filename_item = new QStandardItem(*icon, native_file_path); else filename_item = new QStandardItem(*icon, e.getFilename()); Q_ASSERT(filename_item); // Keep the path in the user data - filename_item->setData(e.getFilePath()); + filename_item->setData(file_path); getWorkspace().getFileModel().setItem(item_id, COLUMN_FILENAME, filename_item); getWorkspace().getFileModel().setItem(item_id, COLUMN_EXTENSION, new QStandardItem(finfo.suffix())); @@ -2334,3 +2367,16 @@ void MainWindow::on_actionMergeBranch_triggered() revision = selectedBranches.first(); MergeRevision(revision); } + +//------------------------------------------------------------------------------ +void MainWindow::onSearchBoxTextChanged(const QString &) +{ + updateFileView(); +} + +//------------------------------------------------------------------------------ +void MainWindow::onSearch() +{ + searchBox->selectAll(); + searchBox->setFocus(); +} diff --git a/src/MainWindow.h b/src/MainWindow.h index 51a1790..b3b1c72 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -74,6 +74,8 @@ private slots: void onWorkspaceTreeViewSelectionChanged(const class QItemSelection &selected, const class QItemSelection &deselected); void onFileViewDragOut(); void onAbort(); + void onSearchBoxTextChanged(const QString &text); + void onSearch(); // Designer slots void on_actionRefresh_triggered(); @@ -161,6 +163,8 @@ private: class QLabel *lblRevision; class QLabel *lblTags; class QShortcut *abortShortcut; + class SearchBox *searchBox; + class QShortcut *searchShortcut; QMenu *menuWorkspace; QMenu *menuStashes; QMenu *menuTags; diff --git a/src/SearchBox.cpp b/src/SearchBox.cpp new file mode 100644 index 0000000..0cbf495 --- /dev/null +++ b/src/SearchBox.cpp @@ -0,0 +1,24 @@ +#include "SearchBox.h" +#include + +SearchBox::SearchBox(QWidget *parent) : QLineEdit(parent) +{ +} + +SearchBox::~SearchBox() +{ + +} + +void SearchBox::keyPressEvent(QKeyEvent *event) +{ + // Clear text on escape + if(event->key() == Qt::Key_Escape) + { + setText(""); + clearFocus(); + } + else + QLineEdit::keyPressEvent(event); +} + diff --git a/src/SearchBox.h b/src/SearchBox.h new file mode 100644 index 0000000..53b7487 --- /dev/null +++ b/src/SearchBox.h @@ -0,0 +1,23 @@ +#ifndef SEARCHBOX_H +#define SEARCHBOX_H + +#include + +class SearchBox : public QLineEdit +{ + Q_OBJECT +public: + explicit SearchBox(QWidget* parent=0); + ~SearchBox(); + +signals: + +public slots: + +protected: + void keyPressEvent(QKeyEvent *event); + +}; + + +#endif // SEARCHBOX_H From 11b012404d46a88bbed7b22fb3aa6767890d1b06 Mon Sep 17 00:00:00 2001 From: kostas Date: Tue, 12 May 2015 20:44:53 +0000 Subject: [PATCH 74/90] Display current tags and branches as bold in workspace view FossilOrigin-Name: 59372f35e863ab4a2363baf3b0df87cbb4a183ce --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/MainWindow.cpp | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 66888be..94d1c9f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\sSearchBox -D 2015-05-12T20:38:16.320 +C Display\scurrent\stags\sand\sbranches\sas\sbold\sin\sworkspace\sview +D 2015-05-12T20:44:53.278 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp a4ce4ef0d6a49829b23d26954aa866c7ed154370 +F src/MainWindow.cpp 20aa6bdb15e5040bc4a9109bc4e29e494f56d15a F src/MainWindow.h 7a2ac41cdd205acccd64a5314f25621ecb616288 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -222,7 +222,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P d1823f2de2e505cae5c738292e71f54e54908ea0 -R f18b61f87c30ab5d96166c7cdb065ec4 +P 097bed86191fae72e1bf76078b8e9d8da37b2932 +R 8241982b5439365ee06da36eacd2c911 U kostas -Z 94fdd6bb117bbef8d98dd141fa290c48 +Z d350a72e02396a189726dcf5b3f96791 diff --git a/manifest.uuid b/manifest.uuid index 6294e72..a2013e6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -097bed86191fae72e1bf76078b8e9d8da37b2932 \ No newline at end of file +59372f35e863ab4a2363baf3b0df87cbb4a183ce \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index fde70fa..dd1d926 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -719,6 +719,14 @@ void MainWindow::updateWorkspaceView() { QStandardItem *branch = new QStandardItem(getInternalIcon(":icons/icons/Document Organization Chart-01.png"), branch_name); branch->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCH, branch_name), ROLE_WORKSPACE_ITEM); + + bool active = fossil().getCurrentTags().contains(branch_name); + if(active) + { + QFont font = branch->font(); + font.setBold(true); + branch->setFont(font); + } branches->appendRow(branch); } @@ -730,8 +738,18 @@ void MainWindow::updateWorkspaceView() for(QStringMap::const_iterator it=getWorkspace().getTags().begin(); it!=getWorkspace().getTags().end(); ++it) { const QString &tag_name = it.key(); + + QStandardItem *tag = new QStandardItem(getInternalIcon(":icons/icons/Book-01.png"), tag_name); tag->setData(WorkspaceItem(WorkspaceItem::TYPE_TAG, tag_name), ROLE_WORKSPACE_ITEM); + + bool active = fossil().getCurrentTags().contains(tag_name); + if(active) + { + QFont font = tag->font(); + font.setBold(true); + tag->setFont(font); + } tags->appendRow(tag); } From 9769de26747111565deb5ae7a74357957b6eaf01 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 17 May 2015 10:08:19 +0000 Subject: [PATCH 75/90] Fixed missing workspace view header when repository a is not available FossilOrigin-Name: 37e191368a0f6880991fd27fb08ebf1144f6626f --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/MainWindow.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 94d1c9f..4b4bad9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Display\scurrent\stags\sand\sbranches\sas\sbold\sin\sworkspace\sview -D 2015-05-12T20:44:53.278 +C Fixed\smissing\sworkspace\sview\sheader\swhen\srepository\sa\sis\snot\savailable +D 2015-05-17T10:08:19.918 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 20aa6bdb15e5040bc4a9109bc4e29e494f56d15a +F src/MainWindow.cpp 0c0a9edf7a891b2af9c87c17ebcd4dbfa56a8be5 F src/MainWindow.h 7a2ac41cdd205acccd64a5314f25621ecb616288 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -222,7 +222,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 097bed86191fae72e1bf76078b8e9d8da37b2932 -R 8241982b5439365ee06da36eacd2c911 +P 59372f35e863ab4a2363baf3b0df87cbb4a183ce +R 9e3e71d3c83ef4dbbdedfee0f5a8b6b5 U kostas -Z d350a72e02396a189726dcf5b3f96791 +Z af213baf2ef19edc096b07b6c3cbac9a diff --git a/manifest.uuid b/manifest.uuid index a2013e6..884d4ff 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -59372f35e863ab4a2363baf3b0df87cbb4a183ce \ No newline at end of file +37e191368a0f6880991fd27fb08ebf1144f6626f \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index dd1d926..ca34472 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -591,7 +591,7 @@ bool MainWindow::refresh() setStatus(tr("No workspace detected.")); enableActions(false); getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); - getWorkspace().getDirModel().clear(); + getWorkspace().getDirModel().removeRows(0, getWorkspace().getFileModel().rowCount()); setWindowTitle(title); return false; } @@ -600,7 +600,7 @@ bool MainWindow::refresh() setStatus(tr("Old repository schema detected. Consider running 'fossil rebuild'")); enableActions(false); getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); - getWorkspace().getDirModel().clear(); + getWorkspace().getDirModel().removeRows(0, getWorkspace().getFileModel().rowCount()); setWindowTitle(title); return true; } From cee4c93efc06bf3d4fd1c5cb4f26e45475ec106e Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 17 May 2015 10:13:46 +0000 Subject: [PATCH 76/90] Renamed DirModel to TreeModel FossilOrigin-Name: b49ff56d2af6aca465d8b2ce3b5a9455341e7a1c --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/MainWindow.cpp | 20 ++++++++++---------- src/Workspace.h | 8 ++++++-- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 4b4bad9..557946e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\smissing\sworkspace\sview\sheader\swhen\srepository\sa\sis\snot\savailable -D 2015-05-17T10:08:19.918 +C Renamed\sDirModel\sto\sTreeModel +D 2015-05-17T10:13:46.499 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 0c0a9edf7a891b2af9c87c17ebcd4dbfa56a8be5 +F src/MainWindow.cpp ec6143d24b4a0be026fb46ed65cf02ee04086417 F src/MainWindow.h 7a2ac41cdd205acccd64a5314f25621ecb616288 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -211,7 +211,7 @@ F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 -F src/Workspace.h e13d21c15f27c2b36368a06f4316f261ff782814 +F src/Workspace.h d6649a3ae1cd0fbad55237030313e85530417271 F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0 F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -222,7 +222,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 59372f35e863ab4a2363baf3b0df87cbb4a183ce -R 9e3e71d3c83ef4dbbdedfee0f5a8b6b5 +P 37e191368a0f6880991fd27fb08ebf1144f6626f +R fdbfaaf7e049e20aebbeead5bf6d1135 U kostas -Z af213baf2ef19edc096b07b6c3cbac9a +Z 25c2de0408c1af282fd060662d16444f diff --git a/manifest.uuid b/manifest.uuid index 884d4ff..44c2b8b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -37e191368a0f6880991fd27fb08ebf1144f6626f \ No newline at end of file +b49ff56d2af6aca465d8b2ce3b5a9455341e7a1c \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ca34472..1b94797 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -128,11 +128,11 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP ui->fileTableView->horizontalHeader()->setStretchLastSection(true); // workspaceTreeView - ui->workspaceTreeView->setModel(&getWorkspace().getDirModel()); + ui->workspaceTreeView->setModel(&getWorkspace().getTreeModel()); header.clear(); header << tr("Workspace"); - getWorkspace().getDirModel().setHorizontalHeaderLabels(header); + getWorkspace().getTreeModel().setHorizontalHeaderLabels(header); connect( ui->workspaceTreeView->selectionModel(), SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection &) ), @@ -591,7 +591,7 @@ bool MainWindow::refresh() setStatus(tr("No workspace detected.")); enableActions(false); getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); - getWorkspace().getDirModel().removeRows(0, getWorkspace().getFileModel().rowCount()); + getWorkspace().getTreeModel().removeRows(0, getWorkspace().getFileModel().rowCount()); setWindowTitle(title); return false; } @@ -600,7 +600,7 @@ bool MainWindow::refresh() setStatus(tr("Old repository schema detected. Consider running 'fossil rebuild'")); enableActions(false); getWorkspace().getFileModel().removeRows(0, getWorkspace().getFileModel().rowCount()); - getWorkspace().getDirModel().removeRows(0, getWorkspace().getFileModel().rowCount()); + getWorkspace().getTreeModel().removeRows(0, getWorkspace().getFileModel().rowCount()); setWindowTitle(title); return true; } @@ -691,13 +691,13 @@ static void addPathToTree(QStandardItem &root, const QString &path, const QIcon void MainWindow::updateWorkspaceView() { // Clear content except headers - getWorkspace().getDirModel().removeRows(0, getWorkspace().getDirModel().rowCount()); + getWorkspace().getTreeModel().removeRows(0, getWorkspace().getTreeModel().rowCount()); QStandardItem *workspace = new QStandardItem(getInternalIcon(":icons/icons/Folder-01.png"), tr("Files") ); workspace->setData(WorkspaceItem(WorkspaceItem::TYPE_WORKSPACE, ""), ROLE_WORKSPACE_ITEM); workspace->setEditable(false); - getWorkspace().getDirModel().appendRow(workspace); + getWorkspace().getTreeModel().appendRow(workspace); if(viewMode == VIEWMODE_TREE) { for(stringset_t::iterator it = getWorkspace().getPaths().begin(); it!=getWorkspace().getPaths().end(); ++it) @@ -714,7 +714,7 @@ void MainWindow::updateWorkspaceView() QStandardItem *branches = new QStandardItem(getInternalIcon(":icons/icons/Document Organization Chart-01.png"), "Branches"); branches->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCHES, ""), ROLE_WORKSPACE_ITEM); branches->setEditable(false); - getWorkspace().getDirModel().appendRow(branches); + getWorkspace().getTreeModel().appendRow(branches); foreach(const QString &branch_name, getWorkspace().getBranches()) { QStandardItem *branch = new QStandardItem(getInternalIcon(":icons/icons/Document Organization Chart-01.png"), branch_name); @@ -734,7 +734,7 @@ void MainWindow::updateWorkspaceView() QStandardItem *tags = new QStandardItem(getInternalIcon(":icons/icons/Book-01.png"), "Tags"); tags->setData(WorkspaceItem(WorkspaceItem::TYPE_TAGS, ""), ROLE_WORKSPACE_ITEM); tags->setEditable(false); - getWorkspace().getDirModel().appendRow(tags); + getWorkspace().getTreeModel().appendRow(tags); for(QStringMap::const_iterator it=getWorkspace().getTags().begin(); it!=getWorkspace().getTags().end(); ++it) { const QString &tag_name = it.key(); @@ -757,7 +757,7 @@ void MainWindow::updateWorkspaceView() QStandardItem *stashes = new QStandardItem(getInternalIcon(":icons/icons/My Documents-01.png"), "Stashes"); stashes->setData(WorkspaceItem(WorkspaceItem::TYPE_STASHES, ""), ROLE_WORKSPACE_ITEM); stashes->setEditable(false); - getWorkspace().getDirModel().appendRow(stashes); + getWorkspace().getTreeModel().appendRow(stashes); for(stashmap_t::const_iterator it= getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) { QStandardItem *stash = new QStandardItem(getInternalIcon(":icons/icons/My Documents-01.png"), it.key()); @@ -2097,7 +2097,7 @@ void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &) // Get first selected item const QModelIndex &mi = indices.first(); - QVariant data = getWorkspace().getDirModel().data(mi, ROLE_WORKSPACE_ITEM); + QVariant data = getWorkspace().getTreeModel().data(mi, ROLE_WORKSPACE_ITEM); Q_ASSERT(data.isValid()); WorkspaceItem tv = data.value(); diff --git a/src/Workspace.h b/src/Workspace.h index e7db2eb..68dfa2c 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -99,6 +99,10 @@ private: typedef QSet stringset_t; +////////////////////////////////////////////////////////////////////////// +// Workspace +////////////////////////////////////////////////////////////////////////// + class Workspace { public: @@ -116,7 +120,7 @@ public: void scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModified, bool scanUnchanged, const QString &ignoreGlob, UICallback &uiCallback, bool &operationAborted); QStandardItemModel &getFileModel() { return repoFileModel; } - QStandardItemModel &getDirModel() { return repoDirModel; } + QStandardItemModel &getTreeModel() { return repoTreeModel; } filemap_t &getFiles() { return workspaceFiles; } stringset_t &getPaths() { return pathSet; } @@ -135,7 +139,7 @@ private: bool isIntegrated; QStandardItemModel repoFileModel; - QStandardItemModel repoDirModel; + QStandardItemModel repoTreeModel; }; #endif // WORKSPACE_H From d63f9637797f68d84172138909f3d5b77e1f5510 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 17 May 2015 11:19:18 +0000 Subject: [PATCH 77/90] Separated View->File List checked menu option into two separate mutually exclusive options FossilOrigin-Name: 502ce5e1b68dd97da3b9a779e5683d2f1ddcb61c --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/MainWindow.cpp | 19 +++++++++++++++---- src/MainWindow.h | 1 + ui/MainWindow.ui | 15 +++++++++++++++ 5 files changed, 40 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 557946e..1821ca5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\sDirModel\sto\sTreeModel -D 2015-05-17T10:13:46.499 +C Separated\sView->File\sList\schecked\smenu\soption\sinto\stwo\sseparate\smutually\sexclusive\soptions +D 2015-05-17T11:19:18.730 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp ec6143d24b4a0be026fb46ed65cf02ee04086417 -F src/MainWindow.h 7a2ac41cdd205acccd64a5314f25621ecb616288 +F src/MainWindow.cpp 5b69ea329562ebcd311a674185d4ec42e7cee713 +F src/MainWindow.h f2141839cccb3941df9ed7288588f2de3a5c8179 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba @@ -219,10 +219,10 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 +F ui/MainWindow.ui a35d624f5643b56d0c6f13c4b3eb30bd2d77206c F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 37e191368a0f6880991fd27fb08ebf1144f6626f -R fdbfaaf7e049e20aebbeead5bf6d1135 +P b49ff56d2af6aca465d8b2ce3b5a9455341e7a1c +R ce5353eef0ea32df84e4f1e586546ba7 U kostas -Z 25c2de0408c1af282fd060662d16444f +Z 5aa327a30bd3d5e5ed1705c3ba145211 diff --git a/manifest.uuid b/manifest.uuid index 44c2b8b..20253b8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b49ff56d2af6aca465d8b2ce3b5a9455341e7a1c \ No newline at end of file +502ce5e1b68dd97da3b9a779e5683d2f1ddcb61c \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 1b94797..00dfc9b 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -965,6 +965,7 @@ void MainWindow::applySettings() if(store->contains("ViewAsList")) { ui->actionViewAsList->setChecked(store->value("ViewAsList").toBool()); + ui->actionViewAsFolders->setChecked(!store->value("ViewAsList").toBool()); viewMode = store->value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE; } //ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); @@ -1641,10 +1642,18 @@ void MainWindow::on_actionViewIgnored_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionViewAsList_triggered() { - viewMode = ui->actionViewAsList->isChecked() ? VIEWMODE_LIST : VIEWMODE_TREE; -#if 0 - ui->workspaceTreeView->setVisible(viewMode == VIEWMODE_TREE); -#endif + ui->actionViewAsFolders->setChecked(!ui->actionViewAsList->isChecked()); + viewMode = ui->actionViewAsList->isChecked() ? VIEWMODE_LIST : VIEWMODE_TREE; + + updateWorkspaceView(); + updateFileView(); +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionViewAsFolders_triggered() +{ + ui->actionViewAsList->setChecked(!ui->actionViewAsFolders->isChecked()); + viewMode = ui->actionViewAsList->isChecked() ? VIEWMODE_LIST : VIEWMODE_TREE; updateWorkspaceView(); updateFileView(); } @@ -2398,3 +2407,5 @@ void MainWindow::onSearch() searchBox->selectAll(); searchBox->setFocus(); } + + diff --git a/src/MainWindow.h b/src/MainWindow.h index b3b1c72..66e6bf0 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -105,6 +105,7 @@ private slots: void on_actionViewUnknown_triggered(); void on_actionViewIgnored_triggered(); void on_actionViewAsList_triggered(); + void on_actionViewAsFolders_triggered(); void on_actionOpenFolder_triggered(); void on_actionRenameFolder_triggered(); void on_actionNewRepository_triggered(); diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index e53e724..61f80f5 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -259,6 +259,7 @@ + @@ -934,6 +935,20 @@ Merge Branch + + + true + + + Files and F&olders + + + View files and folders + + + View the workspace as files and folders + + From 73e230db6a14fb9ef8f876404336c9f362ae624f Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 17 May 2015 16:43:55 +0000 Subject: [PATCH 78/90] Maintain the workspace state even when refreshing FossilOrigin-Name: 0eef20c8eb990a24b214a25b630b2786fee010d7 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/MainWindow.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- src/Utils.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/Utils.h | 8 ++++++++ 5 files changed, 98 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 1821ca5..604f63e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Separated\sView->File\sList\schecked\smenu\soption\sinto\stwo\sseparate\smutually\sexclusive\soptions -D 2015-05-17T11:19:18.730 +C Maintain\sthe\sworkspace\sstate\seven\swhen\srefreshing +D 2015-05-17T16:43:55.245 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,7 +200,7 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 5b69ea329562ebcd311a674185d4ec42e7cee713 +F src/MainWindow.cpp a354f84278c1a59c385eaff73c3c8cea6cab6f0b F src/MainWindow.h f2141839cccb3941df9ed7288588f2de3a5c8179 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -208,8 +208,8 @@ F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba F src/SearchBox.h 0c78d3a68136dab3e0e71b83ae36f22bd2688ab2 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 -F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b +F src/Utils.cpp f61a53fb79d47ecb714833805106f4956746faaa +F src/Utils.h 213decaa09151cb7397207e3ea2dde70b994b6a0 F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 F src/Workspace.h d6649a3ae1cd0fbad55237030313e85530417271 F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0 @@ -222,7 +222,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui a35d624f5643b56d0c6f13c4b3eb30bd2d77206c F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P b49ff56d2af6aca465d8b2ce3b5a9455341e7a1c -R ce5353eef0ea32df84e4f1e586546ba7 +P 502ce5e1b68dd97da3b9a779e5683d2f1ddcb61c +R 02b904e8c4daad9d4def2ef7d9cea429 U kostas -Z 5aa327a30bd3d5e5ed1705c3ba145211 +Z d1ccd1d3dcbc5bb7805478bf9b9cb4e5 diff --git a/manifest.uuid b/manifest.uuid index 20253b8..f57960f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -502ce5e1b68dd97da3b9a779e5683d2f1ddcb61c \ No newline at end of file +0eef20c8eb990a24b214a25b630b2786fee010d7 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 00dfc9b..52f50dd 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -690,6 +690,24 @@ static void addPathToTree(QStandardItem &root, const QString &path, const QIcon //------------------------------------------------------------------------------ void MainWindow::updateWorkspaceView() { + // Record expanded tree-node names, and selection + name_modelindex_map_t name_map; + BuildNameToModelIndex(name_map, getWorkspace().getTreeModel()); + stringset_t expanded_items; + stringset_t selected_items; + + const QItemSelection selection = ui->workspaceTreeView->selectionModel()->selection(); + + for(name_modelindex_map_t::const_iterator it=name_map.begin(); it!=name_map.end(); ++it) + { + const QModelIndex mi = it.value(); + if(ui->workspaceTreeView->isExpanded(mi)) + expanded_items.insert(it.key()); + + if(selection.contains(mi)) + selected_items.insert(it.key()); + } + // Clear content except headers getWorkspace().getTreeModel().removeRows(0, getWorkspace().getTreeModel().rowCount()); @@ -708,6 +726,9 @@ void MainWindow::updateWorkspaceView() addPathToTree(*workspace, dir, getInternalIcon(":icons/icons/Folder-01.png")); } + + // Expand root folder + ui->workspaceTreeView->setExpanded(workspace->index(), true); } // Branches @@ -778,8 +799,28 @@ void MainWindow::updateWorkspaceView() settings->setEditable(false); getWorkspace().getDirModel().appendRow(settings); #endif - ui->workspaceTreeView->expandToDepth(0); - //ui->workspaceTreeView->sortByColumn(0, Qt::AscendingOrder); + + // Expand previously selected nodes + name_map.clear(); + BuildNameToModelIndex(name_map, getWorkspace().getTreeModel()); + + for(stringset_t::const_iterator it=expanded_items.begin(); it!=expanded_items.end(); ++it) + { + name_modelindex_map_t::const_iterator mi_it = name_map.find(*it); + if(mi_it!=name_map.end()) + ui->workspaceTreeView->setExpanded(mi_it.value(), true); + } + + // Select previous selected item + for(stringset_t::const_iterator it=selected_items.begin(); it!=selected_items.end(); ++it) + { + name_modelindex_map_t::const_iterator mi_it = name_map.find(*it); + if(mi_it!=name_map.end()) + { + const QModelIndex &mi = mi_it.value(); + ui->workspaceTreeView->selectionModel()->select(mi, QItemSelectionModel::Select); + } + } } //------------------------------------------------------------------------------ diff --git a/src/Utils.cpp b/src/Utils.cpp index 9c89d50..ceca906 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -329,3 +329,41 @@ void ParseProperties(QStringMap &properties, const QStringList &lines, QChar sep } } + +//------------------------------------------------------------------------------ +void GetStandardItemTextRecursive(QString &name, const QStandardItem &item, const QChar &separator) +{ + if(item.parent()) + { + GetStandardItemTextRecursive(name, *item.parent()); + name.append(separator); + } + + name.append(item.data(Qt::DisplayRole).toString()); +} + +//------------------------------------------------------------------------------ +void BuildNameToModelIndex(name_modelindex_map_t &map, const QStandardItem &item) +{ + QString name; + GetStandardItemTextRecursive(name, item); + map.insert(name, item.index()); + + for(int i=0; i #include #include +#include #define COUNTOF(array) (sizeof(array)/sizeof(array[0])) #define FOSSIL_CHECKOUT1 "_FOSSIL_" @@ -15,6 +16,13 @@ QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, c QString QuotePath(const QString &path); QStringList QuotePaths(const QStringList &paths); + +typedef QMap name_modelindex_map_t; +void GetStandardItemTextRecursive(QString &name, const QStandardItem &item, const QChar &separator='/'); +void BuildNameToModelIndex(name_modelindex_map_t &map, const QStandardItem &item); +void BuildNameToModelIndex(name_modelindex_map_t &map, const QStandardItemModel &model); + + typedef QMap QStringMap; void ParseProperties(QStringMap &properties, const QStringList &lines, QChar separator=' '); From 6a67423d31c246dfe496b9243d2c2b1b7463f97b Mon Sep 17 00:00:00 2001 From: kostas Date: Fri, 22 May 2015 20:18:08 +0000 Subject: [PATCH 79/90] - App now uses aliases instead of icon filenames - Removed unused actionViewStash FossilOrigin-Name: 999f57bd1e05e99c67a921c09f782da170ae827c --- manifest | 20 +-- manifest.uuid | 2 +- rsrc/resources.qrc | 325 ++++++++++++++++++++++--------------------- src/MainWindow.cpp | 40 +++--- ui/BrowserWidget.ui | 19 ++- ui/MainWindow.ui | 85 +++++------ ui/SettingsDialog.ui | 12 +- 7 files changed, 247 insertions(+), 256 deletions(-) diff --git a/manifest b/manifest index 604f63e..699eec1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Maintain\sthe\sworkspace\sstate\seven\swhen\srefreshing -D 2015-05-17T16:43:55.245 +C -\sApp\snow\suses\saliases\sinstead\sof\sicon\sfilenames\n-\sRemoved\sunused\sactionViewStash\n\n\n\n +D 2015-05-22T20:18:08.661 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -183,7 +183,7 @@ F rsrc/icons/Zoom-01.png 67ca532922e9166325c5c75fce1ca3fbb0d2b6a6 F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 -F rsrc/resources.qrc 4098be128fd6c045db933d041fe8844b14643a6f +F rsrc/resources.qrc 3864cdcf37e8e746380d33988efacd5c95c6e384 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 @@ -200,7 +200,7 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp a354f84278c1a59c385eaff73c3c8cea6cab6f0b +F src/MainWindow.cpp 0c4e30a60fe3a0ab882495fc79172993e34b2a22 F src/MainWindow.h f2141839cccb3941df9ed7288588f2de3a5c8179 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -215,14 +215,14 @@ F src/Workspace.h d6649a3ae1cd0fbad55237030313e85530417271 F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0 F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x -F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d +F ui/BrowserWidget.ui 994ad9ea0e9f5815d6b1a27acc2f6f39164c507f F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui a35d624f5643b56d0c6f13c4b3eb30bd2d77206c +F ui/MainWindow.ui 7f11c2ca1c3e371c71db27ae0fe6ad3758e6b5e1 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd -F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 502ce5e1b68dd97da3b9a779e5683d2f1ddcb61c -R 02b904e8c4daad9d4def2ef7d9cea429 +F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db +P 0eef20c8eb990a24b214a25b630b2786fee010d7 +R 21435a9740da4d31c0bef8b2f954d654 U kostas -Z d1ccd1d3dcbc5bb7805478bf9b9cb4e5 +Z e16a627a5e5c7286e58debb37a03c1db diff --git a/manifest.uuid b/manifest.uuid index f57960f..62f8a5d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0eef20c8eb990a24b214a25b630b2786fee010d7 \ No newline at end of file +999f57bd1e05e99c67a921c09f782da170ae827c \ No newline at end of file diff --git a/rsrc/resources.qrc b/rsrc/resources.qrc index 8c17330..b0ea5fe 100644 --- a/rsrc/resources.qrc +++ b/rsrc/resources.qrc @@ -1,163 +1,166 @@ - - icons/Address Book-01.png - icons/Adobe Illustrator CS3 Document-01.png - icons/Adobe PDF Document-01.png - icons/Adobe Photoshop CS3 Document-01.png - icons/Battery-01.png - icons/Binoculars-01.png - icons/Book-01.png - icons/Briefcase-01.png - icons/Button Add-01.png - icons/Button Blank Blue-01.png - icons/Button Blank Gray-01.png - icons/Button Blank Green-01.png - icons/Button Blank Red-01.png - icons/Button Blank Yellow-01.png - icons/Button Cancel-01.png - icons/Button Close-01.png - icons/Button Delete-01.png - icons/Button Download-01.png - icons/Button Favorite-01.png - icons/Button Forward-01.png - icons/Button Help-01.png - icons/Button Info-01.png - icons/Button Log Off-01.png - icons/Button Next-01.png - icons/Button Pause-01.png - icons/Button Play-01.png - icons/Button Previous-01.png - icons/Button Refresh-01.png - icons/Button Reload-01.png - icons/Button Reminder-01.png - icons/Button Rewind-01.png - icons/Button Talk Balloon-01.png - icons/Button Turn Off-01.png - icons/Button Turn On-01.png - icons/Button Upload-01.png - icons/Button Warning-01.png - icons/Calculator-01.png - icons/Calendar Blue-01.png - icons/Calendar Green-01.png - icons/Calendar Red-01.png - icons/Clipboard-01.png - icons/Clipboard Paste-01.png - icons/Clock-01.png - icons/Coin-01.png - icons/Compressed File RAR-01.png - icons/Compressed File SIT-01.png - icons/Compressed File Zip-01.png - icons/Computer Monitor-01.png - icons/Computer Network-01.png - icons/Document-01.png - icons/Document Attach-01.png - icons/Document Blank-01.png - icons/Document Chart-01.png - icons/Document Copy-01.png - icons/Document Flow Chart-01.png - icons/Document Gant Chart-01.png - icons/Document Help-01.png - icons/Document Line Chart-01.png - icons/Document Microsoft Excel-01.png - icons/Document Microsoft PowerPoint-01.png - icons/Document Microsoft Word-01.png - icons/Document Organization Chart-01.png - icons/Document Preview-01.png - icons/Document-Revert-icon.png - icons/Document Text-01.png - icons/Edit Document-01.png - icons/Email-01.png - icons/Email Attachment-01.png - icons/Email Delete-01.png - icons/Email Download-01.png - icons/Email Forward-01.png - icons/Email Inbox-01.png - icons/Email Reply-01.png - icons/File Audio-01.png - icons/File Audio AIFF-01.png - icons/File Audio MP3-01.png - icons/File Audio WAV-01.png - icons/File Audio WMA-01.png - icons/File Delete-01.png - icons/File History-01.png - icons/File New-01.png - icons/File Open-01.png - icons/File Video 3GP-01.png - icons/File Video-01.png - icons/File Video AVI-01.png - icons/File Video MOV-01.png - icons/File Video MPEG-01.png - icons/File Video WMV-01.png - icons/Folder-01.png - icons/Folder Add-01.png - icons/Folder Compressed-01.png - icons/Folder Delete-01.png - icons/Folder Explorer-01.png - icons/Folder Generic Blue-01.png - icons/Folder Generic Green-01.png - icons/Folder Generic Red-01.png - icons/Folder Generic Silver-01.png - icons/Folder Open-01.png - icons/Folder RAR-01.png - icons/Games-01.png - icons/Gear-01.png - icons/Highlighter Blue-01.png - icons/Highlighter Green-01.png - icons/Highlighter Yellow-01.png - icons/Image BMP-01.png - icons/Image GIF-01.png - icons/Image JPEG-01.png - icons/Image PNG-01.png - icons/Image TIFF-01.png - icons/Lock Lock-01.png - icons/Lock Unlock-01.png - icons/My Documents-01.png - icons/My Ebooks-01.png - icons/My Music-01.png - icons/My Pictures.png - icons/My Videos-01.png - icons/My Websites-01.png - icons/Network Firewall-01.png - icons/Network MAC-01.png - icons/Network PC-01.png - icons/Network Refresh-01.png - icons/Pen Blue-01.png - icons/Pen Green-01.png - icons/Pen Red-01.png - icons/Save-01.png - icons/Text Edit.png - icons/USB-01.png - icons/User Administrator Blue-01.png - icons/User Administrator Green-01.png - icons/User Administrator Red-01.png - icons/User Chat-01.png - icons/User Clients-01.png - icons/User Coat Blue-01.png - icons/User Coat Green-01.png - icons/User Coat Red-01.png - icons/User Executive Blue-01.png - icons/User Executive Green-01.png - icons/User Executive Red-01.png - icons/User Group-01.png - icons/User Preppy Blue-01.png - icons/User Preppy Green-01.png - icons/User Preppy Red-01.png - icons/Web HTML-01.png - icons/Web XML-01.png - icons/Window-01.png - icons/Window Refresh-01.png - icons/Windows-01.png - icons/Windows Cascade-01.png - icons/Zoom-01.png - icons/Zoom In-01.png - icons/Zoom Out-01.png - - - intl/el_GR.qm - intl/de_DE.qm - intl/es_ES.qm - intl/fr_FR.qm - intl/ru_RU.qm - intl/pt_PT.qm - + + icons/Address Book-01.png + icons/Adobe Illustrator CS3 Document-01.png + icons/Adobe PDF Document-01.png + icons/Adobe Photoshop CS3 Document-01.png + icons/Battery-01.png + icons/Binoculars-01.png + icons/Book-01.png + icons/Briefcase-01.png + icons/Button Add-01.png + icons/Button Blank Blue-01.png + icons/Button Blank Gray-01.png + icons/Button Blank Green-01.png + icons/Button Blank Red-01.png + icons/Button Blank Yellow-01.png + icons/Button Cancel-01.png + icons/Button Close-01.png + icons/Button Close-01.png + icons/Button Close-01.png + icons/Button Delete-01.png + icons/Button Download-01.png + icons/Button Favorite-01.png + icons/Button Forward-01.png + icons/Button Help-01.png + icons/Button Info-01.png + icons/Button Log Off-01.png + icons/Button Next-01.png + icons/Button Pause-01.png + icons/Button Play-01.png + icons/Button Previous-01.png + icons/Button Refresh-01.png + icons/Button Reload-01.png + icons/Button Reload-01.png + icons/Button Reminder-01.png + icons/Button Rewind-01.png + icons/Button Talk Balloon-01.png + icons/Button Turn Off-01.png + icons/Button Turn On-01.png + icons/Button Upload-01.png + icons/Button Warning-01.png + icons/Calculator-01.png + icons/Calendar Blue-01.png + icons/Calendar Green-01.png + icons/Calendar Red-01.png + icons/Clipboard-01.png + icons/Clipboard Paste-01.png + icons/Clock-01.png + icons/Coin-01.png + icons/Compressed File RAR-01.png + icons/Compressed File SIT-01.png + icons/Compressed File Zip-01.png + icons/Computer Monitor-01.png + icons/Computer Network-01.png + icons/Document-01.png + icons/Document Attach-01.png + icons/Document Blank-01.png + icons/Document Chart-01.png + icons/Document Copy-01.png + icons/Document Flow Chart-01.png + icons/Document Gant Chart-01.png + icons/Document Help-01.png + icons/Document Line Chart-01.png + icons/Document Microsoft Excel-01.png + icons/Document Microsoft PowerPoint-01.png + icons/Document Microsoft Word-01.png + icons/Document Organization Chart-01.png + icons/Document Preview-01.png + icons/Document-Revert-icon.png + icons/Document Text-01.png + icons/Edit Document-01.png + icons/Email-01.png + icons/Email Attachment-01.png + icons/Email Delete-01.png + icons/Email Download-01.png + icons/Email Forward-01.png + icons/Email Inbox-01.png + icons/Email Reply-01.png + icons/File Audio-01.png + icons/File Audio AIFF-01.png + icons/File Audio MP3-01.png + icons/File Audio WAV-01.png + icons/File Audio WMA-01.png + icons/File Delete-01.png + icons/File History-01.png + icons/File New-01.png + icons/File Open-01.png + icons/File Video 3GP-01.png + icons/File Video-01.png + icons/File Video AVI-01.png + icons/File Video MOV-01.png + icons/File Video MPEG-01.png + icons/File Video WMV-01.png + icons/Folder-01.png + icons/Folder Add-01.png + icons/Folder Compressed-01.png + icons/Folder Delete-01.png + icons/Folder Explorer-01.png + icons/Folder Generic Blue-01.png + icons/Folder Generic Green-01.png + icons/Folder Generic Red-01.png + icons/Folder Generic Silver-01.png + icons/Folder Open-01.png + icons/Folder RAR-01.png + icons/Games-01.png + icons/Gear-01.png + icons/Highlighter Blue-01.png + icons/Highlighter Green-01.png + icons/Highlighter Yellow-01.png + icons/Image BMP-01.png + icons/Image GIF-01.png + icons/Image JPEG-01.png + icons/Image PNG-01.png + icons/Image TIFF-01.png + icons/Lock Lock-01.png + icons/Lock Unlock-01.png + icons/My Documents-01.png + icons/My Ebooks-01.png + icons/My Music-01.png + icons/My Pictures.png + icons/My Videos-01.png + icons/My Websites-01.png + icons/Network Firewall-01.png + icons/Network MAC-01.png + icons/Network PC-01.png + icons/Network Refresh-01.png + icons/Pen Blue-01.png + icons/Pen Green-01.png + icons/Pen Red-01.png + icons/Save-01.png + icons/Text Edit.png + icons/USB-01.png + icons/User Administrator Blue-01.png + icons/User Administrator Green-01.png + icons/User Administrator Red-01.png + icons/User Chat-01.png + icons/User Clients-01.png + icons/User Coat Blue-01.png + icons/User Coat Green-01.png + icons/User Coat Red-01.png + icons/User Executive Blue-01.png + icons/User Executive Green-01.png + icons/User Executive Red-01.png + icons/User Group-01.png + icons/User Preppy Blue-01.png + icons/User Preppy Green-01.png + icons/User Preppy Red-01.png + icons/Web HTML-01.png + icons/Web XML-01.png + icons/Window-01.png + icons/Window Refresh-01.png + icons/Windows-01.png + icons/Windows Cascade-01.png + icons/Zoom-01.png + icons/Zoom In-01.png + icons/Zoom Out-01.png + + + intl/el_GR.qm + intl/de_DE.qm + intl/es_ES.qm + intl/fr_FR.qm + intl/ru_RU.qm + intl/pt_PT.qm + diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 52f50dd..3607ae8 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -711,7 +711,7 @@ void MainWindow::updateWorkspaceView() // Clear content except headers getWorkspace().getTreeModel().removeRows(0, getWorkspace().getTreeModel().rowCount()); - QStandardItem *workspace = new QStandardItem(getInternalIcon(":icons/icons/Folder-01.png"), tr("Files") ); + QStandardItem *workspace = new QStandardItem(getInternalIcon(":icons/icon-item-folder"), tr("Files") ); workspace->setData(WorkspaceItem(WorkspaceItem::TYPE_WORKSPACE, ""), ROLE_WORKSPACE_ITEM); workspace->setEditable(false); @@ -724,7 +724,7 @@ void MainWindow::updateWorkspaceView() if(dir.isEmpty()) continue; - addPathToTree(*workspace, dir, getInternalIcon(":icons/icons/Folder-01.png")); + addPathToTree(*workspace, dir, getInternalIcon(":icons/icon-item-folder")); } // Expand root folder @@ -732,13 +732,13 @@ void MainWindow::updateWorkspaceView() } // Branches - QStandardItem *branches = new QStandardItem(getInternalIcon(":icons/icons/Document Organization Chart-01.png"), "Branches"); + QStandardItem *branches = new QStandardItem(getInternalIcon(":icons/icon-item-branch"), "Branches"); branches->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCHES, ""), ROLE_WORKSPACE_ITEM); branches->setEditable(false); getWorkspace().getTreeModel().appendRow(branches); foreach(const QString &branch_name, getWorkspace().getBranches()) { - QStandardItem *branch = new QStandardItem(getInternalIcon(":icons/icons/Document Organization Chart-01.png"), branch_name); + QStandardItem *branch = new QStandardItem(getInternalIcon(":icons/icon-item-branch"), branch_name); branch->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCH, branch_name), ROLE_WORKSPACE_ITEM); bool active = fossil().getCurrentTags().contains(branch_name); @@ -752,7 +752,7 @@ void MainWindow::updateWorkspaceView() } // Tags - QStandardItem *tags = new QStandardItem(getInternalIcon(":icons/icons/Book-01.png"), "Tags"); + QStandardItem *tags = new QStandardItem(getInternalIcon(":icons/icon-item-tag"), "Tags"); tags->setData(WorkspaceItem(WorkspaceItem::TYPE_TAGS, ""), ROLE_WORKSPACE_ITEM); tags->setEditable(false); getWorkspace().getTreeModel().appendRow(tags); @@ -761,7 +761,7 @@ void MainWindow::updateWorkspaceView() const QString &tag_name = it.key(); - QStandardItem *tag = new QStandardItem(getInternalIcon(":icons/icons/Book-01.png"), tag_name); + QStandardItem *tag = new QStandardItem(getInternalIcon(":icons/icon-item-tag"), tag_name); tag->setData(WorkspaceItem(WorkspaceItem::TYPE_TAG, tag_name), ROLE_WORKSPACE_ITEM); bool active = fossil().getCurrentTags().contains(tag_name); @@ -774,27 +774,28 @@ void MainWindow::updateWorkspaceView() tags->appendRow(tag); } + // FIXME: Unique Icon name // Stashes - QStandardItem *stashes = new QStandardItem(getInternalIcon(":icons/icons/My Documents-01.png"), "Stashes"); + QStandardItem *stashes = new QStandardItem(getInternalIcon(":icons/icon-action-repo-open"), "Stashes"); stashes->setData(WorkspaceItem(WorkspaceItem::TYPE_STASHES, ""), ROLE_WORKSPACE_ITEM); stashes->setEditable(false); getWorkspace().getTreeModel().appendRow(stashes); for(stashmap_t::const_iterator it= getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) { - QStandardItem *stash = new QStandardItem(getInternalIcon(":icons/icons/My Documents-01.png"), it.key()); + QStandardItem *stash = new QStandardItem(getInternalIcon(":icons/icon-action-repo-open"), it.key()); stash->setData(WorkspaceItem(WorkspaceItem::TYPE_STASH, it.value()), ROLE_WORKSPACE_ITEM); stashes->appendRow(stash); } #if 0 // Unimplemented for now // Remotes - QStandardItem *remotes = new QStandardItem(getInternalIcon(":icons/icons/Network PC-01.png"), "Remotes"); + QStandardItem *remotes = new QStandardItem(getInternalIcon(":icons/icon-item-remote"), "Remotes"); remotes->setData(WorkspaceItem(WorkspaceItem::TYPE_REMOTES, ""), ROLE_WORKSPACE_ITEM); remotes->setEditable(false); getWorkspace().getDirModel().appendRow(remotes); // Settings - QStandardItem *settings = new QStandardItem(getInternalIcon(":icons/icons/Gear-01.png"), "Settings"); + QStandardItem *settings = new QStandardItem(getInternalIcon(":icons/icon-action-settings"), "Settings"); settings->setData(WorkspaceItem(WorkspaceItem::TYPE_SETTINGS, ""), ROLE_WORKSPACE_ITEM); settings->setEditable(false); getWorkspace().getDirModel().appendRow(settings); @@ -832,14 +833,14 @@ void MainWindow::updateFileView() struct { WorkspaceFile::Type type; QString text; const char *icon; } stats[] = { - { WorkspaceFile::TYPE_EDITTED, tr("Edited"), ":icons/icons/Button Blank Yellow-01.png" }, - { WorkspaceFile::TYPE_UNCHANGED, tr("Unchanged"), ":icons/icons/Button Blank Green-01.png" }, - { WorkspaceFile::TYPE_ADDED, tr("Added"), ":icons/icons/Button Add-01.png" }, - { WorkspaceFile::TYPE_DELETED, tr("Deleted"), ":icons/icons/Button Close-01.png" }, - { WorkspaceFile::TYPE_RENAMED, tr("Renamed"), ":icons/icons/Button Reload-01.png" }, - { WorkspaceFile::TYPE_MISSING, tr("Missing"), ":icons/icons/Button Help-01.png" }, - { WorkspaceFile::TYPE_CONFLICTED, tr("Conflicted"), ":icons/icons/Button Blank Red-01.png" }, - { WorkspaceFile::TYPE_MERGED, tr("Merged"), ":icons/icons/Button Blank Yellow-01.png" }, + { WorkspaceFile::TYPE_EDITTED, tr("Edited"), ":icons/icon-item-edited" }, + { WorkspaceFile::TYPE_UNCHANGED, tr("Unchanged"), ":icons/icon-item-unchanged" }, + { WorkspaceFile::TYPE_ADDED, tr("Added"), ":icons/icon-item-added" }, + { WorkspaceFile::TYPE_DELETED, tr("Deleted"), ":icons/icon-item-deleted" }, + { WorkspaceFile::TYPE_RENAMED, tr("Renamed"), ":icons/icon-item-renamed" }, + { WorkspaceFile::TYPE_MISSING, tr("Missing"), ":icons/icon-item-missing" }, + { WorkspaceFile::TYPE_CONFLICTED, tr("Conflicted"), ":icons/icon-item-conflicted" }, + { WorkspaceFile::TYPE_MERGED, tr("Merged"), ":icons/icon-item-edited" }, }; bool display_path = viewMode==VIEWMODE_LIST || selectedDirs.count() > 1; @@ -865,7 +866,7 @@ void MainWindow::updateFileView() // Status Column const QString *status_text = &status_unknown; - const char *status_icon_path= ":icons/icons/Button Blank Gray-01.png"; // Default icon + const char *status_icon_path= ":icons/icon-item-unknown"; // Default icon for(size_t t=0; tsetValue("ViewUnchanged", ui->actionViewUnchanged->isChecked()); store->setValue("ViewIgnored", ui->actionViewIgnored->isChecked()); store->setValue("ViewAsList", ui->actionViewAsList->isChecked()); - store->setValue("ViewStash", ui->actionViewStash->isChecked()); } //------------------------------------------------------------------------------ diff --git a/ui/BrowserWidget.ui b/ui/BrowserWidget.ui index c651f9f..6ef556c 100644 --- a/ui/BrowserWidget.ui +++ b/ui/BrowserWidget.ui @@ -14,7 +14,16 @@ 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -44,7 +53,7 @@ - :/icons/icons/Button Previous-01.png:/icons/icons/Button Previous-01.png + :/icons/icon-action-previous:/icons/icon-action-previous Back @@ -56,7 +65,7 @@ - :/icons/icons/Button Next-01.png:/icons/icons/Button Next-01.png + :/icons/icon-action-next:/icons/icon-action-next Forward @@ -68,7 +77,7 @@ - :/icons/icons/Button Refresh-01.png:/icons/icons/Button Refresh-01.png + :/icons/icon-action-refresh:/icons/icon-action-refresh Refresh @@ -80,7 +89,7 @@ - :/icons/icons/Button Close-01.png:/icons/icons/Button Close-01.png + :/icons/icon-action-stop:/icons/icon-action-stop Stop diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 61f80f5..14f6590 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -18,7 +18,7 @@ - :/icons/icons/Battery-01.png:/icons/icons/Battery-01.png + :/icons/icon-application:/icons/icon-application true @@ -318,7 +318,7 @@ - :/icons/icons/Button Refresh-01.png:/icons/icons/Button Refresh-01.png + :/icons/icon-action-refresh:/icons/icon-action-refresh Refresh @@ -336,7 +336,7 @@ - :/icons/icons/Save-01.png:/icons/icons/Save-01.png + :/icons/icon-action-commit:/icons/icon-action-commit Commit @@ -354,7 +354,7 @@ - :/icons/icons/Document Copy-01.png:/icons/icons/Document Copy-01.png + :/icons/icon-item-diff:/icons/icon-item-diff Diff @@ -372,7 +372,7 @@ - :/icons/icons/File New-01.png:/icons/icons/File New-01.png + :/icons/icon-item-add:/icons/icon-item-add Add @@ -390,7 +390,7 @@ - :/icons/icons/File Delete-01.png:/icons/icons/File Delete-01.png + :/icons/icon-item-delete:/icons/icon-item-delete Delete @@ -408,7 +408,7 @@ - :/icons/icons/Document Blank-01.png:/icons/icons/Document Blank-01.png + :/icons/icon-action-repo-new:/icons/icon-action-repo-new &New... @@ -426,7 +426,7 @@ - :/icons/icons/My Documents-01.png:/icons/icons/My Documents-01.png + :/icons/icon-action-repo-open:/icons/icon-action-repo-open &Open... @@ -458,7 +458,7 @@ - :/icons/icons/My Websites-01.png:/icons/icons/My Websites-01.png + :/icons/icon-action-repo-clone:/icons/icon-action-repo-clone C&lone... @@ -470,7 +470,7 @@ - :/icons/icons/Button Upload-01.png:/icons/icons/Button Upload-01.png + :/icons/icon-action-push:/icons/icon-action-push Push @@ -488,7 +488,7 @@ - :/icons/icons/Button Download-01.png:/icons/icons/Button Download-01.png + :/icons/icon-action-pull:/icons/icon-action-pull Pull @@ -506,7 +506,7 @@ - :/icons/icons/File Open-01.png:/icons/icons/File Open-01.png + :/icons/icon-item-rename:/icons/icon-item-rename Rename @@ -524,7 +524,7 @@ - :/icons/icons/Button Turn Off-01.png:/icons/icons/Button Turn Off-01.png + :/icons/icon-action-quit:/icons/icon-action-quit &Quit @@ -545,7 +545,7 @@ - :/icons/icons/File History-01.png:/icons/icons/File History-01.png + :/icons/icon-item-history:/icons/icon-item-history History @@ -566,7 +566,7 @@ - :/icons/icons/Network MAC-01.png:/icons/icons/Network MAC-01.png + :/icons/icon-webview:/icons/icon-webview Fossil UI @@ -581,7 +581,7 @@ - :/icons/icons/Document-Revert-icon.png:/icons/icons/Document-Revert-icon.png + :/icons/icon-item-revert:/icons/icon-item-revert Revert @@ -596,7 +596,7 @@ - :/icons/icons/Text Edit.png:/icons/icons/Text Edit.png + :/icons/icon-clear-log:/icons/icon-clear-log Clear Log @@ -611,7 +611,7 @@ - :/icons/icons/Clock-01.png:/icons/icons/Clock-01.png + :/icons/icon-action-timeline:/icons/icon-action-timeline Timeline @@ -626,7 +626,7 @@ - :/icons/icons/Document-01.png:/icons/icons/Document-01.png + :/icons/icon-item-file:/icons/icon-item-file Open File @@ -644,7 +644,7 @@ - :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png + :/icons/icon-item-folder:/icons/icon-item-folder Open Containing @@ -662,7 +662,7 @@ - :/icons/icons/Button Reload-01.png:/icons/icons/Button Reload-01.png + :/icons/icon-action-undo:/icons/icon-action-undo Undo @@ -680,7 +680,7 @@ - :/icons/icons/Battery-01.png:/icons/icons/Battery-01.png + :/icons/icon-application:/icons/icon-application &About... @@ -695,7 +695,7 @@ - :/icons/icons/Button Play-01.png:/icons/icons/Button Play-01.png + :/icons/icon-action-update:/icons/icon-action-update Update @@ -713,7 +713,7 @@ - :/icons/icons/Gear-01.png:/icons/icons/Gear-01.png + :/icons/icon-action-settings:/icons/icon-action-settings &Preferences... @@ -801,7 +801,7 @@ - :/icons/icons/Folder-01.png:/icons/icons/Folder-01.png + :/icons/icon-item-folder:/icons/icon-item-folder Open Folder @@ -816,7 +816,7 @@ - :/icons/icons/Folder Open-01.png:/icons/icons/Folder Open-01.png + :/icons/icon-action-folder-rename:/icons/icon-action-folder-rename Rename Folder @@ -831,7 +831,7 @@ - :/icons/icons/Folder Add-01.png:/icons/icons/Folder Add-01.png + :/icons/icon-action-stash-new:/icons/icon-action-stash-new Stash changes @@ -843,7 +843,7 @@ - :/icons/icons/Folder Open-01.png:/icons/icons/Folder Open-01.png + :/icons/icon-action-stash-apply:/icons/icon-action-stash-apply Apply Stash @@ -855,27 +855,10 @@ Apply stashed changes - - - true - - - &Stashed Changes - - - View Stashed Changes - - - View Stashed Changes - - - Show the list of stashed changes - - - :/icons/icons/Folder Delete-01.png:/icons/icons/Folder Delete-01.png + :/icons/icon-action-stash-delete:/icons/icon-action-stash-delete Delete Stash @@ -884,7 +867,7 @@ - :/icons/icons/Folder Explorer-01.png:/icons/icons/Folder Explorer-01.png + :/icons/icon-action-stash-diff:/icons/icon-action-stash-diff Diff Stash @@ -893,7 +876,7 @@ - :/icons/icons/Highlighter Yellow-01.png:/icons/icons/Highlighter Yellow-01.png + :/icons/icon-action-tag-new:/icons/icon-action-tag-new New Tag @@ -905,7 +888,7 @@ - :/icons/icons/Button Close-01.png:/icons/icons/Button Close-01.png + :/icons/icon-action-tag-delete:/icons/icon-action-tag-delete Delete Tag @@ -917,7 +900,7 @@ - :/icons/icons/Document Organization Chart-01.png:/icons/icons/Document Organization Chart-01.png + :/icons/icon-item-branch:/icons/icon-item-branch New Branch @@ -929,7 +912,7 @@ - :/icons/icons/Document Flow Chart-01.png:/icons/icons/Document Flow Chart-01.png + :/icons/icon-action-merge:/icons/icon-action-merge Merge Branch diff --git a/ui/SettingsDialog.ui b/ui/SettingsDialog.ui index 0117ecc..1696517 100644 --- a/ui/SettingsDialog.ui +++ b/ui/SettingsDialog.ui @@ -16,6 +16,10 @@ Settings + + + :/icons/icon-application:/icons/icon-application + true @@ -26,10 +30,6 @@ 0 - - - :/icons/icons/Battery-01.png:/icons/icons/Battery-01.png - Application @@ -304,10 +304,6 @@ - - - :/icons/icons/Book-01.png:/icons/icons/Book-01.png - Repository From d07ee31362d4f5555df70a69f8bf32bb005cbe13 Mon Sep 17 00:00:00 2001 From: kostas Date: Sat, 23 May 2015 11:48:50 +0000 Subject: [PATCH 80/90] Initial work on branching during commit Refactored CommitDialog usage FossilOrigin-Name: 4b4c7cdb6d717d381081bbfbd7e9657acf32d089 --- manifest | 20 ++++++++++---------- manifest.uuid | 2 +- src/CommitDialog.cpp | 13 +++++++++++++ src/CommitDialog.h | 6 +++++- src/Fossil.cpp | 13 ++++++++++++- src/Fossil.h | 2 +- src/MainWindow.cpp | 12 ++++++++---- 7 files changed, 50 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index 699eec1..b6c0412 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C -\sApp\snow\suses\saliases\sinstead\sof\sicon\sfilenames\n-\sRemoved\sunused\sactionViewStash\n\n\n\n -D 2015-05-22T20:18:08.661 +C Initial\swork\son\sbranching\sduring\scommit\nRefactored\sCommitDialog\susage +D 2015-05-23T11:48:50.173 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -188,19 +188,19 @@ F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 F src/CloneDialog.h 8813d91f893eb3eb86a4ea5e50f9a53a0ea07047 -F src/CommitDialog.cpp 6d9b8287c26c1f8fbe5b40971d41dc0f7132c4cf -F src/CommitDialog.h 45fa33c4745cbb54b3cd3d56e6341ae84058ce54 +F src/CommitDialog.cpp 32a4860171b9dfe5b0cea15bc534dd56c00b4631 +F src/CommitDialog.h edec8c152e6b40e248c48d8f56e8d8e218e2c2c8 F src/CustomWebView.cpp b7dd0c41977c2cba005df07ed8967ba6f58d07d9 F src/CustomWebView.h fbc8ee55812d1acb3c3b2bc31be7533e8a112822 F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c -F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 +F src/Fossil.cpp 0df84415b9c380b03e7e10f0777f6e92f3fa9584 +F src/Fossil.h 651d2a1c052abe2804f9eff366bf2561dc54f7eb F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 0c4e30a60fe3a0ab882495fc79172993e34b2a22 +F src/MainWindow.cpp 6e8aa088373fc0e501fef144a1cdd94eb0fe2f91 F src/MainWindow.h f2141839cccb3941df9ed7288588f2de3a5c8179 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -222,7 +222,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 7f11c2ca1c3e371c71db27ae0fe6ad3758e6b5e1 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 0eef20c8eb990a24b214a25b630b2786fee010d7 -R 21435a9740da4d31c0bef8b2f954d654 +P 999f57bd1e05e99c67a921c09f782da170ae827c +R d4e513e4fb3bc634010d85fa4326ab7b U kostas -Z e16a627a5e5c7286e58debb37a03c1db +Z d83ca9723da4099dee50cb4eb2941d68 diff --git a/manifest.uuid b/manifest.uuid index 62f8a5d..928199c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -999f57bd1e05e99c67a921c09f782da170ae827c \ No newline at end of file +4b4c7cdb6d717d381081bbfbd7e9657acf32d089 \ No newline at end of file diff --git a/src/CommitDialog.cpp b/src/CommitDialog.cpp index b27e725..6359621 100644 --- a/src/CommitDialog.cpp +++ b/src/CommitDialog.cpp @@ -109,6 +109,19 @@ bool CommitDialog::run(QWidget *parent, const QString &title, QStringList &files return true; } +//------------------------------------------------------------------------------ +bool CommitDialog::runCommit(QWidget* parent, QStringList& files, QString& commitMsg, const QStringList& commitMsgHistory) +{ + return run(parent, tr("Commit Changes"), files, commitMsg, &commitMsgHistory, false, 0, 0); +} + +//------------------------------------------------------------------------------ +bool CommitDialog::runStashNew(QWidget* parent, QStringList& stashedFiles, QString& stashName, bool& checkBoxValue) +{ + QString checkbox_text = tr("Revert stashed files"); + return run(parent, tr("Stash Changes"), stashedFiles, stashName, 0, true, &checkbox_text, &checkBoxValue); +} + //------------------------------------------------------------------------------ void CommitDialog::on_comboBox_activated(int index) { diff --git a/src/CommitDialog.h b/src/CommitDialog.h index dd3129e..07dbb22 100644 --- a/src/CommitDialog.h +++ b/src/CommitDialog.h @@ -16,7 +16,11 @@ public: explicit CommitDialog(QWidget *parent, const QString &title, QStringList &files, const QStringList *history=0, bool singleLineEntry=false, const QString *checkBoxText=0, bool *checkBoxValue=0); ~CommitDialog(); - static bool run(QWidget *parent, const QString &title, QStringList &files, QString &commitMsg, const QStringList *history=0, bool singleLineEntry=false, const QString *checkBoxText=0, bool *checkBoxValue=0); + static bool runStashNew(QWidget* parent, QStringList& stashedFiles, QString& stashName, bool &checkBoxValue); + static bool runCommit(QWidget* parent, QStringList& files, QString& commitMsg, const QStringList &commitMsgHistory); + +private: + static bool run(QWidget *parent, const QString &title, QStringList &files, QString &commitMsg, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue); private slots: void on_comboBox_activated(int index); diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 05a163b..e76c48b 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -197,7 +197,7 @@ bool Fossil::diffFile(const QString &repoFile) } //------------------------------------------------------------------------------ -bool Fossil::commitFiles(const QStringList& fileList, const QString& comment) +bool Fossil::commitFiles(const QStringList& fileList, const QString& comment, const QString &newBranchName, bool isPrivateBranch) { // Do commit QString comment_fname; @@ -223,6 +223,17 @@ bool Fossil::commitFiles(const QStringList& fileList, const QString& comment) // Generate fossil parameters. QStringList params; params << "commit" << "--message-file" << QuotePath(comment_fname); + + // Commit to new branch + if(!newBranchName.isEmpty()) + { + params << "--branch" << newBranchName; + + // Private branches are not synced with remotes + if(isPrivateBranch) + params << "--private"; + } + params << QuotePaths(fileList); runFossil(params); diff --git a/src/Fossil.h b/src/Fossil.h index e1bb325..52be947 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -96,7 +96,7 @@ public: bool status(QStringList& result); bool diffFile(const QString &repoFile); - bool commitFiles(const QStringList &fileList, const QString &comment); + bool commitFiles(const QStringList &fileList, const QString &comment, const QString& newBranchName, bool isPrivateBranch); bool addFiles(const QStringList& fileList); bool removeFiles(const QStringList& fileList, bool deleteLocal); bool revertFiles(const QStringList& fileList); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 3607ae8..e94b5e2 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1358,7 +1358,7 @@ void MainWindow::on_actionCommit_triggered() QStringList commit_msgs = settings.GetValue(FUEL_SETTING_COMMIT_MSG).toStringList(); QString msg; - bool aborted = !CommitDialog::run(this, tr("Commit Changes"), commit_files, msg, &commit_msgs); + bool aborted = !CommitDialog::runCommit(this, commit_files, msg, commit_msgs); // Aborted or not we always keep the commit messages. // (This has saved me way too many times on TortoiseSVN) @@ -1388,7 +1388,11 @@ void MainWindow::on_actionCommit_triggered() if(commit_files.size() != all_modified_files.size()) files = commit_files; - fossil().commitFiles(files, msg); + // FIXME: add UI + QString branch_name=""; + bool private_branch = false; + + fossil().commitFiles(files, msg, branch_name, private_branch); refresh(); } @@ -1960,8 +1964,8 @@ void MainWindow::on_actionNewStash_triggered() 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()) + + if(!CommitDialog::runStashNew(this, stashed_files, stash_name, revert) || stashed_files.empty()) return; stash_name = stash_name.trimmed(); From 65e06d023e8ec1ba7b2749fd217e5e48b99a97c4 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 08:47:24 +0000 Subject: [PATCH 81/90] Added branch on commit Refactored CommitDialog FossilOrigin-Name: 34efdbe98a491079ce2a2ae97c701ed5af118a4c --- manifest | 20 ++++++------- manifest.uuid | 2 +- src/CommitDialog.cpp | 66 +++++++++++++++++++++++++----------------- src/CommitDialog.h | 10 +++---- src/Fossil.cpp | 2 +- src/MainWindow.cpp | 8 ++--- ui/CommitDialog.ui | 69 ++++++++++++++++++++++++++++++++++++++++++-- 7 files changed, 124 insertions(+), 53 deletions(-) diff --git a/manifest b/manifest index b6c0412..f96d4e3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Initial\swork\son\sbranching\sduring\scommit\nRefactored\sCommitDialog\susage -D 2015-05-23T11:48:50.173 +C Added\sbranch\son\scommit\nRefactored\sCommitDialog\n +D 2015-05-24T08:47:24.547 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -188,19 +188,19 @@ F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 F src/CloneDialog.h 8813d91f893eb3eb86a4ea5e50f9a53a0ea07047 -F src/CommitDialog.cpp 32a4860171b9dfe5b0cea15bc534dd56c00b4631 -F src/CommitDialog.h edec8c152e6b40e248c48d8f56e8d8e218e2c2c8 +F src/CommitDialog.cpp bbf5fe1c66d28068cc3fd061f4f9f1faa9e89196 +F src/CommitDialog.h 921bf27c0c538ab9e9d6bdc750064337d346270b F src/CustomWebView.cpp b7dd0c41977c2cba005df07ed8967ba6f58d07d9 F src/CustomWebView.h fbc8ee55812d1acb3c3b2bc31be7533e8a112822 F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 0df84415b9c380b03e7e10f0777f6e92f3fa9584 +F src/Fossil.cpp a0b44c6b77de686e45cb4d84cfbf94865c8b39bf F src/Fossil.h 651d2a1c052abe2804f9eff366bf2561dc54f7eb F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 6e8aa088373fc0e501fef144a1cdd94eb0fe2f91 +F src/MainWindow.cpp ff43767952214b51530537efea858027cb408356 F src/MainWindow.h f2141839cccb3941df9ed7288588f2de3a5c8179 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 @@ -217,12 +217,12 @@ F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x F ui/BrowserWidget.ui 994ad9ea0e9f5815d6b1a27acc2f6f39164c507f F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 -F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f +F ui/CommitDialog.ui 5270bbf9c0b0c64d695420388160e2bb0e217d9f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 7f11c2ca1c3e371c71db27ae0fe6ad3758e6b5e1 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 999f57bd1e05e99c67a921c09f782da170ae827c -R d4e513e4fb3bc634010d85fa4326ab7b +P 4b4c7cdb6d717d381081bbfbd7e9657acf32d089 +R e360bba7a506e0fc5f0fa38b4d129c9b U kostas -Z d83ca9723da4099dee50cb4eb2941d68 +Z 6beeae656e862ad56c841db3d3bac58a diff --git a/manifest.uuid b/manifest.uuid index 928199c..9560a3e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4b4c7cdb6d717d381081bbfbd7e9657acf32d089 \ No newline at end of file +34efdbe98a491079ce2a2ae97c701ed5af118a4c \ No newline at end of file diff --git a/src/CommitDialog.cpp b/src/CommitDialog.cpp index 6359621..4d0de48 100644 --- a/src/CommitDialog.cpp +++ b/src/CommitDialog.cpp @@ -4,7 +4,7 @@ #include "ui_CommitDialog.h" #include "MainWindow.h" // Ugly. I know. -CommitDialog::CommitDialog(QWidget *parent, const QString &title, QStringList &files, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue) : +CommitDialog::CommitDialog(QWidget *parent, const QString &title, QStringList &files, const QStringList *history, bool stashMode) : QDialog(parent, Qt::Sheet), ui(new Ui::CommitDialog) { @@ -15,16 +15,13 @@ CommitDialog::CommitDialog(QWidget *parent, const QString &title, QStringList &f setWindowTitle(title); // Activate the appropriate control based on mode - ui->plainTextEdit->setVisible(!singleLineEntry); - ui->lineEdit->setVisible(singleLineEntry); + ui->plainTextEdit->setVisible(!stashMode); + ui->lineEdit->setVisible(stashMode); // Activate the checkbox if we have some text - ui->checkBox->setVisible(checkBoxText!=0); - if(checkBoxText && checkBoxValue) - { - ui->checkBox->setText(*checkBoxText); - ui->checkBox->setCheckState(*checkBoxValue ? Qt::Checked : Qt::Unchecked); - } + ui->chkRevertFiles->setVisible(stashMode); + + ui->widgetBranchOptions->setVisible(!stashMode); // Activate the combo if we have history ui->comboBox->setVisible(history!=0); @@ -77,16 +74,12 @@ CommitDialog::~CommitDialog() } //------------------------------------------------------------------------------ -bool CommitDialog::run(QWidget *parent, const QString &title, QStringList &files, QString &commitMsg, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue) +bool CommitDialog::runCommit(QWidget* parent, QStringList& files, QString& commitMsg, const QStringList& commitMsgHistory, QString &branchName, bool &privateBranch) { - CommitDialog dlg(parent, title, files, history, singleLineEntry, checkBoxText, checkBoxValue); + CommitDialog dlg(parent, tr("Commit Changes"), files, &commitMsgHistory, false); int res = dlg.exec(); - if(singleLineEntry) - commitMsg = dlg.ui->lineEdit->text(); - else - commitMsg = dlg.ui->plainTextEdit->toPlainText(); - + commitMsg = dlg.ui->plainTextEdit->toPlainText(); if(res!=QDialog::Accepted) return false; @@ -100,26 +93,38 @@ bool CommitDialog::run(QWidget *parent, const QString &title, QStringList &files files.append(si->text()); } - if(checkBoxText) + branchName.clear(); + if(dlg.ui->chkNewBranch->isChecked()) { - Q_ASSERT(checkBoxValue); - *checkBoxValue = dlg.ui->checkBox->checkState() == Qt::Checked; + branchName = dlg.ui->lineBranchName->text().trimmed(); + privateBranch = dlg.ui->chkPrivateBranch->isChecked(); } return true; } //------------------------------------------------------------------------------ -bool CommitDialog::runCommit(QWidget* parent, QStringList& files, QString& commitMsg, const QStringList& commitMsgHistory) +bool CommitDialog::runStashNew(QWidget* parent, QStringList& stashedFiles, QString& stashName, bool& revertFiles) { - return run(parent, tr("Commit Changes"), files, commitMsg, &commitMsgHistory, false, 0, 0); -} + CommitDialog dlg(parent, tr("Stash Changes"), stashedFiles, NULL, true); + int res = dlg.exec(); -//------------------------------------------------------------------------------ -bool CommitDialog::runStashNew(QWidget* parent, QStringList& stashedFiles, QString& stashName, bool& checkBoxValue) -{ - QString checkbox_text = tr("Revert stashed files"); - return run(parent, tr("Stash Changes"), stashedFiles, stashName, 0, true, &checkbox_text, &checkBoxValue); + stashName = dlg.ui->lineEdit->text(); + + if(res!=QDialog::Accepted) + return false; + + stashedFiles.clear(); + for(int i=0; icheckState()!=Qt::Checked) + continue; + stashedFiles.append(si->text()); + } + + revertFiles = dlg.ui->chkRevertFiles->checkState() == Qt::Checked; + return true; } //------------------------------------------------------------------------------ @@ -155,3 +160,10 @@ void CommitDialog::on_listView_clicked(const QModelIndex &) ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(num_selected>0); } + +//------------------------------------------------------------------------------ +void CommitDialog::on_chkNewBranch_toggled(bool checked) +{ + ui->chkPrivateBranch->setEnabled(checked); + ui->lineBranchName->setEnabled(checked); +} diff --git a/src/CommitDialog.h b/src/CommitDialog.h index 07dbb22..f52b928 100644 --- a/src/CommitDialog.h +++ b/src/CommitDialog.h @@ -13,19 +13,17 @@ class CommitDialog : public QDialog Q_OBJECT public: - explicit CommitDialog(QWidget *parent, const QString &title, QStringList &files, const QStringList *history=0, bool singleLineEntry=false, const QString *checkBoxText=0, bool *checkBoxValue=0); + explicit CommitDialog(QWidget *parent, const QString &title, QStringList &files, const QStringList *history, bool stashMode); ~CommitDialog(); - static bool runStashNew(QWidget* parent, QStringList& stashedFiles, QString& stashName, bool &checkBoxValue); - static bool runCommit(QWidget* parent, QStringList& files, QString& commitMsg, const QStringList &commitMsgHistory); - -private: - static bool run(QWidget *parent, const QString &title, QStringList &files, QString &commitMsg, const QStringList *history, bool singleLineEntry, const QString *checkBoxText, bool *checkBoxValue); + static bool runStashNew(QWidget* parent, QStringList& stashedFiles, QString& stashName, bool &revertFiles); + static bool runCommit(QWidget* parent, QStringList& files, QString& commitMsg, const QStringList &commitMsgHistory, QString& branchName, bool& privateBranch); private slots: void on_comboBox_activated(int index); void on_listView_doubleClicked(const QModelIndex &index); void on_listView_clicked(const QModelIndex &index); + void on_chkNewBranch_toggled(bool checked); private: Ui::CommitDialog *ui; diff --git a/src/Fossil.cpp b/src/Fossil.cpp index e76c48b..7990451 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -227,7 +227,7 @@ bool Fossil::commitFiles(const QStringList& fileList, const QString& comment, co // Commit to new branch if(!newBranchName.isEmpty()) { - params << "--branch" << newBranchName; + params << "--branch" << newBranchName.trimmed(); // Private branches are not synced with remotes if(isPrivateBranch) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index e94b5e2..c825302 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1358,7 +1358,9 @@ void MainWindow::on_actionCommit_triggered() QStringList commit_msgs = settings.GetValue(FUEL_SETTING_COMMIT_MSG).toStringList(); QString msg; - bool aborted = !CommitDialog::runCommit(this, commit_files, msg, commit_msgs); + QString branch_name=""; + bool private_branch = false; + bool aborted = !CommitDialog::runCommit(this, commit_files, msg, commit_msgs, branch_name, private_branch); // Aborted or not we always keep the commit messages. // (This has saved me way too many times on TortoiseSVN) @@ -1388,10 +1390,6 @@ void MainWindow::on_actionCommit_triggered() if(commit_files.size() != all_modified_files.size()) files = commit_files; - // FIXME: add UI - QString branch_name=""; - bool private_branch = false; - fossil().commitFiles(files, msg, branch_name, private_branch); refresh(); } diff --git a/ui/CommitDialog.ui b/ui/CommitDialog.ui index da07022..5407673 100644 --- a/ui/CommitDialog.ui +++ b/ui/CommitDialog.ui @@ -10,7 +10,7 @@ 0 0 400 - 300 + 397 @@ -62,9 +62,72 @@ - + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + New branch + + + + + + + + + + + + + + false + + + + + + + + + + false + + + + + + + Branch name + + + + + + + Private branch + + + + + + + + - + Revert stashed files From 3bf716dff0f333bd8a4be2ca6b7bebdcacb6bcb3 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 09:00:03 +0000 Subject: [PATCH 82/90] Added View All Files option FossilOrigin-Name: 239c19ebecb1565f0c9e3319b1ea3d18bce59ab9 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/MainWindow.cpp | 11 ++++++++++- src/MainWindow.h | 1 + ui/MainWindow.ui | 11 ++++++++++- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index f96d4e3..b90fc74 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\sbranch\son\scommit\nRefactored\sCommitDialog\n -D 2015-05-24T08:47:24.547 +C Added\sView\sAll\sFiles\soption\n +D 2015-05-24T09:00:03.257 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp a0b44c6b77de686e45cb4d84cfbf94865c8b39bf F src/Fossil.h 651d2a1c052abe2804f9eff366bf2561dc54f7eb F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp ff43767952214b51530537efea858027cb408356 -F src/MainWindow.h f2141839cccb3941df9ed7288588f2de3a5c8179 +F src/MainWindow.cpp f0803414a83d70d357c1aa4a43ff20397eb9878f +F src/MainWindow.h 0a10bf6f5c3ebf2aae1cef9e387289764d47586d F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba @@ -219,10 +219,10 @@ F ui/BrowserWidget.ui 994ad9ea0e9f5815d6b1a27acc2f6f39164c507f F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 5270bbf9c0b0c64d695420388160e2bb0e217d9f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 7f11c2ca1c3e371c71db27ae0fe6ad3758e6b5e1 +F ui/MainWindow.ui 13f5dee5a09a535dad7410bca36b80b81cdb3a36 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 4b4c7cdb6d717d381081bbfbd7e9657acf32d089 -R e360bba7a506e0fc5f0fa38b4d129c9b +P 34efdbe98a491079ce2a2ae97c701ed5af118a4c +R 6b21fa6d345f234ccb01b39f5e1f28b8 U kostas -Z 6beeae656e862ad56c841db3d3bac58a +Z 946f9f191acc62afc553b9c6b7567862 diff --git a/manifest.uuid b/manifest.uuid index 9560a3e..47faa81 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -34efdbe98a491079ce2a2ae97c701ed5af118a4c \ No newline at end of file +239c19ebecb1565f0c9e3319b1ea3d18bce59ab9 \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index c825302..b625c4d 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1682,6 +1682,16 @@ void MainWindow::on_actionViewIgnored_triggered() refresh(); } +//------------------------------------------------------------------------------ +void MainWindow::on_actionViewAll_triggered() +{ + ui->actionViewModified->setChecked(true); + ui->actionViewUnchanged->setChecked(true); + ui->actionViewUnknown->setChecked(true); + ui->actionViewIgnored->setChecked(true); + refresh(); +} + //------------------------------------------------------------------------------ void MainWindow::on_actionViewAsList_triggered() { @@ -2451,4 +2461,3 @@ void MainWindow::onSearch() searchBox->setFocus(); } - diff --git a/src/MainWindow.h b/src/MainWindow.h index 66e6bf0..6b4ea62 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -104,6 +104,7 @@ private slots: void on_actionViewModified_triggered(); void on_actionViewUnknown_triggered(); void on_actionViewIgnored_triggered(); + void on_actionViewAll_triggered(); void on_actionViewAsList_triggered(); void on_actionViewAsFolders_triggered(); void on_actionOpenFolder_triggered(); diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 14f6590..8550635 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -81,7 +81,7 @@ false - true + false false @@ -257,6 +257,7 @@ + @@ -932,6 +933,14 @@ View the workspace as files and folders + + + &All + + + Show all files + + From 9c63e0e0dcaf7192de0b24ae1cb4fab83479c972 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 14:47:14 +0000 Subject: [PATCH 83/90] Fixed missing workspace tree header FossilOrigin-Name: c50d8ea3ed378c1f9efbb6d83e93ffd1ce050db0 --- manifest | 12 ++++++------ manifest.uuid | 2 +- ui/MainWindow.ui | 3 --- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index b90fc74..d3fe727 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\sView\sAll\sFiles\soption\n -D 2015-05-24T09:00:03.257 +C Fixed\smissing\sworkspace\stree\sheader +D 2015-05-24T14:47:14.342 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -219,10 +219,10 @@ F ui/BrowserWidget.ui 994ad9ea0e9f5815d6b1a27acc2f6f39164c507f F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 5270bbf9c0b0c64d695420388160e2bb0e217d9f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 13f5dee5a09a535dad7410bca36b80b81cdb3a36 +F ui/MainWindow.ui 62465473277cca143d1618579a3375551e551ab3 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 34efdbe98a491079ce2a2ae97c701ed5af118a4c -R 6b21fa6d345f234ccb01b39f5e1f28b8 +P 239c19ebecb1565f0c9e3319b1ea3d18bce59ab9 +R 3bccc129817cf3b1d6570a99f0682985 U kostas -Z 946f9f191acc62afc553b9c6b7567862 +Z 23e2a55234a8daa618ea7c34e0b6d98a diff --git a/manifest.uuid b/manifest.uuid index 47faa81..1c71e5f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -239c19ebecb1565f0c9e3319b1ea3d18bce59ab9 \ No newline at end of file +c50d8ea3ed378c1f9efbb6d83e93ffd1ce050db0 \ No newline at end of file diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 8550635..b8cfcab 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -80,9 +80,6 @@ false - - false - false From 1e111052c628e62971652344bd363ced79832e81 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 15:28:43 +0000 Subject: [PATCH 84/90] Added Workspace menu Some action refactoring FossilOrigin-Name: 343b1675fb8eb023a04a1b84131f132d382f01dc --- manifest | 16 ++++----- manifest.uuid | 2 +- src/MainWindow.cpp | 87 ++++++++++++++++++++++++++-------------------- src/MainWindow.h | 6 ++-- ui/MainWindow.ui | 45 +++++++++++++++++------- 5 files changed, 94 insertions(+), 62 deletions(-) diff --git a/manifest b/manifest index d3fe727..e5319fe 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\smissing\sworkspace\stree\sheader -D 2015-05-24T14:47:14.342 +C Added\sWorkspace\smenu\nSome\saction\srefactoring +D 2015-05-24T15:28:43.887 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp a0b44c6b77de686e45cb4d84cfbf94865c8b39bf F src/Fossil.h 651d2a1c052abe2804f9eff366bf2561dc54f7eb F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp f0803414a83d70d357c1aa4a43ff20397eb9878f -F src/MainWindow.h 0a10bf6f5c3ebf2aae1cef9e387289764d47586d +F src/MainWindow.cpp 537c458f5b7ad78ee3b9ad2e8479cac2f6dd8ec3 +F src/MainWindow.h cfc19137172a9200cff2b68676cbb26c2611a7d8 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba @@ -219,10 +219,10 @@ F ui/BrowserWidget.ui 994ad9ea0e9f5815d6b1a27acc2f6f39164c507f F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 5270bbf9c0b0c64d695420388160e2bb0e217d9f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 62465473277cca143d1618579a3375551e551ab3 +F ui/MainWindow.ui 22dc5cebf86223754dc8e0b14707b4cb81c95cc6 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 239c19ebecb1565f0c9e3319b1ea3d18bce59ab9 -R 3bccc129817cf3b1d6570a99f0682985 +P c50d8ea3ed378c1f9efbb6d83e93ffd1ce050db0 +R 6da61eacec95d19b45b31627041306ab U kostas -Z 23e2a55234a8daa618ea7c34e0b6d98a +Z 54a69f89b2494f325606e1959873a5e9 diff --git a/manifest.uuid b/manifest.uuid index 1c71e5f..b6966f4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c50d8ea3ed378c1f9efbb6d83e93ffd1ce050db0 \ No newline at end of file +343b1675fb8eb023a04a1b84131f132d382f01dc \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index b625c4d..5b60317 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -152,7 +152,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP // StashMenu menuStashes = new QMenu(this); - menuStashes->addAction(ui->actionNewStash); + menuStashes->addAction(ui->actionCreateStash); menuStashes->addAction(separator); menuStashes->addAction(ui->actionApplyStash); menuStashes->addAction(ui->actionDiffStash); @@ -160,14 +160,14 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP // TagsMenu menuTags = new QMenu(this); - menuTags->addAction(ui->actionNewTag); + menuTags->addAction(ui->actionCreateTag); menuTags->addAction(separator); menuTags->addAction(ui->actionDeleteTag); menuTags->addAction(ui->actionUpdate); // BranchesMenu menuBranches = new QMenu(this); - menuBranches->addAction(ui->actionNewBranch); + menuBranches->addAction(ui->actionCreateBranch); menuBranches->addAction(separator); menuBranches->addAction(ui->actionMergeBranch); menuBranches->addAction(ui->actionUpdate); @@ -556,27 +556,38 @@ void MainWindow::onOpenRecent() //------------------------------------------------------------------------------ void MainWindow::enableActions(bool on) { - ui->actionCommit->setEnabled(on); - ui->actionDiff->setEnabled(on); - ui->actionAdd->setEnabled(on); - ui->actionDelete->setEnabled(on); - ui->actionPush->setEnabled(on); - ui->actionPull->setEnabled(on); - ui->actionRename->setEnabled(on); - ui->actionHistory->setEnabled(on); - ui->actionFossilUI->setEnabled(on); - ui->actionRevert->setEnabled(on); - ui->actionTimeline->setEnabled(on); - ui->actionOpenFile->setEnabled(on); - ui->actionOpenContaining->setEnabled(on); - ui->actionUndo->setEnabled(on); - ui->actionUpdate->setEnabled(on); - ui->actionOpenFolder->setEnabled(on); - ui->actionRenameFolder->setEnabled(on); - ui->actionNewStash->setEnabled(on); - ui->actionDeleteStash->setEnabled(on); - ui->actionDiffStash->setEnabled(on); - ui->actionApplyStash->setEnabled(on); + QAction *actions[] = { + ui->actionCommit, + ui->actionDiff, + ui->actionAdd, + ui->actionDelete, + ui->actionPush, + ui->actionPull, + ui->actionRename, + ui->actionHistory, + ui->actionFossilUI, + ui->actionRevert, + ui->actionTimeline, + ui->actionOpenFile, + ui->actionOpenContaining, + ui->actionUndo, + ui->actionUpdate, + ui->actionOpenFolder, + ui->actionRenameFolder, + ui->actionCreateStash, + ui->actionDeleteStash, + ui->actionDiffStash, + ui->actionApplyStash, + ui->actionDeleteStash, + ui->actionCreateTag, + ui->actionDeleteTag, + ui->actionCreateBranch, + ui->actionMergeBranch, + }; + + for(size_t i=0; isetEnabled(on); + } //------------------------------------------------------------------------------ bool MainWindow::refresh() @@ -732,7 +743,7 @@ void MainWindow::updateWorkspaceView() } // Branches - QStandardItem *branches = new QStandardItem(getInternalIcon(":icons/icon-item-branch"), "Branches"); + QStandardItem *branches = new QStandardItem(getInternalIcon(":icons/icon-item-branch"), tr("Branches")); branches->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCHES, ""), ROLE_WORKSPACE_ITEM); branches->setEditable(false); getWorkspace().getTreeModel().appendRow(branches); @@ -752,7 +763,7 @@ void MainWindow::updateWorkspaceView() } // Tags - QStandardItem *tags = new QStandardItem(getInternalIcon(":icons/icon-item-tag"), "Tags"); + QStandardItem *tags = new QStandardItem(getInternalIcon(":icons/icon-item-tag"), tr("Tags")); tags->setData(WorkspaceItem(WorkspaceItem::TYPE_TAGS, ""), ROLE_WORKSPACE_ITEM); tags->setEditable(false); getWorkspace().getTreeModel().appendRow(tags); @@ -776,7 +787,7 @@ void MainWindow::updateWorkspaceView() // FIXME: Unique Icon name // Stashes - QStandardItem *stashes = new QStandardItem(getInternalIcon(":icons/icon-action-repo-open"), "Stashes"); + QStandardItem *stashes = new QStandardItem(getInternalIcon(":icons/icon-action-repo-open"), tr("Stashes")); stashes->setData(WorkspaceItem(WorkspaceItem::TYPE_STASHES, ""), ROLE_WORKSPACE_ITEM); stashes->setEditable(false); getWorkspace().getTreeModel().appendRow(stashes); @@ -787,18 +798,20 @@ void MainWindow::updateWorkspaceView() stashes->appendRow(stash); } -#if 0 // Unimplemented for now +#if 0 // Remotes - QStandardItem *remotes = new QStandardItem(getInternalIcon(":icons/icon-item-remote"), "Remotes"); + QStandardItem *remotes = new QStandardItem(getInternalIcon(":icons/icon-item-remote"), tr("Remotes")); remotes->setData(WorkspaceItem(WorkspaceItem::TYPE_REMOTES, ""), ROLE_WORKSPACE_ITEM); remotes->setEditable(false); - getWorkspace().getDirModel().appendRow(remotes); + getWorkspace().getTreeModel().appendRow(remotes); +#endif +#if 0 // Unimplemented for now // Settings - QStandardItem *settings = new QStandardItem(getInternalIcon(":icons/icon-action-settings"), "Settings"); + QStandardItem *settings = new QStandardItem(getInternalIcon(":icons/icon-action-settings"), tr("Settings")); settings->setData(WorkspaceItem(WorkspaceItem::TYPE_SETTINGS, ""), ROLE_WORKSPACE_ITEM); settings->setEditable(false); - getWorkspace().getDirModel().appendRow(settings); + getWorkspace().getTreeModel().appendRow(settings); #endif // Expand previously selected nodes @@ -1962,7 +1975,7 @@ const QIcon &MainWindow::getInternalIcon(const char* name) } //------------------------------------------------------------------------------ -void MainWindow::on_actionNewStash_triggered() +void MainWindow::on_actionCreateStash_triggered() { QStringList stashed_files; getSelectionFilenames(stashed_files, WorkspaceFile::TYPE_MODIFIED, true); @@ -2350,13 +2363,13 @@ void MainWindow::updateRevision(const QString &revision) } //------------------------------------------------------------------------------ -void MainWindow::on_actionNewTag_triggered() +void MainWindow::on_actionCreateTag_triggered() { // Default to current revision QString revision = fossil().getCurrentRevision(); QString name; - if(!RevisionDialog::runNewTag(this, tr("New Tag"), versionList, revision, revision, name)) + if(!RevisionDialog::runNewTag(this, tr("Create Tag"), versionList, revision, revision, name)) return; if(name.isEmpty() || getWorkspace().getTags().contains(name) || getWorkspace().getBranches().contains(name)) @@ -2389,13 +2402,13 @@ void MainWindow::on_actionDeleteTag_triggered() } //------------------------------------------------------------------------------ -void MainWindow::on_actionNewBranch_triggered() +void MainWindow::on_actionCreateBranch_triggered() { // Default to current revision QString revision = fossil().getCurrentRevision(); QString branch_name; - if(!RevisionDialog::runNewTag(this, tr("New Branch"), versionList, revision, revision, branch_name)) + if(!RevisionDialog::runNewTag(this, tr("Create Branch"), versionList, revision, revision, branch_name)) return; if(branch_name.isEmpty() || getWorkspace().getTags().contains(branch_name) || getWorkspace().getBranches().contains(branch_name)) diff --git a/src/MainWindow.h b/src/MainWindow.h index 6b4ea62..dc63ae3 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -113,16 +113,16 @@ private slots: void on_actionOpenRepository_triggered(); void on_actionCloseRepository_triggered(); void on_actionCloneRepository_triggered(); - void on_actionNewStash_triggered(); + void on_actionCreateStash_triggered(); void on_actionApplyStash_triggered(); void on_actionDeleteStash_triggered(); void on_actionDiffStash_triggered(); void on_textBrowser_customContextMenuRequested(const QPoint &pos); void on_fileTableView_customContextMenuRequested(const QPoint &pos); void on_workspaceTreeView_customContextMenuRequested(const QPoint &pos); - void on_actionNewTag_triggered(); + void on_actionCreateTag_triggered(); void on_actionDeleteTag_triggered(); - void on_actionNewBranch_triggered(); + void on_actionCreateBranch_triggered(); void on_actionMergeBranch_triggered(); private: diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index b8cfcab..82aa591 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -259,8 +259,27 @@ + + + &Workspace + + + + + + + + + + + + + + + + @@ -302,7 +321,7 @@ - + @@ -319,7 +338,7 @@ :/icons/icon-action-refresh:/icons/icon-action-refresh - Refresh + &Refresh Refresh the views @@ -337,7 +356,7 @@ :/icons/icon-action-commit:/icons/icon-action-commit - Commit + &Commit Commit modifications @@ -471,7 +490,7 @@ :/icons/icon-action-push:/icons/icon-action-push - Push + &Push Push changes to the remote repository @@ -489,7 +508,7 @@ :/icons/icon-action-pull:/icons/icon-action-pull - Pull + Pu&ll Pull changes from the remote repository @@ -663,7 +682,7 @@ :/icons/icon-action-undo:/icons/icon-action-undo - Undo + U&ndo Undo the last Fossil action @@ -696,7 +715,7 @@ :/icons/icon-action-update:/icons/icon-action-update - Update + &Update Update the workspace to a revision @@ -826,13 +845,13 @@ Rename the selected folder - + :/icons/icon-action-stash-new:/icons/icon-action-stash-new - Stash changes + &Stash Changes Stash changes @@ -871,13 +890,13 @@ Diff Stash - + :/icons/icon-action-tag-new:/icons/icon-action-tag-new - New Tag + Create &Tag Tag current revision @@ -895,13 +914,13 @@ Delete tag - + :/icons/icon-item-branch:/icons/icon-item-branch - New Branch + Create &Branch Create a branch from the current revision From c4b8c458fe6d20f85ea9bc41115b9417b308c28c Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 15:45:51 +0000 Subject: [PATCH 85/90] Moved SelectExe to Utils FossilOrigin-Name: 5dcb374fdf60b627d8f0452cea8add32a2c900e8 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/SettingsDialog.cpp | 23 ----------------------- src/SettingsDialog.h | 1 - src/Utils.cpp | 22 ++++++++++++++++++++++ src/Utils.h | 1 + 6 files changed, 33 insertions(+), 34 deletions(-) diff --git a/manifest b/manifest index e5319fe..73d1cb9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\sWorkspace\smenu\nSome\saction\srefactoring -D 2015-05-24T15:28:43.887 +C Moved\sSelectExe\sto\sUtils +D 2015-05-24T15:45:51.077 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -206,10 +206,10 @@ F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba F src/SearchBox.h 0c78d3a68136dab3e0e71b83ae36f22bd2688ab2 -F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 -F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/Utils.cpp f61a53fb79d47ecb714833805106f4956746faaa -F src/Utils.h 213decaa09151cb7397207e3ea2dde70b994b6a0 +F src/SettingsDialog.cpp fe771a03bc3c595ab070d0fa58cd55c96b2b0700 +F src/SettingsDialog.h 062bf5eee4cdc74827e5194492c067b6d92d8cb7 +F src/Utils.cpp c48e3316f3a0a5d735e8d4953710500358985e32 +F src/Utils.h c2a28611bd77fb35ea3dcf65fb60ed585f68aa3c F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 F src/Workspace.h d6649a3ae1cd0fbad55237030313e85530417271 F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0 @@ -222,7 +222,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 22dc5cebf86223754dc8e0b14707b4cb81c95cc6 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P c50d8ea3ed378c1f9efbb6d83e93ffd1ce050db0 -R 6da61eacec95d19b45b31627041306ab +P 343b1675fb8eb023a04a1b84131f132d382f01dc +R 70af19af3348536f9c96e9c764dbfede U kostas -Z 54a69f89b2494f325606e1959873a5e9 +Z ba13e6b10c9aabe3aab350fa0e173506 diff --git a/manifest.uuid b/manifest.uuid index b6966f4..b0d1a56 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -343b1675fb8eb023a04a1b84131f132d382f01dc \ No newline at end of file +5dcb374fdf60b627d8f0452cea8add32a2c900e8 \ No newline at end of file diff --git a/src/SettingsDialog.cpp b/src/SettingsDialog.cpp index 3cf5810..041dd21 100644 --- a/src/SettingsDialog.cpp +++ b/src/SettingsDialog.cpp @@ -1,6 +1,5 @@ #include "SettingsDialog.h" #include "ui_SettingsDialog.h" -#include #include "Utils.h" #include @@ -11,28 +10,6 @@ #include -/////////////////////////////////////////////////////////////////////////////// -QString SettingsDialog::SelectExe(QWidget *parent, const QString &description) -{ - QString filter(tr("Applications")); -#ifdef Q_OS_WIN - filter += " (*.exe)"; -#else - filter += " (*)"; -#endif - QString path = QFileDialog::getOpenFileName( - parent, - description, - QString(), - filter, - &filter); - - if(!QFile::exists(path)) - return QString(); - - return path; -} - /////////////////////////////////////////////////////////////////////////////// SettingsDialog::SettingsDialog(QWidget *parent, Settings &_settings) : QDialog(parent, Qt::Sheet), diff --git a/src/SettingsDialog.h b/src/SettingsDialog.h index b57ba3b..49cada8 100644 --- a/src/SettingsDialog.h +++ b/src/SettingsDialog.h @@ -97,7 +97,6 @@ private slots: void on_btnClearMessageHistory_clicked(); private: - static QString SelectExe(QWidget *parent, const QString &description); QString LangIdToName(const QString &id); QString LangNameToId(const QString &name); void CreateLangMap(); diff --git a/src/Utils.cpp b/src/Utils.cpp index ceca906..4dedf39 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -1,6 +1,7 @@ #include "Utils.h" #include #include +#include /////////////////////////////////////////////////////////////////////////////// QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, const QString &query, QMessageBox::StandardButtons buttons) @@ -29,6 +30,27 @@ QStringList QuotePaths(const QStringList &paths) return res; } +//----------------------------------------------------------------------------- +QString SelectExe(QWidget *parent, const QString &description) +{ + QString filter(QObject::tr("Applications")); +#ifdef Q_OS_WIN + filter += " (*.exe)"; +#else + filter += " (*)"; +#endif + QString path = QFileDialog::getOpenFileName( + parent, + description, + QString(), + filter, + &filter); + + if(!QFile::exists(path)) + return QString(); + + return path; +} //----------------------------------------------------------------------------- #if 0 // Unused #include diff --git a/src/Utils.h b/src/Utils.h index 0acad08..0e86eae 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -15,6 +15,7 @@ QMessageBox::StandardButton DialogQuery(QWidget *parent, const QString &title, const QString &query, QMessageBox::StandardButtons buttons = QMessageBox::Yes|QMessageBox::No); QString QuotePath(const QString &path); QStringList QuotePaths(const QStringList &paths); +QString SelectExe(QWidget *parent, const QString &description); typedef QMap name_modelindex_map_t; From 32dc4533465c253deb91a1001cf6c6050b412442 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 15:55:14 +0000 Subject: [PATCH 86/90] Moved Settings to separate files FossilOrigin-Name: 46641dde6cd75e57b23d7df78b9e06e3c1e38993 --- fuel.pro | 6 +- manifest | 18 +++--- manifest.uuid | 2 +- src/Settings.cpp | 125 +++++++++++++++++++++++++++++++++++++++++ src/Settings.h | 75 +++++++++++++++++++++++++ src/SettingsDialog.cpp | 123 ---------------------------------------- src/SettingsDialog.h | 72 +----------------------- 7 files changed, 216 insertions(+), 205 deletions(-) create mode 100644 src/Settings.cpp create mode 100644 src/Settings.h diff --git a/fuel.pro b/fuel.pro index ab026b9..9b84a57 100644 --- a/fuel.pro +++ b/fuel.pro @@ -56,7 +56,8 @@ SOURCES += src/main.cpp\ src/CustomWebView.cpp \ src/Fossil.cpp \ src/Workspace.cpp \ - src/SearchBox.cpp + src/SearchBox.cpp \ + src/Settings.cpp HEADERS += src/MainWindow.h \ src/CommitDialog.h \ @@ -71,7 +72,8 @@ HEADERS += src/MainWindow.h \ src/CustomWebView.h \ src/Fossil.h \ src/Workspace.h \ - src/SearchBox.h + src/SearchBox.h \ + src/Settings.h FORMS += ui/MainWindow.ui \ ui/CommitDialog.ui \ diff --git a/manifest b/manifest index 73d1cb9..13ea0e4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Moved\sSelectExe\sto\sUtils -D 2015-05-24T15:45:51.077 +C Moved\sSettings\sto\sseparate\sfiles +D 2015-05-24T15:55:14.690 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro b1813a5c54474ca67e484aec4cc9a246ca9a1b07 +F fuel.pro 81afa5c27542c0ac63faa6a310a0e6bb98244609 F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -206,8 +206,10 @@ F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba F src/SearchBox.h 0c78d3a68136dab3e0e71b83ae36f22bd2688ab2 -F src/SettingsDialog.cpp fe771a03bc3c595ab070d0fa58cd55c96b2b0700 -F src/SettingsDialog.h 062bf5eee4cdc74827e5194492c067b6d92d8cb7 +F src/Settings.cpp 90eb11d68d0b55a144aab0d78946de98399ceef6 +F src/Settings.h 43fe09ee02ca5b7adb3cc5ab467b078ce3a9a980 +F src/SettingsDialog.cpp efc9de9eac816074036b8f4215f1a0cbcbb9e46d +F src/SettingsDialog.h 02223bf6d3bf51a21ca9d7206e0ecc6f7d6206b7 F src/Utils.cpp c48e3316f3a0a5d735e8d4953710500358985e32 F src/Utils.h c2a28611bd77fb35ea3dcf65fb60ed585f68aa3c F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 @@ -222,7 +224,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 22dc5cebf86223754dc8e0b14707b4cb81c95cc6 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 343b1675fb8eb023a04a1b84131f132d382f01dc -R 70af19af3348536f9c96e9c764dbfede +P 5dcb374fdf60b627d8f0452cea8add32a2c900e8 +R f555b4b17a768b27e9982054ac627534 U kostas -Z ba13e6b10c9aabe3aab350fa0e173506 +Z 6d75632de0f5ea31adfadb3e318adc99 diff --git a/manifest.uuid b/manifest.uuid index b0d1a56..f6464fd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5dcb374fdf60b627d8f0452cea8add32a2c900e8 \ No newline at end of file +46641dde6cd75e57b23d7df78b9e06e3c1e38993 \ No newline at end of file diff --git a/src/Settings.cpp b/src/Settings.cpp new file mode 100644 index 0000000..00941cf --- /dev/null +++ b/src/Settings.cpp @@ -0,0 +1,125 @@ +#include "Settings.h" + +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////////// +Settings::Settings(bool portableMode) : store(0) +{ + Mappings.insert(FOSSIL_SETTING_GDIFF_CMD, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); + Mappings.insert(FOSSIL_SETTING_GMERGE_CMD, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); + Mappings.insert(FOSSIL_SETTING_PROXY_URL, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); + + Mappings.insert(FOSSIL_SETTING_IGNORE_GLOB, Setting("", Setting::TYPE_FOSSIL_LOCAL)); + Mappings.insert(FOSSIL_SETTING_CRNL_GLOB, Setting("", Setting::TYPE_FOSSIL_LOCAL)); + Mappings.insert(FOSSIL_SETTING_REMOTE_URL, Setting("off", Setting::TYPE_FOSSIL_COMMAND)); + + // 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)) + store = new QSettings(ini_path, QSettings::IniFormat); + else + { + // Linux: ~/.config/organizationName/applicationName.conf + // Windows: HKEY_CURRENT_USER\Software\organizationName\Fuel + store = new QSettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName()); + } + Q_ASSERT(store); + + if(!HasValue(FUEL_SETTING_FILE_DBLCLICK)) + SetValue(FUEL_SETTING_FILE_DBLCLICK, 0); + if(!HasValue(FUEL_SETTING_LANGUAGE) && SupportsLang(QLocale::system().name())) + SetValue(FUEL_SETTING_LANGUAGE, QLocale::system().name()); + if(!HasValue(FUEL_SETTING_WEB_BROWSER)) + SetValue(FUEL_SETTING_WEB_BROWSER, 0); + if(!HasValue(FUEL_SETTING_HTTP_PORT)) + SetValue(FUEL_SETTING_HTTP_PORT, "8090"); + + ApplyEnvironment(); +} + +//----------------------------------------------------------------------------- +Settings::~Settings() +{ + Q_ASSERT(store); + delete store; +} + +//----------------------------------------------------------------------------- +void Settings::ApplyEnvironment() +{ + QString lang_id = GetValue(FUEL_SETTING_LANGUAGE).toString(); +#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) + QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); +#endif + if(!InstallLang(lang_id)) + SetValue(FUEL_SETTING_LANGUAGE, "en_US"); +} + +//----------------------------------------------------------------------------- +bool Settings::InstallLang(const QString &langId) +{ + if(langId == "en_US") + { + QCoreApplication::instance()->removeTranslator(&translator); + return true; + } + + QString locale_path = QString(":intl/intl/%0.qm").arg(langId); + if(!translator.load(locale_path)) + return false; + + Q_ASSERT(!translator.isEmpty()); + QCoreApplication::instance()->installTranslator(&translator); + + + return true; +} + +//----------------------------------------------------------------------------- +bool Settings::HasValue(const QString &name) const +{ + return store->contains(name); +} + +//----------------------------------------------------------------------------- +const QVariant Settings::GetValue(const QString &name) +{ + if(!HasValue(name)) + return QVariant(); + return store->value(name); +} + +//----------------------------------------------------------------------------- +void Settings::SetValue(const QString &name, const QVariant &value) +{ + store->setValue(name, value); +} + +//----------------------------------------------------------------------------- +QVariant &Settings::GetFossilValue(const QString &name) +{ + mappings_t::iterator it=Mappings.find(name); + Q_ASSERT(it!=Mappings.end()); + return it.value().Value; +} + +//----------------------------------------------------------------------------- +void Settings::SetFossilValue(const QString &name, const QVariant &value) +{ + mappings_t::iterator it=Mappings.find(name); + Q_ASSERT(it!=Mappings.end()); + it->Value = value; +} + +//----------------------------------------------------------------------------- +bool Settings::SupportsLang(const QString &langId) const +{ + QString locale_path = QString(":intl/intl/%0.qm").arg(langId); + QResource res(locale_path); + return res.isValid(); +} diff --git a/src/Settings.h b/src/Settings.h new file mode 100644 index 0000000..bcb40fa --- /dev/null +++ b/src/Settings.h @@ -0,0 +1,75 @@ +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include + +#define FUEL_SETTING_FOSSIL_PATH "FossilPath" +#define FUEL_SETTING_COMMIT_MSG "CommitMsgHistory" +#define FUEL_SETTING_FILE_DBLCLICK "FileDblClickAction" +#define FUEL_SETTING_LANGUAGE "Language" +#define FUEL_SETTING_WEB_BROWSER "WebBrowser" +#define FUEL_SETTING_HTTP_PORT "HTTPPort" + +#define FOSSIL_SETTING_GDIFF_CMD "gdiff-command" +#define FOSSIL_SETTING_GMERGE_CMD "gmerge-command" +#define FOSSIL_SETTING_PROXY_URL "proxy" +#define FOSSIL_SETTING_IGNORE_GLOB "ignore-glob" +#define FOSSIL_SETTING_CRNL_GLOB "crnl-glob" +#define FOSSIL_SETTING_REMOTE_URL "remote-url" + + +enum FileDblClickAction +{ + FILE_DLBCLICK_ACTION_DIFF, + FILE_DLBCLICK_ACTION_OPEN, + FILE_DLBCLICK_ACTION_OPENCONTAINING, + FILE_DLBCLICK_ACTION_MAX +}; + +struct Settings +{ + struct Setting + { + enum SettingType + { + TYPE_FOSSIL_GLOBAL, + TYPE_FOSSIL_LOCAL, + TYPE_FOSSIL_COMMAND + }; + + Setting(QVariant value, SettingType type) : Value(value), Type(type) + {} + QVariant Value; + SettingType Type; + }; + typedef QMap mappings_t; + + + Settings(bool portableMode = false); + ~Settings(); + + void ApplyEnvironment(); + + // App configuration access + class QSettings * GetStore() { return store; } + bool HasValue(const QString &name) const; // store->contains(FUEL_SETTING_FOSSIL_PATH) + const QVariant GetValue(const QString &name); // settings.store->value + void SetValue(const QString &name, const QVariant &value); // settings.store->value + + // Fossil configuration access + QVariant & GetFossilValue(const QString &name); + void SetFossilValue(const QString &name, const QVariant &value); + mappings_t & GetMappings() { return Mappings; } + + bool SupportsLang(const QString &langId) const; + bool InstallLang(const QString &langId); +private: + mappings_t Mappings; + class QSettings *store; + QTranslator translator; +}; + + +#endif // SETTINGS_H diff --git a/src/SettingsDialog.cpp b/src/SettingsDialog.cpp index 041dd21..8ee5bd9 100644 --- a/src/SettingsDialog.cpp +++ b/src/SettingsDialog.cpp @@ -2,13 +2,7 @@ #include "ui_SettingsDialog.h" #include "Utils.h" -#include -#include #include -#include -#include -#include - /////////////////////////////////////////////////////////////////////////////// SettingsDialog::SettingsDialog(QWidget *parent, Settings &_settings) : @@ -163,120 +157,3 @@ QString SettingsDialog::LangNameToId(const QString &name) return ""; } - -/////////////////////////////////////////////////////////////////////////////// -Settings::Settings(bool portableMode) : store(0) -{ - Mappings.insert(FOSSIL_SETTING_GDIFF_CMD, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); - Mappings.insert(FOSSIL_SETTING_GMERGE_CMD, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); - Mappings.insert(FOSSIL_SETTING_PROXY_URL, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); - - Mappings.insert(FOSSIL_SETTING_IGNORE_GLOB, Setting("", Setting::TYPE_FOSSIL_LOCAL)); - Mappings.insert(FOSSIL_SETTING_CRNL_GLOB, Setting("", Setting::TYPE_FOSSIL_LOCAL)); - Mappings.insert(FOSSIL_SETTING_REMOTE_URL, Setting("off", Setting::TYPE_FOSSIL_COMMAND)); - - // 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)) - store = new QSettings(ini_path, QSettings::IniFormat); - else - { - // Linux: ~/.config/organizationName/applicationName.conf - // Windows: HKEY_CURRENT_USER\Software\organizationName\Fuel - store = new QSettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName()); - } - Q_ASSERT(store); - - if(!HasValue(FUEL_SETTING_FILE_DBLCLICK)) - SetValue(FUEL_SETTING_FILE_DBLCLICK, 0); - if(!HasValue(FUEL_SETTING_LANGUAGE) && SupportsLang(QLocale::system().name())) - SetValue(FUEL_SETTING_LANGUAGE, QLocale::system().name()); - if(!HasValue(FUEL_SETTING_WEB_BROWSER)) - SetValue(FUEL_SETTING_WEB_BROWSER, 0); - if(!HasValue(FUEL_SETTING_HTTP_PORT)) - SetValue(FUEL_SETTING_HTTP_PORT, "8090"); - - ApplyEnvironment(); -} - -//----------------------------------------------------------------------------- -Settings::~Settings() -{ - Q_ASSERT(store); - delete store; -} - -//----------------------------------------------------------------------------- -void Settings::ApplyEnvironment() -{ - QString lang_id = GetValue(FUEL_SETTING_LANGUAGE).toString(); -#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) - QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); -#endif - if(!InstallLang(lang_id)) - SetValue(FUEL_SETTING_LANGUAGE, "en_US"); -} - -//----------------------------------------------------------------------------- -bool Settings::InstallLang(const QString &langId) -{ - if(langId == "en_US") - { - QCoreApplication::instance()->removeTranslator(&translator); - return true; - } - - QString locale_path = QString(":intl/intl/%0.qm").arg(langId); - if(!translator.load(locale_path)) - return false; - - Q_ASSERT(!translator.isEmpty()); - QCoreApplication::instance()->installTranslator(&translator); - - - return true; -} - -//----------------------------------------------------------------------------- -bool Settings::HasValue(const QString &name) const -{ - return store->contains(name); -} - -//----------------------------------------------------------------------------- -const QVariant Settings::GetValue(const QString &name) -{ - if(!HasValue(name)) - return QVariant(); - return store->value(name); -} - -//----------------------------------------------------------------------------- -void Settings::SetValue(const QString &name, const QVariant &value) -{ - store->setValue(name, value); -} - -//----------------------------------------------------------------------------- -QVariant &Settings::GetFossilValue(const QString &name) -{ - mappings_t::iterator it=Mappings.find(name); - Q_ASSERT(it!=Mappings.end()); - return it.value().Value; -} - -//----------------------------------------------------------------------------- -void Settings::SetFossilValue(const QString &name, const QVariant &value) -{ - mappings_t::iterator it=Mappings.find(name); - Q_ASSERT(it!=Mappings.end()); - it->Value = value; -} - -//----------------------------------------------------------------------------- -bool Settings::SupportsLang(const QString &langId) const -{ - QString locale_path = QString(":intl/intl/%0.qm").arg(langId); - QResource res(locale_path); - return res.isValid(); -} diff --git a/src/SettingsDialog.h b/src/SettingsDialog.h index 49cada8..3969f88 100644 --- a/src/SettingsDialog.h +++ b/src/SettingsDialog.h @@ -2,82 +2,12 @@ #define SETTINGSDIALOG_H #include -#include -#include -#include - +#include "Settings.h" namespace Ui { class SettingsDialog; } -#define FUEL_SETTING_FOSSIL_PATH "FossilPath" -#define FUEL_SETTING_COMMIT_MSG "CommitMsgHistory" -#define FUEL_SETTING_FILE_DBLCLICK "FileDblClickAction" -#define FUEL_SETTING_LANGUAGE "Language" -#define FUEL_SETTING_WEB_BROWSER "WebBrowser" -#define FUEL_SETTING_HTTP_PORT "HTTPPort" - -#define FOSSIL_SETTING_GDIFF_CMD "gdiff-command" -#define FOSSIL_SETTING_GMERGE_CMD "gmerge-command" -#define FOSSIL_SETTING_PROXY_URL "proxy" -#define FOSSIL_SETTING_IGNORE_GLOB "ignore-glob" -#define FOSSIL_SETTING_CRNL_GLOB "crnl-glob" -#define FOSSIL_SETTING_REMOTE_URL "remote-url" - - -enum FileDblClickAction -{ - FILE_DLBCLICK_ACTION_DIFF, - FILE_DLBCLICK_ACTION_OPEN, - FILE_DLBCLICK_ACTION_OPENCONTAINING, - FILE_DLBCLICK_ACTION_MAX -}; - -struct Settings -{ - struct Setting - { - enum SettingType - { - TYPE_FOSSIL_GLOBAL, - TYPE_FOSSIL_LOCAL, - TYPE_FOSSIL_COMMAND - }; - - Setting(QVariant value, SettingType type) : Value(value), Type(type) - {} - QVariant Value; - SettingType Type; - }; - typedef QMap mappings_t; - - - Settings(bool portableMode = false); - ~Settings(); - - void ApplyEnvironment(); - - // App configuration access - class QSettings * GetStore() { return store; } - bool HasValue(const QString &name) const; // store->contains(FUEL_SETTING_FOSSIL_PATH) - const QVariant GetValue(const QString &name); // settings.store->value - void SetValue(const QString &name, const QVariant &value); // settings.store->value - - // Fossil configuration access - QVariant & GetFossilValue(const QString &name); - void SetFossilValue(const QString &name, const QVariant &value); - mappings_t & GetMappings() { return Mappings; } - - bool SupportsLang(const QString &langId) const; - bool InstallLang(const QString &langId); -private: - mappings_t Mappings; - class QSettings *store; - QTranslator translator; -}; - - class SettingsDialog : public QDialog { Q_OBJECT From 973399d9581be8ac6442e8721796d1dae682e1a5 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 17:08:46 +0000 Subject: [PATCH 87/90] Fossil ui port is now optional FossilOrigin-Name: 7ffecfc49aeb4ccb8b2972ac5c6eddd265d3b578 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/Fossil.cpp | 8 +++++++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 13ea0e4..78d6130 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Moved\sSettings\sto\sseparate\sfiles -D 2015-05-24T15:55:14.690 +C Fossil\sui\sport\sis\snow\soptional\n +D 2015-05-24T17:08:46.715 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,7 +196,7 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp a0b44c6b77de686e45cb4d84cfbf94865c8b39bf +F src/Fossil.cpp 62b898eeaa8c664619a3c8ed01295ef287771f75 F src/Fossil.h 651d2a1c052abe2804f9eff366bf2561dc54f7eb F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 @@ -224,7 +224,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 22dc5cebf86223754dc8e0b14707b4cb81c95cc6 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 5dcb374fdf60b627d8f0452cea8add32a2c900e8 -R f555b4b17a768b27e9982054ac627534 +P 46641dde6cd75e57b23d7df78b9e06e3c1e38993 +R 3ce93b5fd6cc01079b013a2f74f1f2a5 U kostas -Z 6d75632de0f5ea31adfadb3e318adc99 +Z 288d5f9c12ff4d2d05a8c8b09dbdb7e7 diff --git a/manifest.uuid b/manifest.uuid index f6464fd..52e9f77 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -46641dde6cd75e57b23d7df78b9e06e3c1e38993 \ No newline at end of file +7ffecfc49aeb4ccb8b2972ac5c6eddd265d3b578 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 7990451..5a23acc 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -1000,7 +1000,13 @@ bool Fossil::startUI(const QString &httpPort) log(QObject::tr("Starting Fossil browser UI. Please wait.")+"\n"); QString fossil = getFossilPath(); - fossilUI.start(fossil, QStringList() << "server" << "--localauth" << "-P" << httpPort ); + QStringList params; + params << "server" << "--localauth"; + + if(!httpPort.isEmpty()) + params << "-P" << httpPort; + + fossilUI.start(params); if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running) { From 7ce75bcc63b7de0db1854905bda8b900e3dc2ae5 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 17:44:01 +0000 Subject: [PATCH 88/90] Fuel now uses the http port that Fossil reports when starting the web ui. FossilOrigin-Name: 5c9a7defad9f6c77db2447df1d904e24001ec40e --- manifest | 18 +++++++------- manifest.uuid | 2 +- src/Fossil.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++-- src/Fossil.h | 8 +++++-- src/MainWindow.cpp | 12 ++-------- src/MainWindow.h | 1 - 6 files changed, 75 insertions(+), 25 deletions(-) diff --git a/manifest b/manifest index 78d6130..5c12c3b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fossil\sui\sport\sis\snow\soptional\n -D 2015-05-24T17:08:46.715 +C Fuel\snow\suses\sthe\shttp\sport\sthat\sFossil\sreports\swhen\sstarting\sthe\sweb\sui.\n +D 2015-05-24T17:44:01.161 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,12 +196,12 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 62b898eeaa8c664619a3c8ed01295ef287771f75 -F src/Fossil.h 651d2a1c052abe2804f9eff366bf2561dc54f7eb +F src/Fossil.cpp 0d4c50327a61c48506d2d45e28cd6f71f1697ea2 +F src/Fossil.h 31765ef57e20a860914372d56c024033b30aa765 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 537c458f5b7ad78ee3b9ad2e8479cac2f6dd8ec3 -F src/MainWindow.h cfc19137172a9200cff2b68676cbb26c2611a7d8 +F src/MainWindow.cpp c25a7a4898b9fe80154d2cb7abb81bcafcd50dd6 +F src/MainWindow.h d398df5f8b27d7f1ccae6a7f1fd5ef2c2236002b F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba @@ -224,7 +224,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 22dc5cebf86223754dc8e0b14707b4cb81c95cc6 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 46641dde6cd75e57b23d7df78b9e06e3c1e38993 -R 3ce93b5fd6cc01079b013a2f74f1f2a5 +P 7ffecfc49aeb4ccb8b2972ac5c6eddd265d3b578 +R c614f64a06cb8d44d405228318daf9d9 U kostas -Z 288d5f9c12ff4d2d05a8c8b09dbdb7e7 +Z d1c35d582fe773add2faa8e714e12402 diff --git a/manifest.uuid b/manifest.uuid index 52e9f77..40633ee 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7ffecfc49aeb4ccb8b2972ac5c6eddd265d3b578 \ No newline at end of file +5c9a7defad9f6c77db2447df1d904e24001ec40e \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 5a23acc..148502e 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -1,7 +1,6 @@ #include "Fossil.h" #include #include -#include #include #include #include @@ -14,6 +13,9 @@ static const unsigned char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; // 19: [5c46757d4b9765] on 2012-04-22 04:41:15 static const QRegExp REGEX_STASH("\\s*(\\d+):\\s+\\[(.*)\\] on (\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)", Qt::CaseInsensitive); +// Listening for HTTP requests on TCP port 8081 +static const QRegExp REGEX_PORT(".*TCP port ([0-9]+)\\n", Qt::CaseSensitive); + /////////////////////////////////////////////////////////////////////////////// RepoStatus Fossil::getRepoStatus() { @@ -1006,7 +1008,7 @@ bool Fossil::startUI(const QString &httpPort) if(!httpPort.isEmpty()) params << "-P" << httpPort; - fossilUI.start(params); + fossilUI.start(getFossilPath(), params); if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running) { @@ -1014,6 +1016,50 @@ bool Fossil::startUI(const QString &httpPort) return false; } +#ifdef Q_OS_WIN + QTextCodec *codec = QTextCodec::codecForName("UTF-8"); +#else + QTextCodec *codec = QTextCodec::codecForLocale(); +#endif + + Q_ASSERT(codec); + QTextDecoder *decoder = codec->makeDecoder(); + Q_ASSERT(decoder); + + fossilUIPort.clear(); + + // Wait for fossil to report the http port + QString buffer; + while(true) + { + QProcess::ProcessState state = fossilUI.state(); + qint64 bytes_avail = fossilUI.logBytesAvailable(); + + if(state!=QProcess::Running && bytes_avail<1) + break; + + QByteArray input; + fossilUI.getLogAndClear(input); + + buffer += decoder->toUnicode(input); + + // Normalize line endings + buffer = buffer.replace("\r\n", "\n"); + buffer = buffer.replace("\r", "\n"); + + int index = REGEX_PORT.indexIn(buffer); + if(index==-1) + { + QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + continue; + } + + // Extract port + fossilUIPort = REGEX_PORT.cap(1).trimmed(); + + // Done parsing + break; + } return true; } @@ -1029,4 +1075,13 @@ void Fossil::stopUI() #endif } fossilUI.close(); + fossilUIPort.clear(); +} + +//------------------------------------------------------------------------------ +QString Fossil::getUIHttpAddress() const +{ + if(fossilUIPort.isEmpty()) + return QString(); + return "http://127.0.0.1:"+fossilUIPort; } diff --git a/src/Fossil.h b/src/Fossil.h index 52be947..1925f3d 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -5,7 +5,7 @@ class QStringList; #include #include #include -#include +#include "LoggedProcess.h" #include "Utils.h" typedef QMap stashmap_t; @@ -125,6 +125,9 @@ public: const QString &getCurrentRevision() const { return currentRevision; } const QStringList &getCurrentTags() const { return currentTags; } + const QString &getUIHttpPort() const { return fossilUIPort; } + QString getUIHttpAddress() const; + private: void log(const QString &text, bool isHTML=false) { @@ -142,7 +145,8 @@ private: QString projectName; QString currentRevision; QStringList currentTags; - QProcess fossilUI; + LoggedProcess fossilUI; + QString fossilUIPort; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 5b60317..02b50b0 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1083,7 +1083,7 @@ void MainWindow::fossilBrowse(const QString &fossilUrl) bool use_internal = settings.GetValue(FUEL_SETTING_WEB_BROWSER).toInt() == 1; - QUrl url = QUrl(getFossilHttpAddress()+fossilUrl); + QUrl url = QUrl(fossil().getUIHttpAddress()+fossilUrl); if(use_internal) { @@ -1254,8 +1254,7 @@ void MainWindow::on_actionDiff_triggered() //------------------------------------------------------------------------------ bool MainWindow::startUI() { - QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString(); - bool started = fossil().startUI(port); + bool started = fossil().startUI(""); ui->actionFossilUI->setChecked(started); return started; } @@ -1724,13 +1723,6 @@ void MainWindow::on_actionViewAsFolders_triggered() updateFileView(); } -//------------------------------------------------------------------------------ -QString MainWindow::getFossilHttpAddress() -{ - QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString(); - return "http://127.0.0.1:"+port; -} - //------------------------------------------------------------------------------ void MainWindow::onWorkspaceTreeViewSelectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/) { diff --git a/src/MainWindow.h b/src/MainWindow.h index dc63ae3..0517589 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -48,7 +48,6 @@ private: void rebuildRecent(); bool openWorkspace(const QString &path); void loadFossilSettings(); - QString getFossilHttpAddress(); void updateWorkspaceView(); void updateFileView(); void selectRootDir(); From 130df73f35a7c1ed45a8ce3c37817038b8ff14a1 Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 18:19:19 +0000 Subject: [PATCH 89/90] Separated Application and Fossil settings into separate dialogs. FossilOrigin-Name: 97d0d1e2408832e1fc8b532e059b2141afd9ac55 --- fuel.pro | 3 + manifest | 33 +-- manifest.uuid | 2 +- src/FslSettingsDialog.cpp | 72 ++++++ src/FslSettingsDialog.h | 33 +++ src/MainWindow.cpp | 15 +- src/MainWindow.h | 3 +- src/Settings.cpp | 3 +- src/Settings.h | 2 +- src/SettingsDialog.cpp | 36 --- src/SettingsDialog.h | 2 - ui/CommitDialog.ui | 2 +- ui/FslSettingsDialog.ui | 300 +++++++++++++++++++++ ui/MainWindow.ui | 14 + ui/SettingsDialog.ui | 529 +++++++++++--------------------------- 15 files changed, 616 insertions(+), 433 deletions(-) create mode 100644 src/FslSettingsDialog.cpp create mode 100644 src/FslSettingsDialog.h create mode 100644 ui/FslSettingsDialog.ui diff --git a/fuel.pro b/fuel.pro index 9b84a57..f606f86 100644 --- a/fuel.pro +++ b/fuel.pro @@ -47,6 +47,7 @@ SOURCES += src/main.cpp\ src/CommitDialog.cpp \ src/FileActionDialog.cpp \ src/SettingsDialog.cpp \ + src/FslSettingsDialog.cpp \ src/CloneDialog.cpp \ src/RevisionDialog.cpp \ src/Utils.cpp \ @@ -63,6 +64,7 @@ HEADERS += src/MainWindow.h \ src/CommitDialog.h \ src/FileActionDialog.h \ src/SettingsDialog.h \ + src/FslSettingsDialog.h \ src/CloneDialog.h \ src/RevisionDialog.h \ src/Utils.h \ @@ -79,6 +81,7 @@ FORMS += ui/MainWindow.ui \ ui/CommitDialog.ui \ ui/FileActionDialog.ui \ ui/SettingsDialog.ui \ + ui/FslSettingsDialog.ui \ ui/CloneDialog.ui \ ui/BrowserWidget.ui \ ui/RevisionDialog.ui diff --git a/manifest b/manifest index 5c12c3b..4ab163c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fuel\snow\suses\sthe\shttp\sport\sthat\sFossil\sreports\swhen\sstarting\sthe\sweb\sui.\n -D 2015-05-24T17:44:01.161 +C Separated\sApplication\sand\sFossil\ssettings\sinto\sseparate\sdialogs. +D 2015-05-24T18:19:19.178 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro 81afa5c27542c0ac63faa6a310a0e6bb98244609 +F fuel.pro b010c4ee3093112003a9d27045927efce5985dab F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -198,18 +198,20 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/Fossil.cpp 0d4c50327a61c48506d2d45e28cd6f71f1697ea2 F src/Fossil.h 31765ef57e20a860914372d56c024033b30aa765 +F src/FslSettingsDialog.cpp f5a34a70ecb0560d2b6eea6bf27e42048548aedd +F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp c25a7a4898b9fe80154d2cb7abb81bcafcd50dd6 -F src/MainWindow.h d398df5f8b27d7f1ccae6a7f1fd5ef2c2236002b +F src/MainWindow.cpp 4cbfa1fdf3092b97649711388576230e4808d50e +F src/MainWindow.h a848462f21423b5c1e0c218cab1805c308299607 F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba F src/SearchBox.h 0c78d3a68136dab3e0e71b83ae36f22bd2688ab2 -F src/Settings.cpp 90eb11d68d0b55a144aab0d78946de98399ceef6 -F src/Settings.h 43fe09ee02ca5b7adb3cc5ab467b078ce3a9a980 -F src/SettingsDialog.cpp efc9de9eac816074036b8f4215f1a0cbcbb9e46d -F src/SettingsDialog.h 02223bf6d3bf51a21ca9d7206e0ecc6f7d6206b7 +F src/Settings.cpp 6ab826273b9693bfcd65f0f59b550ae2aa3577f1 +F src/Settings.h 1ff8bb71e19949150e8caa4f5e5f13f8810e496b +F src/SettingsDialog.cpp 25be4c351dd21ea9132321944f42dc0bc22fb128 +F src/SettingsDialog.h b324dfd77ca3ad24fd83588aaf79a7e4c291e716 F src/Utils.cpp c48e3316f3a0a5d735e8d4953710500358985e32 F src/Utils.h c2a28611bd77fb35ea3dcf65fb60ed585f68aa3c F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 @@ -219,12 +221,13 @@ F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x F ui/BrowserWidget.ui 994ad9ea0e9f5815d6b1a27acc2f6f39164c507f F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 -F ui/CommitDialog.ui 5270bbf9c0b0c64d695420388160e2bb0e217d9f +F ui/CommitDialog.ui aea77347eef82b6b591f31fb058a1bb96193c728 F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui 22dc5cebf86223754dc8e0b14707b4cb81c95cc6 +F ui/FslSettingsDialog.ui 042717833d8efea905b4fc380bad580be809717d w ui/FossilSettingsDialog.ui +F ui/MainWindow.ui adf8714bec560da44cd84d74f2ce60f7cea09a70 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd -F ui/SettingsDialog.ui 5aafd8784268ea7cd828330d4673500b8f38d6db -P 7ffecfc49aeb4ccb8b2972ac5c6eddd265d3b578 -R c614f64a06cb8d44d405228318daf9d9 +F ui/SettingsDialog.ui 4c480cd595a32664d01c85bf74845c4282fc0068 +P 5c9a7defad9f6c77db2447df1d904e24001ec40e +R 2a40906bd18bac1ee536fd4bf0202e77 U kostas -Z d1c35d582fe773add2faa8e714e12402 +Z 4c1489c21209abe55181b48a52b2520c diff --git a/manifest.uuid b/manifest.uuid index 40633ee..19b44c2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5c9a7defad9f6c77db2447df1d904e24001ec40e \ No newline at end of file +97d0d1e2408832e1fc8b532e059b2141afd9ac55 \ No newline at end of file diff --git a/src/FslSettingsDialog.cpp b/src/FslSettingsDialog.cpp new file mode 100644 index 0000000..62de753 --- /dev/null +++ b/src/FslSettingsDialog.cpp @@ -0,0 +1,72 @@ +#include "FslSettingsDialog.h" +#include "ui_FslSettingsDialog.h" +#include "Utils.h" + +#include + +/////////////////////////////////////////////////////////////////////////////// +FslSettingsDialog::FslSettingsDialog(QWidget *parent, Settings &_settings) : + QDialog(parent, Qt::Sheet), + ui(new Ui::FslSettingsDialog), + settings(&_settings) +{ + ui->setupUi(this); + + ui->lineUIPort->setText(settings->GetValue(FOSSIL_SETTING_HTTP_PORT).toString()); + + // Global Settings + ui->lineGDiffCommand->setText(settings->GetFossilValue(FOSSIL_SETTING_GDIFF_CMD).toString()); + ui->lineGMergeCommand->setText(settings->GetFossilValue(FOSSIL_SETTING_GMERGE_CMD).toString()); + ui->lineProxy->setText(settings->GetFossilValue(FOSSIL_SETTING_PROXY_URL).toString()); + + // Repository Settings + ui->lineRemoteURL->setText(settings->GetFossilValue(FOSSIL_SETTING_REMOTE_URL).toString()); + ui->lineIgnore->setText(settings->GetFossilValue(FOSSIL_SETTING_IGNORE_GLOB).toString()); + ui->lineIgnoreCRNL->setText(settings->GetFossilValue(FOSSIL_SETTING_CRNL_GLOB).toString()); +} + +//----------------------------------------------------------------------------- +FslSettingsDialog::~FslSettingsDialog() +{ + delete ui; +} + +//----------------------------------------------------------------------------- +bool FslSettingsDialog::run(QWidget *parent, Settings &settings) +{ + FslSettingsDialog dlg(parent, settings); + return dlg.exec() == QDialog::Accepted; +} + +//----------------------------------------------------------------------------- +void FslSettingsDialog::on_buttonBox_accepted() +{ + settings->SetValue(FOSSIL_SETTING_HTTP_PORT, ui->lineUIPort->text()); + + settings->SetFossilValue(FOSSIL_SETTING_GDIFF_CMD, ui->lineGDiffCommand->text()); + settings->SetFossilValue(FOSSIL_SETTING_GMERGE_CMD, ui->lineGMergeCommand->text()); + settings->SetFossilValue(FOSSIL_SETTING_PROXY_URL, ui->lineProxy->text()); + + settings->SetFossilValue(FOSSIL_SETTING_REMOTE_URL, ui->lineRemoteURL->text()); + settings->SetFossilValue(FOSSIL_SETTING_IGNORE_GLOB, ui->lineIgnore->text()); + settings->SetFossilValue(FOSSIL_SETTING_CRNL_GLOB, ui->lineIgnoreCRNL->text()); + + settings->ApplyEnvironment(); +} + +//----------------------------------------------------------------------------- +void FslSettingsDialog::on_btnSelectFossilGDiff_clicked() +{ + QString path = SelectExe(this, tr("Select Graphical Diff application")); + if(!path.isEmpty()) + ui->lineGDiffCommand->setText(QDir::toNativeSeparators(path)); +} + +//----------------------------------------------------------------------------- +void FslSettingsDialog::on_btnSelectGMerge_clicked() +{ + QString path = SelectExe(this, tr("Select Graphical Merge application")); + if(!path.isEmpty()) + ui->lineGMergeCommand->setText(path); +} + diff --git a/src/FslSettingsDialog.h b/src/FslSettingsDialog.h new file mode 100644 index 0000000..ed71046 --- /dev/null +++ b/src/FslSettingsDialog.h @@ -0,0 +1,33 @@ +#ifndef FSLSETTINGSDIALOG_H +#define FSLSETTINGSDIALOG_H + +#include +#include "Settings.h" + +namespace Ui { + class FslSettingsDialog; +} + +class FslSettingsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit FslSettingsDialog(QWidget *parent, Settings &_settings); + ~FslSettingsDialog(); + + static bool run(QWidget *parent, Settings &_settings); + + +private slots: + void on_buttonBox_accepted(); + void on_btnSelectFossilGDiff_clicked(); + void on_btnSelectGMerge_clicked(); + +private: + + Ui::FslSettingsDialog *ui; + Settings *settings; +}; + +#endif // FSLSETTINGSDIALOG_H diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 02b50b0..09896a2 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -12,6 +12,8 @@ #include #include #include +#include "SettingsDialog.h" +#include "FslSettingsDialog.h" #include "SearchBox.h" #include "CommitDialog.h" #include "FileActionDialog.h" @@ -19,7 +21,7 @@ #include "RevisionDialog.h" #include "Utils.h" -#define REVISION_LATEST "Latest" +#define REVISION_LATEST "Latest revision" //----------------------------------------------------------------------------- enum @@ -1641,11 +1643,19 @@ void MainWindow::loadFossilSettings() //------------------------------------------------------------------------------ void MainWindow::on_actionSettings_triggered() +{ + // Run the dialog + if(!SettingsDialog::run(this, settings)) + return; +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionFossilSettings_triggered() { loadFossilSettings(); // Run the dialog - if(!SettingsDialog::run(this, settings)) + if(!FslSettingsDialog::run(this, settings)) return; // Apply settings @@ -1668,6 +1678,7 @@ void MainWindow::on_actionSettings_triggered() QString value = it.value().Value.toString(); fossil().setFossilSetting(name, value, type == Settings::Setting::TYPE_FOSSIL_GLOBAL); } + } //------------------------------------------------------------------------------ diff --git a/src/MainWindow.h b/src/MainWindow.h index 0517589..dc7eb64 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -4,7 +4,7 @@ #include #include #include -#include "SettingsDialog.h" +#include "Settings.h" #include "Workspace.h" namespace Ui { @@ -99,6 +99,7 @@ private slots: void on_actionAbout_triggered(); void on_actionUpdate_triggered(); void on_actionSettings_triggered(); + void on_actionFossilSettings_triggered(); void on_actionViewUnchanged_triggered(); void on_actionViewModified_triggered(); void on_actionViewUnknown_triggered(); diff --git a/src/Settings.cpp b/src/Settings.cpp index 00941cf..95ce3cf 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -13,6 +13,7 @@ Settings::Settings(bool portableMode) : store(0) Mappings.insert(FOSSIL_SETTING_GDIFF_CMD, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); Mappings.insert(FOSSIL_SETTING_GMERGE_CMD, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); Mappings.insert(FOSSIL_SETTING_PROXY_URL, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); + Mappings.insert(FOSSIL_SETTING_HTTP_PORT, Setting("", Setting::TYPE_FOSSIL_GLOBAL)); Mappings.insert(FOSSIL_SETTING_IGNORE_GLOB, Setting("", Setting::TYPE_FOSSIL_LOCAL)); Mappings.insert(FOSSIL_SETTING_CRNL_GLOB, Setting("", Setting::TYPE_FOSSIL_LOCAL)); @@ -36,8 +37,6 @@ Settings::Settings(bool portableMode) : store(0) SetValue(FUEL_SETTING_LANGUAGE, QLocale::system().name()); if(!HasValue(FUEL_SETTING_WEB_BROWSER)) SetValue(FUEL_SETTING_WEB_BROWSER, 0); - if(!HasValue(FUEL_SETTING_HTTP_PORT)) - SetValue(FUEL_SETTING_HTTP_PORT, "8090"); ApplyEnvironment(); } diff --git a/src/Settings.h b/src/Settings.h index bcb40fa..f0535ee 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -10,7 +10,6 @@ #define FUEL_SETTING_FILE_DBLCLICK "FileDblClickAction" #define FUEL_SETTING_LANGUAGE "Language" #define FUEL_SETTING_WEB_BROWSER "WebBrowser" -#define FUEL_SETTING_HTTP_PORT "HTTPPort" #define FOSSIL_SETTING_GDIFF_CMD "gdiff-command" #define FOSSIL_SETTING_GMERGE_CMD "gmerge-command" @@ -18,6 +17,7 @@ #define FOSSIL_SETTING_IGNORE_GLOB "ignore-glob" #define FOSSIL_SETTING_CRNL_GLOB "crnl-glob" #define FOSSIL_SETTING_REMOTE_URL "remote-url" +#define FOSSIL_SETTING_HTTP_PORT "http-port" enum FileDblClickAction diff --git a/src/SettingsDialog.cpp b/src/SettingsDialog.cpp index 8ee5bd9..59b86d7 100644 --- a/src/SettingsDialog.cpp +++ b/src/SettingsDialog.cpp @@ -25,7 +25,6 @@ SettingsDialog::SettingsDialog(QWidget *parent, Settings &_settings) : ui->lineFossilPath->setText(QDir::toNativeSeparators(settings->GetValue(FUEL_SETTING_FOSSIL_PATH).toString())); ui->cmbDoubleClickAction->setCurrentIndex(settings->GetValue(FUEL_SETTING_FILE_DBLCLICK).toInt()); ui->cmbFossilBrowser->setCurrentIndex(settings->GetValue(FUEL_SETTING_WEB_BROWSER).toInt()); - ui->lineUIPort->setText(settings->GetValue(FUEL_SETTING_HTTP_PORT).toString()); // Initialize language combo foreach(const LangMap &m, langMap) @@ -37,15 +36,6 @@ SettingsDialog::SettingsDialog(QWidget *parent, Settings &_settings) : ui->cmbActiveLanguage->findText( LangIdToName(lang))); - // Global Settings - ui->lineGDiffCommand->setText(settings->GetFossilValue(FOSSIL_SETTING_GDIFF_CMD).toString()); - ui->lineGMergeCommand->setText(settings->GetFossilValue(FOSSIL_SETTING_GMERGE_CMD).toString()); - ui->lineProxy->setText(settings->GetFossilValue(FOSSIL_SETTING_PROXY_URL).toString()); - - // Repository Settings - ui->lineRemoteURL->setText(settings->GetFossilValue(FOSSIL_SETTING_REMOTE_URL).toString()); - ui->lineIgnore->setText(settings->GetFossilValue(FOSSIL_SETTING_IGNORE_GLOB).toString()); - ui->lineIgnoreCRNL->setText(settings->GetFossilValue(FOSSIL_SETTING_CRNL_GLOB).toString()); } //----------------------------------------------------------------------------- @@ -68,7 +58,6 @@ void SettingsDialog::on_buttonBox_accepted() Q_ASSERT(ui->cmbDoubleClickAction->currentIndex()>=FILE_DLBCLICK_ACTION_DIFF && ui->cmbDoubleClickAction->currentIndex()SetValue(FUEL_SETTING_FILE_DBLCLICK, ui->cmbDoubleClickAction->currentIndex()); settings->SetValue(FUEL_SETTING_WEB_BROWSER, ui->cmbFossilBrowser->currentIndex()); - settings->SetValue(FUEL_SETTING_HTTP_PORT, ui->lineUIPort->text()); Q_ASSERT(settings->HasValue(FUEL_SETTING_LANGUAGE)); QString curr_langid = settings->GetValue(FUEL_SETTING_LANGUAGE).toString(); @@ -79,15 +68,6 @@ void SettingsDialog::on_buttonBox_accepted() if(curr_langid != new_langid) QMessageBox::information(this, tr("Restart required"), tr("The language change will take effect after restarting the application"), QMessageBox::Ok); - settings->SetFossilValue(FOSSIL_SETTING_GDIFF_CMD, ui->lineGDiffCommand->text()); - settings->SetFossilValue(FOSSIL_SETTING_GMERGE_CMD, ui->lineGMergeCommand->text()); - settings->SetFossilValue(FOSSIL_SETTING_PROXY_URL, ui->lineProxy->text()); - - settings->SetFossilValue(FOSSIL_SETTING_REMOTE_URL, ui->lineRemoteURL->text()); - settings->SetFossilValue(FOSSIL_SETTING_IGNORE_GLOB, ui->lineIgnore->text()); - settings->SetFossilValue(FOSSIL_SETTING_CRNL_GLOB, ui->lineIgnoreCRNL->text()); - - settings->ApplyEnvironment(); } @@ -99,22 +79,6 @@ void SettingsDialog::on_btnSelectFossil_clicked() ui->lineFossilPath->setText(QDir::toNativeSeparators(path)); } -//----------------------------------------------------------------------------- -void SettingsDialog::on_btnSelectFossilGDiff_clicked() -{ - QString path = SelectExe(this, tr("Select Graphical Diff application")); - if(!path.isEmpty()) - ui->lineGDiffCommand->setText(QDir::toNativeSeparators(path)); -} - -//----------------------------------------------------------------------------- -void SettingsDialog::on_btnSelectGMerge_clicked() -{ - QString path = SelectExe(this, tr("Select Graphical Merge application")); - if(!path.isEmpty()) - ui->lineGMergeCommand->setText(path); -} - //----------------------------------------------------------------------------- void SettingsDialog::on_btnClearMessageHistory_clicked() { diff --git a/src/SettingsDialog.h b/src/SettingsDialog.h index 3969f88..418f2ea 100644 --- a/src/SettingsDialog.h +++ b/src/SettingsDialog.h @@ -22,8 +22,6 @@ public: private slots: void on_btnSelectFossil_clicked(); void on_buttonBox_accepted(); - void on_btnSelectFossilGDiff_clicked(); - void on_btnSelectGMerge_clicked(); void on_btnClearMessageHistory_clicked(); private: diff --git a/ui/CommitDialog.ui b/ui/CommitDialog.ui index 5407673..0907856 100644 --- a/ui/CommitDialog.ui +++ b/ui/CommitDialog.ui @@ -10,7 +10,7 @@ 0 0 400 - 397 + 394 diff --git a/ui/FslSettingsDialog.ui b/ui/FslSettingsDialog.ui new file mode 100644 index 0000000..db9ea78 --- /dev/null +++ b/ui/FslSettingsDialog.ui @@ -0,0 +1,300 @@ + + + FslSettingsDialog + + + Qt::WindowModal + + + + 0 + 0 + 457 + 266 + + + + Fossil Settings + + + + :/icons/icon-application:/icons/icon-application + + + true + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 100 + 0 + + + + Graphical Diff + + + + + + + + + Path to graphical diff tool + + + + + + + + 0 + 0 + + + + + 24 + 24 + + + + ... + + + + + + + + + + 100 + 0 + + + + Graphical Merge + + + + + + + + + Path to the graphical merge tool + + + + + + + + 0 + 0 + + + + + 24 + 24 + + + + ... + + + + + + + + + + 100 + 0 + + + + HTTP Proxy + + + + + + + + 0 + 0 + + + + The URL of the HTTP proxy + + + + + + + HTTP Port + + + + + + + HTTP port to use for the Fossil web interface + + + + + + + + 0 + 0 + + + + A comma separated list of glob-style file patterns to exclude from Fossil's CR/NL consistency checking + + + + + + + + 100 + 0 + + + + Ignore CR/NL + + + + + + + + 0 + 0 + + + + A comma separated list of glob-style file/path patterns ignored in Fossil file operations + + + + + + + + 100 + 0 + + + + Ignore List + + + + + + + + 0 + 0 + + + + The remote url used to push/pull changes. +URL style user names and passwords are also supported. +For example http://username:password@server.com/fossil + + + + + + + + 100 + 0 + + + + Remote Url + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + FslSettingsDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + FslSettingsDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 82aa591..48409e5 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -276,6 +276,8 @@ + + @@ -925,6 +927,9 @@ Create a branch from the current revision + + Create a branch from the current revision + @@ -957,6 +962,15 @@ Show all files + + + + :/icons/icon-action-settings:/icons/icon-action-settings + + + F&ossil Settings + + diff --git a/ui/SettingsDialog.ui b/ui/SettingsDialog.ui index 1696517..0685355 100644 --- a/ui/SettingsDialog.ui +++ b/ui/SettingsDialog.ui @@ -10,7 +10,7 @@ 0 0 457 - 352 + 204 @@ -25,377 +25,162 @@ - - - 0 - - - - Application - - - - - - - 100 - 0 - - - - Fossil Path - - - - - - - - - Path to the Fossil executable. Leave blank to use the default Fossil - - - - - - - - 0 - 0 - - - - - 24 - 24 - - - - ... - - - - - - - - - - 100 - 0 - - - - Graphical Diff - - - - - - - - - Path to graphical diff tool - - - - - - - - 0 - 0 - - - - - 24 - 24 - - - - ... - - - - - - - - - - 100 - 0 - - - - Graphical Merge - - - - - - - - - Path to the graphical merge tool - - - - - - - - 0 - 0 - - - - - 24 - 24 - - - - ... - - - - - - - - - - 100 - 0 - - - - HTTP Proxy - - - - - - - - 0 - 0 - - - - The URL of the HTTP proxy - - - - - - - HTTP Port - - - - - - - HTTP port to use for the Fossil web interface - - - - - - - - 100 - 0 - - - - Commit Messages - - - - - - - - 0 - 0 - - - - Clear the commit message history - - - Clear - - - - - - - Web Browser - - - - - - - - 0 - 0 - - - - Web browser to use for the Fossil web interface - - - - - - - - 100 - 0 - - - - Double-click Action - - - - - - - - 0 - 0 - - - - Action to perfom when double-clicking a file - - - -1 - - - - - - - Language - - - - - - - - 0 - 0 - - - - Language for the user interface - - - - - - - - Repository - - - - QFormLayout::ExpandingFieldsGrow - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - 100 - 0 - - - - Remote Url - - - - - - - - 0 - 0 - - - - The remote url used to push/pull changes. -URL style user names and passwords are also supported. -For example http://username:password@server.com/fossil - - - - - - - - 100 - 0 - - - - Ignore List - - - - - - - - 0 - 0 - - - - A comma separated list of glob-style file/path patterns ignored in Fossil file operations - - - - - - - - 100 - 0 - - - - Ignore CR/NL - - - - - - - - 0 - 0 - - - - A comma separated list of glob-style file patterns to exclude from Fossil's CR/NL consistency checking - - - - - + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 100 + 0 + + + + Fossil Path + + + + + + + + + Path to the Fossil executable. Leave blank to use the default Fossil + + + + + + + + 0 + 0 + + + + + 24 + 24 + + + + ... + + + + + + + + + + 100 + 0 + + + + Commit Messages + + + + + + + + 0 + 0 + + + + Clear the commit message history + + + Clear + + + + + + + Web Browser + + + + + + + + 0 + 0 + + + + Web browser to use for the Fossil web interface + + + + + + + + 100 + 0 + + + + Double-click Action + + + + + + + + 0 + 0 + + + + Action to perfom when double-clicking a file + + + -1 + + + + + + + Language + + + + + + + + 0 + 0 + + + + Language for the user interface + + + + From eb564e533fb9a9cf4c8a6811a6bd14297784a57c Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 24 May 2015 18:37:29 +0000 Subject: [PATCH 90/90] Removed Create Stash from toolbar Changed "Open Containing" icon Minor cosmetic changes FossilOrigin-Name: 7ebac37b3255e6721889c070b7327a96c63b6c97 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- rsrc/resources.qrc | 1 + ui/MainWindow.ui | 21 ++++++++++++++------- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 4ab163c..66a3301 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Separated\sApplication\sand\sFossil\ssettings\sinto\sseparate\sdialogs. -D 2015-05-24T18:19:19.178 +C Removed\sCreate\sStash\sfrom\stoolbar\nChanged\s"Open\sContaining"\sicon\nMinor\scosmetic\schanges +D 2015-05-24T18:37:29.618 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -183,7 +183,7 @@ F rsrc/icons/Zoom-01.png 67ca532922e9166325c5c75fce1ca3fbb0d2b6a6 F rsrc/icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F rsrc/icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F rsrc/icons/fuel.png 40daf53b7f6bdcdd0d6aa5ef433d078ec5ea4342 -F rsrc/resources.qrc 3864cdcf37e8e746380d33988efacd5c95c6e384 +F rsrc/resources.qrc 388225a5b09c56c12d4cbde8b4d0b4466740fc97 F src/BrowserWidget.cpp 8b8f545cdff4a4188edc698a1b4777f5df46f056 F src/BrowserWidget.h 764d66aa9a93b890298bd0301097739cb4e16597 F src/CloneDialog.cpp 4fc5aa8146ac63ba6ba7341b1635b3025819d708 @@ -223,11 +223,11 @@ F ui/BrowserWidget.ui 994ad9ea0e9f5815d6b1a27acc2f6f39164c507f F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui aea77347eef82b6b591f31fb058a1bb96193c728 F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/FslSettingsDialog.ui 042717833d8efea905b4fc380bad580be809717d w ui/FossilSettingsDialog.ui -F ui/MainWindow.ui adf8714bec560da44cd84d74f2ce60f7cea09a70 +F ui/FslSettingsDialog.ui 042717833d8efea905b4fc380bad580be809717d +F ui/MainWindow.ui 2d36b1ba9886356802f2cddf12c4cabb5ee1acde F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 4c480cd595a32664d01c85bf74845c4282fc0068 -P 5c9a7defad9f6c77db2447df1d904e24001ec40e -R 2a40906bd18bac1ee536fd4bf0202e77 +P 97d0d1e2408832e1fc8b532e059b2141afd9ac55 +R 8f806c4029c039de40ed9c8c7d5c5dca U kostas -Z 4c1489c21209abe55181b48a52b2520c +Z 44ccd8fda388c2e574389286ae9da408 diff --git a/manifest.uuid b/manifest.uuid index 19b44c2..40b8481 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -97d0d1e2408832e1fc8b532e059b2141afd9ac55 \ No newline at end of file +7ebac37b3255e6721889c070b7327a96c63b6c97 \ No newline at end of file diff --git a/rsrc/resources.qrc b/rsrc/resources.qrc index b0ea5fe..779203f 100644 --- a/rsrc/resources.qrc +++ b/rsrc/resources.qrc @@ -96,6 +96,7 @@ icons/Folder Compressed-01.png icons/Folder Delete-01.png icons/Folder Explorer-01.png + icons/Folder Explorer-01.png icons/Folder Generic Blue-01.png icons/Folder Generic Green-01.png icons/Folder Generic Red-01.png diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 48409e5..7774bde 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -323,8 +323,6 @@ - - @@ -663,7 +661,7 @@ - :/icons/icon-item-folder:/icons/icon-item-folder + :/icons/icon-action-folder-explore:/icons/icon-action-folder-explore Open Containing @@ -901,7 +899,10 @@ Create &Tag - Tag current revision + Create a tag for a revision + + + Create a tag for a revision @@ -913,7 +914,7 @@ Delete Tag - Delete tag + Delete Tag @@ -925,10 +926,10 @@ Create &Branch - Create a branch from the current revision + Create a branch from a revision - Create a branch from the current revision + Create a branch from a revision @@ -939,6 +940,12 @@ Merge Branch + + Merge with a branch + + + Merge with a branch +