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