From: Tobias Hunger Date: Fri, 15 Apr 2011 15:43:44 +0000 (+0200) Subject: VCS: Notify project wizard about config changes X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=bcd8740a6ef328ef13bd6852995f6c0986df07e0;p=qt-creator-jp%2Fqt-creator-jp.git VCS: Notify project wizard about config changes ... and have the project wizard update the available VCS. Task-number: QTCREATORBUG-4423 --- diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp index 43c0a8356f..f0f95280a6 100644 --- a/src/plugins/bazaar/bazaarcontrol.cpp +++ b/src/plugins/bazaar/bazaarcontrol.cpp @@ -177,3 +177,8 @@ void BazaarControl::changed(const QVariant &v) break; } } + +void BazaarControl::emitConfigurationChanged() +{ + emit configurationChanged(); +} diff --git a/src/plugins/bazaar/bazaarcontrol.h b/src/plugins/bazaar/bazaarcontrol.h index 5d0182b2ae..e45b48a03a 100644 --- a/src/plugins/bazaar/bazaarcontrol.h +++ b/src/plugins/bazaar/bazaarcontrol.h @@ -74,6 +74,7 @@ public slots: // files changed signals according to the variant's type: // String -> repository, StringList -> files void changed(const QVariant&); + void emitConfigurationChanged(); private: BazaarClient *m_bazaarClient; diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index 2b21df6f37..ed39c4fed2 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -208,6 +208,7 @@ void BazaarPlugin::setSettings(const BazaarSettings &settings) m_bazaarSettings = settings; if (userIdChanged) client()->synchronousSetUserId(); + static_cast(versionControl())->emitConfigurationChanged(); } } diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h index 2e264e337d..d1053d05bd 100644 --- a/src/plugins/coreplugin/iversioncontrol.h +++ b/src/plugins/coreplugin/iversioncontrol.h @@ -166,6 +166,7 @@ public: signals: void repositoryChanged(const QString &repository); void filesChanged(const QStringList &files); + void configurationChanged(); // TODO: ADD A WAY TO DETECT WHETHER A FILE IS MANAGED, e.g // virtual bool sccManaged(const QString &filename) = 0; diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp index ce1801eb52..237ccb09b4 100644 --- a/src/plugins/cvs/cvscontrol.cpp +++ b/src/plugins/cvs/cvscontrol.cpp @@ -158,3 +158,8 @@ void CVSControl::emitFilesChanged(const QStringList &l) { emit filesChanged(l); } + +void CVSControl::emitConfigurationChanged() +{ + emit configurationChanged(); +} diff --git a/src/plugins/cvs/cvscontrol.h b/src/plugins/cvs/cvscontrol.h index a26366eb0f..52876649ba 100644 --- a/src/plugins/cvs/cvscontrol.h +++ b/src/plugins/cvs/cvscontrol.h @@ -67,6 +67,7 @@ public: void emitRepositoryChanged(const QString &s); void emitFilesChanged(const QStringList &l); + void emitConfigurationChanged(); private: CVSPlugin *m_plugin; diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 17f2bc36e6..dfb4d2b304 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -1320,6 +1320,7 @@ void CVSPlugin::setSettings(const CVSSettings &s) m_settings = s; if (QSettings *settings = Core::ICore::instance()->settings()) m_settings.toSettings(settings); + cvsVersionControl()->emitConfigurationChanged(); } } diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 95e16ddeb4..6e770b832e 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2387,6 +2387,7 @@ void GitClient::setSettings(const GitSettings &s) m_binaryPath = m_settings.gitBinaryPath(); m_cachedGitVersion = 0u; m_hasCachedGitVersion = false; + m_plugin->gitVersionControl()->emitConfigurationChanged(); } } diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp index 9977fd8db2..f519b75d78 100644 --- a/src/plugins/git/gitversioncontrol.cpp +++ b/src/plugins/git/gitversioncontrol.cpp @@ -247,5 +247,10 @@ void GitVersionControl::emitRepositoryChanged(const QString &r) emit repositoryChanged(r); } +void GitVersionControl::emitConfigurationChanged() +{ + emit configurationChanged(); +} + } // Internal } // Git diff --git a/src/plugins/git/gitversioncontrol.h b/src/plugins/git/gitversioncontrol.h index b4c62e535a..8858eb1cd0 100644 --- a/src/plugins/git/gitversioncontrol.h +++ b/src/plugins/git/gitversioncontrol.h @@ -69,6 +69,7 @@ public: void emitFilesChanged(const QStringList &); void emitRepositoryChanged(const QString &); + void emitConfigurationChanged(); private: GitClient *m_client; diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp index 9b7af6a54a..0b958101c5 100644 --- a/src/plugins/mercurial/mercurialcontrol.cpp +++ b/src/plugins/mercurial/mercurialcontrol.cpp @@ -183,3 +183,8 @@ void MercurialControl::changed(const QVariant &v) break; } } + +void MercurialControl::emitConfigurationChanged() +{ + emit configurationChanged(); +} diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h index 687c8d4908..f251833068 100644 --- a/src/plugins/mercurial/mercurialcontrol.h +++ b/src/plugins/mercurial/mercurialcontrol.h @@ -75,6 +75,7 @@ public slots: // files changed signals according to the variant's type: // String -> repository, StringList -> files void changed(const QVariant&); + void emitConfigurationChanged(); private: MercurialClient *mercurialClient; diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index e645a052c0..91c4240231 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -199,6 +199,7 @@ void MercurialPlugin::setSettings(const MercurialSettings &settings) { if (settings != mercurialSettings) { mercurialSettings = settings; + static_cast(versionControl())->emitConfigurationChanged(); } } diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index d239dfa242..29dcf27530 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -1457,6 +1457,7 @@ void PerforcePlugin::setSettings(const Settings &newSettings) m_managedDirectoryCache.clear(); m_settings.toSettings(Core::ICore::instance()->settings()); getTopLevel(); + perforceVersionControl()->emitConfigurationChanged(); } } diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp index 170cc91dc7..b4532f5570 100644 --- a/src/plugins/perforce/perforceversioncontrol.cpp +++ b/src/plugins/perforce/perforceversioncontrol.cpp @@ -175,5 +175,10 @@ void PerforceVersionControl::emitFilesChanged(const QStringList &l) emit filesChanged(l); } +void PerforceVersionControl::emitConfigurationChanged() +{ + emit configurationChanged(); +} + } // Internal } // Perforce diff --git a/src/plugins/perforce/perforceversioncontrol.h b/src/plugins/perforce/perforceversioncontrol.h index bc77555591..fc37398b3b 100644 --- a/src/plugins/perforce/perforceversioncontrol.h +++ b/src/plugins/perforce/perforceversioncontrol.h @@ -68,6 +68,7 @@ public: void emitRepositoryChanged(const QString &s); void emitFilesChanged(const QStringList &l); + void emitConfigurationChanged(); private: bool m_enabled; diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp index 39966556ca..d089e453c9 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.cpp +++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp @@ -169,6 +169,7 @@ struct ProjectWizardContext void clear(); QList versionControls; + QList activeVersionControls; QList projects; ProjectWizardPage *page; bool repositoryExists; // Is VCS 'add' sufficient, or should a repository be created? @@ -185,7 +186,7 @@ ProjectWizardContext::ProjectWizardContext() : void ProjectWizardContext::clear() { - versionControls.clear(); + activeVersionControls.clear(); projects.clear(); commonDirectory.clear(); page = 0; @@ -299,6 +300,13 @@ void ProjectFileWizardExtension::firstExtensionPageShown( } else { m_context->page->setCurrentProjectIndex(bestProjectIndex + 1); } + + // Store all version controls for later use: + foreach (Core::IVersionControl *vc, ExtensionSystem::PluginManager::instance()->getObjects()) { + m_context->versionControls.append(vc); + connect(vc, SIGNAL(configurationChanged()), this, SLOT(initializeVersionControlChoices())); + } + initializeVersionControlChoices(); } @@ -308,32 +316,42 @@ void ProjectFileWizardExtension::initializeVersionControlChoices() // 1) Directory is managed and VCS supports "Add" -> List it // 2) Directory is managed and VCS does not support "Add" -> None available // 3) Directory is not managed -> Offer all VCS that support "CreateRepository" - m_context->versionControls.clear(); + + Core::IVersionControl *currentSelection = 0; + int currentIdx = m_context->page->versionControlIndex() - 1; + if (currentIdx >= 0 && currentIdx <= m_context->activeVersionControls.size() - 1) + currentSelection = m_context->activeVersionControls.at(currentIdx); + + m_context->activeVersionControls.clear(); + + QStringList versionControlChoices = QStringList(tr("")); if (!m_context->commonDirectory.isEmpty()) { Core::IVersionControl *managingControl = Core::ICore::instance()->vcsManager()->findVersionControlForDirectory(m_context->commonDirectory); if (managingControl) { // Under VCS if (managingControl->supportsOperation(Core::IVersionControl::AddOperation)) { - m_context->versionControls.push_back(managingControl); + m_context->activeVersionControls.push_back(managingControl); m_context->repositoryExists = true; } } else { // Create - foreach (Core::IVersionControl *vc, ExtensionSystem::PluginManager::instance()->getObjects()) - if (vc->supportsOperation(Core::IVersionControl::CreateRepositoryOperation)) - m_context->versionControls.push_back(vc); + foreach (Core::IVersionControl *vc, m_context->versionControls) + if (vc->supportsOperation(Core::IVersionControl::CreateRepositoryOperation)) { + versionControlChoices.append(vc->displayName()); + m_context->activeVersionControls.append(vc); + } m_context->repositoryExists = false; } } // has a common root. - // Compile names - //: No version control system selected - QStringList versionControlChoices = QStringList(tr("")); - foreach(const Core::IVersionControl *c, m_context->versionControls) - versionControlChoices.push_back(c->displayName()); + m_context->page->setVersionControls(versionControlChoices); // Enable adding to version control by default. if (m_context->repositoryExists && versionControlChoices.size() >= 2) m_context->page->setVersionControlIndex(1); + if (!m_context->repositoryExists) { + int newIdx = m_context->activeVersionControls.indexOf(currentSelection) + 1; + m_context->page->setVersionControlIndex(newIdx); + } } QList ProjectFileWizardExtension::extensionPages(const Core::IWizard *wizard) @@ -442,10 +460,10 @@ bool ProjectFileWizardExtension::processVersionControl(const QListpage->versionControlIndex() - 1; - if (vcsIndex < 0 || vcsIndex >= m_context->versionControls.size()) + if (vcsIndex < 0 || vcsIndex >= m_context->activeVersionControls.size()) return true; QTC_ASSERT(!m_context->commonDirectory.isEmpty(), return false); - Core::IVersionControl *versionControl = m_context->versionControls.at(vcsIndex); + Core::IVersionControl *versionControl = m_context->activeVersionControls.at(vcsIndex); // Create repository? if (!m_context->repositoryExists) { QTC_ASSERT(versionControl->supportsOperation(Core::IVersionControl::CreateRepositoryOperation), return false); diff --git a/src/plugins/projectexplorer/projectfilewizardextension.h b/src/plugins/projectexplorer/projectfilewizardextension.h index 436b8afeb3..2ca54b4d32 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.h +++ b/src/plugins/projectexplorer/projectfilewizardextension.h @@ -54,10 +54,10 @@ public: public slots: void firstExtensionPageShown(const QList &files); + void initializeVersionControlChoices(); private: void initProjectChoices(const QString &generatedProjectFilePath); - void initializeVersionControlChoices(); bool processProject(const QList &files, bool *removeOpenProjectAttribute, QString *errorMessage); bool processVersionControl(const QList &files, QString *errorMessage); diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp index 08fab79557..cd1c28994e 100644 --- a/src/plugins/subversion/subversioncontrol.cpp +++ b/src/plugins/subversion/subversioncontrol.cpp @@ -159,3 +159,8 @@ void SubversionControl::emitFilesChanged(const QStringList &l) { emit filesChanged(l); } + +void SubversionControl::emitConfigurationChanged() +{ + emit configurationChanged(); +} diff --git a/src/plugins/subversion/subversioncontrol.h b/src/plugins/subversion/subversioncontrol.h index 1dd519328f..2805ebc982 100644 --- a/src/plugins/subversion/subversioncontrol.h +++ b/src/plugins/subversion/subversioncontrol.h @@ -69,6 +69,7 @@ public: void emitRepositoryChanged(const QString &); void emitFilesChanged(const QStringList &); + void emitConfigurationChanged(); private: SubversionPlugin *m_plugin; diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index 6a5dba9f97..d8615b0b74 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -1203,6 +1203,7 @@ void SubversionPlugin::setSettings(const SubversionSettings &s) m_settings = s; if (QSettings *settings = Core::ICore::instance()->settings()) m_settings.toSettings(settings); + subVersionControl()->emitConfigurationChanged(); } }