From b6c05a334c400e030d5682e73c269304abdbfb59 Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Wed, 22 Apr 2009 16:51:38 +0200
Subject: [PATCH] Refactoring: Move QtVersionManager instance() into the
 ProjectExplorer

And add a instance() method to it.
---
 src/plugins/projectexplorer/projectexplorer.cpp  |  9 +++++++++
 src/plugins/projectexplorer/projectexplorer.h    |  4 ++++
 src/plugins/projectexplorer/qtversionmanager.cpp | 16 ++++++++++------
 src/plugins/projectexplorer/qtversionmanager.h   |  6 +++---
 .../qt4projectmanager/projectloadwizard.cpp      |  9 ++++++---
 src/plugins/qt4projectmanager/qt4project.cpp     | 16 ++++++++++------
 .../qt4projectmanager/qt4projectconfigwidget.cpp | 15 ++++++++++-----
 .../qt4projectmanager/qt4projectmanager.cpp      |  5 -----
 .../qt4projectmanager/qt4projectmanager.h        |  2 --
 .../qt4projectmanagerplugin.cpp                  | 11 -----------
 .../qt4projectmanager/qt4projectmanagerplugin.h  |  4 ----
 11 files changed, 52 insertions(+), 45 deletions(-)

diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index e7a00ad4f22..6fbb3cc32b8 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -56,6 +56,7 @@
 #include "session.h"
 #include "sessiondialog.h"
 #include "buildparserfactory.h"
+#include "qtversionmanager.h"
 
 #include <coreplugin/basemode.h>
 #include <coreplugin/coreconstants.h>
@@ -194,6 +195,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     connect(m_buildManager, SIGNAL(tasksChanged()),
             this, SLOT(updateTaskActions()));
 
+    m_versionManager = new QtVersionManager();
+    addAutoReleasedObject(m_versionManager);
+
     addAutoReleasedObject(new CoreListenerCheckingForRunningBuild(m_buildManager));
 
     m_outputPane = new OutputPane;
@@ -1905,4 +1909,9 @@ void ProjectExplorerPlugin::setSession(QAction *action)
         m_session->loadSession(session);
 }
 
+QtVersionManager *ProjectExplorerPlugin::qtVersionManager() const
+{
+    return m_versionManager;
+}
+
 Q_EXPORT_PLUGIN(ProjectExplorerPlugin)
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 987cb323fb6..b18545a9c39 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -64,6 +64,7 @@ class RunConfiguration;
 class RunControl;
 class SessionManager;
 class IRunConfigurationRunner;
+class QtVersionManager;
 
 namespace Internal {
 class ApplicationOutput;
@@ -104,6 +105,8 @@ public:
 
     void showContextMenu(const QPoint &globalPos, Node *node);
 
+    QtVersionManager *qtVersionManager() const;
+
     //PluginInterface
     bool initialize(const QStringList &arguments, QString *error_message);
     void extensionsInitialized();
@@ -246,6 +249,7 @@ private:
     Node *m_currentNode;
 
     BuildManager *m_buildManager;
+    QtVersionManager *m_versionManager;
 
     QList<Internal::ProjectFileFactory*> m_fileFactories;
     QStringList m_profileMimeTypes;
diff --git a/src/plugins/projectexplorer/qtversionmanager.cpp b/src/plugins/projectexplorer/qtversionmanager.cpp
index 0e8c7bc7edf..67a8ffbb658 100644
--- a/src/plugins/projectexplorer/qtversionmanager.cpp
+++ b/src/plugins/projectexplorer/qtversionmanager.cpp
@@ -32,12 +32,14 @@
 #include "projectexplorerconstants.h"
 #include "ui_showbuildlog.h"
 #include "ui_qtversionmanager.h"
+#include "cesdkhandler.h"
+#include "toolchain.h"
+
+#include "projectexplorer.h"
 
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
 #include <extensionsystem/pluginmanager.h>
-#include <projectexplorer/cesdkhandler.h>
-#include <projectexplorer/toolchain.h>
 #include <help/helpplugin.h>
 #include <utils/qtcassert.h>
 
@@ -113,6 +115,11 @@ QtVersionManager::~QtVersionManager()
     m_emptyVersion = 0;
 }
 
