diff --git a/src/plugins/coreplugin/dialogs/newdialogwidget.cpp b/src/plugins/coreplugin/dialogs/newdialogwidget.cpp index 7dd233330d4..f8a77c4e8d7 100644 --- a/src/plugins/coreplugin/dialogs/newdialogwidget.cpp +++ b/src/plugins/coreplugin/dialogs/newdialogwidget.cpp @@ -255,9 +255,6 @@ void NewDialogWidget::setWizardFactories(QList factories, parentItem->appendRow(projectKindItem); parentItem->appendRow(filesKindItem); - if (m_dummyIcon.isNull()) - m_dummyIcon = QIcon(":/utils/images/wizardicon-file.png"); - const QSet availablePlatforms = IWizardFactory::allAvailablePlatforms(); const bool allowAllTemplates = ICore::settings()->value(ALLOW_ALL_TEMPLATES, true).toBool(); @@ -360,28 +357,6 @@ IWizardFactory *NewDialogWidget::currentWizardFactory() const return factoryOfItem(m_model->itemFromIndex(index)); } -static QIcon iconWithText(const QIcon &icon, const QString &text) -{ - if (text.isEmpty()) - return icon; - QIcon iconWithText; - for (const QSize &pixmapSize : icon.availableSizes()) { - QPixmap pixmap = icon.pixmap(pixmapSize); - const int fontSize = pixmap.height() / 4; - const int margin = pixmap.height() / 8; - QFont font; - font.setPixelSize(fontSize); - font.setStretch(85); - QPainter p(&pixmap); - p.setFont(font); - QTextOption textOption(Qt::AlignHCenter | Qt::AlignBottom); - textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); - p.drawText(pixmap.rect().adjusted(margin, margin, -margin, -margin), text, textOption); - iconWithText.addPixmap(pixmap); - } - return iconWithText; -} - void NewDialogWidget::addItem(QStandardItem *topLevelCategoryItem, IWizardFactory *factory) { const QString categoryName = factory->category(); @@ -399,15 +374,7 @@ void NewDialogWidget::addItem(QStandardItem *topLevelCategoryItem, IWizardFactor categoryItem->setData(factory->category(), Qt::UserRole); } - QStandardItem *wizardItem = new QStandardItem(factory->displayName()); - QIcon wizardIcon; - - // spacing hack. Add proper icons instead - if (factory->icon().isNull()) - wizardIcon = m_dummyIcon; - else - wizardIcon = factory->icon(); - wizardItem->setIcon(iconWithText(wizardIcon, factory->iconText())); + QStandardItem *wizardItem = new QStandardItem(factory->icon(), factory->displayName()); wizardItem->setData(QVariant::fromValue(WizardFactoryContainer(factory, 0)), Qt::UserRole); wizardItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable); categoryItem->appendRow(wizardItem); diff --git a/src/plugins/coreplugin/dialogs/newdialogwidget.h b/src/plugins/coreplugin/dialogs/newdialogwidget.h index 505c8ade222..8239f4cdd6a 100644 --- a/src/plugins/coreplugin/dialogs/newdialogwidget.h +++ b/src/plugins/coreplugin/dialogs/newdialogwidget.h @@ -86,7 +86,6 @@ private: QStandardItemModel *m_model; QSortFilterProxyModel *m_filterProxyModel; QPushButton *m_okButton = nullptr; - QIcon m_dummyIcon; QList m_categoryItems; Utils::FilePath m_defaultLocation; QVariantMap m_extraVariables; diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index e2b0c40861c..2e9ab0260a5 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -423,6 +423,39 @@ void IWizardFactory::initialize() ActionManager::registerAction(s_inspectWizardAction, "Wizard.Inspect"); } +static QIcon iconWithText(const QIcon &icon, const QString &text) +{ + if (icon.isNull()) { + static const QIcon fallBack(":/utils/images/wizardicon-file.png"); + return iconWithText(fallBack, text); + } + + if (text.isEmpty()) + return icon; + + QIcon iconWithText; + for (const QSize &pixmapSize : icon.availableSizes()) { + QPixmap pixmap = icon.pixmap(pixmapSize); + const int fontSize = pixmap.height() / 4; + const int margin = pixmap.height() / 8; + QFont font; + font.setPixelSize(fontSize); + font.setStretch(85); + QPainter p(&pixmap); + p.setFont(font); + QTextOption textOption(Qt::AlignHCenter | Qt::AlignBottom); + textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); + p.drawText(pixmap.rect().adjusted(margin, margin, -margin, -margin), text, textOption); + iconWithText.addPixmap(pixmap); + } + return iconWithText; +} + +void IWizardFactory::setIcon(const QIcon &icon, const QString &iconText) +{ + m_icon = iconWithText(icon, iconText); +} + void IWizardFactory::setDetailsPageQmlPath(const QString &filePath) { if (filePath.isEmpty()) diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index dde71c2381a..b6ede111847 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -64,7 +64,6 @@ public: Utils::Id id() const { return m_id; } WizardKind kind() const { return m_supportedProjectTypes.isEmpty() ? FileWizard : ProjectWizard; } QIcon icon() const { return m_icon; } - QString iconText() const { return m_iconText; } QString description() const { return m_description; } QString displayName() const { return m_displayName; } QString category() const { return m_category; } @@ -78,8 +77,7 @@ public: void setId(const Utils::Id id) { m_id = id; } void setSupportedProjectTypes(const QSet &projectTypes) { m_supportedProjectTypes = projectTypes; } - void setIcon(const QIcon &icon) { m_icon = icon; } - void setIconText(const QString &iconText) { m_iconText = iconText; } + void setIcon(const QIcon &icon, const QString &iconText = {}); void setDescription(const QString &description) { m_description = description; } void setDisplayName(const QString &displayName) { m_displayName = displayName; } void setCategory(const QString &category) { m_category = category; } @@ -135,7 +133,6 @@ private: QAction *m_action = nullptr; QIcon m_icon; - QString m_iconText; QString m_description; QString m_displayName; QString m_category; diff --git a/src/plugins/designer/formeditorplugin.cpp b/src/plugins/designer/formeditorplugin.cpp index b6af2af28e1..bbcf62600f1 100644 --- a/src/plugins/designer/formeditorplugin.cpp +++ b/src/plugins/designer/formeditorplugin.cpp @@ -91,7 +91,7 @@ bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error) wizard->setCategory(Core::Constants::WIZARD_CATEGORY_QT); wizard->setDisplayCategory(QCoreApplication::translate("Core", Core::Constants::WIZARD_TR_CATEGORY_QT)); wizard->setDisplayName(tr("Qt Designer Form Class")); - wizard->setIconText("ui/h"); + wizard->setIcon({}, "ui/h"); wizard->setId("C.FormClass"); wizard->setDescription(tr("Creates a Qt Designer form along with a matching class (C++ header and source file) " "for implementation purposes. You can add the form and class to an existing Qt Widget Project.")); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index 58257a2527b..0be66d2c00b 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -588,12 +588,9 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const QDir &baseDir, *errorMessage = tr("Icon file \"%1\" not found.").arg(QDir::toNativeSeparators(strVal)); return false; } - setIcon(QIcon(strVal)); } - - strVal = data.value(QLatin1String(ICON_TEXT_KEY)).toString(); - if (!strVal.isEmpty()) - setIconText(strVal); + const QString iconText = data.value(QLatin1String(ICON_TEXT_KEY)).toString(); + setIcon(iconText.isEmpty() ? QIcon() : QIcon(strVal), iconText); strVal = data.value(QLatin1String(IMAGE_KEY)).toString(); if (!strVal.isEmpty()) {