Refactored ui callback mechanism
Bridge now has access to the status bar via the new callbacks FossilOrigin-Name: ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8
This commit is contained in:
parent
906873e7f9
commit
5b3333836d
18
manifest
18
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
|
||||
|
@ -1 +1 @@
|
||||
de84b1fda5b215f404dfafb1d5b95a694707573b
|
||||
ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8
|
@ -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;
|
||||
|
24
src/Bridge.h
24
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
|
||||
|
@ -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
|
@ -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(); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user