forked from qt-creator/qt-creator
ExtensionManager: Show a placeholder text for empty extension browser
If the extension list is empty, e.g. because of search text or filter chooser, a place holder text is now shown. It is in the same stack widget as the listview. The stack index is set accordingly. Fixes: QTCREATORBUG-31584 Change-Id: I4dedbe5914301e5d37fc3f93ed1ed5affaf96d6d Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
@@ -518,6 +518,25 @@ public:
|
|||||||
SpinnerSolution::Spinner *m_spinner;
|
SpinnerSolution::Spinner *m_spinner;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static QWidget *extensionViewPlaceHolder()
|
||||||
|
{
|
||||||
|
static const TextFormat tF {Theme::Token_Text_Muted, UiElementH4};
|
||||||
|
auto text = tfLabel(tF, false);
|
||||||
|
text->setAlignment(Qt::AlignCenter);
|
||||||
|
text->setText(Tr::tr("No extension found!"));
|
||||||
|
text->setWordWrap(true);
|
||||||
|
|
||||||
|
using namespace Layouting;
|
||||||
|
// clang-format off
|
||||||
|
return Column {
|
||||||
|
Space(SpacingTokens::ExVPaddingGapXl),
|
||||||
|
text,
|
||||||
|
st,
|
||||||
|
noMargin,
|
||||||
|
}.emerge();
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
||||||
ExtensionsBrowser::ExtensionsBrowser(ExtensionsModel *model, QWidget *parent)
|
ExtensionsBrowser::ExtensionsBrowser(ExtensionsModel *model, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, d(new ExtensionsBrowserPrivate)
|
, d(new ExtensionsBrowserPrivate)
|
||||||
@@ -566,6 +585,8 @@ ExtensionsBrowser::ExtensionsBrowser(ExtensionsModel *model, QWidget *parent)
|
|||||||
d->extensionsView->setModel(d->sortFilterProxyModel);
|
d->extensionsView->setModel(d->sortFilterProxyModel);
|
||||||
d->extensionsView->setMouseTracking(true);
|
d->extensionsView->setMouseTracking(true);
|
||||||
|
|
||||||
|
QStackedWidget *extensionViewStack;
|
||||||
|
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
Column {
|
Column {
|
||||||
Column {
|
Column {
|
||||||
@@ -585,7 +606,14 @@ ExtensionsBrowser::ExtensionsBrowser(ExtensionsModel *model, QWidget *parent)
|
|||||||
spacing(HGapS),
|
spacing(HGapS),
|
||||||
customMargins(0, 0, extraListViewWidth() + gapSize, 0),
|
customMargins(0, 0, extraListViewWidth() + gapSize, 0),
|
||||||
},
|
},
|
||||||
|
Stack {
|
||||||
|
bindTo(&extensionViewStack),
|
||||||
d->extensionsView,
|
d->extensionsView,
|
||||||
|
Row {
|
||||||
|
extensionViewPlaceHolder(),
|
||||||
|
customMargins(0, 0, extraListViewWidth() + gapSize, 0),
|
||||||
|
},
|
||||||
|
},
|
||||||
noMargin, spacing(0),
|
noMargin, spacing(0),
|
||||||
}.attachTo(this);
|
}.attachTo(this);
|
||||||
|
|
||||||
@@ -609,6 +637,10 @@ ExtensionsBrowser::ExtensionsBrowser(ExtensionsModel *model, QWidget *parent)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto updatePlaceHolderVisibility = [this, extensionViewStack] {
|
||||||
|
extensionViewStack->setCurrentIndex(d->sortFilterProxyModel->rowCount() == 0 ? 1 : 0);
|
||||||
|
};
|
||||||
|
|
||||||
connect(PluginManager::instance(), &PluginManager::pluginsChanged, this, updateModel);
|
connect(PluginManager::instance(), &PluginManager::pluginsChanged, this, updateModel);
|
||||||
connect(d->searchBox, &QLineEdit::textChanged,
|
connect(d->searchBox, &QLineEdit::textChanged,
|
||||||
d->searchProxyModel, &QSortFilterProxyModel::setFilterWildcard);
|
d->searchProxyModel, &QSortFilterProxyModel::setFilterWildcard);
|
||||||
@@ -616,6 +648,10 @@ ExtensionsBrowser::ExtensionsBrowser(ExtensionsModel *model, QWidget *parent)
|
|||||||
d->sortFilterProxyModel, &SortFilterProxyModel::setSortOption);
|
d->sortFilterProxyModel, &SortFilterProxyModel::setSortOption);
|
||||||
connect(d->filterChooser, &OptionChooser::currentIndexChanged,
|
connect(d->filterChooser, &OptionChooser::currentIndexChanged,
|
||||||
d->sortFilterProxyModel, &SortFilterProxyModel::setFilterOption);
|
d->sortFilterProxyModel, &SortFilterProxyModel::setFilterOption);
|
||||||
|
connect(d->sortFilterProxyModel, &SortFilterProxyModel::rowsRemoved,
|
||||||
|
this, updatePlaceHolderVisibility);
|
||||||
|
connect(d->sortFilterProxyModel, &SortFilterProxyModel::rowsInserted,
|
||||||
|
this, updatePlaceHolderVisibility);
|
||||||
connect(settingsToolButton, &QAbstractButton::clicked, this, []() {
|
connect(settingsToolButton, &QAbstractButton::clicked, this, []() {
|
||||||
ICore::showOptionsDialog(Constants::EXTENSIONMANAGER_SETTINGSPAGE_ID);
|
ICore::showOptionsDialog(Constants::EXTENSIONMANAGER_SETTINGSPAGE_ID);
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user