diff options
author | Masoud Jami <masoud.jami@qt.io> | 2024-12-13 15:05:25 +0100 |
---|---|---|
committer | Masoud Jami <masoud.jami@qt.io> | 2025-05-08 15:04:11 +0000 |
commit | f7612eaa776dcf8ae65fb7821af247d2008583c0 (patch) | |
tree | 218a12d69e26ed66bf3f2125b53727f277a22553 | |
parent | 9d148b283e5ffbf19c04da8ac9a0e7d052ca9013 (diff) |
linguist: use consistent icons + unicode for marking translations6.9.1
Icons used in linguist are inconsistent, i.e., some are loaded from
OS icons and some from linguist resources, resulting in a mixture
of minimalistic icons + old style linguist icons.
Make the icons consistent in which they are all loaded from
the linguist resource. Those icons can then soon be replaced
by newly designed icons for linguist.
Also use unicode representations to mark messages, instead of
the existing pixel maps.
Task-number: QTBUG-124852
Change-Id: Ia235d180a7f3743b7a55e3467df9828d21cc25f9
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit bb6aa720ea59f9896b54f3ac4c824ac40a702982)
-rw-r--r-- | src/linguist/linguist/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/linguist/linguist/errorsview.cpp | 6 | ||||
-rw-r--r-- | src/linguist/linguist/globals.cpp | 25 | ||||
-rw-r--r-- | src/linguist/linguist/globals.h | 15 | ||||
-rw-r--r-- | src/linguist/linguist/images/s_check_danger.png | bin | 304 -> 0 bytes | |||
-rw-r--r-- | src/linguist/linguist/images/s_check_empty.png | bin | 404 -> 0 bytes | |||
-rw-r--r-- | src/linguist/linguist/images/s_check_obsolete.png | bin | 192 -> 0 bytes | |||
-rw-r--r-- | src/linguist/linguist/images/s_check_off.png | bin | 434 -> 0 bytes | |||
-rw-r--r-- | src/linguist/linguist/images/s_check_on.png | bin | 192 -> 0 bytes | |||
-rw-r--r-- | src/linguist/linguist/images/s_check_warning.png | bin | 192 -> 0 bytes | |||
-rw-r--r-- | src/linguist/linguist/mainwindow.cpp | 36 | ||||
-rw-r--r-- | src/linguist/linguist/messageeditor.cpp | 2 | ||||
-rw-r--r-- | src/linguist/linguist/messagemodel.cpp | 43 |
13 files changed, 84 insertions, 49 deletions
diff --git a/src/linguist/linguist/CMakeLists.txt b/src/linguist/linguist/CMakeLists.txt index 1dc7239d2..af90386ed 100644 --- a/src/linguist/linguist/CMakeLists.txt +++ b/src/linguist/linguist/CMakeLists.txt @@ -102,12 +102,6 @@ set(linguist_resource_files "images/mac/whatsthis.png" "images/minus.png" "images/plus.png" - "images/s_check_danger.png" - "images/s_check_empty.png" - "images/s_check_obsolete.png" - "images/s_check_off.png" - "images/s_check_on.png" - "images/s_check_warning.png" "images/up.png" "images/win/accelerator.png" "images/win/book.png" diff --git a/src/linguist/linguist/errorsview.cpp b/src/linguist/linguist/errorsview.cpp index 8af7fa737..451686401 100644 --- a/src/linguist/linguist/errorsview.cpp +++ b/src/linguist/linguist/errorsview.cpp @@ -3,6 +3,7 @@ #include "errorsview.h" +#include "globals.h" #include "messagemodel.h" #include <QtCore/QList> @@ -67,10 +68,7 @@ QString ErrorsView::firstError() void ErrorsView::addError(int model, const QString &error) { - // NOTE: Three statics instead of one just for GCC 3.3.5 - static QLatin1String imageLocation(":/images/s_check_danger.png"); - static QPixmap image(imageLocation); - static QIcon pxDanger(image); + static QIcon pxDanger = UnicodeIconGenerator().create(u'!', Qt::red); QString lang; if (m_dataModel->modelCount() > 1) lang = m_dataModel->model(model)->localizedLanguage() + QLatin1String(": "); diff --git a/src/linguist/linguist/globals.cpp b/src/linguist/linguist/globals.cpp index c9fa35de0..2d3fa779c 100644 --- a/src/linguist/linguist/globals.cpp +++ b/src/linguist/linguist/globals.cpp @@ -2,10 +2,12 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "globals.h" -#include <QColor> + #include <QApplication> -#include <QStyleHints> +#include <QColor> #include <QPalette> +#include <QPainter> +#include <QStyleHints> const QString &settingsPrefix() { @@ -33,3 +35,22 @@ bool isDarkMode() return QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark || isLight(QGuiApplication::palette().color(QPalette::WindowText)); } + +QPixmap UnicodeIconGenerator::create(QChar unicode, Qt::GlobalColor color) +{ + QPixmap pixmap(16, 16); + pixmap.fill(Qt::transparent); + QPainter painter(&pixmap); + painter.setFont(*m_font); + painter.setPen(color); + painter.drawText(pixmap.rect(), Qt::AlignCenter, unicode); + painter.end(); + return pixmap; +} + +UnicodeIconGenerator::UnicodeIconGenerator() + : m_font(std::make_unique<QFont>()) +{ + m_font->setBold(true); + m_font->setPointSize(18); +} diff --git a/src/linguist/linguist/globals.h b/src/linguist/linguist/globals.h index 1ae9c64f4..499c9d53f 100644 --- a/src/linguist/linguist/globals.h +++ b/src/linguist/linguist/globals.h @@ -4,10 +4,25 @@ #ifndef GLOBALS_H #define GLOBALS_H +#include <QFont> +#include <QPixmap> #include <QString> +#include <memory> + const QString &settingsPrefix(); QString settingPath(const char *path); bool isDarkMode(); +class UnicodeIconGenerator +{ +public: + QPixmap create(QChar unicode, Qt::GlobalColor color); + + UnicodeIconGenerator(); + +private: + std::unique_ptr<QFont> m_font; +}; + #endif // GLOBALS_H diff --git a/src/linguist/linguist/images/s_check_danger.png b/src/linguist/linguist/images/s_check_danger.png Binary files differdeleted file mode 100644 index e10157768..000000000 --- a/src/linguist/linguist/images/s_check_danger.png +++ /dev/null diff --git a/src/linguist/linguist/images/s_check_empty.png b/src/linguist/linguist/images/s_check_empty.png Binary files differdeleted file mode 100644 index 759a41b6c..000000000 --- a/src/linguist/linguist/images/s_check_empty.png +++ /dev/null diff --git a/src/linguist/linguist/images/s_check_obsolete.png b/src/linguist/linguist/images/s_check_obsolete.png Binary files differdeleted file mode 100644 index b852b639f..000000000 --- a/src/linguist/linguist/images/s_check_obsolete.png +++ /dev/null diff --git a/src/linguist/linguist/images/s_check_off.png b/src/linguist/linguist/images/s_check_off.png Binary files differdeleted file mode 100644 index 640b68972..000000000 --- a/src/linguist/linguist/images/s_check_off.png +++ /dev/null diff --git a/src/linguist/linguist/images/s_check_on.png b/src/linguist/linguist/images/s_check_on.png Binary files differdeleted file mode 100644 index afcaf634d..000000000 --- a/src/linguist/linguist/images/s_check_on.png +++ /dev/null diff --git a/src/linguist/linguist/images/s_check_warning.png b/src/linguist/linguist/images/s_check_warning.png Binary files differdeleted file mode 100644 index f689c3303..000000000 --- a/src/linguist/linguist/images/s_check_warning.png +++ /dev/null diff --git a/src/linguist/linguist/mainwindow.cpp b/src/linguist/linguist/mainwindow.cpp index e51b2a516..a21041700 100644 --- a/src/linguist/linguist/mainwindow.cpp +++ b/src/linguist/linguist/mainwindow.cpp @@ -175,8 +175,7 @@ private: static const QVariant &pxObsolete() { - static const QVariant v = - QVariant::fromValue(QPixmap(QLatin1String(":/images/s_check_obsolete.png"))); + static const QVariant v = UnicodeIconGenerator().create(QChar(0x2713), Qt::gray); return v; } @@ -1813,28 +1812,17 @@ void MainWindow::setupMenuBar() const QString prefix = QApplication::platformName().compare(QStringLiteral("cocoa"), Qt::CaseInsensitive) ? QStringLiteral(":/images/win") : QStringLiteral(":/images/mac"); - m_ui.actionOpen->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen, - QIcon(prefix + QStringLiteral("/fileopen.png")))); - m_ui.actionOpenAux->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen, - QIcon(prefix + QStringLiteral("/fileopen.png")))); - m_ui.actionSave->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentSave, - QIcon(prefix + QStringLiteral("/filesave.png")))); - m_ui.actionSaveAll->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentSave, - QIcon(prefix + QStringLiteral("/filesave.png")))); - m_ui.actionPrint->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentPrint, - QIcon(prefix + QStringLiteral("/print.png")))); - m_ui.actionRedo->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditRedo, - QIcon(prefix + QStringLiteral("/redo.png")))); - m_ui.actionUndo->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditUndo, - QIcon(prefix + QStringLiteral("/undo.png")))); - m_ui.actionCut->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditCut, - QIcon(prefix + QStringLiteral("/editcut.png")))); - m_ui.actionCopy->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditCopy, - QIcon(prefix + QStringLiteral("/editcopy.png")))); - m_ui.actionPaste->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditPaste, - QIcon(prefix + QStringLiteral("/editpaste.png")))); - m_ui.actionFind->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditFind, - QIcon(prefix + QStringLiteral("/searchfind.png")))); + m_ui.actionOpen->setIcon(QIcon(prefix + QStringLiteral("/fileopen.png"))); + m_ui.actionOpenAux->setIcon(QIcon(prefix + QStringLiteral("/fileopen.png"))); + m_ui.actionSave->setIcon(QIcon(prefix + QStringLiteral("/filesave.png"))); + m_ui.actionSaveAll->setIcon(QIcon(prefix + QStringLiteral("/filesave.png"))); + m_ui.actionPrint->setIcon(QIcon(prefix + QStringLiteral("/print.png"))); + m_ui.actionRedo->setIcon(QIcon(prefix + QStringLiteral("/redo.png"))); + m_ui.actionUndo->setIcon(QIcon(prefix + QStringLiteral("/undo.png"))); + m_ui.actionCut->setIcon(QIcon(prefix + QStringLiteral("/editcut.png"))); + m_ui.actionCopy->setIcon(QIcon(prefix + QStringLiteral("/editcopy.png"))); + m_ui.actionPaste->setIcon(QIcon(prefix + QStringLiteral("/editpaste.png"))); + m_ui.actionFind->setIcon(QIcon(prefix + QStringLiteral("/searchfind.png"))); // No well defined theme icons for these actions m_ui.actionAccelerators->setIcon(QIcon(prefix + QStringLiteral("/accelerator.png"))); diff --git a/src/linguist/linguist/messageeditor.cpp b/src/linguist/linguist/messageeditor.cpp index e7218acd9..c0fd8714a 100644 --- a/src/linguist/linguist/messageeditor.cpp +++ b/src/linguist/linguist/messageeditor.cpp @@ -130,7 +130,7 @@ void MessageEditor::setupEditorPage() QBoxLayout *horizontalLayout = new QHBoxLayout; horizontalLayout->addLayout(subLayout); - horizontalLayout->addWidget(m_ncrModeBox); + horizontalLayout->addWidget(m_ncrModeBox, 0, Qt::AlignTop | Qt::AlignRight); m_layout = new QVBoxLayout; m_layout->setSpacing(2); diff --git a/src/linguist/linguist/messagemodel.cpp b/src/linguist/linguist/messagemodel.cpp index c33341c32..fa09ceb66 100644 --- a/src/linguist/linguist/messagemodel.cpp +++ b/src/linguist/linguist/messagemodel.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "messagemodel.h" + +#include "globals.h" #include "statistics.h" #include <QtCore/QCoreApplication> @@ -1365,18 +1367,35 @@ int MessageModel::columnCount(const QModelIndex &parent) const QVariant MessageModel::data(const QModelIndex &index, int role) const { - static QVariant pxOn = - QVariant::fromValue(QPixmap(QLatin1String(":/images/s_check_on.png"))); - static QVariant pxOff = - QVariant::fromValue(QPixmap(QLatin1String(":/images/s_check_off.png"))); - static QVariant pxObsolete = - QVariant::fromValue(QPixmap(QLatin1String(":/images/s_check_obsolete.png"))); - static QVariant pxDanger = - QVariant::fromValue(QPixmap(QLatin1String(":/images/s_check_danger.png"))); - static QVariant pxWarning = - QVariant::fromValue(QPixmap(QLatin1String(":/images/s_check_warning.png"))); - static QVariant pxEmpty = - QVariant::fromValue(QPixmap(QLatin1String(":/images/s_check_empty.png"))); + static UnicodeIconGenerator pg; + + static QVariant pxOn; + static QVariant pxOff; + static QVariant pxObsolete; + static QVariant pxDanger; + static QVariant pxWarning; + static QVariant pxEmpty; + + static Qt::ColorScheme mode = Qt::ColorScheme::Unknown; // to prevent creating new QPixmaps + // every time the method is called + + if (bool dark = isDarkMode(); dark && mode != Qt::ColorScheme::Dark) { + pxOn = pg.create(QChar(0x2713), Qt::darkGreen); + pxOff = pg.create(u'?', Qt::yellow); + pxObsolete = pg.create(QChar(0x2713), Qt::gray); + pxDanger = pg.create(u'!', Qt::red); + pxWarning = pg.create(QChar(0x2713), Qt::yellow); + pxEmpty = pg.create(u'?', Qt::white); + mode = Qt::ColorScheme::Dark; + } else if (!dark && mode != Qt::ColorScheme::Light) { + pxOn = pg.create(QChar(0x2713), Qt::darkGreen); + pxOff = pg.create(u'?', Qt::darkYellow); + pxObsolete = pg.create(QChar(0x2713), Qt::gray); + pxDanger = pg.create(u'!', Qt::red); + pxWarning = pg.create(QChar(0x2713), Qt::darkYellow); + pxEmpty = pg.create(u'?', Qt::darkBlue); + mode = Qt::ColorScheme::Light; + } int row = index.row(); int column = index.column() - 1; |