forked from qt-creator/qt-creator
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:
@@ -34,6 +34,7 @@
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
|
||||
#include <utils/fileutils.h>
|
||||
#include <utils/icon.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/wizard.h>
|
||||
|
||||
@@ -369,6 +370,11 @@ void IWizardFactory::requestNewItemDialog(const QString &title,
|
||||
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()
|
||||
{
|
||||
qDeleteAll(s_providerList);
|
||||
@@ -445,6 +451,7 @@ static QIcon iconWithText(const QIcon &icon, const QString &text)
|
||||
font.setPixelSize(fontSize);
|
||||
font.setStretch(85);
|
||||
QPainter p(&pixmap);
|
||||
p.setPen(Utils::creatorTheme()->color(Theme::PanelTextColorDark));
|
||||
p.setFont(font);
|
||||
QTextOption textOption(Qt::AlignHCenter | Qt::AlignBottom);
|
||||
textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
|
||||
|
@@ -115,6 +115,8 @@ public:
|
||||
const Utils::FilePath &defaultLocation,
|
||||
const QVariantMap &extraVariables);
|
||||
|
||||
static QIcon themedIcon(const Utils::FilePath &iconMaskPath);
|
||||
|
||||
protected:
|
||||
static QSet<Utils::Id> pluginFeatures();
|
||||
static QSet<Utils::Id> availableFeatures(Utils::Id platformId);
|
||||
|
@@ -73,6 +73,7 @@ const char DISPLAY_NAME_KEY[] = "trDisplayName";
|
||||
const char ICON_KEY[] = "icon";
|
||||
const char ICON_TEXT_KEY[] = "iconText";
|
||||
const char IMAGE_KEY[] = "image";
|
||||
const char ICON_KIND_KEY[] = "iconKind";
|
||||
const char DESCRIPTION_KEY[] = "trDescription";
|
||||
const char REQUIRED_FEATURES_KEY[] = "featuresRequired";
|
||||
const char SUGGESTED_FEATURES_KEY[] = "featuresSuggested";
|
||||
@@ -586,7 +587,12 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const FilePath &base
|
||||
return false;
|
||||
}
|
||||
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();
|
||||
if (!strVal.isEmpty()) {
|
||||
|
Reference in New Issue
Block a user