+QtVersionManager::QtVersionManager *instance()
+{
+    return ProjectExplorerPlugin::instance()->qtVersionManager();
+}
+
 void QtVersionManager::addVersion(QtVersion *version)
 {
     m_versions.append(version);
@@ -162,8 +169,6 @@ QString QtVersionManager::trCategory() const
 
 QWidget *QtVersionManager::createPage(QWidget *parent)
 {
-    if (m_widget)
-        delete m_widget;
     m_widget = new QtDirWidget(parent, m_versions, m_defaultVersion);
     return m_widget;
 }
@@ -1354,8 +1359,7 @@ int QtVersion::uniqueId() const
 
 int QtVersion::getUniqueId()
 {
-    QtVersionManager *vm = ExtensionSystem::PluginManager::instance()->getObject<QtVersionManager>();
-    return vm->getUniqueId();
+    return QtVersionManager::instance()->getUniqueId();
 }
 
 bool QtVersion::isValid() const
diff --git a/src/plugins/projectexplorer/qtversionmanager.h b/src/plugins/projectexplorer/qtversionmanager.h
index f69e61bc75a..1721719c1a2 100644
--- a/src/plugins/projectexplorer/qtversionmanager.h
+++ b/src/plugins/projectexplorer/qtversionmanager.h
@@ -171,11 +171,12 @@ private slots:
 class PROJECTEXPLORER_EXPORT QtVersionManager : public Core::IOptionsPage
 {
     Q_OBJECT
-
 public:
     QtVersionManager();
     ~QtVersionManager();
 
+    static QtVersionManager *instance();
+
     QString id() const;
     QString trName() const;
     QString category() const;
@@ -210,7 +211,6 @@ signals:
     void defaultQtVersionChanged();
     void qtVersionsChanged();
 private:
-
     void addNewVersionsFromInstaller();
     void updateSystemVersion();
     void updateDocumentation();
@@ -218,7 +218,7 @@ private:
     static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list);
     void updateUniqueIdToIndexMap();
 
-    QPointer<QtDirWidget> m_widget;
+    QtDirWidget *m_widget;
 
     QtVersion *m_emptyVersion;
     int m_defaultVersion;
diff --git a/src/plugins/qt4projectmanager/projectloadwizard.cpp b/src/plugins/qt4projectmanager/projectloadwizard.cpp
index 15dcb6f4cf3..2d943a019c0 100644
--- a/src/plugins/qt4projectmanager/projectloadwizard.cpp
+++ b/src/plugins/qt4projectmanager/projectloadwizard.cpp
@@ -34,6 +34,8 @@
 #include "qmakestep.h"
 #include "makestep.h"
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <QtGui/QCheckBox>
 #include <QtGui/QHeaderView>
 #include <QtGui/QLabel>
@@ -48,7 +50,7 @@ using ProjectExplorer::QtVersion;
 ProjectLoadWizard::ProjectLoadWizard(Qt4Project *project, QWidget *parent, Qt::WindowFlags flags)
     : QWizard(parent, flags), m_project(project), m_importVersion(0), m_temporaryVersion(false)
 {
-    ProjectExplorer::QtVersionManager * vm = project->qt4ProjectManager()->versionManager();
+    ProjectExplorer::QtVersionManager * vm = ProjectExplorer::QtVersionManager::instance();
     QString directory = QFileInfo(project->file()->fileName()).absolutePath();
     QString importVersion =  vm->findQtVersionFromMakefile(directory);
 
@@ -127,6 +129,7 @@ void ProjectLoadWizard::addBuildConfiguration(QString name, QtVersion *qtversion
 
 void ProjectLoadWizard::done(int result)
 {
+    ProjectExplorer::QtVersionManager *vm = ProjectExplorer::QtVersionManager::instance();
     QWizard::done(result);
     // This normally happens on showing the final page, but since we
     // don't show it anymore, do it here
@@ -135,7 +138,7 @@ void ProjectLoadWizard::done(int result)
     if (m_importVersion && importCheckbox->isChecked()) {
         // Importing
         if (m_temporaryVersion)
-            m_project->qt4ProjectManager()->versionManager()->addVersion(m_importVersion);
+            vm->addVersion(m_importVersion);
         // Import the existing stuff
         // qDebug()<<"Creating m_buildconfiguration entry from imported stuff";
         // qDebug()<<((m_importBuildConfig& QtVersion::BuildAll)? "debug_and_release" : "")<<((m_importBuildConfig & QtVersion::DebugBuild)? "debug" : "release");
@@ -158,7 +161,7 @@ void ProjectLoadWizard::done(int result)
             delete m_importVersion;
         // Create default   
         bool buildAll = false;
-        QtVersion *defaultVersion = m_project->qt4ProjectManager()->versionManager()->version(0);
+        QtVersion *defaultVersion = vm->version(0);
         if (defaultVersion && defaultVersion->isValid() && (defaultVersion->defaultBuildConfig() & QtVersion::BuildAll))
             buildAll = true;
         if (buildAll) {
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 3b4f43f3226..a97303cf323 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -236,9 +236,11 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) :
 {
     m_manager->registerProject(this);
 
-    connect(qt4ProjectManager()->versionManager(), SIGNAL(defaultQtVersionChanged()),
+    ProjectExplorer::QtVersionManager *vm = ProjectExplorer::QtVersionManager::instance();
+
+    connect(vm, SIGNAL(defaultQtVersionChanged()),
             this, SLOT(defaultQtVersionChanged()));
-    connect(qt4ProjectManager()->versionManager(), SIGNAL(qtVersionsChanged()),
+    connect(vm, SIGNAL(qtVersionsChanged()),
             this, SLOT(qtVersionsChanged()));
 
     m_updateCodeModelTimer.setSingleShot(true);
@@ -266,8 +268,9 @@ void Qt4Project::defaultQtVersionChanged()
 
 void Qt4Project::qtVersionsChanged()
 {
+    QtVersionManager *vm = QtVersionManager::instance();
     foreach (QString bc, buildConfigurations()) {
-        if (!qt4ProjectManager()->versionManager()->version(qtVersionId(bc))->isValid()) {
+        if (!vm->version(qtVersionId(bc))->isValid()) {
             setQtVersion(bc, 0);
             if (bc == activeBuildConfiguration())
                 m_rootProjectNode->update();
@@ -740,18 +743,19 @@ QString Qt4Project::qtDir(const QString &buildConfiguration) const
 
 QtVersion *Qt4Project::qtVersion(const QString &buildConfiguration) const
 {
-    return m_manager->versionManager()->version(qtVersionId(buildConfiguration));
+    return QtVersionManager::instance()->version(qtVersionId(buildConfiguration));
 }
 
 int Qt4Project::qtVersionId(const QString &buildConfiguration) const
 {
+    QtVersionManager *vm = QtVersionManager::instance();
     if (debug)
         qDebug()<<"Looking for qtVersion ID of "<<buildConfiguration;
     int id = 0;
     QVariant vid = value(buildConfiguration, "QtVersionId");
     if (vid.isValid()) {
         id = vid.toInt();
-        if (m_manager->versionManager()->version(id)->isValid()) {
+        if (vm->version(id)->isValid()) {
             return id;
         } else {
             const_cast<Qt4Project *>(this)->setValue(buildConfiguration, "QtVersionId", 0);
@@ -763,7 +767,7 @@ int Qt4Project::qtVersionId(const QString &buildConfiguration) const
         if (debug)
             qDebug()<<"  Backward compatibility reading QtVersion"<<vname;
         if (!vname.isEmpty()) {
-            const QList<QtVersion *> &versions = m_manager->versionManager()->versions();
+            const QList<QtVersion *> &versions = vm->versions();
             foreach (const QtVersion * const version, versions) {
                 if (version->name() == vname) {
                     if (debug)
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index a286f2d76cf..9e7fd93e778 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -39,6 +39,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/mainwindow.h>
 #include <projectexplorer/projectexplorerconstants.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <QtGui/QFileDialog>
 
@@ -83,7 +84,9 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project)
     connect(m_ui->manageQtVersionPushButtons, SIGNAL(clicked()),
             this, SLOT(manageQtVersions()));
 
-    connect(m_pro->qt4ProjectManager()->versionManager(), SIGNAL(qtVersionsChanged()),
+    ProjectExplorer::QtVersionManager *vm = ProjectExplorer::QtVersionManager::instance();
+
+    connect(vm, SIGNAL(qtVersionsChanged()),
             this, SLOT(setupQtVersionsComboBox()));
 }
 
@@ -143,7 +146,7 @@ void Qt4ProjectConfigWidget::setupQtVersionsComboBox()
         m_ui->invalidQtWarningLabel->setVisible(false);
     }
     // Add Qt Versions to the combo box
-    QtVersionManager *vm = m_pro->qt4ProjectManager()->versionManager();
+    QtVersionManager *vm = QtVersionManager::instance();
     const QList<QtVersion *> &versions = vm->versions();
     for (int i = 0; i < versions.size(); ++i) {
         m_ui->qtVersionComboBox->addItem(versions.at(i)->name(), versions.at(i)->uniqueId());
@@ -181,7 +184,8 @@ void Qt4ProjectConfigWidget::updateImportLabel()
 {
     m_ui->importLabel->setVisible(false);
     if (m_ui->shadowBuildCheckBox->isChecked()) {
-        QString qtPath = m_pro->qt4ProjectManager()->versionManager()->findQtVersionFromMakefile(m_ui->shadowBuildDirEdit->path());
+        ProjectExplorer::QtVersionManager *vm = ProjectExplorer::QtVersionManager::instance();
+        QString qtPath = vm->findQtVersionFromMakefile(m_ui->shadowBuildDirEdit->path());
         if (!qtPath.isEmpty()) {
             m_ui->importLabel->setVisible(true);
         }
@@ -215,7 +219,7 @@ void Qt4ProjectConfigWidget::importLabelClicked()
     if (m_ui->shadowBuildCheckBox->isChecked()) {
         QString directory = m_ui->shadowBuildDirEdit->path();
         if (!directory.isEmpty()) {
-            QtVersionManager *vm = m_pro->qt4ProjectManager()->versionManager();
+            QtVersionManager *vm = QtVersionManager::instance();
             QString qtPath = vm->findQtVersionFromMakefile(directory);
             if (!qtPath.isEmpty()) {
                 QtVersion *version = vm->qtVersionForDirectory(qtPath);
@@ -265,7 +269,8 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString
     } else {
         newQtVersion = m_ui->qtVersionComboBox->itemData(m_ui->qtVersionComboBox->currentIndex()).toInt();
     }
-    bool isValid = m_pro->qt4ProjectManager()->versionManager()->version(newQtVersion)->isValid();
+    ProjectExplorer::QtVersionManager *vm = ProjectExplorer::QtVersionManager::instance();
+    bool isValid = vm->version(newQtVersion)->isValid();
     m_ui->invalidQtWarningLabel->setVisible(!isValid);
     if (newQtVersion != m_pro->qtVersionId(m_buildConfiguration)) {
         m_pro->setQtVersion(m_buildConfiguration, newQtVersion);
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
index 0e8e238ac5a..697deb5025c 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
@@ -189,11 +189,6 @@ ProjectExplorer::Project *Qt4Manager::contextProject() const
     return m_contextProject;
 }
 
-QtVersionManager *Qt4Manager::versionManager() const
-{
-    return m_plugin->versionManager();
-}
-
 void Qt4Manager::runQMake()
 {
     runQMake(m_projectExplorer->currentProject());
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.h b/src/plugins/qt4projectmanager/qt4projectmanager.h
index 8099569fc62..43b64937cfe 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.h
@@ -85,8 +85,6 @@ public:
     void setContextProject(ProjectExplorer::Project *project);
     ProjectExplorer::Project *contextProject() const;
 
-    ProjectExplorer::QtVersionManager *versionManager() const;
-
     // Return the id string of a file
     static QString fileTypeId(ProjectExplorer::FileType type);
 
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index f25df616aaa..22db266f46c 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -71,9 +71,6 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin()
     //removeObject(m_embeddedPropertiesPage);
     //delete m_embeddedPropertiesPage;
 
-    removeObject(m_qtVersionManager);
-    delete m_qtVersionManager;
-
     removeObject(m_proFileEditorFactory);
     delete m_proFileEditorFactory;
     removeObject(m_qt4ProjectManager);
@@ -125,9 +122,6 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     addAutoReleasedObject(new QMakeStepFactory);
     addAutoReleasedObject(new MakeStepFactory);
 
-    m_qtVersionManager = new QtVersionManager;
-    addObject(m_qtVersionManager);
-
     addAutoReleasedObject(new Qt4RunConfigurationFactory);
     addAutoReleasedObject(new Qt4RunConfigurationFactoryUser);
 
@@ -191,11 +185,6 @@ void Qt4ProjectManagerPlugin::updateContextMenu(Project *project,
     }
 }
 
-QtVersionManager *Qt4ProjectManagerPlugin::versionManager() const
-{
-    return m_qtVersionManager;
-}
-
 void Qt4ProjectManagerPlugin::currentProjectChanged()
 {
     m_runQMakeAction->setEnabled(!m_projectExplorer->buildManager()->isBuilding(m_projectExplorer->currentProject()));
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
index 7d049c15c0b..7dce30081e9 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
@@ -62,8 +62,6 @@ public:
     void extensionsInitialized();
 
     int projectContext() const { return m_projectContext; }
-    ProjectExplorer::QtVersionManager *versionManager() const;
-
 
 private slots:
     void updateContextMenu(ProjectExplorer::Project *project,
@@ -80,8 +78,6 @@ private:
     ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
     ProFileEditorFactory *m_proFileEditorFactory;
     Qt4Manager *m_qt4ProjectManager;
-    ProjectExplorer::QtVersionManager *m_qtVersionManager;
-    EmbeddedPropertiesPage *m_embeddedPropertiesPage;
 
     int m_projectContext;
 
-- 
GitLab