Refactored ui callback mechanism
Bridge now has access to the status bar via the new callbacks FossilOrigin-Name: ee4cf9240e411dfdfc7a4d2b69456fb38a2300c8
This commit is contained in:
@ -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(); }
|
||||
|
Reference in New Issue
Block a user