From 5d3b0f78e72af2f679594562d9257b250dd58867 Mon Sep 17 00:00:00 2001 From: Samuel Ghinet Date: Thu, 11 Nov 2021 12:04:54 +0200 Subject: [PATCH] Fix: the wizards must use font icon constant names rather than codes At every change made to the .ttf file, the unicode codes for the font icons will change. Therefore, we can't use hardcoded unicode values for the icons in QDS. We need to use constant names and translate those names to unicode codes later, when passing to QML. Change-Id: If032ae3defabc65319b4ebf5c1ed43c376eaea0a Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- src/plugins/coreplugin/iwizardfactory.h | 6 +++--- .../projectexplorer/jsonwizard/jsonwizardfactory.cpp | 6 +++--- src/plugins/qmldesigner/components/componentcore/theme.cpp | 5 +++++ src/plugins/qmldesigner/components/componentcore/theme.h | 1 + src/plugins/studiowelcome/wizardfactories.cpp | 3 ++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index 0cb1b96d43b..d5a435e0fc8 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -64,7 +64,7 @@ public: Utils::Id id() const { return m_id; } WizardKind kind() const { return m_supportedProjectTypes.isEmpty() ? FileWizard : ProjectWizard; } QIcon icon() const { return m_icon; } - QString fontIcondCode() const { return m_fontIconCode; } + QString fontIconName() const { return m_fontIconName; } QString description() const { return m_description; } QString displayName() const { return m_displayName; } QString category() const { return m_category; } @@ -79,7 +79,7 @@ public: void setId(const Utils::Id id) { m_id = id; } void setSupportedProjectTypes(const QSet &projectTypes) { m_supportedProjectTypes = projectTypes; } void setIcon(const QIcon &icon, const QString &iconText = {}); - void setFontIconCode(const QString &code) { m_fontIconCode = code; } + void setFontIconName(const QString &code) { m_fontIconName = code; } void setDescription(const QString &description) { m_description = description; } void setDisplayName(const QString &displayName) { m_displayName = displayName; } void setCategory(const QString &category) { m_category = category; } @@ -137,7 +137,7 @@ private: QAction *m_action = nullptr; QIcon m_icon; - QString m_fontIconCode; + QString m_fontIconName; QString m_description; QString m_displayName; QString m_category; diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index d460995aa81..425cfcd5526 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -72,7 +72,7 @@ const char CATEGORY_NAME_KEY[] = "trDisplayCategory"; const char DISPLAY_NAME_KEY[] = "trDisplayName"; const char ICON_KEY[] = "icon"; const char ICON_TEXT_KEY[] = "iconText"; -const char FONT_ICON_CODE_KEY[] = "fontIconCode"; +const char FONT_ICON_NAME_KEY[] = "fontIconName"; const char IMAGE_KEY[] = "image"; const char ICON_KIND_KEY[] = "iconKind"; const char DESCRIPTION_KEY[] = "trDescription"; @@ -743,8 +743,8 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const FilePath &base : QIcon(iconPath.toString()), iconText); - const QString fontIconCode = data.value(QLatin1String(FONT_ICON_CODE_KEY)).toString(); - setFontIconCode(fontIconCode); + const QString fontIconName = data.value(QLatin1String(FONT_ICON_NAME_KEY)).toString(); + setFontIconName(fontIconName); strVal = data.value(QLatin1String(IMAGE_KEY)).toString(); if (!strVal.isEmpty()) { diff --git a/src/plugins/qmldesigner/components/componentcore/theme.cpp b/src/plugins/qmldesigner/components/componentcore/theme.cpp index 6fe7afe7603..df96fd61a36 100644 --- a/src/plugins/qmldesigner/components/componentcore/theme.cpp +++ b/src/plugins/qmldesigner/components/componentcore/theme.cpp @@ -186,6 +186,11 @@ QString Theme::getIconUnicode(Theme::Icon i) return instance()->m_constants->property(e.valueToKey(i)).toString(); } +QString Theme::getIconUnicode(const QString &name) +{ + return instance()->m_constants->property(name.toStdString().data()).toString(); +} + QColor Theme::qmlDesignerBackgroundColorDarker() const { return getColor(QmlDesigner_BackgroundColorDarker); diff --git a/src/plugins/qmldesigner/components/componentcore/theme.h b/src/plugins/qmldesigner/components/componentcore/theme.h index 159824b1f77..05348bc7dff 100644 --- a/src/plugins/qmldesigner/components/componentcore/theme.h +++ b/src/plugins/qmldesigner/components/componentcore/theme.h @@ -198,6 +198,7 @@ public: static QColor getColor(Color role); static QPixmap getPixmap(const QString &id); static QString getIconUnicode(Theme::Icon i); + static QString getIconUnicode(const QString &name); Q_INVOKABLE QColor qmlDesignerBackgroundColorDarker() const; Q_INVOKABLE QColor qmlDesignerBackgroundColorDarkAlternate() const; diff --git a/src/plugins/studiowelcome/wizardfactories.cpp b/src/plugins/studiowelcome/wizardfactories.cpp index a7cb20b0c62..d9a6d686e75 100644 --- a/src/plugins/studiowelcome/wizardfactories.cpp +++ b/src/plugins/studiowelcome/wizardfactories.cpp @@ -28,6 +28,7 @@ #include #include "wizardfactories.h" +#include namespace { // TODO: should be extern, check coreplugin/dialogs/newdialogwidget.cpp @@ -83,7 +84,7 @@ ProjectItem WizardFactories::makeProjectItem(Core::IWizardFactory *f, QWidget *p /*.categoryId =*/f->category(), /*. description =*/f->description(), /*.qmlPath =*/f->detailsPageQmlPath(), - /*.fontIconCode =*/f->fontIcondCode(), + /*.fontIconCode =*/QmlDesigner::Theme::getIconUnicode(f->fontIconName()), /*.create =*/ std::bind(&Core::IWizardFactory::runWizard, f, _1, parent, platform, QVariantMap(), false), };