Refactored ui callback mechanism

Bridge now has access to the status bar via the new callbacks

FossilOrigin-Name: ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8
This commit is contained in:
kostas 2015-04-27 18:59:09 +00:00
parent 906873e7f9
commit 5b3333836d
6 changed files with 102 additions and 20 deletions

View File

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

View File

@ -1 +1 @@
de84b1fda5b215f404dfafb1d5b95a694707573b
ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8

View File

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

View File

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

View File

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

View File

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