From 99e2f0a65a84d3f52effb15cbe37829b63ef9fdb Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 21 Oct 2024 00:25:50 +0200 Subject: [PATCH] ExtensionManager: Implement latest plugin status UI specification The switch to enable or disable the selected plugin moves from the lower right corner to the top right of the middle column. The "Restart Now" button is replaced by an InfoBar entry. The "Loaded"/"Installed" on the extension cards change to "Active"/"Inactive". Fixes: QTCREATORBUG-31856 Change-Id: Iaf79b16255db0c9b55cb683e75eccc949512a4d0 Reviewed-by: Marcus Tillmanns --- .../extensionmanagerwidget.cpp | 29 ++++++++++++------- .../extensionmanager/extensionsbrowser.cpp | 4 +-- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp index 0239907c5c8..84242e99021 100644 --- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp +++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp @@ -9,6 +9,7 @@ #include "extensionsmodel.h" #include +#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -239,6 +241,8 @@ private: QString m_currentVendor; }; +const char kRestartSetting[] = "RestartAfterPluginEnabledChanged"; + class PluginStatusWidget : public QWidget { public: @@ -246,9 +250,7 @@ public: : QWidget(parent) { m_label = new InfoLabel; - m_switch = new Switch(Tr::tr("Load on start")); - m_restartButton = new Button(Tr::tr("Restart Now"), Button::MediumPrimary); - m_restartButton->setVisible(false); + m_switch = new Switch(Tr::tr("Active")); m_pluginView.hide(); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); @@ -256,7 +258,6 @@ public: Column { m_label, m_switch, - m_restartButton, }.attachTo(this); connect(m_switch, &QCheckBox::clicked, this, [this](bool checked) { @@ -265,7 +266,18 @@ public: return; const bool doIt = m_pluginView.data().setPluginsEnabled({spec}, checked); if (doIt) { - m_restartButton->show(); + if (!ICore::infoBar()->canInfoBeAdded(kRestartSetting)) + return; + + Utils::InfoBarEntry info( + kRestartSetting, + Core::Tr::tr("Plugin changes will take effect after restart.")); + info.addCustomButton(Tr::tr("Restart Now"), [] { + ICore::infoBar()->removeInfo(kRestartSetting); + QTimer::singleShot(0, ICore::instance(), &ICore::restart); + }); + ICore::infoBar()->addInfo(info); + ExtensionSystem::PluginManager::writeSettings(); } else { m_switch->setChecked(!checked); @@ -274,8 +286,6 @@ public: connect(ExtensionSystem::PluginManager::instance(), &ExtensionSystem::PluginManager::pluginsChanged, this, &PluginStatusWidget::update); - connect(m_restartButton, &QAbstractButton::clicked, - ICore::instance(), &ICore::restart, Qt::QueuedConnection); update(); } @@ -311,7 +321,6 @@ private: InfoLabel *m_label; Switch *m_switch; - QAbstractButton *m_restartButton; QString m_pluginId; ExtensionSystem::PluginView m_pluginView{this}; }; @@ -493,7 +502,6 @@ ExtensionManagerWidget::ExtensionManagerWidget() WelcomePageHelpers::createRule(Qt::Vertical), Column { m_secondaryContent, - m_pluginStatus, }, noMargin, spacing(0), }.attachTo(m_secondaryDescriptionWidget); @@ -501,8 +509,9 @@ ExtensionManagerWidget::ExtensionManagerWidget() Row { Row { Column { - Column { + Row { m_headingWidget, + m_pluginStatus, customMargins(SpacingTokens::ExVPaddingGapXl, SpacingTokens::ExVPaddingGapXl, SpacingTokens::ExVPaddingGapXl, SpacingTokens::ExVPaddingGapXl), }, diff --git a/src/plugins/extensionmanager/extensionsbrowser.cpp b/src/plugins/extensionmanager/extensionsbrowser.cpp index d69b355224f..2ba17d22036 100644 --- a/src/plugins/extensionmanager/extensionsbrowser.cpp +++ b/src/plugins/extensionmanager/extensionsbrowser.cpp @@ -157,9 +157,9 @@ static QString extensionStateDisplayString(ExtensionState state) { switch (state) { case InstalledEnabled: - return Tr::tr("Loaded"); + return Tr::tr("Active"); case InstalledDisabled: - return Tr::tr("Installed"); + return Tr::tr("Inactive"); default: return {}; }