From 4c63deae5cd42b72abe0422bab54a80888167bf1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 16 Jan 2015 16:06:16 +0100 Subject: [PATCH] Git/VCS: Use spinning progress indicator for log view Show a spinning progress indicator instead of the "Waiting for data" text for e.g. the git log view and other commands that use VcsBaseEditor. Change-Id: Ie4c73f85397f8809bda6bb276140eb695d96174f Reviewed-by: Orgad Shaneh --- src/plugins/git/gitclient.cpp | 6 ++---- src/plugins/git/gitclient.h | 1 - src/plugins/vcsbase/vcsbaseeditor.cpp | 27 ++++++++++++++++++++++++++- src/plugins/vcsbase/vcsbaseeditor.h | 2 ++ 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 55d54cb0b0f..68284a03b83 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -727,7 +727,6 @@ const char *GitClient::stashNamePrefix = "stash@{"; GitClient::GitClient(GitSettings *settings) : m_cachedGitVersion(0), - m_msgWait(tr("Waiting for data...")), m_settings(settings), m_disableEditor(false) { @@ -797,7 +796,7 @@ VcsBaseEditorWidget *GitClient::findExistingVCSEditor(const char *registerDynami // Exists already EditorManager::activateEditor(outputEditor); - outputEditor->document()->setContents(m_msgWait.toUtf8()); + outputEditor->document()->setContents(QByteArray()); // clear rc = VcsBaseEditor::getVcsBaseEditor(outputEditor); return rc; @@ -926,8 +925,7 @@ VcsBaseEditorWidget *GitClient::createVcsEditor( QTC_CHECK(!findExistingVCSEditor(registerDynamicProperty, dynamicPropertyValue)); // Create new, set wait message, set up with source and codec - IEditor *outputEditor = EditorManager::openEditorWithContents(id, &title, - m_msgWait.toUtf8()); + IEditor *outputEditor = EditorManager::openEditorWithContents(id, &title); outputEditor->document()->setProperty(registerDynamicProperty, dynamicPropertyValue); rc = VcsBaseEditor::getVcsBaseEditor(outputEditor); connect(rc, SIGNAL(annotateRevisionRequested(QString,QString,QString,int)), diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 1abfea5fb6f..ba06039fefe 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -435,7 +435,6 @@ private: mutable Utils::FileName m_gitVersionForBinary; mutable unsigned m_cachedGitVersion; - const QString m_msgWait; GitSettings *m_settings; QString m_gitQtcEditor; QMap m_stashInfo; diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 8755a4c0914..09dce770209 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -573,6 +574,7 @@ public: QPointer m_command; QObject *m_describeReceiver; const char *m_describeSlot; + Utils::ProgressIndicator *m_progressIndicator; private: QComboBox *m_entriesComboBox; @@ -589,6 +591,7 @@ VcsBaseEditorWidgetPrivate::VcsBaseEditorWidgetPrivate(VcsBaseEditorWidget *edit m_mouseDragging(false), m_describeReceiver(0), m_describeSlot(0), + m_progressIndicator(0), m_entriesComboBox(0) { m_textCursorHandlers.append(new ChangeTextCursorHandler(editorWidget)); @@ -1352,9 +1355,18 @@ VcsBaseEditorParameterWidget *VcsBaseEditorWidget::configurationWidget() const void VcsBaseEditorWidget::setCommand(VcsCommand *command) { - if (d->m_command) + if (d->m_command) { d->m_command->abort(); + hideProgressIndicator(); + } d->m_command = command; + if (d->m_command) { + d->m_progressIndicator = new Utils::ProgressIndicator(Utils::ProgressIndicator::Large); + d->m_progressIndicator->attachToWidget(this); + connect(d->m_command, &VcsCommand::finished, + this, &VcsBaseEditorWidget::hideProgressIndicator); + QTimer::singleShot(100, this, SLOT(showProgressIndicator())); + } } // Find the complete file from a diff relative specification. @@ -1439,6 +1451,19 @@ void VcsBaseEditorWidget::slotPaste() } } +void VcsBaseEditorWidget::showProgressIndicator() +{ + if (!d->m_progressIndicator) // already stopped and deleted + return; + d->m_progressIndicator->show(); +} + +void VcsBaseEditorWidget::hideProgressIndicator() +{ + delete d->m_progressIndicator; + d->m_progressIndicator = 0; +} + bool VcsBaseEditorWidget::canApplyDiffChunk(const DiffChunk &dc) const { if (!dc.isValid()) diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index e71fcaf09c3..ef29f012a5c 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -242,6 +242,8 @@ private slots: void slotAnnotateRevision(); void slotApplyDiffChunk(); void slotPaste(); + void showProgressIndicator(); + void hideProgressIndicator(); protected: /* A helper that can be used to locate a file in a diff in case it