ProjectExplorer: Make Json Wizard icons themable

Wizard json files can now define via
  "iconKind" : "Themed"
that the provided icon is a themable mask rather than a plain image.

Change-Id: I668b7fe368b6989f3609143b22270cb8cec21b12
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Alessandro Portale
2021-09-28 10:28:28 +02:00
parent ebc6e1fc62
commit e97a8471b5
3 changed files with 16 additions and 1 deletions

View File

@@ -34,6 +34,7 @@
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/icon.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/wizard.h> #include <utils/wizard.h>
@@ -369,6 +370,11 @@ void IWizardFactory::requestNewItemDialog(const QString &title,
s_reopenData.setData(title, factories, defaultLocation, extraVariables); s_reopenData.setData(title, factories, defaultLocation, extraVariables);
} }
QIcon IWizardFactory::themedIcon(const Utils::FilePath &iconMaskPath)
{
return Utils::Icon({{iconMaskPath, Theme::PanelTextColorDark}}, Icon::Tint).icon();
}
void IWizardFactory::destroyFeatureProvider() void IWizardFactory::destroyFeatureProvider()
{ {
qDeleteAll(s_providerList); qDeleteAll(s_providerList);
@@ -445,6 +451,7 @@ static QIcon iconWithText(const QIcon &icon, const QString &text)
font.setPixelSize(fontSize); font.setPixelSize(fontSize);
font.setStretch(85); font.setStretch(85);
QPainter p(&pixmap); QPainter p(&pixmap);
p.setPen(Utils::creatorTheme()->color(Theme::PanelTextColorDark));
p.setFont(font); p.setFont(font);
QTextOption textOption(Qt::AlignHCenter | Qt::AlignBottom); QTextOption textOption(Qt::AlignHCenter | Qt::AlignBottom);
textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);

View File

@@ -115,6 +115,8 @@ public:
const Utils::FilePath &defaultLocation, const Utils::FilePath &defaultLocation,
const QVariantMap &extraVariables); const QVariantMap &extraVariables);
static QIcon themedIcon(const Utils::FilePath &iconMaskPath);
protected: protected:
static QSet<Utils::Id> pluginFeatures(); static QSet<Utils::Id> pluginFeatures();
static QSet<Utils::Id> availableFeatures(Utils::Id platformId); static QSet<Utils::Id> availableFeatures(Utils::Id platformId);

View File

@@ -73,6 +73,7 @@ const char DISPLAY_NAME_KEY[] = "trDisplayName";
const char ICON_KEY[] = "icon"; const char ICON_KEY[] = "icon";
const char ICON_TEXT_KEY[] = "iconText"; const char ICON_TEXT_KEY[] = "iconText";
const char IMAGE_KEY[] = "image"; const char IMAGE_KEY[] = "image";
const char ICON_KIND_KEY[] = "iconKind";
const char DESCRIPTION_KEY[] = "trDescription"; const char DESCRIPTION_KEY[] = "trDescription";
const char REQUIRED_FEATURES_KEY[] = "featuresRequired"; const char REQUIRED_FEATURES_KEY[] = "featuresRequired";
const char SUGGESTED_FEATURES_KEY[] = "featuresSuggested"; const char SUGGESTED_FEATURES_KEY[] = "featuresSuggested";
@@ -586,7 +587,12 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const FilePath &base
return false; return false;
} }
const QString iconText = data.value(QLatin1String(ICON_TEXT_KEY)).toString(); const QString iconText = data.value(QLatin1String(ICON_TEXT_KEY)).toString();
setIcon(strVal.isEmpty() ? QIcon() : QIcon(iconPath.toString()), iconText); const bool iconIsThemed = data.value(QLatin1String(ICON_KIND_KEY)).toString()
.compare("Themed", Qt::CaseInsensitive) == 0;
setIcon(iconIsThemed ? themedIcon(iconPath)
: strVal.isEmpty() ? QIcon()
: QIcon(iconPath.toString()),
iconText);
strVal = data.value(QLatin1String(IMAGE_KEY)).toString(); strVal = data.value(QLatin1String(IMAGE_KEY)).toString();
if (!strVal.isEmpty()) { if (!strVal.isEmpty()) {