From 75b1789378fac15fd899399e3eeaaf5450bca40b Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 2 May 2025 14:01:31 +0200 Subject: 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 --- .../extensionmanager/extensionmanagerwidget.cpp | 103 ++++++++------------- 1 file 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 #include #include #include #include #include +#include #include #include @@ -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,12 +645,35 @@ 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 { @@ -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); -- cgit v1.2.3