diff --git a/src/plugins/coreplugin/coreimpl.cpp b/src/plugins/coreplugin/coreimpl.cpp index 70eef1a5602fd0effca40d9ad26c6a67309d9825..2c7be1e9cf525f0854c8db9d1a4a2d3a98daa99f 100644 --- a/src/plugins/coreplugin/coreimpl.cpp +++ b/src/plugins/coreplugin/coreimpl.cpp @@ -187,16 +187,9 @@ QStatusBar *CoreImpl::statusBar() const return m_mainwindow->statusBar(); } -// adds and removes additional active contexts, this context is appended to the -// currently active contexts. call updateContext after changing -void CoreImpl::addAdditionalContext(int context) +void CoreImpl::updateAdditionalContexts(const QList<int> &remove, const QList<int> &add) { - m_mainwindow->addAdditionalContext(context); -} - -void CoreImpl::removeAdditionalContext(int context) -{ - m_mainwindow->removeAdditionalContext(context); + m_mainwindow->updateAdditionalContexts(remove, add); } bool CoreImpl::hasContext(int context) const @@ -214,11 +207,6 @@ void CoreImpl::removeContextObject(IContext *context) m_mainwindow->removeContextObject(context); } -void CoreImpl::updateContext() -{ - return m_mainwindow->updateContext(); -} - void CoreImpl::openFiles(const QStringList &arguments) { m_mainwindow->openFiles(arguments); diff --git a/src/plugins/coreplugin/coreimpl.h b/src/plugins/coreplugin/coreimpl.h index 3ae7874b537fc7f95c4d38fe3358acdd6436a6e8..749a7962e6f6e5fd73debbdbfc9bc772799617dd 100644 --- a/src/plugins/coreplugin/coreimpl.h +++ b/src/plugins/coreplugin/coreimpl.h @@ -81,15 +81,12 @@ public: QMainWindow *mainWindow() const; QStatusBar *statusBar() const; - // adds and removes additional active contexts, this context is appended to the - // currently active contexts. call updateContext after changing - void addAdditionalContext(int context); - void removeAdditionalContext(int context); + // Adds and removes additional active contexts, these contexts are appended + // to the currently active contexts. + void updateAdditionalContexts(const QList<int> &remove, const QList<int> &add); bool hasContext(int context) const; - void addContextObject(IContext *contex); - void removeContextObject(IContext *contex); - - void updateContext(); + void addContextObject(IContext *context); + void removeContextObject(IContext *context); void openFiles(const QStringList &fileNames); diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp index 2568cb5f3b9b312edcf2b1718070f4d0bb68b979..4f8d40a9ca64ba5e25d51f5bc868cec7fef30b39 100644 --- a/src/plugins/coreplugin/designmode.cpp +++ b/src/plugins/coreplugin/designmode.cpp @@ -267,16 +267,10 @@ void DesignMode::updateContext(Core::IMode *newMode, Core::IMode *oldMode) { if (newMode == this) { // Apply active context - Core::ICore *core = Core::ICore::instance(); - foreach (int contextId, d->m_activeContext) - core->addAdditionalContext(contextId); - core->updateContext(); + Core::ICore::instance()->updateAdditionalContexts(QList<int>(), d->m_activeContext); } else if (oldMode == this) { // Remove active context - Core::ICore *core = Core::ICore::instance(); - foreach (int contextId, d->m_activeContext) - core->removeAdditionalContext(contextId); - core->updateContext(); + Core::ICore::instance()->updateAdditionalContexts(d->m_activeContext, QList<int>()); } } @@ -285,15 +279,9 @@ void DesignMode::setActiveContext(const QList<int> &context) if (d->m_activeContext == context) return; - if (ModeManager::instance()->currentMode() == this) { - // Update active context - Core::ICore *core = Core::ICore::instance(); - foreach (int contextId, d->m_activeContext) - core->removeAdditionalContext(contextId); - foreach (int contextId, context) - core->addAdditionalContext(contextId); - core->updateContext(); - } + if (ModeManager::instance()->currentMode() == this) + Core::ICore::instance()->updateAdditionalContexts(d->m_activeContext, context); + d->m_activeContext = context; } diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index d82630534c4a5bf7bac3daf293b1503823e3e678..c0ff26c7f4e066ed787e7a2ad9b447b1be49bcce 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -107,17 +107,14 @@ public: virtual QMainWindow *mainWindow() const = 0; virtual QStatusBar *statusBar() const = 0; - // adds and removes additional active contexts, this context is appended to the - // currently active contexts. call updateContext after changing virtual IContext *currentContextObject() const = 0; - virtual void addAdditionalContext(int context) = 0; - virtual void removeAdditionalContext(int context) = 0; + // Adds and removes additional active contexts, these contexts are appended + // to the currently active contexts. + virtual void updateAdditionalContexts(const QList<int> &remove, const QList<int> &add) = 0; virtual bool hasContext(int context) const = 0; virtual void addContextObject(IContext *context) = 0; virtual void removeContextObject(IContext *context) = 0; - virtual void updateContext() = 0; - virtual void openFiles(const QStringList &fileNames) = 0; signals: diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index 9acd4adcbc550f789a9de4e6800648503602b8a4..433c20a2c7c74179809244113e07e5e76612a3aa 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -1171,23 +1171,26 @@ void MainWindow::writeSettings() m_navigationWidget->saveSettings(m_settings); } -void MainWindow::addAdditionalContext(int context) +void MainWindow::updateAdditionalContexts(const QList<int> &remove, const QList<int> &add) { - if (context == 0) - return; + foreach (const int context, remove) { + if (context == 0) + continue; - if (!m_additionalContexts.contains(context)) - m_additionalContexts.prepend(context); -} + int index = m_additionalContexts.indexOf(context); + if (index != -1) + m_additionalContexts.removeAt(index); + } -void MainWindow::removeAdditionalContext(int context) -{ - if (context == 0) - return; + foreach (const int context, add) { + if (context == 0) + continue; - int index = m_additionalContexts.indexOf(context); - if (index != -1) - m_additionalContexts.removeAt(index); + if (!m_additionalContexts.contains(context)) + m_additionalContexts.prepend(context); + } + + updateContext(); } bool MainWindow::hasContext(int context) const diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h index dcd998b3a031fdddfc91f5ad1e6564f52a1cda69..b872baaeccd4355def64526dae5004fa66feead6 100644 --- a/src/plugins/coreplugin/mainwindow.h +++ b/src/plugins/coreplugin/mainwindow.h @@ -114,11 +114,9 @@ public: virtual QPrinter *printer() const; IContext * currentContextObject() const; QStatusBar *statusBar() const; - void addAdditionalContext(int context); - void removeAdditionalContext(int context); - bool hasContext(int context) const; - void updateContext(); + void updateAdditionalContexts(const QList<int> &remove, const QList<int> &add); + bool hasContext(int context) const; void setSuppressNavigationWidget(bool suppress); @@ -168,6 +166,8 @@ private slots: private: void updateContextObject(IContext *context); + void updateContext(); + void registerDefaultContainers(); void registerDefaultActions(); @@ -199,7 +199,7 @@ private: Core::StatusBarWidget *m_outputView; VersionDialog *m_versionDialog; - IContext * m_activeContext; + IContext *m_activeContext; QMap<QWidget *, IContext *> m_contextWidgets; diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp index 6f390f7216e60020ae7b8a105573be0b0cc05d50..84fdc98bcd9d0dd07d85ccaaafb6d9c4e7e8a97a 100644 --- a/src/plugins/coreplugin/modemanager.cpp +++ b/src/plugins/coreplugin/modemanager.cpp @@ -271,19 +271,14 @@ void ModeManager::currentTabChanged(int index) // FIXME: This hardcoded context update is required for the Debug and Edit modes, since // they use the editor widget, which is already a context widget so the main window won't // go further up the parent tree to find the mode context. - ICore *core = ICore::instance(); - foreach (const int context, d->m_addedContexts) - core->removeAdditionalContext(context); - + ICore::instance()->updateAdditionalContexts(d->m_addedContexts, mode->context()); d->m_addedContexts = mode->context(); - foreach (const int context, d->m_addedContexts) - core->addAdditionalContext(context); + IMode *oldMode = 0; if (d->m_oldCurrent >= 0) oldMode = d->m_modes.at(d->m_oldCurrent); d->m_oldCurrent = index; emit currentModeChanged(mode, oldMode); - core->updateContext(); } } diff --git a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp index 83c83ec53e7805acec0e7cb78f708b817d034fc6..ad6868a85f79951a9e134f0eed31d1254b9a245f 100644 --- a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp +++ b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp @@ -80,14 +80,9 @@ QSettings *CorePrototype::settings() const return callee()->settings(); } -void CorePrototype::addAdditionalContext(int context) +void CorePrototype::updateAdditionalContexts(const QList<int> &remove, const QList<int> &add) { - callee()->addAdditionalContext(context); -} - -void CorePrototype::removeAdditionalContext(int context) -{ - callee()->removeAdditionalContext(context); + callee()->updateAdditionalContexts(remove, add); } QString CorePrototype::toString() const diff --git a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h index ca4592b3c199f23e428e16dc85b5b25373ae59d6..46acca4cc556b996c62002d97f9d55308d34c1f3 100644 --- a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h +++ b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h @@ -66,8 +66,7 @@ public: QSettings *settings() const; public slots: - void addAdditionalContext(int context); - void removeAdditionalContext(int context); + void updateAdditionalContexts(const QList<int> &remove, const QList<int> &add); QString toString() const; private: diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 2dad7377ff63e6a0f6b822bf1806769942439746..6e221d12628ee1127158725684e36c534df74b70 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1229,13 +1229,10 @@ void DebuggerPlugin::handleStateChanged(int state) const bool startIsContinue = (state == InferiorStopped); ICore *core = ICore::instance(); - if (startIsContinue) { - core->addAdditionalContext(m_gdbRunningContext); - core->updateContext(); - } else { - core->removeAdditionalContext(m_gdbRunningContext); - core->updateContext(); - } + if (startIsContinue) + core->updateAdditionalContexts(QList<int>(), QList<int>() << m_gdbRunningContext); + else + core->updateAdditionalContexts(QList<int>() << m_gdbRunningContext, QList<int>()); const bool started = state == InferiorRunning || state == InferiorRunningRequested diff --git a/src/plugins/debugger/debuggeruiswitcher.cpp b/src/plugins/debugger/debuggeruiswitcher.cpp index 1857a4473e6c3730725dfe0d03e24cbd4bd703d5..68fe2f7a531bfdeb4286961df635b9135af65890 100644 --- a/src/plugins/debugger/debuggeruiswitcher.cpp +++ b/src/plugins/debugger/debuggeruiswitcher.cpp @@ -317,13 +317,7 @@ void DebuggerUISwitcher::changeDebuggerUI(const QString &langName) Core::ICore *core = Core::ICore::instance(); const QList<int> &oldContexts = d->m_contextsForLanguage.value(d->m_activeLanguage); const QList<int> &newContexts = d->m_contextsForLanguage.value(langId); - foreach(int ctx, oldContexts) - core->removeAdditionalContext(ctx); - - foreach(int ctx, newContexts) - core->addAdditionalContext(ctx); - - core->updateContext(); + core->updateAdditionalContexts(oldContexts, newContexts); d->m_activeLanguage = langId; diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 34c2216138b5391c0c97bea5ed1b44704563c8eb..485eaebf312bbe47986269a755edc2ff4efa9849 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1325,24 +1325,19 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node bool projectChanged = false; if (d->m_currentProject != project) { - int oldContext = -1; - int newContext = -1; - int oldLanguageID = -1; - int newLanguageID = -1; + QList<int> oldContext; + QList<int> newContext; + if (d->m_currentProject) { - oldContext = d->m_currentProject->projectManager()->projectContext(); - oldLanguageID = d->m_currentProject->projectManager()->projectLanguage(); + oldContext.append(d->m_currentProject->projectManager()->projectContext()); + oldContext.append(d->m_currentProject->projectManager()->projectLanguage()); } if (project) { - newContext = project->projectManager()->projectContext(); - newLanguageID = project->projectManager()->projectLanguage(); + newContext.append(project->projectManager()->projectContext()); + newContext.append(project->projectManager()->projectLanguage()); } - core->removeAdditionalContext(oldContext); - core->removeAdditionalContext(oldLanguageID); - core->addAdditionalContext(newContext); - core->addAdditionalContext(newLanguageID); - core->updateContext(); + core->updateAdditionalContexts(oldContext, newContext); d->m_currentProject = project;