aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-01-23 17:22:05 +0100
committerhjk <hjk@qt.io>2020-01-24 09:47:28 +0000
commit1cd936c53145f520fb9a3817a6548d9d25c399f0 (patch)
tree2c1cc9c375b986b5d9a7abf3f982781256ae612d /src/plugins/vcsbase
parent01e4f573e812c9c855a11d0cb199f9d9bed8de49 (diff)
Vcs: Pimpl plugins
Essentially rename all *Plugin into *PluginPrivate, and pull out the actual IPlugin related pieces into new *Plugin classes. Shift the construction of the PluginPrivate to initialize(), following the general pattern. I tried to keep the patch as mechanical as possible, giving room to some obvious but less mechanical cleanup needs, that are intentionally left out of this here. Change-Id: Iac662bf73338f9f7669064ed67b960246875c23c Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/vcsbase')
-rw-r--r--src/plugins/vcsbase/basevcssubmiteditorfactory.cpp4
-rw-r--r--src/plugins/vcsbase/basevcssubmiteditorfactory.h4
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.cpp112
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.h23
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.cpp2
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.h4
6 files changed, 70 insertions, 79 deletions
diff --git a/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp b/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp
index 7b5b1fbab7..e366d8e56a 100644
--- a/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp
+++ b/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp
@@ -43,7 +43,7 @@ const char DIFF_SELECTED[] = "Vcs.DiffSelectedFiles";
VcsSubmitEditorFactory::VcsSubmitEditorFactory
(const VcsBaseSubmitEditorParameters *parameters,
const EditorCreator &editorCreator,
- VcsBasePlugin *plugin)
+ VcsBasePluginPrivate *plugin)
: IEditorFactory(plugin), m_editorCreator(editorCreator)
{
setId(parameters->id);
@@ -62,7 +62,7 @@ VcsSubmitEditorFactory::VcsSubmitEditorFactory
plugin->commitDisplayName(), this);
Command *command = ActionManager::registerAction(m_submitAction, SUBMIT, context);
command->setAttribute(Command::CA_UpdateText);
- connect(m_submitAction, &QAction::triggered, plugin, &VcsBasePlugin::commitFromEditor);
+ connect(m_submitAction, &QAction::triggered, plugin, &VcsBasePluginPrivate::commitFromEditor);
m_diffAction = new QAction(VcsBaseSubmitEditor::diffIcon(), tr("Diff &Selected Files"), this);
ActionManager::registerAction(m_diffAction, DIFF_SELECTED, context);
diff --git a/src/plugins/vcsbase/basevcssubmiteditorfactory.h b/src/plugins/vcsbase/basevcssubmiteditorfactory.h
index d74f635698..5cb7e84bcb 100644
--- a/src/plugins/vcsbase/basevcssubmiteditorfactory.h
+++ b/src/plugins/vcsbase/basevcssubmiteditorfactory.h
@@ -36,7 +36,7 @@ namespace VcsBase {
class VcsBaseSubmitEditor;
class VcsBaseSubmitEditorParameters;
-class VcsBasePlugin;
+class VcsBasePluginPrivate;
// Parametrizable base class for editor factories creating instances of
// VcsBaseSubmitEditor subclasses.
@@ -49,7 +49,7 @@ public:
VcsSubmitEditorFactory(const VcsBaseSubmitEditorParameters *parameters,
const EditorCreator &editorCreator,
- VcsBasePlugin *plugin);
+ VcsBasePluginPrivate *plugin);
Core::IEditor *createEditor() override;
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 14c9030556..9ae6f826c4 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -516,113 +516,97 @@ VCSBASE_EXPORT QDebug operator<<(QDebug in, const VcsBasePluginState &state)
the virtual submitEditorAboutToClose() to trigger the submit process.
*/
-class VcsBasePluginPrivate
-{
-public:
- inline bool supportsRepositoryCreation() const;
-
- QPointer<VcsBaseSubmitEditor> m_submitEditor;
- IVersionControl *m_versionControl = nullptr;
- Context m_context;
- VcsBasePluginState m_state;
- int m_actionState = -1;
-
- static Internal::StateListener *m_listener;
-};
-
bool VcsBasePluginPrivate::supportsRepositoryCreation() const
{
return m_versionControl && m_versionControl->supportsOperation(IVersionControl::CreateRepositoryOperation);
}
-Internal::StateListener *VcsBasePluginPrivate::m_listener = nullptr;
+static Internal::StateListener *m_listener = nullptr;
-VcsBasePlugin::VcsBasePlugin() :
- d(new VcsBasePluginPrivate())
+VcsBasePluginPrivate::VcsBasePluginPrivate()
{ }
-VcsBasePlugin::~VcsBasePlugin()
+VcsBasePluginPrivate::~VcsBasePluginPrivate()
{
- delete d->m_versionControl;
- delete d;
+ delete m_versionControl;
}
-void VcsBasePlugin::initializeVcs(IVersionControl *vc, const Context &context)
+void VcsBasePluginPrivate::initializeVcs(IVersionControl *vc, const Context &context)
{
QTC_ASSERT(vc, return);
- d->m_versionControl = vc;
- d->m_context = context;
+ m_versionControl = vc;
+ m_context = context;
Internal::VcsPlugin *plugin = Internal::VcsPlugin::instance();
connect(plugin, &Internal::VcsPlugin::submitEditorAboutToClose,
- this, &VcsBasePlugin::slotSubmitEditorAboutToClose);
+ this, &VcsBasePluginPrivate::slotSubmitEditorAboutToClose);
// First time: create new listener
- if (!VcsBasePluginPrivate::m_listener)
- VcsBasePluginPrivate::m_listener = new Internal::StateListener(plugin);
- connect(VcsBasePluginPrivate::m_listener, &Internal::StateListener::stateChanged,
- this, &VcsBasePlugin::slotStateChanged);
+ if (!m_listener)
+ m_listener = new Internal::StateListener(plugin);
+ connect(m_listener, &Internal::StateListener::stateChanged,
+ this, &VcsBasePluginPrivate::slotStateChanged);
// VCSes might have become (un-)available, so clear the VCS directory cache
connect(vc, &IVersionControl::configurationChanged,
VcsManager::instance(), &VcsManager::clearVersionControlCache);
connect(vc, &IVersionControl::configurationChanged,
- VcsBasePluginPrivate::m_listener, &Internal::StateListener::slotStateChanged);
+ m_listener, &Internal::StateListener::slotStateChanged);
}
-void VcsBasePlugin::extensionsInitialized()
+void VcsBasePluginPrivate::extensionsInitialized()
{
// Initialize enable menus.
- VcsBasePluginPrivate::m_listener->slotStateChanged();
+ m_listener->slotStateChanged();
}
-void VcsBasePlugin::slotSubmitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor, bool *result)
+void VcsBasePluginPrivate::slotSubmitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor, bool *result)
{
- qCDebug(baseLog) << this << "plugin's submit editor" << d->m_submitEditor
- << (d->m_submitEditor ? d->m_submitEditor->document()->id().name() : QByteArray())
+ qCDebug(baseLog) << this << "plugin's submit editor" << m_submitEditor
+ << (m_submitEditor ? m_submitEditor->document()->id().name() : QByteArray())
<< "closing submit editor" << submitEditor
<< (submitEditor ? submitEditor->document()->id().name() : QByteArray());
- if (submitEditor == d->m_submitEditor)
+ if (submitEditor == m_submitEditor)
*result = submitEditorAboutToClose();
}
-IVersionControl *VcsBasePlugin::versionControl() const
+IVersionControl *VcsBasePluginPrivate::versionControl() const
{
- return d->m_versionControl;
+ return m_versionControl;
}
-void VcsBasePlugin::slotStateChanged(const VcsBase::Internal::State &newInternalState, IVersionControl *vc)
+void VcsBasePluginPrivate::slotStateChanged(const VcsBase::Internal::State &newInternalState, IVersionControl *vc)
{
- if (vc == d->m_versionControl) {
+ if (vc == m_versionControl) {
// We are directly affected: Change state
- if (!d->m_state.equals(newInternalState)) {
- d->m_state.setState(newInternalState);
+ if (!m_state.equals(newInternalState)) {
+ m_state.setState(newInternalState);
updateActions(VcsEnabled);
- ICore::addAdditionalContext(d->m_context);
+ ICore::addAdditionalContext(m_context);
}
} else {
// Some other VCS plugin or state changed: Reset us to empty state.
const ActionState newActionState = vc ? OtherVcsEnabled : NoVcsEnabled;
- if (d->m_actionState != newActionState || !d->m_state.isEmpty()) {
- d->m_actionState = newActionState;
+ if (m_actionState != newActionState || !m_state.isEmpty()) {
+ m_actionState = newActionState;
const VcsBasePluginState emptyState;
- d->m_state = emptyState;
+ m_state = emptyState;
updateActions(newActionState);
}
- ICore::removeAdditionalContext(d->m_context);
+ ICore::removeAdditionalContext(m_context);
}
}
-const VcsBasePluginState &VcsBasePlugin::currentState() const
+const VcsBasePluginState &VcsBasePluginPrivate::currentState() const
{
- return d->m_state;
+ return m_state;
}
-bool VcsBasePlugin::enableMenuAction(ActionState as, QAction *menuAction) const
+bool VcsBasePluginPrivate::enableMenuAction(ActionState as, QAction *menuAction) const
{
qCDebug(baseLog) << "enableMenuAction" << menuAction->text() << as;
switch (as) {
case NoVcsEnabled: {
- const bool supportsCreation = d->supportsRepositoryCreation();
+ const bool supportsCreation = supportsRepositoryCreation();
menuAction->setVisible(supportsCreation);
menuAction->setEnabled(supportsCreation);
return supportsCreation;
@@ -638,18 +622,18 @@ bool VcsBasePlugin::enableMenuAction(ActionState as, QAction *menuAction) const
return true;
}
-QString VcsBasePlugin::commitDisplayName() const
+QString VcsBasePluginPrivate::commitDisplayName() const
{
return tr("Commit", "name of \"commit\" action of the VCS.");
}
-bool VcsBasePlugin::promptBeforeCommit()
+bool VcsBasePluginPrivate::promptBeforeCommit()
{
return DocumentManager::saveAllModifiedDocuments(tr("Save before %1?")
.arg(commitDisplayName().toLower()));
}
-void VcsBasePlugin::promptToDeleteCurrentFile()
+void VcsBasePluginPrivate::promptToDeleteCurrentFile()
{
const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasFile(), return);
@@ -668,9 +652,9 @@ static inline bool ask(QWidget *parent, const QString &title, const QString &que
return QMessageBox::question(parent, title, question, QMessageBox::Yes|QMessageBox::No, defaultButton) == QMessageBox::Yes;
}
-void VcsBasePlugin::createRepository()
+void VcsBasePluginPrivate::createRepository()
{
- QTC_ASSERT(d->m_versionControl->supportsOperation(IVersionControl::CreateRepositoryOperation), return);
+ QTC_ASSERT(m_versionControl->supportsOperation(IVersionControl::CreateRepositoryOperation), return);
// Find current starting directory
QString directory;
if (const Project *currentProject = ProjectTree::currentProject())
@@ -691,7 +675,7 @@ void VcsBasePlugin::createRepository()
return;
} while (true);
// Create
- const bool rc = d->m_versionControl->vcsCreateRepository(directory);
+ const bool rc = m_versionControl->vcsCreateRepository(directory);
const QString nativeDir = QDir::toNativeSeparators(directory);
if (rc) {
QMessageBox::information(mw, tr("Repository Created"),
@@ -704,21 +688,21 @@ void VcsBasePlugin::createRepository()
}
}
-void VcsBasePlugin::setSubmitEditor(VcsBaseSubmitEditor *submitEditor)
+void VcsBasePluginPrivate::setSubmitEditor(VcsBaseSubmitEditor *submitEditor)
{
- d->m_submitEditor = submitEditor;
+ m_submitEditor = submitEditor;
}
-VcsBaseSubmitEditor *VcsBasePlugin::submitEditor() const
+VcsBaseSubmitEditor *VcsBasePluginPrivate::submitEditor() const
{
- return d->m_submitEditor;
+ return m_submitEditor;
}
-bool VcsBasePlugin::raiseSubmitEditor() const
+bool VcsBasePluginPrivate::raiseSubmitEditor() const
{
- if (!d->m_submitEditor)
+ if (!m_submitEditor)
return false;
- EditorManager::activateEditor(d->m_submitEditor, EditorManager::IgnoreNavigationHistory);
+ EditorManager::activateEditor(m_submitEditor, EditorManager::IgnoreNavigationHistory);
return true;
}
@@ -768,7 +752,7 @@ static const char SOURCE_PROPERTY[] = "qtcreator_source";
void setSource(IDocument *document, const QString &source)
{
document->setProperty(SOURCE_PROPERTY, source);
- VcsBasePluginPrivate::m_listener->slotStateChanged();
+ m_listener->slotStateChanged();
}
QString source(IDocument *document)
diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h
index 676ef59d58..a7109e1625 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.h
+++ b/src/plugins/vcsbase/vcsbaseplugin.h
@@ -27,6 +27,7 @@
#include "vcsbase_global.h"
+#include <coreplugin/icontext.h>
#include <coreplugin/iversioncontrol.h>
#include <coreplugin/vcsmanager.h>
#include <extensionsystem/iplugin.h>
@@ -59,7 +60,7 @@ namespace Internal { class State; }
class VcsBaseSubmitEditor;
class VcsBasePluginPrivate;
class VcsBasePluginStateData;
-class VcsBasePlugin;
+class VcsBasePluginPrivate;
// Documentation inside.
class VCSBASE_EXPORT VcsBasePluginState
@@ -109,7 +110,7 @@ public:
friend VCSBASE_EXPORT QDebug operator<<(QDebug in, const VcsBasePluginState &state);
private:
- friend class VcsBasePlugin;
+ friend class VcsBasePluginPrivate;
bool equals(const Internal::State &s) const;
void setState(const Internal::State &s);
@@ -153,17 +154,17 @@ VCSBASE_EXPORT Utils::SynchronousProcessResponse runVcs(const QString &workingDi
QTextCodec *outputCodec = nullptr,
const QProcessEnvironment &env = {});
-class VCSBASE_EXPORT VcsBasePlugin : public ExtensionSystem::IPlugin
+class VCSBASE_EXPORT VcsBasePluginPrivate : public QObject
{
Q_OBJECT
protected:
- explicit VcsBasePlugin();
-
- void extensionsInitialized() override;
+ explicit VcsBasePluginPrivate();
public:
- ~VcsBasePlugin() override;
+ ~VcsBasePluginPrivate() override;
+
+ void extensionsInitialized();
const VcsBasePluginState &currentState() const;
Core::IVersionControl *versionControl() const;
@@ -214,7 +215,13 @@ private:
void slotSubmitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor, bool *result);
void slotStateChanged(const VcsBase::Internal::State &s, Core::IVersionControl *vc);
- VcsBasePluginPrivate *d;
+ bool supportsRepositoryCreation() const;
+
+ QPointer<VcsBaseSubmitEditor> m_submitEditor;
+ Core::IVersionControl *m_versionControl = nullptr;
+ Core::Context m_context;
+ VcsBasePluginState m_state;
+ int m_actionState = -1;
};
} // namespace VcsBase
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index 4c36057945..1f21badce6 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -509,7 +509,7 @@ static QString withUnusedMnemonic(QString string, const QList<QPushButton *> &ot
}
VcsBaseSubmitEditor::PromptSubmitResult
- VcsBaseSubmitEditor::promptSubmit(VcsBasePlugin *plugin,
+ VcsBaseSubmitEditor::promptSubmit(VcsBasePluginPrivate *plugin,
bool *promptSetting,
bool forcePrompt,
bool canCommitOnFailure)
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 223fa6f7f5..30fd82e694 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -46,7 +46,7 @@ namespace Internal {
class SubmitEditorWidget;
class SubmitFileModel;
-class VcsBasePlugin;
+class VcsBasePluginPrivate;
class VcsBaseSubmitEditorPrivate;
class VCSBASE_EXPORT VcsBaseSubmitEditorParameters
@@ -85,7 +85,7 @@ public:
// 'promptSetting' points to a bool variable containing the plugin's
// prompt setting. The user can uncheck it from the message box.
enum PromptSubmitResult { SubmitConfirmed, SubmitCanceled, SubmitDiscarded };
- PromptSubmitResult promptSubmit(VcsBasePlugin *plugin,
+ PromptSubmitResult promptSubmit(VcsBasePluginPrivate *plugin,
bool *promptSetting,
bool forcePrompt = false,
bool canCommitOnFailure = true);