ExtensionManager: Show details placeholder when no extension is selected

The placeholder and the details widget are in a stack layout and made
visible, accordingly.

Task-number: QTCREATORBUG-31584
Change-Id: I0d42ab52ce12f1d42e259f540c247b79fc33d25f
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Alessandro Portale
2024-10-10 17:45:50 +02:00
parent fd8173b827
commit 9a6be8a411

View File

@@ -557,6 +557,7 @@ private:
QString m_currentItemName; QString m_currentItemName;
ExtensionsModel *m_extensionModel; ExtensionsModel *m_extensionModel;
ExtensionsBrowser *m_extensionBrowser; ExtensionsBrowser *m_extensionBrowser;
QStackedWidget *m_detailsStack;
CollapsingWidget *m_secondaryDescriptionWidget; CollapsingWidget *m_secondaryDescriptionWidget;
HeadingWidget *m_headingWidget; HeadingWidget *m_headingWidget;
QWidget *m_primaryContent; QWidget *m_primaryContent;
@@ -578,6 +579,40 @@ private:
Tasking::TaskTreeRunner m_dlTaskTreeRunner; Tasking::TaskTreeRunner m_dlTaskTreeRunner;
}; };
static QWidget *descriptionPlaceHolder()
{
auto placeHolder = new QWidget;
static const TextFormat tF {
Theme::Token_Text_Muted, UiElement::UiElementH4
};
auto title = tfLabel(tF);
title->setAlignment(Qt::AlignCenter);
title->setText(Tr::tr("No details to show"));
auto text = tfLabel(tF, false);
text->setAlignment(Qt::AlignCenter);
text->setText(Tr::tr("Select an extension to see more information about it."));
text->setFont({});
using namespace Layouting;
// clang-format off
Row {
st,
Column {
Stretch(2),
title,
WelcomePageHelpers::createRule(Qt::Horizontal),
text,
Stretch(3),
spacing(SpacingTokens::ExPaddingGapL),
},
st,
noMargin,
}.attachTo(placeHolder);
// clang-format on
WelcomePageHelpers::setBackgroundColor(placeHolder, Theme::Token_Background_Muted);
placeHolder->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred);
return placeHolder;
}
ExtensionManagerWidget::ExtensionManagerWidget() ExtensionManagerWidget::ExtensionManagerWidget()
{ {
m_extensionModel = new ExtensionsModel(this); m_extensionModel = new ExtensionsModel(this);
@@ -644,7 +679,6 @@ ExtensionManagerWidget::ExtensionManagerWidget()
}.attachTo(m_secondaryDescriptionWidget); }.attachTo(m_secondaryDescriptionWidget);
Row { Row {
WelcomePageHelpers::createRule(Qt::Vertical),
Row { Row {
Column { Column {
Column { Column {
@@ -664,8 +698,12 @@ ExtensionManagerWidget::ExtensionManagerWidget()
Row { Row {
Space(SpacingTokens::ExVPaddingGapXl), Space(SpacingTokens::ExVPaddingGapXl),
m_extensionBrowser, m_extensionBrowser,
descriptionColumns, WelcomePageHelpers::createRule(Qt::Vertical),
noMargin, spacing(0), Stack {
bindTo(&m_detailsStack),
descriptionPlaceHolder(),
descriptionColumns,
},
}, },
noMargin, spacing(0), noMargin, spacing(0),
}.attachTo(this); }.attachTo(this);
@@ -743,15 +781,14 @@ static QString markdownToHtml(const QString &markdown)
void ExtensionManagerWidget::updateView(const QModelIndex &current) void ExtensionManagerWidget::updateView(const QModelIndex &current)
{ {
m_headingWidget->update(current); if (current.isValid()) {
m_detailsStack->setCurrentIndex(1);
const bool showContent = current.isValid(); } else {
m_primaryContent->setVisible(showContent); m_detailsStack->setCurrentIndex(0);
m_secondaryContent->setVisible(showContent);
m_headingWidget->setVisible(showContent);
m_pluginStatus->setVisible(showContent);
if (!showContent)
return; return;
}
m_headingWidget->update(current);
m_currentItemName = current.data(RoleName).toString(); m_currentItemName = current.data(RoleName).toString();
const bool isPack = current.data(RoleItemType) == ItemTypePack; const bool isPack = current.data(RoleItemType) == ItemTypePack;