diff options
author | Alessandro Portale <[email protected]> | 2025-05-02 14:01:31 +0200 |
---|---|---|
committer | Alessandro Portale <[email protected]> | 2025-05-06 13:12:53 +0000 |
commit | 75b1789378fac15fd899399e3eeaaf5450bca40b (patch) | |
tree | 2c583a6bd1f5eede767518c88f46e96f9c75daf3 | |
parent | aecdc26366f65a6bd887d1b85b09a44fbc0607f1 (diff) |
ExtensionManager: Replace side auto-collapsing with toolbutton action
This removes the automatic showing and hiding of the secondary extension
details colum. It is replaced by making use of the toggle side bar
toolbutton in the status bar.
The primary and secondary detail columns are now divided by a splitter.
Change-Id: Ica9bfa75f902e1c8547ffcc2bb08ead9f690b93e
Reviewed-by: Eike Ziller <[email protected]>
-rw-r--r-- | src/plugins/extensionmanager/extensionmanagerwidget.cpp | 103 |
1 files changed, 41 insertions, 62 deletions
diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp index 3bb27e68f2e..358f0777d9a 100644 --- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp +++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp @@ -3,17 +3,20 @@ #include "extensionmanagerwidget.h" +#include "extensionmanagerconstants.h" #include "extensionmanagersettings.h" #include "extensionmanagertr.h" #include "extensionsbrowser.h" #include "extensionsmodel.h" #include "remotespec.h" +#include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/coreconstants.h> #include <coreplugin/coreplugintr.h> #include <coreplugin/icontext.h> #include <coreplugin/icore.h> #include <coreplugin/iwelcomepage.h> +#include <coreplugin/minisplitter.h> #include <coreplugin/plugininstallwizard.h> #include <coreplugin/welcomepagehelper.h> @@ -110,31 +113,6 @@ static void requestRestart() } } -class CollapsingWidget : public QWidget -{ -public: - explicit CollapsingWidget(QWidget *parent = nullptr) - : QWidget(parent) - { - setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); - } - - void setWidth(int width) - { - m_width = width; - setVisible(width > 0); - updateGeometry(); - } - - QSize sizeHint() const override - { - return {m_width, 0}; - } - -private: - int m_width = 100; -}; - class VersionSelector final : public QWidget { Q_OBJECT @@ -570,9 +548,8 @@ private: ExtensionsModel *m_extensionModel; ExtensionsBrowser *m_extensionBrowser; QStackedWidget *m_detailsStack; - CollapsingWidget *m_secondaryDescriptionWidget; + QWidget *m_secondaryDetailsColumn; HeadingWidget *m_headingWidget; - QWidget *m_secondaryContent; MarkdownBrowser *m_description; QLabel *m_dateUpdatedTitle; QLabel *m_dateUpdated; @@ -628,8 +605,6 @@ ExtensionManagerWidget::ExtensionManagerWidget() { m_extensionModel = new ExtensionsModel(this); m_extensionBrowser = new ExtensionsBrowser(m_extensionModel); - auto descriptionColumns = new QWidget; - m_secondaryDescriptionWidget = new CollapsingWidget; m_headingWidget = new HeadingWidget; m_description = new MarkdownBrowser; @@ -641,6 +616,7 @@ ExtensionManagerWidget::ExtensionManagerWidget() m_description->setPalette(browserPal); const int verticalPadding = SpacingTokens::ExVPaddingGapXl - SpacingTokens::VPaddingM; m_description->setMargins({verticalPadding, 0, verticalPadding, 0}); + m_description->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); m_dateUpdatedTitle = sectionTitle(h6TF, Tr::tr("Last Update")); m_dateUpdated = new QLabel; @@ -669,13 +645,36 @@ ExtensionManagerWidget::ExtensionManagerWidget() m_pluginStatus = new PluginStatusWidget; - auto secondary = new QWidget; + ActionBuilder(this, Core::Constants::TOGGLE_RIGHT_SIDEBAR) + .setCheckable(true) + .setChecked(true) + .setContext(Constants::C_EXTENSIONMANAGER) + .setText(Tr::tr("Toggle secondary details")) + .addOnTriggered(this, [this](bool c) { m_secondaryDetailsColumn->setVisible(c); }); + + auto primaryDetailsColumn = new QWidget; + auto secondaryDetails = new QWidget; + secondaryDetails->setMinimumWidth(100); + m_secondaryDetailsColumn = toScrollableColumn(secondaryDetails); + + auto detailsSplitter = new MiniSplitter; using namespace Layouting; const auto spL = spacing(SpacingTokens::VPaddingL); const auto spXxs = spacing(SpacingTokens::VPaddingXxs); // clang-format off Column { + Row { + m_headingWidget, + m_pluginStatus, + customMargins(SpacingTokens::ExVPaddingGapXl, SpacingTokens::ExVPaddingGapXl, + SpacingTokens::ExVPaddingGapXl, SpacingTokens::ExVPaddingGapXl), + }, + m_description, + noMargin, spacing(0), + }.attachTo(primaryDetailsColumn); + + Column { sectionTitle(h6CapitalTF, Tr::tr("Extension details")), Column { Column { m_dateUpdatedTitle, m_dateUpdated, spXxs }, @@ -687,32 +686,7 @@ ExtensionManagerWidget::ExtensionManagerWidget() }, st, noMargin, spacing(SpacingTokens::ExVPaddingGapXl), - }.attachTo(secondary); - m_secondaryContent = toScrollableColumn(secondary); - - Row { - WelcomePageHelpers::createRule(Qt::Vertical), - Column { - m_secondaryContent, - }, - noMargin, spacing(0), - }.attachTo(m_secondaryDescriptionWidget); - - Row { - Row { - Column { - Row { - m_headingWidget, - m_pluginStatus, - customMargins(SpacingTokens::ExVPaddingGapXl, SpacingTokens::ExVPaddingGapXl, - SpacingTokens::ExVPaddingGapXl, SpacingTokens::ExVPaddingGapXl), - }, - m_description, - }, - }, - m_secondaryDescriptionWidget, - noMargin, spacing(0), - }.attachTo(descriptionColumns); + }.attachTo(secondaryDetails); Column { new StyledBar, @@ -723,13 +697,16 @@ ExtensionManagerWidget::ExtensionManagerWidget() Stack { bindTo(&m_detailsStack), descriptionPlaceHolder(), - descriptionColumns, + detailsSplitter, }, }, noMargin, spacing(0), }.attachTo(this); // clang-format on + detailsSplitter->addWidget(primaryDetailsColumn); + detailsSplitter->addWidget(m_secondaryDetailsColumn); + WelcomePageHelpers::setBackgroundColor(this, Theme::Token_Background_Default); connect(m_extensionBrowser, &ExtensionsBrowser::itemSelected, @@ -737,10 +714,6 @@ ExtensionManagerWidget::ExtensionManagerWidget() connect(this, &ResizeSignallingWidget::resized, this, [this](const QSize &size) { const int intendedBrowserColumnWidth = size.width() / 3; m_extensionBrowser->adjustToWidth(intendedBrowserColumnWidth); - const int availableDescriptionWidth = size.width() - m_extensionBrowser->width(); - const bool secondaryDescriptionVisible = availableDescriptionWidth > 1000; - const int secondaryDescriptionWidth = secondaryDescriptionVisible ? 264 : 0; - m_secondaryDescriptionWidget->setWidth(secondaryDescriptionWidth); }); const auto installOrUpdate = [this](bool update) { @@ -787,7 +760,13 @@ ExtensionManagerWidget::ExtensionManagerWidget() void ExtensionManagerWidget::updateView(const QModelIndex ¤t) { - if (current.isValid()) { + const bool currentIsValid = current.isValid(); + + Command *command = ActionManager::command(Core::Constants::TOGGLE_RIGHT_SIDEBAR); + QAction *action = command->actionForContext(Constants::C_EXTENSIONMANAGER); + action->setEnabled(currentIsValid); + + if (currentIsValid) { m_detailsStack->setCurrentIndex(1); } else { m_detailsStack->setCurrentIndex(0); |