diff options
-rw-r--r-- | src/plugins/coreplugin/fancytabwidget.cpp | 6 | ||||
-rw-r--r-- | src/plugins/coreplugin/fancytabwidget.h | 7 | ||||
-rw-r--r-- | src/plugins/coreplugin/modemanager.cpp | 15 | ||||
-rw-r--r-- | src/plugins/coreplugin/modemanager.h | 2 |
4 files changed, 30 insertions, 0 deletions
diff --git a/src/plugins/coreplugin/fancytabwidget.cpp b/src/plugins/coreplugin/fancytabwidget.cpp index 00f5d74fcc..c72b89762d 100644 --- a/src/plugins/coreplugin/fancytabwidget.cpp +++ b/src/plugins/coreplugin/fancytabwidget.cpp @@ -551,6 +551,12 @@ void FancyTabWidget::insertTab(int index, QWidget *tab, const QIcon &icon, const m_tabBar->insertTab(index, icon, label, hasMenu); } +void FancyTabWidget::removeTab(int index) +{ + m_modesStack->removeWidget(m_modesStack->widget(index)); + m_tabBar->removeTab(index); +} + void FancyTabWidget::setBackgroundBrush(const QBrush &brush) { QPalette pal; diff --git a/src/plugins/coreplugin/fancytabwidget.h b/src/plugins/coreplugin/fancytabwidget.h index c52376c545..8c5544665d 100644 --- a/src/plugins/coreplugin/fancytabwidget.h +++ b/src/plugins/coreplugin/fancytabwidget.h @@ -109,6 +109,12 @@ public: updateGeometry(); } void setEnabled(int index, bool enabled); + void removeTab(int index) + { + FancyTab *tab = m_tabs.takeAt(index); + delete tab; + updateGeometry(); + } void setCurrentIndex(int index); int currentIndex() const { return m_currentIndex; } @@ -142,6 +148,7 @@ public: FancyTabWidget(QWidget *parent = nullptr); void insertTab(int index, QWidget *tab, const QIcon &icon, const QString &label, bool hasMenu); + void removeTab(int index); void setBackgroundBrush(const QBrush &brush); void addCornerWidget(QWidget *widget); void insertCornerWidget(int pos, QWidget *widget); diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp index c8c33519e1..4a7e3cf369 100644 --- a/src/plugins/coreplugin/modemanager.cpp +++ b/src/plugins/coreplugin/modemanager.cpp @@ -256,6 +256,21 @@ void ModeManagerPrivate::appendMode(IMode *mode) QObject::connect(mode, &IMode::enabledStateChanged, [this, mode] { enabledStateChanged(mode); }); } +void ModeManager::removeMode(IMode *mode) +{ + const int index = d->m_modes.indexOf(mode); + if (index >= d->m_modes.size() - 1 && d->m_modes.size() > 1) + d->m_modeStack->setCurrentIndex(d->m_modes.size() - 2); + d->m_modes.remove(index); + if (d->m_startingUp) + return; + + d->m_modeCommands.remove(index); + d->m_modeStack->removeTab(index); + + d->m_mainWindow->removeContextObject(mode); +} + void ModeManagerPrivate::enabledStateChanged(IMode *mode) { int index = d->m_modes.indexOf(mode); diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h index 7ba0393ce8..cbf963df9d 100644 --- a/src/plugins/coreplugin/modemanager.h +++ b/src/plugins/coreplugin/modemanager.h @@ -67,6 +67,8 @@ public: static void setFocusToCurrentMode(); static Style modeStyle(); + static void removeMode(IMode *mode); + public slots: static void setModeStyle(Style layout); static void cycleModeStyle(); |