Refactoring.

Since Qt 6.7 we can start using enum QIcon::ThemeIcon.
This commit is contained in:
Roman Telezhynskyi 2024-04-22 15:47:36 +03:00
parent ed4f2945da
commit 6eb702b778
24 changed files with 688 additions and 114 deletions

View File

@ -38,6 +38,7 @@
#include "../layout/vplayout.h" #include "../layout/vplayout.h"
#include "../layout/vppiece.h" #include "../layout/vppiece.h"
#include "../layout/vpsheet.h" #include "../layout/vpsheet.h"
#include "../vmisc/theme/themeDef.h"
#include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsscene.h"
#include "undocommands/vpundopiecezvaluemove.h" #include "undocommands/vpundopiecezvaluemove.h"
#include "vpgraphicspiece.h" #include "vpgraphicspiece.h"
@ -348,7 +349,7 @@ void VPMainGraphicsView::contextMenuEvent(QContextMenuEvent *event)
restoreOriginAction->setShortcut(*restoreOriginShortcut); restoreOriginAction->setShortcut(*restoreOriginShortcut);
restoreOriginAction->setEnabled(not sheet.isNull() && sheet->TransformationOrigin().custom); restoreOriginAction->setEnabled(not sheet.isNull() && sheet->TransformationOrigin().custom);
QAction *removeSheetAction = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Remove sheet")); QAction *removeSheetAction = menu.addAction(FromTheme(VThemeIcon::EditDelete), tr("Remove sheet"));
removeSheetAction->setEnabled(not sheet.isNull() && layout->GetSheets().size() > 1); removeSheetAction->setEnabled(not sheet.isNull() && layout->GetSheets().size() > 1);
QAction *selectedAction = menu.exec(event->globalPos()); QAction *selectedAction = menu.exec(event->globalPos());

View File

@ -57,6 +57,7 @@
#include "../vmisc/dialogs/dialogselectlanguage.h" #include "../vmisc/dialogs/dialogselectlanguage.h"
#include "../vmisc/lambdaconstants.h" #include "../vmisc/lambdaconstants.h"
#include "../vmisc/projectversion.h" #include "../vmisc/projectversion.h"
#include "../vmisc/theme/themeDef.h"
#include "../vmisc/theme/vtheme.h" #include "../vmisc/theme/vtheme.h"
#include "../vmisc/vsysexits.h" #include "../vmisc/vsysexits.h"
#include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsscene.h"
@ -728,13 +729,13 @@ void VPMainWindow::SetupMenu()
// Add Undo/Redo actions. // Add Undo/Redo actions.
undoAction = m_layout->UndoStack()->createUndoAction(this, tr("&Undo")); undoAction = m_layout->UndoStack()->createUndoAction(this, tr("&Undo"));
m_actionShortcuts.insert(VShortcutAction::Undo, undoAction); m_actionShortcuts.insert(VShortcutAction::Undo, undoAction);
undoAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-undo"))); undoAction->setIcon(FromTheme(VThemeIcon::EditUndo));
ui->menuSheet->addAction(undoAction); ui->menuSheet->addAction(undoAction);
ui->toolBarUndoCommands->addAction(undoAction); ui->toolBarUndoCommands->addAction(undoAction);
redoAction = m_layout->UndoStack()->createRedoAction(this, tr("&Redo")); redoAction = m_layout->UndoStack()->createRedoAction(this, tr("&Redo"));
m_actionShortcuts.insert(VShortcutAction::Redo, redoAction); m_actionShortcuts.insert(VShortcutAction::Redo, redoAction);
redoAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-redo"))); redoAction->setIcon(FromTheme(VThemeIcon::EditRedo));
ui->menuSheet->addAction(redoAction); ui->menuSheet->addAction(redoAction);
ui->toolBarUndoCommands->addAction(redoAction); ui->toolBarUndoCommands->addAction(redoAction);
@ -883,7 +884,7 @@ void VPMainWindow::InitPropertyTabCurrentPiece()
connect(ui->checkBoxCurrentPieceHorizontallyFlipped, &QCheckBox::toggled, this, connect(ui->checkBoxCurrentPieceHorizontallyFlipped, &QCheckBox::toggled, this,
&VPMainWindow::CurrentPieceHorizontallyFlippedToggled); &VPMainWindow::CurrentPieceHorizontallyFlippedToggled);
const QIcon warningIcon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon warningIcon = FromTheme(VThemeIcon::DialogWarning);
auto WarningIcon = [warningIcon](QLabel *label) auto WarningIcon = [warningIcon](QLabel *label)
{ {
const int size = qRound(16 * label->devicePixelRatio()); const int size = qRound(16 * label->devicePixelRatio());

View File

@ -38,6 +38,7 @@
#include "../vmisc/dialogs/dialogexporttocsv.h" #include "../vmisc/dialogs/dialogexporttocsv.h"
#include "../vmisc/dialogs/dialogselectlanguage.h" #include "../vmisc/dialogs/dialogselectlanguage.h"
#include "../vmisc/qxtcsvmodel.h" #include "../vmisc/qxtcsvmodel.h"
#include "../vmisc/theme/themeDef.h"
#include "../vmisc/theme/vtheme.h" #include "../vmisc/theme/vtheme.h"
#include "../vmisc/vsysexits.h" #include "../vmisc/vsysexits.h"
#include "dialogs/dialogabouttape.h" #include "dialogs/dialogabouttape.h"
@ -1199,13 +1200,13 @@ void TKMMainWindow::DeployFormula()
{ {
ui->plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT); ui->plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-next"))); ui->pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoNext));
} }
else else
{ {
ui->plainTextEditFormula->setFixedHeight(m_formulaBaseHeight); ui->plainTextEditFormula->setFixedHeight(m_formulaBaseHeight);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-down"))); ui->pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoDown));
} }
// I found that after change size of formula field, it was filed for angle formula, field for formula became black. // I found that after change size of formula field, it was filed for angle formula, field for formula became black.

View File

@ -45,6 +45,7 @@
#include "../vmisc/dialogs/dialogselectlanguage.h" #include "../vmisc/dialogs/dialogselectlanguage.h"
#include "../vmisc/literals.h" #include "../vmisc/literals.h"
#include "../vmisc/qxtcsvmodel.h" #include "../vmisc/qxtcsvmodel.h"
#include "../vmisc/theme/themeDef.h"
#include "../vmisc/theme/vtheme.h" #include "../vmisc/theme/vtheme.h"
#include "../vmisc/vsysexits.h" #include "../vmisc/vsysexits.h"
#include "../vpatterndb/calculator.h" #include "../vpatterndb/calculator.h"
@ -2161,13 +2162,13 @@ void TMainWindow::DeployFormula()
{ {
ui->plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT); ui->plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-next"))); ui->pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoNext));
} }
else else
{ {
ui->plainTextEditFormula->setFixedHeight(m_formulaBaseHeight); ui->plainTextEditFormula->setFixedHeight(m_formulaBaseHeight);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-down"))); ui->pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoDown));
} }
// I found that after change size of formula field, it was filed for angle formula, field for formula became black. // I found that after change size of formula field, it was filed for angle formula, field for formula became black.

View File

@ -29,6 +29,7 @@
#include "dialogfinalmeasurements.h" #include "dialogfinalmeasurements.h"
#include "../qmuparser/qmudef.h" #include "../qmuparser/qmudef.h"
#include "../vmisc/compatibility.h" #include "../vmisc/compatibility.h"
#include "../vmisc/theme/themeDef.h"
#include "../vmisc/theme/vtheme.h" #include "../vmisc/theme/vtheme.h"
#include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vabstractvalapplication.h"
#include "../vmisc/vvalentinasettings.h" #include "../vmisc/vvalentinasettings.h"
@ -441,13 +442,13 @@ void DialogFinalMeasurements::DeployFormula()
{ {
ui->plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT); ui->plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-next"))); ui->pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoNext));
} }
else else
{ {
ui->plainTextEditFormula->setFixedHeight(formulaBaseHeight); ui->plainTextEditFormula->setFixedHeight(formulaBaseHeight);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-down"))); ui->pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoDown));
} }
// I found that after change size of formula field, it was filed for angle formula, field for formula became black. // I found that after change size of formula field, it was filed for angle formula, field for formula became black.

View File

@ -1886,13 +1886,13 @@ void DialogIncrements::DeployFormula()
{ {
plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT); plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-next"))); pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoNext));
} }
else else
{ {
plainTextEditFormula->setFixedHeight(baseHeight); plainTextEditFormula->setFixedHeight(baseHeight);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
pushButtonGrow->setIcon(QIcon::fromTheme(QStringLiteral("go-down"))); pushButtonGrow->setIcon(FromTheme(VThemeIcon::GoDown));
} }
// I found that after change size of formula field, it was filed for angle formula, field for formula became black. // I found that after change size of formula field, it was filed for angle formula, field for formula became black.

View File

@ -30,6 +30,7 @@
#include "../ifc/xml/vbackgroundpatternimage.h" #include "../ifc/xml/vbackgroundpatternimage.h"
#include "../vmisc/def.h" #include "../vmisc/def.h"
#include "../vmisc/lambdaconstants.h" #include "../vmisc/lambdaconstants.h"
#include "../vmisc/theme/themeDef.h"
#include "../vmisc/theme/vtheme.h" #include "../vmisc/theme/vtheme.h"
#include "../vmisc/vabstractapplication.h" #include "../vmisc/vabstractapplication.h"
#include "../vtools/undocommands/image/hideallbackgroundimages.h" #include "../vtools/undocommands/image/hideallbackgroundimages.h"
@ -355,7 +356,7 @@ void VWidgetBackgroundImages::ContextMenu(const QPoint &pos)
QAction *actionReset = menu.addAction(tr("Reset transformation")); QAction *actionReset = menu.addAction(tr("Reset transformation"));
actionReset->setEnabled(not image.Hold()); actionReset->setEnabled(not image.Hold());
QAction *actionDelete = menu.addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); QAction *actionDelete = menu.addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
menu.addSeparator(); menu.addSeparator();
QAction *actionHoldAll = menu.addAction(tr("Hold All")); QAction *actionHoldAll = menu.addAction(tr("Hold All"));

View File

@ -217,15 +217,13 @@ void VWidgetDetails::ToggledPieceItem(QTableWidgetItem *item)
const bool inLayout = details->value(id).IsInLayout(); const bool inLayout = details->value(id).IsInLayout();
if (inLayout) if (inLayout)
{ {
item->setIcon( item->setIcon(FromTheme(VThemeIcon::GtkOk,
QIcon::fromTheme(QStringLiteral("gtk-ok"), VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-ok"), QSize(16, 16))));
VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-ok"), QSize(16, 16))));
} }
else else
{ {
item->setIcon( item->setIcon(FromTheme(VThemeIcon::GtkNo,
QIcon::fromTheme(QStringLiteral("gtk-no"), VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-no"), QSize(16, 16))));
VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-no"), QSize(16, 16))));
} }
VToolSeamAllowance *tool = nullptr; VToolSeamAllowance *tool = nullptr;
@ -249,15 +247,13 @@ auto VWidgetDetails::PrepareInLayoutColumnCell(const VPiece &det, quint32 id) ->
if (det.IsInLayout()) if (det.IsInLayout())
{ {
item->setIcon( item->setIcon(FromTheme(VThemeIcon::GtkOk,
QIcon::fromTheme(QStringLiteral("gtk-ok"), VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-ok"), QSize(16, 16))));
VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-ok"), QSize(16, 16))));
} }
else else
{ {
item->setIcon( item->setIcon(FromTheme(VThemeIcon::GtkNo,
QIcon::fromTheme(QStringLiteral("gtk-no"), VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-no"), QSize(16, 16))));
VTheme::GetFallbackThemeIcon(QStringLiteral("16/actions/gtk-no"), QSize(16, 16))));
} }
item->setData(Qt::UserRole, id); item->setData(Qt::UserRole, id);
@ -312,16 +308,14 @@ void VWidgetDetails::ShowContextMenu(const QPoint &pos)
try try
{ {
toolPiece = qobject_cast<VToolSeamAllowance *>(VAbstractPattern::getTool(id)); toolPiece = qobject_cast<VToolSeamAllowance *>(VAbstractPattern::getTool(id));
if (toolPiece) if (toolPiece != nullptr)
{ {
pieceMode = true; pieceMode = true;
menu->addSeparator(); menu->addSeparator();
actionPieceOptions = actionPieceOptions = menu->addAction(FromTheme(VThemeIcon::PreferencesOther), tr("Piece options"));
menu->addAction(QIcon::fromTheme(QStringLiteral("preferences-other")), tr("Piece options"));
actionDeletePiece = actionDeletePiece = menu->addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete piece"));
menu->addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete piece"));
actionDeletePiece->setDisabled(toolPiece->referens() > 0); actionDeletePiece->setDisabled(toolPiece->referens() > 0);
} }
} }

View File

@ -293,8 +293,8 @@ void VWidgetGroups::CtxMenu(const QPoint &pos)
? menu->addAction(VTheme::GetIconResource(resource, QStringLiteral("16x16/closed_eye.png")), tr("Hide")) ? menu->addAction(VTheme::GetIconResource(resource, QStringLiteral("16x16/closed_eye.png")), tr("Hide"))
: menu->addAction(VTheme::GetIconResource(resource, QStringLiteral("16x16/open_eye.png")), tr("Show")); : menu->addAction(VTheme::GetIconResource(resource, QStringLiteral("16x16/open_eye.png")), tr("Show"));
QAction *actionPreferences = menu->addAction(QIcon::fromTheme(preferencesOtherIcon), tr("Preferences")); QAction *actionPreferences = menu->addAction(FromTheme(VThemeIcon::PreferencesOther), tr("Preferences"));
QAction *actionDelete = menu->addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); QAction *actionDelete = menu->addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
menu->addSeparator(); menu->addSeparator();
QAction *actionHideAll = menu->addAction(tr("Hide All")); QAction *actionHideAll = menu->addAction(tr("Hide All"));
actionHideAll->setEnabled(MultipleChangeVisibilityTo(false)); actionHideAll->setEnabled(MultipleChangeVisibilityTo(false));

View File

@ -5793,14 +5793,14 @@ void MainWindow::CreateMenus()
undoAction = VAbstractApplication::VApp()->getUndoStack()->createUndoAction(this, tr("&Undo")); undoAction = VAbstractApplication::VApp()->getUndoStack()->createUndoAction(this, tr("&Undo"));
connect(undoAction, &QAction::triggered, m_toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions); connect(undoAction, &QAction::triggered, m_toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions);
m_shortcutActions.insert(VShortcutAction::Undo, undoAction); m_shortcutActions.insert(VShortcutAction::Undo, undoAction);
undoAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-undo"))); undoAction->setIcon(FromTheme(VThemeIcon::EditUndo));
ui->menuPatternPiece->insertAction(ui->actionLast_tool, undoAction); ui->menuPatternPiece->insertAction(ui->actionLast_tool, undoAction);
ui->toolBarTools->addAction(undoAction); ui->toolBarTools->addAction(undoAction);
redoAction = VAbstractApplication::VApp()->getUndoStack()->createRedoAction(this, tr("&Redo")); redoAction = VAbstractApplication::VApp()->getUndoStack()->createRedoAction(this, tr("&Redo"));
connect(redoAction, &QAction::triggered, m_toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions); connect(redoAction, &QAction::triggered, m_toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions);
m_shortcutActions.insert(VShortcutAction::Redo, redoAction); m_shortcutActions.insert(VShortcutAction::Redo, redoAction);
redoAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-redo"))); redoAction->setIcon(FromTheme(VThemeIcon::EditRedo));
ui->menuPatternPiece->insertAction(ui->actionLast_tool, redoAction); ui->menuPatternPiece->insertAction(ui->actionLast_tool, redoAction);
ui->toolBarTools->addAction(redoAction); ui->toolBarTools->addAction(redoAction);

View File

@ -32,8 +32,6 @@
const QString LONG_OPTION_NO_HDPI_SCALING = QStringLiteral("no-scaling"); const QString LONG_OPTION_NO_HDPI_SCALING = QStringLiteral("no-scaling");
const QString editDeleteIcon = QStringLiteral("edit-delete");
const QString preferencesOtherIcon = QStringLiteral("preferences-other");
const QString degreeSymbol = QStringLiteral("°"); const QString degreeSymbol = QStringLiteral("°");
const QString trueStr = QStringLiteral("true"); const QString trueStr = QStringLiteral("true");
const QString falseStr = QStringLiteral("false"); const QString falseStr = QStringLiteral("false");

View File

@ -41,8 +41,6 @@ class QStringList;
extern const QString LONG_OPTION_NO_HDPI_SCALING; extern const QString LONG_OPTION_NO_HDPI_SCALING;
extern const QString editDeleteIcon;
extern const QString preferencesOtherIcon;
extern const QString degreeSymbol; extern const QString degreeSymbol;
extern const QString trueStr; extern const QString trueStr;
extern const QString falseStr; extern const QString falseStr;

View File

@ -0,0 +1,407 @@
/************************************************************************
**
** @file themeDef.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 22 4, 2024
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2024 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "themeDef.h"
#include <QHash>
#include <QIcon>
#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
#include "../compatibility.h"
#endif
using namespace Qt::Literals::StringLiterals;
namespace
{
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wunused-member-function")
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
using ThemeIconHash = QHash<VThemeIcon, QIcon::ThemeIcon>;
// NOLINTNEXTLINE
Q_GLOBAL_STATIC_WITH_ARGS(const ThemeIconHash, themeIconMapping,
({{VThemeIcon::AddressBookNew, QIcon::ThemeIcon::AddressBookNew},
{VThemeIcon::ApplicationExit, QIcon::ThemeIcon::ApplicationExit},
{VThemeIcon::AppointmentNew, QIcon::ThemeIcon::AppointmentNew},
{VThemeIcon::CallStart, QIcon::ThemeIcon::CallStart},
{VThemeIcon::CallStop, QIcon::ThemeIcon::CallStop},
{VThemeIcon::ContactNew, QIcon::ThemeIcon::ContactNew},
{VThemeIcon::DocumentNew, QIcon::ThemeIcon::DocumentNew},
{VThemeIcon::DocumentOpen, QIcon::ThemeIcon::DocumentOpen},
{VThemeIcon::DocumentOpenRecent, QIcon::ThemeIcon::DocumentOpenRecent},
{VThemeIcon::DocumentPageSetup, QIcon::ThemeIcon::DocumentPageSetup},
{VThemeIcon::DocumentPrint, QIcon::ThemeIcon::DocumentPrint},
{VThemeIcon::DocumentPrintPreview, QIcon::ThemeIcon::DocumentPrintPreview},
{VThemeIcon::DocumentProperties, QIcon::ThemeIcon::DocumentProperties},
{VThemeIcon::DocumentRevert, QIcon::ThemeIcon::DocumentRevert},
{VThemeIcon::DocumentSave, QIcon::ThemeIcon::DocumentSave},
{VThemeIcon::DocumentSaveAs, QIcon::ThemeIcon::DocumentSaveAs},
{VThemeIcon::DocumentSend, QIcon::ThemeIcon::DocumentSend},
{VThemeIcon::EditClear, QIcon::ThemeIcon::EditClear},
{VThemeIcon::EditCopy, QIcon::ThemeIcon::EditCopy},
{VThemeIcon::EditCut, QIcon::ThemeIcon::EditCut},
{VThemeIcon::EditDelete, QIcon::ThemeIcon::EditDelete},
{VThemeIcon::EditFind, QIcon::ThemeIcon::EditFind},
{VThemeIcon::EditPaste, QIcon::ThemeIcon::EditPaste},
{VThemeIcon::EditRedo, QIcon::ThemeIcon::EditRedo},
{VThemeIcon::EditSelectAll, QIcon::ThemeIcon::EditSelectAll},
{VThemeIcon::EditUndo, QIcon::ThemeIcon::EditUndo},
{VThemeIcon::FolderNew, QIcon::ThemeIcon::FolderNew},
{VThemeIcon::FormatIndentLess, QIcon::ThemeIcon::FormatIndentLess},
{VThemeIcon::FormatIndentMore, QIcon::ThemeIcon::FormatIndentMore},
{VThemeIcon::FormatJustifyCenter, QIcon::ThemeIcon::FormatJustifyCenter},
{VThemeIcon::FormatJustifyFill, QIcon::ThemeIcon::FormatJustifyFill},
{VThemeIcon::FormatJustifyLeft, QIcon::ThemeIcon::FormatJustifyLeft},
{VThemeIcon::FormatJustifyRight, QIcon::ThemeIcon::FormatJustifyRight},
{VThemeIcon::FormatTextDirectionLtr, QIcon::ThemeIcon::FormatTextDirectionLtr},
{VThemeIcon::FormatTextDirectionRtl, QIcon::ThemeIcon::FormatTextDirectionRtl},
{VThemeIcon::FormatTextBold, QIcon::ThemeIcon::FormatTextBold},
{VThemeIcon::FormatTextItalic, QIcon::ThemeIcon::FormatTextItalic},
{VThemeIcon::FormatTextUnderline, QIcon::ThemeIcon::FormatTextUnderline},
{VThemeIcon::FormatTextStrikethrough, QIcon::ThemeIcon::FormatTextStrikethrough},
{VThemeIcon::GoDown, QIcon::ThemeIcon::GoDown},
{VThemeIcon::GoHome, QIcon::ThemeIcon::GoHome},
{VThemeIcon::GoNext, QIcon::ThemeIcon::GoNext},
{VThemeIcon::GoPrevious, QIcon::ThemeIcon::GoPrevious},
{VThemeIcon::GoUp, QIcon::ThemeIcon::GoUp},
{VThemeIcon::HelpAbout, QIcon::ThemeIcon::HelpAbout},
{VThemeIcon::HelpFaq, QIcon::ThemeIcon::HelpFaq},
{VThemeIcon::InsertImage, QIcon::ThemeIcon::InsertImage},
{VThemeIcon::InsertLink, QIcon::ThemeIcon::InsertLink},
{VThemeIcon::InsertText, QIcon::ThemeIcon::InsertText},
{VThemeIcon::ListAdd, QIcon::ThemeIcon::InsertText},
{VThemeIcon::ListRemove, QIcon::ThemeIcon::ListRemove},
{VThemeIcon::MailForward, QIcon::ThemeIcon::MailForward},
{VThemeIcon::MailMarkImportant, QIcon::ThemeIcon::MailMarkImportant},
{VThemeIcon::MailMarkRead, QIcon::ThemeIcon::MailMarkRead},
{VThemeIcon::MailMarkUnread, QIcon::ThemeIcon::MailMarkUnread},
{VThemeIcon::MailMessageNew, QIcon::ThemeIcon::MailMessageNew},
{VThemeIcon::MailReplyAll, QIcon::ThemeIcon::MailReplyAll},
{VThemeIcon::MailReplySender, QIcon::ThemeIcon::MailReplySender},
{VThemeIcon::MailSend, QIcon::ThemeIcon::MailSend},
{VThemeIcon::MediaEject, QIcon::ThemeIcon::MediaEject},
{VThemeIcon::MediaPlaybackPause, QIcon::ThemeIcon::MediaPlaybackPause},
{VThemeIcon::MediaPlaybackStart, QIcon::ThemeIcon::MediaPlaybackStart},
{VThemeIcon::MediaPlaybackStop, QIcon::ThemeIcon::MediaPlaybackStop},
{VThemeIcon::MediaRecord, QIcon::ThemeIcon::MediaRecord},
{VThemeIcon::MediaSeekBackward, QIcon::ThemeIcon::MediaSeekBackward},
{VThemeIcon::MediaSeekForward, QIcon::ThemeIcon::MediaSeekForward},
{VThemeIcon::MediaSkipBackward, QIcon::ThemeIcon::MediaSkipBackward},
{VThemeIcon::MediaSkipForward, QIcon::ThemeIcon::MediaSkipForward},
{VThemeIcon::ObjectRotateLeft, QIcon::ThemeIcon::ObjectRotateLeft},
{VThemeIcon::ObjectRotateRight, QIcon::ThemeIcon::ObjectRotateRight},
{VThemeIcon::ProcessStop, QIcon::ThemeIcon::ProcessStop},
{VThemeIcon::SystemLockScreen, QIcon::ThemeIcon::SystemLockScreen},
{VThemeIcon::SystemLogOut, QIcon::ThemeIcon::SystemLogOut},
{VThemeIcon::SystemSearch, QIcon::ThemeIcon::SystemSearch},
{VThemeIcon::SystemReboot, QIcon::ThemeIcon::SystemReboot},
{VThemeIcon::SystemShutdown, QIcon::ThemeIcon::SystemShutdown},
{VThemeIcon::ToolsCheckSpelling, QIcon::ThemeIcon::ToolsCheckSpelling},
{VThemeIcon::ViewFullscreen, QIcon::ThemeIcon::ViewFullscreen},
{VThemeIcon::ViewRefresh, QIcon::ThemeIcon::ViewRefresh},
{VThemeIcon::ViewRestore, QIcon::ThemeIcon::ViewRestore},
{VThemeIcon::WindowClose, QIcon::ThemeIcon::WindowClose},
{VThemeIcon::WindowNew, QIcon::ThemeIcon::WindowNew},
{VThemeIcon::ZoomFitBest, QIcon::ThemeIcon::ZoomFitBest},
{VThemeIcon::ZoomIn, QIcon::ThemeIcon::ZoomIn},
{VThemeIcon::ZoomOut, QIcon::ThemeIcon::ZoomOut},
{VThemeIcon::AudioCard, QIcon::ThemeIcon::AudioCard},
{VThemeIcon::AudioInputMicrophone, QIcon::ThemeIcon::AudioInputMicrophone},
{VThemeIcon::Battery, QIcon::ThemeIcon::Battery},
{VThemeIcon::CameraPhoto, QIcon::ThemeIcon::CameraPhoto},
{VThemeIcon::CameraVideo, QIcon::ThemeIcon::CameraVideo},
{VThemeIcon::CameraWeb, QIcon::ThemeIcon::CameraWeb},
{VThemeIcon::Computer, QIcon::ThemeIcon::Computer},
{VThemeIcon::DriveHarddisk, QIcon::ThemeIcon::DriveHarddisk},
{VThemeIcon::DriveOptical, QIcon::ThemeIcon::DriveOptical},
{VThemeIcon::InputGaming, QIcon::ThemeIcon::InputGaming},
{VThemeIcon::InputKeyboard, QIcon::ThemeIcon::InputKeyboard},
{VThemeIcon::InputMouse, QIcon::ThemeIcon::InputMouse},
{VThemeIcon::InputTablet, QIcon::ThemeIcon::InputTablet},
{VThemeIcon::MediaFlash, QIcon::ThemeIcon::MediaFlash},
{VThemeIcon::MediaOptical, QIcon::ThemeIcon::MediaOptical},
{VThemeIcon::MediaTape, QIcon::ThemeIcon::MediaTape},
{VThemeIcon::MultimediaPlayer, QIcon::ThemeIcon::MultimediaPlayer},
{VThemeIcon::NetworkWired, QIcon::ThemeIcon::NetworkWired},
{VThemeIcon::NetworkWireless, QIcon::ThemeIcon::NetworkWireless},
{VThemeIcon::Phone, QIcon::ThemeIcon::Phone},
{VThemeIcon::Printer, QIcon::ThemeIcon::Printer},
{VThemeIcon::Scanner, QIcon::ThemeIcon::Scanner},
{VThemeIcon::VideoDisplay, QIcon::ThemeIcon::VideoDisplay},
{VThemeIcon::AppointmentMissed, QIcon::ThemeIcon::AppointmentMissed},
{VThemeIcon::AppointmentSoon, QIcon::ThemeIcon::AppointmentSoon},
{VThemeIcon::AudioVolumeHigh, QIcon::ThemeIcon::AudioVolumeHigh},
{VThemeIcon::AudioVolumeLow, QIcon::ThemeIcon::AudioVolumeLow},
{VThemeIcon::AudioVolumeMedium, QIcon::ThemeIcon::AudioVolumeMedium},
{VThemeIcon::AudioVolumeMuted, QIcon::ThemeIcon::AudioVolumeMuted},
{VThemeIcon::BatteryCaution, QIcon::ThemeIcon::BatteryCaution},
{VThemeIcon::BatteryLow, QIcon::ThemeIcon::BatteryLow},
{VThemeIcon::DialogError, QIcon::ThemeIcon::DialogError},
{VThemeIcon::DialogInformation, QIcon::ThemeIcon::DialogInformation},
{VThemeIcon::DialogPassword, QIcon::ThemeIcon::DialogPassword},
{VThemeIcon::DialogQuestion, QIcon::ThemeIcon::DialogQuestion},
{VThemeIcon::DialogWarning, QIcon::ThemeIcon::DialogWarning},
{VThemeIcon::FolderDragAccept, QIcon::ThemeIcon::FolderDragAccept},
{VThemeIcon::FolderOpen, QIcon::ThemeIcon::FolderOpen},
{VThemeIcon::FolderVisiting, QIcon::ThemeIcon::FolderVisiting},
{VThemeIcon::ImageLoading, QIcon::ThemeIcon::ImageLoading},
{VThemeIcon::ImageMissing, QIcon::ThemeIcon::ImageMissing},
{VThemeIcon::MailAttachment, QIcon::ThemeIcon::MailAttachment},
{VThemeIcon::MailUnread, QIcon::ThemeIcon::MailUnread},
{VThemeIcon::MailRead, QIcon::ThemeIcon::MailRead},
{VThemeIcon::MailReplied, QIcon::ThemeIcon::MailReplied},
{VThemeIcon::MediaPlaylistRepeat, QIcon::ThemeIcon::MediaPlaylistRepeat},
{VThemeIcon::MediaPlaylistShuffle, QIcon::ThemeIcon::MediaPlaylistShuffle},
{VThemeIcon::NetworkOffline, QIcon::ThemeIcon::NetworkOffline},
{VThemeIcon::PrinterPrinting, QIcon::ThemeIcon::PrinterPrinting},
{VThemeIcon::SecurityHigh, QIcon::ThemeIcon::SecurityHigh},
{VThemeIcon::SecurityLow, QIcon::ThemeIcon::SecurityLow},
{VThemeIcon::SoftwareUpdateAvailable, QIcon::ThemeIcon::SoftwareUpdateAvailable},
{VThemeIcon::SoftwareUpdateUrgent, QIcon::ThemeIcon::SoftwareUpdateUrgent},
{VThemeIcon::SyncError, QIcon::ThemeIcon::SyncError},
{VThemeIcon::SyncSynchronizing, QIcon::ThemeIcon::SyncSynchronizing},
{VThemeIcon::UserAvailable, QIcon::ThemeIcon::UserAvailable},
{VThemeIcon::UserOffline, QIcon::ThemeIcon::UserOffline},
{VThemeIcon::WeatherClear, QIcon::ThemeIcon::WeatherClear},
{VThemeIcon::WeatherClearNight, QIcon::ThemeIcon::WeatherClearNight},
{VThemeIcon::WeatherFewClouds, QIcon::ThemeIcon::WeatherFewClouds},
{VThemeIcon::WeatherFewCloudsNight, QIcon::ThemeIcon::WeatherFewCloudsNight},
{VThemeIcon::WeatherFog, QIcon::ThemeIcon::WeatherFog},
{VThemeIcon::WeatherShowers, QIcon::ThemeIcon::WeatherShowers},
{VThemeIcon::WeatherSnow, QIcon::ThemeIcon::WeatherSnow},
{VThemeIcon::WeatherStorm, QIcon::ThemeIcon::WeatherStorm}}))
#endif
using ThemeIconStringHash = QHash<VThemeIcon, QString>;
// NOLINTNEXTLINE
Q_GLOBAL_STATIC_WITH_ARGS(const ThemeIconStringHash, themeIconStringMapping,
({{VThemeIcon::AddressBookNew, "address-book-new"_L1},
{VThemeIcon::ApplicationExit, "application-exit"_L1},
{VThemeIcon::AppointmentNew, "appointment-new"_L1},
{VThemeIcon::CallStart, "call-start"_L1},
{VThemeIcon::CallStop, "call-stop"_L1},
{VThemeIcon::ContactNew, "contact-new"_L1},
{VThemeIcon::DocumentNew, "document-new"_L1},
{VThemeIcon::DocumentOpen, "document-open"_L1},
{VThemeIcon::DocumentOpenRecent, "document-open-recent"_L1},
{VThemeIcon::DocumentPageSetup, "document-page-setup"_L1},
{VThemeIcon::DocumentPrint, "document-print"_L1},
{VThemeIcon::DocumentPrintPreview, "document-print-preview"_L1},
{VThemeIcon::DocumentProperties, "document-properties"_L1},
{VThemeIcon::DocumentRevert, "document-revert"_L1},
{VThemeIcon::DocumentSave, "document-save"_L1},
{VThemeIcon::DocumentSaveAs, "document-save-as"_L1},
{VThemeIcon::DocumentSend, "document-send"_L1},
{VThemeIcon::EditClear, "edit-clear"_L1},
{VThemeIcon::EditCopy, "edit-copy"_L1},
{VThemeIcon::EditCut, "edit-cut"_L1},
{VThemeIcon::EditDelete, "edit-delete"_L1},
{VThemeIcon::EditFind, "edit-find"_L1},
{VThemeIcon::EditPaste, "edit-paste"_L1},
{VThemeIcon::EditRedo, "edit-redo"_L1},
{VThemeIcon::EditSelectAll, "edit-select-all"_L1},
{VThemeIcon::EditUndo, "edit-undo"_L1},
{VThemeIcon::FolderNew, "folder-new"_L1},
{VThemeIcon::FormatIndentLess, "format-indent-less"_L1},
{VThemeIcon::FormatIndentMore, "format-indent-more"_L1},
{VThemeIcon::FormatJustifyCenter, "format-justify-center"_L1},
{VThemeIcon::FormatJustifyFill, "format-justify-fill"_L1},
{VThemeIcon::FormatJustifyLeft, "format-justify-left"_L1},
{VThemeIcon::FormatJustifyRight, "format-justify-right"_L1},
{VThemeIcon::FormatTextDirectionLtr, "format-text-direction-ltr"_L1},
{VThemeIcon::FormatTextDirectionRtl, "format-text-direction-rtl"_L1},
{VThemeIcon::FormatTextBold, "format-text-bold"_L1},
{VThemeIcon::FormatTextItalic, "format-text-italic"_L1},
{VThemeIcon::FormatTextUnderline, "format-text-underline"_L1},
{VThemeIcon::FormatTextStrikethrough, "format-text-strikethrough"_L1},
{VThemeIcon::GoDown, "go-down"_L1},
{VThemeIcon::GoHome, "go-home"_L1},
{VThemeIcon::GoNext, "go-next"_L1},
{VThemeIcon::GoPrevious, "go-previous"_L1},
{VThemeIcon::GoUp, "go-up"_L1},
{VThemeIcon::HelpAbout, "help-about"_L1},
{VThemeIcon::HelpFaq, "help-faq"_L1},
{VThemeIcon::InsertImage, "insert-image"_L1},
{VThemeIcon::InsertLink, "insert-link"_L1},
{VThemeIcon::InsertText, "insert-text"_L1},
{VThemeIcon::ListAdd, "list-add"_L1},
{VThemeIcon::ListRemove, "list-remove"_L1},
{VThemeIcon::MailForward, "mail-forward"_L1},
{VThemeIcon::MailMarkImportant, "mail-mark-important"_L1},
{VThemeIcon::MailMarkRead, "mail-mark-read"_L1},
{VThemeIcon::MailMarkUnread, "mail-mark-unread"_L1},
{VThemeIcon::MailMessageNew, "mail-message-new"_L1},
{VThemeIcon::MailReplyAll, "mail-reply-all"_L1},
{VThemeIcon::MailReplySender, "mail-reply-sender"_L1},
{VThemeIcon::MailSend, "mail-send"_L1},
{VThemeIcon::MediaEject, "media-eject"_L1},
{VThemeIcon::MediaPlaybackPause, "media-playback-pause"_L1},
{VThemeIcon::MediaPlaybackStart, "media-playback-start"_L1},
{VThemeIcon::MediaPlaybackStop, "media-playback-stop"_L1},
{VThemeIcon::MediaRecord, "media-record"_L1},
{VThemeIcon::MediaSeekBackward, "media-seek-backward"_L1},
{VThemeIcon::MediaSeekForward, "media-seek-forward"_L1},
{VThemeIcon::MediaSkipBackward, "media-skip-backward"_L1},
{VThemeIcon::MediaSkipForward, "media-skip-forward"_L1},
{VThemeIcon::ObjectRotateLeft, "object-rotate-left"_L1},
{VThemeIcon::ObjectRotateRight, "object-rotate-right"_L1},
{VThemeIcon::ProcessStop, "process-stop"_L1},
{VThemeIcon::SystemLockScreen, "system-lock-screen"_L1},
{VThemeIcon::SystemLogOut, "system-log-out"_L1},
{VThemeIcon::SystemSearch, "system-search"_L1},
{VThemeIcon::SystemReboot, "system-reboot"_L1},
{VThemeIcon::SystemShutdown, "system-shutdown"_L1},
{VThemeIcon::ToolsCheckSpelling, "tools-check-spelling"_L1},
{VThemeIcon::ViewFullscreen, "view-fullscreen"_L1},
{VThemeIcon::ViewRefresh, "view-refresh"_L1},
{VThemeIcon::ViewRestore, "view-restore"_L1},
{VThemeIcon::WindowClose, "window-close"_L1},
{VThemeIcon::WindowNew, "window-new"_L1},
{VThemeIcon::ZoomFitBest, "zoom-fit-best"_L1},
{VThemeIcon::ZoomIn, "zoom-in"_L1},
{VThemeIcon::ZoomOut, "zoom-out"_L1},
{VThemeIcon::AudioCard, "audio-card"_L1},
{VThemeIcon::AudioInputMicrophone, "audio-input-microphone"_L1},
{VThemeIcon::Battery, "battery"_L1},
{VThemeIcon::CameraPhoto, "camera-photo"_L1},
{VThemeIcon::CameraVideo, "camera-video"_L1},
{VThemeIcon::CameraWeb, "camera-web"_L1},
{VThemeIcon::Computer, "computer"_L1},
{VThemeIcon::DriveHarddisk, "drive-harddisk"},
{VThemeIcon::DriveOptical, "drive-optical"_L1},
{VThemeIcon::InputGaming, "input-gaming"_L1},
{VThemeIcon::InputKeyboard, "input-keyboard"_L1},
{VThemeIcon::InputMouse, "input-mouse"_L1},
{VThemeIcon::InputTablet, "input-tablet"_L1},
{VThemeIcon::MediaFlash, "media-flash"_L1},
{VThemeIcon::MediaOptical, "media-optical"_L1},
{VThemeIcon::MediaTape, "media-tape"_L1},
{VThemeIcon::MultimediaPlayer, "multimedia-player"_L1},
{VThemeIcon::NetworkWired, "network-wired"_L1},
{VThemeIcon::NetworkWireless, "network-wireless"_L1},
{VThemeIcon::Phone, "phone"_L1},
{VThemeIcon::Printer, "printer"_L1},
{VThemeIcon::Scanner, "scanner"_L1},
{VThemeIcon::VideoDisplay, "video-display"_L1},
{VThemeIcon::AppointmentMissed, "appointment-missed"_L1},
{VThemeIcon::AppointmentSoon, "appointment-soon"_L1},
{VThemeIcon::AudioVolumeHigh, "audio-volume-high"_L1},
{VThemeIcon::AudioVolumeLow, "audio-volume-low"_L1},
{VThemeIcon::AudioVolumeMedium, "audio-volume-medium"_L1},
{VThemeIcon::AudioVolumeMuted, "audio-volume-muted"_L1},
{VThemeIcon::BatteryCaution, "battery-caution"_L1},
{VThemeIcon::BatteryLow, "battery-low"_L1},
{VThemeIcon::DialogError, "dialog-error"_L1},
{VThemeIcon::DialogInformation, "dialog-information"_L1},
{VThemeIcon::DialogPassword, "dialog-password"_L1},
{VThemeIcon::DialogQuestion, "dialog-question"_L1},
{VThemeIcon::DialogWarning, "dialog-warning"_L1},
{VThemeIcon::FolderDragAccept, "folder-drag-accept"_L1},
{VThemeIcon::FolderOpen, "folder-open"_L1},
{VThemeIcon::FolderVisiting, "folder-visiting"_L1},
{VThemeIcon::ImageLoading, "image-loading"_L1},
{VThemeIcon::ImageMissing, "image-missing"_L1},
{VThemeIcon::MailAttachment, "mail-attachment"_L1},
{VThemeIcon::MailUnread, "mail-unread"_L1},
{VThemeIcon::MailRead, "mail-read"_L1},
{VThemeIcon::MailReplied, "mail-replied"_L1},
{VThemeIcon::MediaPlaylistRepeat, "media-playlist-repeat"_L1},
{VThemeIcon::MediaPlaylistShuffle, "media-playlist-shuffle"_L1},
{VThemeIcon::NetworkOffline, "network-offline"_L1},
{VThemeIcon::PrinterPrinting, "printer-printing"_L1},
{VThemeIcon::SecurityHigh, "security-high"_L1},
{VThemeIcon::SecurityLow, "security-low"_L1},
{VThemeIcon::SoftwareUpdateAvailable, "software-update-available"_L1},
{VThemeIcon::SoftwareUpdateUrgent, "software-update-urgent"_L1},
{VThemeIcon::SyncError, "sync-error"_L1},
{VThemeIcon::SyncSynchronizing, "sync-synchronizing"_L1},
{VThemeIcon::UserAvailable, "user-available"_L1},
{VThemeIcon::UserOffline, "user-offline"_L1},
{VThemeIcon::WeatherClear, "weather-clear"_L1},
{VThemeIcon::WeatherClearNight, "weather-clear-night"_L1},
{VThemeIcon::WeatherFewClouds, "weather-few-clouds"_L1},
{VThemeIcon::WeatherFewCloudsNight, "weather-few-clouds-night"_L1},
{VThemeIcon::WeatherFog, "weather-fog"_L1},
{VThemeIcon::WeatherShowers, "weather-showers"_L1},
{VThemeIcon::WeatherSnow, "weather-snow"_L1},
{VThemeIcon::WeatherStorm, "weather-storm"_L1},
{VThemeIcon::PreferencesOther, "preferences-other"_L1},
{VThemeIcon::GtkOk, "gtk-ok"_L1},
{VThemeIcon::GtkNo, "gtk-no"_L1}}))
QT_WARNING_POP
} // namespace
//---------------------------------------------------------------------------------------------------------------------
auto FromTheme(VThemeIcon icon) -> QIcon
{
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
if (themeIconMapping->contains(icon))
{
return QIcon::fromTheme(themeIconMapping->value(icon));
}
return QIcon::fromTheme(themeIconStringMapping->value(icon));
#else
return QIcon::fromTheme(themeIconStringMapping->value(icon));
#endif
}
//---------------------------------------------------------------------------------------------------------------------
auto FromTheme(VThemeIcon icon, const QIcon &fallback) -> QIcon
{
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
if (themeIconMapping->contains(icon))
{
return QIcon::fromTheme(themeIconMapping->value(icon), fallback);
}
return QIcon::fromTheme(themeIconStringMapping->value(icon), fallback);
#else
return QIcon::fromTheme(themeIconStringMapping->value(icon), fallback);
#endif
}
//---------------------------------------------------------------------------------------------------------------------
auto HasThemeIcon(VThemeIcon icon) -> bool
{
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
if (themeIconMapping->contains(icon))
{
return QIcon::hasThemeIcon(themeIconMapping->value(icon));
}
return QIcon::hasThemeIcon(themeIconStringMapping->value(icon));
#else
return QIcon::hasThemeIcon(themeIconStringMapping->value(icon));
#endif
}

View File

@ -34,6 +34,8 @@
#include <QtCore/QHashFunctions> #include <QtCore/QHashFunctions>
#endif #endif
class QIcon;
enum class VColorRole enum class VColorRole
{ {
DefaultColor, DefaultColor,
@ -67,4 +69,178 @@ Q_DECL_CONST_FUNCTION inline auto qHash(VColorRole key, uint seed = 0) noexcept
} }
#endif #endif
enum class VThemeIcon
{
AddressBookNew,
ApplicationExit,
AppointmentNew,
CallStart,
CallStop,
ContactNew,
DocumentNew,
DocumentOpen,
DocumentOpenRecent,
DocumentPageSetup,
DocumentPrint,
DocumentPrintPreview,
DocumentProperties,
DocumentRevert,
DocumentSave,
DocumentSaveAs,
DocumentSend,
EditClear,
EditCopy,
EditCut,
EditDelete,
EditFind,
EditPaste,
EditRedo,
EditSelectAll,
EditUndo,
FolderNew,
FormatIndentLess,
FormatIndentMore,
FormatJustifyCenter,
FormatJustifyFill,
FormatJustifyLeft,
FormatJustifyRight,
FormatTextDirectionLtr,
FormatTextDirectionRtl,
FormatTextBold,
FormatTextItalic,
FormatTextUnderline,
FormatTextStrikethrough,
GoDown,
GoHome,
GoNext,
GoPrevious,
GoUp,
HelpAbout,
HelpFaq,
InsertImage,
InsertLink,
InsertText,
ListAdd,
ListRemove,
MailForward,
MailMarkImportant,
MailMarkRead,
MailMarkUnread,
MailMessageNew,
MailReplyAll,
MailReplySender,
MailSend,
MediaEject,
MediaPlaybackPause,
MediaPlaybackStart,
MediaPlaybackStop,
MediaRecord,
MediaSeekBackward,
MediaSeekForward,
MediaSkipBackward,
MediaSkipForward,
ObjectRotateLeft,
ObjectRotateRight,
ProcessStop,
SystemLockScreen,
SystemLogOut,
SystemSearch,
SystemReboot,
SystemShutdown,
ToolsCheckSpelling,
ViewFullscreen,
ViewRefresh,
ViewRestore,
WindowClose,
WindowNew,
ZoomFitBest,
ZoomIn,
ZoomOut,
AudioCard,
AudioInputMicrophone,
Battery,
CameraPhoto,
CameraVideo,
CameraWeb,
Computer,
DriveHarddisk,
DriveOptical,
InputGaming,
InputKeyboard,
InputMouse,
InputTablet,
MediaFlash,
MediaOptical,
MediaTape,
MultimediaPlayer,
NetworkWired,
NetworkWireless,
Phone,
Printer,
Scanner,
VideoDisplay,
AppointmentMissed,
AppointmentSoon,
AudioVolumeHigh,
AudioVolumeLow,
AudioVolumeMedium,
AudioVolumeMuted,
BatteryCaution,
BatteryLow,
DialogError,
DialogInformation,
DialogPassword,
DialogQuestion,
DialogWarning,
FolderDragAccept,
FolderOpen,
FolderVisiting,
ImageLoading,
ImageMissing,
MailAttachment,
MailUnread,
MailRead,
MailReplied,
MediaPlaylistRepeat,
MediaPlaylistShuffle,
NetworkOffline,
PrinterPrinting,
SecurityHigh,
SecurityLow,
SoftwareUpdateAvailable,
SoftwareUpdateUrgent,
SyncError,
SyncSynchronizing,
UserAvailable,
UserOffline,
WeatherClear,
WeatherClearNight,
WeatherFewClouds,
WeatherFewCloudsNight,
WeatherFog,
WeatherShowers,
WeatherSnow,
WeatherStorm,
// Not supported by Qt
PreferencesOther,
GtkOk,
GtkNo
};
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
Q_DECL_CONST_FUNCTION inline auto qHash(VThemeIcon key, uint seed = 0) noexcept -> uint
{
auto underlyingValue = static_cast<typename std::underlying_type<VThemeIcon>::type>(key);
return ::qHash(underlyingValue, seed);
}
#endif
auto FromTheme(VThemeIcon icon) -> QIcon;
auto FromTheme(VThemeIcon icon, const QIcon &fallback) -> QIcon;
auto HasThemeIcon(VThemeIcon icon) -> bool;
#endif // THEMEDEF_H #endif // THEMEDEF_H

View File

@ -334,8 +334,7 @@ void VTheme::InitApplicationStyle()
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VTheme::SetIconTheme() void VTheme::SetIconTheme()
{ {
static const char *GENERIC_ICON_TO_CHECK = "document-open"; if (not HasThemeIcon(VThemeIcon::DocumentOpen))
if (not QIcon::hasThemeIcon(GENERIC_ICON_TO_CHECK))
{ {
// If there is no default working icon theme then we should // If there is no default working icon theme then we should
// use an icon theme that we provide via a .qrc file // use an icon theme that we provide via a .qrc file

View File

@ -142,6 +142,7 @@ VLib {
name: "theme" name: "theme"
prefix: "theme/" prefix: "theme/"
files: [ files: [
"themeDef.cpp",
"themeDef.h", "themeDef.h",
"vapplicationstyle.cpp", "vapplicationstyle.cpp",
"vapplicationstyle.h", "vapplicationstyle.h",

View File

@ -37,6 +37,7 @@
#include "../vgeometry/vspline.h" #include "../vgeometry/vspline.h"
#include "../vgeometry/vsplinepath.h" #include "../vgeometry/vsplinepath.h"
#include "../vmisc/def.h" #include "../vmisc/def.h"
#include "../vmisc/theme/themeDef.h"
#include "../vmisc/vabstractapplication.h" #include "../vmisc/vabstractapplication.h"
#include "../vpatterndb/calculator.h" #include "../vpatterndb/calculator.h"
#include "../vpatterndb/variables/vcurvelength.h" #include "../vpatterndb/variables/vcurvelength.h"
@ -223,13 +224,13 @@ void DeployFormula(QDialog *dialog, QPlainTextEdit *formula, QPushButton *button
{ {
formula->setFixedHeight(dialogMaxFormulaHeight); formula->setFixedHeight(dialogMaxFormulaHeight);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
buttonGrowLength->setIcon(QIcon::fromTheme(QStringLiteral("go-next"))); buttonGrowLength->setIcon(FromTheme(VThemeIcon::GoNext));
} }
else else
{ {
formula->setFixedHeight(formulaBaseHeight); formula->setFixedHeight(formulaBaseHeight);
// Set icon from theme (internal for Windows system) // Set icon from theme (internal for Windows system)
buttonGrowLength->setIcon(QIcon::fromTheme(QStringLiteral("go-down"))); buttonGrowLength->setIcon(FromTheme(VThemeIcon::GoDown));
} }
// I found that after change size of formula field, it was filed for angle formula, field for formula became black. // I found that after change size of formula field, it was filed for angle formula, field for formula became black.
@ -609,7 +610,7 @@ auto EachPointLabelIsUnique(QListWidget *listWidget) -> bool
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto DialogWarningIcon() -> QString auto DialogWarningIcon() -> QString
{ {
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
const QPixmap pixmap = icon.pixmap(QSize(16, 16)); const QPixmap pixmap = icon.pixmap(QSize(16, 16));
QByteArray byteArray; QByteArray byteArray;

View File

@ -27,6 +27,7 @@
*************************************************************************/ *************************************************************************/
#include "dialoginsertnode.h" #include "dialoginsertnode.h"
#include "../vmisc/theme/themeDef.h"
#include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vcontainer.h"
#include "ui_dialoginsertnode.h" #include "ui_dialoginsertnode.h"
@ -217,7 +218,7 @@ void DialogInsertNode::ShowContextMenu(const QPoint &pos)
QListWidgetItem *rowItem = ui->listWidget->item(row); QListWidgetItem *rowItem = ui->listWidget->item(row);
SCASSERT(rowItem != nullptr); SCASSERT(rowItem != nullptr);
QAction *actionDelete = menu->addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); QAction *actionDelete = menu->addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
QAction *selectedAction = menu->exec(ui->listWidget->viewport()->mapToGlobal(pos)); QAction *selectedAction = menu->exec(ui->listWidget->viewport()->mapToGlobal(pos));
if (selectedAction == actionDelete) if (selectedAction == actionDelete)

View File

@ -263,7 +263,7 @@ void DialogPiecePath::CheckState()
} }
else else
{ {
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
ui->tabWidget->setTabIcon(tabSeamAllowanceIndex, icon); ui->tabWidget->setTabIcon(tabSeamAllowanceIndex, icon);
} }
@ -276,7 +276,7 @@ void DialogPiecePath::CheckState()
} }
else else
{ {
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
ui->tabWidget->setTabIcon(tabControlIndex, icon); ui->tabWidget->setTabIcon(tabControlIndex, icon);
} }
@ -292,7 +292,7 @@ void DialogPiecePath::CheckState()
} }
else else
{ {
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
ui->tabWidget->setTabIcon(tabPassmarksIndex, icon); ui->tabWidget->setTabIcon(tabPassmarksIndex, icon);
} }
@ -2348,8 +2348,8 @@ auto DialogPiecePath::InitContextMenu(QMenu *menu, const VPieceNode &rowNode) ->
actionExcluded->setChecked(rowNode.IsExcluded()); actionExcluded->setChecked(rowNode.IsExcluded());
contextMenu.insert(static_cast<int>(ContextMenuOption::Excluded), actionExcluded); contextMenu.insert(static_cast<int>(ContextMenuOption::Excluded), actionExcluded);
QAction *actionDelete = menu->addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), QAction *actionDelete =
QApplication::translate("DialogSeamAllowance", "Delete")); menu->addAction(FromTheme(VThemeIcon::EditDelete), QApplication::translate("DialogSeamAllowance", "Delete"));
contextMenu.insert(static_cast<int>(ContextMenuOption::Delete), actionDelete); contextMenu.insert(static_cast<int>(ContextMenuOption::Delete), actionDelete);
return contextMenu; return contextMenu;

View File

@ -603,7 +603,7 @@ void DialogSeamAllowance::CheckTabPathsState()
m_ftb->SetTabText(TabOrder::Paths, m_ftb->SetTabText(TabOrder::Paths,
(isValid && flagMainPathIsValid && isNameAndUUIDValid) ? tr("Paths") : tr("Paths") + '*'_L1); (isValid && flagMainPathIsValid && isNameAndUUIDValid) ? tr("Paths") : tr("Paths") + '*'_L1);
const QIcon warningIcon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon warningIcon = FromTheme(VThemeIcon::DialogWarning);
uiTabPaths->tabWidget->setTabIcon(uiTabPaths->tabWidget->indexOf(uiTabPaths->tabSeamAllowance), uiTabPaths->tabWidget->setTabIcon(uiTabPaths->tabWidget->indexOf(uiTabPaths->tabSeamAllowance),
isValid ? QIcon() : warningIcon); isValid ? QIcon() : warningIcon);
@ -641,7 +641,7 @@ void DialogSeamAllowance::CheckTabPassmarksState()
m_ftb->SetTabText(TabOrder::Passmarks, tr("Passmarks") + (allFormulasValid ? QString() : QChar('*'))); m_ftb->SetTabText(TabOrder::Passmarks, tr("Passmarks") + (allFormulasValid ? QString() : QChar('*')));
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
uiTabPassmarks->tabWidget->setTabIcon(uiTabPassmarks->tabWidget->indexOf(uiTabPassmarks->tabManualShape), uiTabPassmarks->tabWidget->setTabIcon(uiTabPassmarks->tabWidget->indexOf(uiTabPassmarks->tabManualShape),
allFormulasValid ? QIcon() : icon); allFormulasValid ? QIcon() : icon);
@ -670,7 +670,7 @@ void DialogSeamAllowance::CheckTabFoldLineState()
m_ftb->SetTabText(TabOrder::FoldLine, tr("Fold line") + (allFormulasValid ? QString() : QChar('*'))); m_ftb->SetTabText(TabOrder::FoldLine, tr("Fold line") + (allFormulasValid ? QString() : QChar('*')));
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
uiTabFoldLine->tabWidget->setTabIcon(uiTabFoldLine->tabWidget->indexOf(uiTabFoldLine->tabShape), uiTabFoldLine->tabWidget->setTabIcon(uiTabFoldLine->tabWidget->indexOf(uiTabFoldLine->tabShape),
allFormulasValid ? QIcon() : icon); allFormulasValid ? QIcon() : icon);
} }
@ -1205,7 +1205,7 @@ void DialogSeamAllowance::ShowCustomSAContextMenu(const QPoint &pos)
} }
QScopedPointer<QMenu> const menu(new QMenu()); QScopedPointer<QMenu> const menu(new QMenu());
QAction *actionOption = menu->addAction(QIcon::fromTheme(preferencesOtherIcon), tr("Options")); QAction *actionOption = menu->addAction(FromTheme(VThemeIcon::PreferencesOther), tr("Options"));
QListWidgetItem *rowItem = uiTabPaths->listWidgetCustomSA->item(row); QListWidgetItem *rowItem = uiTabPaths->listWidgetCustomSA->item(row);
SCASSERT(rowItem != nullptr); SCASSERT(rowItem != nullptr);
@ -1215,7 +1215,7 @@ void DialogSeamAllowance::ShowCustomSAContextMenu(const QPoint &pos)
actionReverse->setCheckable(true); actionReverse->setCheckable(true);
actionReverse->setChecked(record.reverse); actionReverse->setChecked(record.reverse);
QAction *actionDelete = menu->addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); QAction *actionDelete = menu->addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
QAction *selectedAction = menu->exec(uiTabPaths->listWidgetCustomSA->viewport()->mapToGlobal(pos)); QAction *selectedAction = menu->exec(uiTabPaths->listWidgetCustomSA->viewport()->mapToGlobal(pos));
if (selectedAction == actionDelete) if (selectedAction == actionDelete)
@ -1257,8 +1257,8 @@ void DialogSeamAllowance::ShowInternalPathsContextMenu(const QPoint &pos)
} }
QScopedPointer<QMenu> const menu(new QMenu()); QScopedPointer<QMenu> const menu(new QMenu());
QAction *actionOption = menu->addAction(QIcon::fromTheme(preferencesOtherIcon), tr("Options")); QAction *actionOption = menu->addAction(FromTheme(VThemeIcon::PreferencesOther), tr("Options"));
QAction *actionDelete = menu->addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); QAction *actionDelete = menu->addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
QAction *selectedAction = menu->exec(uiTabPaths->listWidgetInternalPaths->viewport()->mapToGlobal(pos)); QAction *selectedAction = menu->exec(uiTabPaths->listWidgetInternalPaths->viewport()->mapToGlobal(pos));
if (selectedAction == actionDelete) if (selectedAction == actionDelete)
@ -1292,7 +1292,7 @@ void DialogSeamAllowance::ShowPinsContextMenu(const QPoint &pos)
} }
QScopedPointer<QMenu> const menu(new QMenu()); QScopedPointer<QMenu> const menu(new QMenu());
QAction *actionDelete = menu->addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); QAction *actionDelete = menu->addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
QAction *selectedAction = menu->exec(uiTabPins->listWidgetPins->viewport()->mapToGlobal(pos)); QAction *selectedAction = menu->exec(uiTabPins->listWidgetPins->viewport()->mapToGlobal(pos));
if (selectedAction == actionDelete) if (selectedAction == actionDelete)
@ -1341,7 +1341,7 @@ void DialogSeamAllowance::ShowPlaceLabelsContextMenu(const QPoint &pos)
UpdateCurrentPlaceLabelRecords(); UpdateCurrentPlaceLabelRecords();
}; };
QAction *actionOption = menu->addAction(QIcon::fromTheme(preferencesOtherIcon), tr("Options")); QAction *actionOption = menu->addAction(FromTheme(VThemeIcon::PreferencesOther), tr("Options"));
menu->addSeparator(); menu->addSeparator();
QAction *actionSegment = InitAction(tr("Segment"), PlaceLabelType::Segment); QAction *actionSegment = InitAction(tr("Segment"), PlaceLabelType::Segment);
QAction *actionRectangle = InitAction(tr("Rectangle"), PlaceLabelType::Rectangle); QAction *actionRectangle = InitAction(tr("Rectangle"), PlaceLabelType::Rectangle);
@ -1354,7 +1354,7 @@ void DialogSeamAllowance::ShowPlaceLabelsContextMenu(const QPoint &pos)
QAction *actionButton = InitAction(tr("Button"), PlaceLabelType::Button); QAction *actionButton = InitAction(tr("Button"), PlaceLabelType::Button);
QAction *actionCircle = InitAction(tr("Circle"), PlaceLabelType::Circle); QAction *actionCircle = InitAction(tr("Circle"), PlaceLabelType::Circle);
menu->addSeparator(); menu->addSeparator();
QAction *actionDelete = menu->addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); QAction *actionDelete = menu->addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
QAction *selectedAction = menu->exec(uiTabPlaceLabels->listWidgetPlaceLabels->viewport()->mapToGlobal(pos)); QAction *selectedAction = menu->exec(uiTabPlaceLabels->listWidgetPlaceLabels->viewport()->mapToGlobal(pos));
if (selectedAction == actionDelete) if (selectedAction == actionDelete)
@ -2210,7 +2210,7 @@ void DialogSeamAllowance::UpdateDetailLabelValues()
if (not flagDLAngle || not(flagDLFormulas || flagDPin) || not flagPLAngle || not(flagPLFormulas || flagPPin)) if (not flagDLAngle || not(flagDLFormulas || flagDPin) || not flagPLAngle || not(flagPLFormulas || flagPPin))
{ {
m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*'); m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*');
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon); uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon);
} }
else else
@ -2293,7 +2293,7 @@ void DialogSeamAllowance::UpdatePatternLabelValues()
if (not flagDLAngle || not(flagDLFormulas || flagDPin) || not flagPLAngle || not(flagPLFormulas || flagPPin)) if (not flagDLAngle || not(flagDLFormulas || flagDPin) || not flagPLAngle || not(flagPLFormulas || flagPPin))
{ {
m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*'); m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*');
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon); uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon);
} }
else else
@ -3177,7 +3177,7 @@ void DialogSeamAllowance::DetailPinPointChanged()
topPinId == NULL_ID &&bottomPinId == NULL_ID ? color = OkColor(this) : color = errorColor; topPinId == NULL_ID &&bottomPinId == NULL_ID ? color = OkColor(this) : color = errorColor;
m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*'); m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*');
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon); uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon);
} }
EnableDetailLabelFormulaControls(not flagDPin); EnableDetailLabelFormulaControls(not flagDPin);
@ -3210,7 +3210,7 @@ void DialogSeamAllowance::PatternPinPointChanged()
topPinId == NULL_ID &&bottomPinId == NULL_ID ? color = OkColor(this) : color = errorColor; topPinId == NULL_ID &&bottomPinId == NULL_ID ? color = OkColor(this) : color = errorColor;
m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*'); m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*');
const QIcon icon = QIcon::fromTheme(QStringLiteral("dialog-warning")); const QIcon icon = FromTheme(VThemeIcon::DialogWarning);
uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon); uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon);
} }
EnablePatternLabelFormulaControls(not flagPPin); EnablePatternLabelFormulaControls(not flagPPin);
@ -5383,7 +5383,7 @@ auto DialogSeamAllowance::InitMainPathContextMenu(QMenu *menu, const VPieceNode
contextMenu.insert(static_cast<int>(MainPathContextMenuOption::Excluded), actionExcluded); contextMenu.insert(static_cast<int>(MainPathContextMenuOption::Excluded), actionExcluded);
QAction *actionDelete = QAction *actionDelete =
menu->addAction(QIcon::fromTheme(editDeleteIcon), QApplication::translate("DialogSeamAllowance", "Delete")); menu->addAction(FromTheme(VThemeIcon::EditDelete), QApplication::translate("DialogSeamAllowance", "Delete"));
contextMenu.insert(static_cast<int>(MainPathContextMenuOption::Delete), actionDelete); contextMenu.insert(static_cast<int>(MainPathContextMenuOption::Delete), actionDelete);
return contextMenu; return contextMenu;

View File

@ -27,34 +27,35 @@
*************************************************************************/ *************************************************************************/
#include "vbackgroundimageitem.h" #include "vbackgroundimageitem.h"
#include "../vmisc/vabstractvalapplication.h" #include "../../undocommands/image/hidebackgroundimage.h"
#include "../vwidgets/vmaingraphicsview.h"
#include "../ifc/xml/vabstractpattern.h"
#include "../../undocommands/image/movebackgroundimage.h"
#include "../../undocommands/image/holdbackgroundimage.h" #include "../../undocommands/image/holdbackgroundimage.h"
#include "../../undocommands/image/movebackgroundimage.h"
#include "../../undocommands/image/opaquebackgroundimage.h"
#include "../../undocommands/image/renamebackgroundimage.h"
#include "../../undocommands/image/resetbackgroundimage.h"
#include "../../undocommands/image/rotatebackgroundimage.h" #include "../../undocommands/image/rotatebackgroundimage.h"
#include "../../undocommands/image/scalebackgroundimage.h" #include "../../undocommands/image/scalebackgroundimage.h"
#include "../../undocommands/image/renamebackgroundimage.h"
#include "../../undocommands/image/hidebackgroundimage.h"
#include "../../undocommands/image/resetbackgroundimage.h"
#include "../../undocommands/image/opaquebackgroundimage.h"
#include "../../undocommands/image/zvaluemovebackgroundimage.h" #include "../../undocommands/image/zvaluemovebackgroundimage.h"
#include "../ifc/xml/vabstractpattern.h"
#include "../toolsdef.h" #include "../toolsdef.h"
#include "../vmisc/theme/themeDef.h"
#include "../vmisc/vabstractvalapplication.h"
#include "../vwidgets/vmaingraphicsview.h"
#include <QUndoStack>
#include <QGraphicsView>
#include <QGraphicsSceneMouseEvent>
#include <QMenu>
#include <QGraphicsDropShadowEffect> #include <QGraphicsDropShadowEffect>
#include <QMessageBox> #include <QGraphicsSceneMouseEvent>
#include <QGraphicsView>
#include <QKeyEvent> #include <QKeyEvent>
#include <QMenu>
#include <QMessageBox>
#include <QUndoStack>
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VBackgroundImageItem::VBackgroundImageItem(const VBackgroundPatternImage &image, VAbstractPattern *doc, VBackgroundImageItem::VBackgroundImageItem(const VBackgroundPatternImage &image, VAbstractPattern *doc,
QGraphicsItem *parent) QGraphicsItem *parent)
: QGraphicsObject{parent}, : QGraphicsObject{parent},
m_image(image), m_image(image),
m_doc(doc) m_doc(doc)
{ {
SCASSERT(doc != nullptr) SCASSERT(doc != nullptr)
@ -176,7 +177,7 @@ void VBackgroundImageItem::PositionChanged(QUuid id)
QTransform const newMatrix = m_image.Matrix(); QTransform const newMatrix = m_image.Matrix();
if (not VFuzzyComparePossibleNulls(oldMatrix.m31(), newMatrix.m31()) || if (not VFuzzyComparePossibleNulls(oldMatrix.m31(), newMatrix.m31()) ||
not VFuzzyComparePossibleNulls(oldMatrix.m32(), newMatrix.m32())) not VFuzzyComparePossibleNulls(oldMatrix.m32(), newMatrix.m32()))
{ {
prepareGeometryChange(); prepareGeometryChange();
update(); update();
@ -352,7 +353,7 @@ void VBackgroundImageItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void VBackgroundImageItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void VBackgroundImageItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick && if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick &&
(flags() & QGraphicsItem::ItemIsMovable)) (flags() & QGraphicsItem::ItemIsMovable))
{ {
m_lastMoveDistance = QPointF(); m_lastMoveDistance = QPointF();
SetItemOverrideCursor(this, cursorArrowOpenHand, 1, 1); SetItemOverrideCursor(this, cursorArrowOpenHand, 1, 1);
@ -422,16 +423,16 @@ void VBackgroundImageItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *even
actionVisible->setCheckable(true); actionVisible->setCheckable(true);
actionVisible->setChecked(m_image.Visible()); actionVisible->setChecked(m_image.Visible());
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)
const QString actionShowTitle = tr("Show in Finder"); const QString actionShowTitle = tr("Show in Finder");
#else #else
const QString actionShowTitle = tr("Show in Explorer"); const QString actionShowTitle = tr("Show in Explorer");
#endif #endif
QAction *actionShow = menu.addAction(QIcon::fromTheme(QStringLiteral("system-search")), actionShowTitle); QAction *actionShow = menu.addAction(FromTheme(VThemeIcon::SystemSearch), actionShowTitle);
actionShow->setVisible(false); actionShow->setVisible(false);
actionShow->setEnabled(QFileInfo::exists(m_image.FilePath())); actionShow->setEnabled(QFileInfo::exists(m_image.FilePath()));
QAction *actionSaveAs = menu.addAction(QIcon::fromTheme(QStringLiteral("document-save-as")), tr("Save as …")); QAction *actionSaveAs = menu.addAction(FromTheme(VThemeIcon::DocumentSaveAs), tr("Save as …"));
actionSaveAs->setVisible(false); actionSaveAs->setVisible(false);
if (not m_image.FilePath().isEmpty()) if (not m_image.FilePath().isEmpty())
@ -446,7 +447,7 @@ void VBackgroundImageItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *even
QAction *actionReset = menu.addAction(tr("Reset transformation")); QAction *actionReset = menu.addAction(tr("Reset transformation"));
actionReset->setEnabled(not m_image.Hold()); actionReset->setEnabled(not m_image.Hold());
QAction *actionRemove = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete")); QAction *actionRemove = menu.addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
QAction *selectedAction = menu.exec(event->screenPos()); QAction *selectedAction = menu.exec(event->screenPos());
if (selectedAction == holdOption) if (selectedAction == holdOption)
@ -481,16 +482,16 @@ void VBackgroundImageItem::keyPressEvent(QKeyEvent *event)
const int move = (event->modifiers() & Qt::ShiftModifier) ? 10 : 1; const int move = (event->modifiers() & Qt::ShiftModifier) ? 10 : 1;
int angle = 15; int angle = 15;
if(event->modifiers() & Qt::ControlModifier) if (event->modifiers() & Qt::ControlModifier)
{ {
angle = 90; angle = 90;
} }
else if(event->modifiers() & Qt::AltModifier) else if (event->modifiers() & Qt::AltModifier)
{ {
angle = 1; angle = 1;
} }
switch(event->key()) switch (event->key())
{ {
case Qt::Key_Left: case Qt::Key_Left:
TranslateImageOn(-move, 0); TranslateImageOn(-move, 0);
@ -557,16 +558,10 @@ void VBackgroundImageItem::keyReleaseEvent(QKeyEvent *event)
return; return;
} }
} }
else if (event->key() == Qt::Key_Left || else if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right || event->key() == Qt::Key_Up ||
event->key() == Qt::Key_Right || event->key() == Qt::Key_Down || event->key() == Qt::Key_BracketLeft ||
event->key() == Qt::Key_Up || event->key() == Qt::Key_BracketRight || event->key() == Qt::Key_Period ||
event->key() == Qt::Key_Down || event->key() == Qt::Key_Greater || event->key() == Qt::Key_Comma || event->key() == Qt::Key_Less)
event->key() == Qt::Key_BracketLeft ||
event->key() == Qt::Key_BracketRight ||
event->key() == Qt::Key_Period ||
event->key() == Qt::Key_Greater ||
event->key() == Qt::Key_Comma ||
event->key() == Qt::Key_Less)
{ {
if (not event->isAutoRepeat()) if (not event->isAutoRepeat())
{ {
@ -612,7 +607,7 @@ void VBackgroundImageItem::UpdateHoldState()
m_image = m_doc->GetBackgroundImage(m_image.Id()); m_image = m_doc->GetBackgroundImage(m_image.Id());
setFlag(QGraphicsItem::ItemIsMovable, not m_image.Hold()); setFlag(QGraphicsItem::ItemIsMovable, not m_image.Hold());
setFlag(QGraphicsItem::ItemSendsGeometryChanges, not m_image.Hold()); setFlag(QGraphicsItem::ItemSendsGeometryChanges, not m_image.Hold());
setFlag(QGraphicsItem::ItemIsFocusable, not m_image.Hold());// For keyboard input focus setFlag(QGraphicsItem::ItemIsFocusable, not m_image.Hold()); // For keyboard input focus
emit UpdateControls(); emit UpdateControls();
} }
@ -644,7 +639,7 @@ void VBackgroundImageItem::InitImage()
setFlag(QGraphicsItem::ItemIsMovable, not m_image.Hold()); setFlag(QGraphicsItem::ItemIsMovable, not m_image.Hold());
setFlag(QGraphicsItem::ItemSendsGeometryChanges, not m_image.Hold()); setFlag(QGraphicsItem::ItemSendsGeometryChanges, not m_image.Hold());
setFlag(QGraphicsItem::ItemIsFocusable, not m_image.Hold());// For keyboard input focus setFlag(QGraphicsItem::ItemIsFocusable, not m_image.Hold()); // For keyboard input focus
setVisible(m_image.Visible()); setVisible(m_image.Visible());
} }

View File

@ -183,16 +183,14 @@ void VDrawTool::ContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 itemI
qCDebug(vTool, "Creating tool context menu."); qCDebug(vTool, "Creating tool context menu.");
QMenu menu; QMenu menu;
QAction *actionOption = QAction *actionOption = menu.addAction(FromTheme(VThemeIcon::PreferencesOther), VDrawTool::tr("Options"));
menu.addAction(QIcon::fromTheme(QStringLiteral("preferences-other")), VDrawTool::tr("Options"));
// add the menu "add to group" to the context menu // add the menu "add to group" to the context menu
QMap<quint32, QString> groupsNotContainingItem = doc->GetGroupsContainingItem(this->getId(), itemId, false); QMap<quint32, QString> groupsNotContainingItem = doc->GetGroupsContainingItem(this->getId(), itemId, false);
auto *actionsAddToGroup = new QActionGroup(this); auto *actionsAddToGroup = new QActionGroup(this);
if (not groupsNotContainingItem.empty()) if (not groupsNotContainingItem.empty())
{ {
QMenu *menuAddToGroup = QMenu *menuAddToGroup = menu.addMenu(FromTheme(VThemeIcon::ListAdd), VDrawTool::tr("Add to group"));
menu.addMenu(QIcon::fromTheme(QStringLiteral("list-add")), VDrawTool::tr("Add to group"));
QStringList list = QStringList(groupsNotContainingItem.values()); QStringList list = QStringList(groupsNotContainingItem.values());
list.sort(Qt::CaseInsensitive); list.sort(Qt::CaseInsensitive);
@ -216,7 +214,7 @@ void VDrawTool::ContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 itemI
if (not groupsContainingItem.empty()) if (not groupsContainingItem.empty())
{ {
QMenu *menuRemoveFromGroup = QMenu *menuRemoveFromGroup =
menu.addMenu(QIcon::fromTheme(QStringLiteral("list-remove")), VDrawTool::tr("Remove from group")); menu.addMenu(FromTheme(VThemeIcon::ListRemove), VDrawTool::tr("Remove from group"));
QStringList list = QStringList(groupsContainingItem.values()); QStringList list = QStringList(groupsContainingItem.values());
list.sort(Qt::CaseInsensitive); list.sort(Qt::CaseInsensitive);
@ -246,7 +244,7 @@ void VDrawTool::ContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 itemI
QAction *actionRestoreLabelPosition = menu.addAction(VDrawTool::tr("Restore label position")); QAction *actionRestoreLabelPosition = menu.addAction(VDrawTool::tr("Restore label position"));
actionRestoreLabelPosition->setVisible(itemType == GOType::Point); actionRestoreLabelPosition->setVisible(itemType == GOType::Point);
QAction *actionRemove = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), VDrawTool::tr("Delete")); QAction *actionRemove = menu.addAction(FromTheme(VThemeIcon::EditDelete), VDrawTool::tr("Delete"));
if (showRemove == RemoveOption::Enable) if (showRemove == RemoveOption::Enable)
{ {
if (ref == Referens::Follow) if (ref == Referens::Follow)

View File

@ -331,9 +331,9 @@ auto VNodePoint::InitContextMenu(QMenu *menu, vidtype pieceId, quint32 referens)
separatorAct->setSeparator(true); separatorAct->setSeparator(true);
menu->addAction(separatorAct); menu->addAction(separatorAct);
contextMenu.insert(static_cast<int>(ContextMenuOption::Option), contextMenu.insert(
menu->addAction(QIcon::fromTheme(QStringLiteral("preferences-other")), static_cast<int>(ContextMenuOption::Option),
QCoreApplication::translate("VNodePoint", "Options"))); menu->addAction(FromTheme(VThemeIcon::PreferencesOther), QCoreApplication::translate("VNodePoint", "Options")));
const VPiece detail = VAbstractTool::data.GetPiece(pieceId); const VPiece detail = VAbstractTool::data.GetPiece(pieceId);
@ -370,8 +370,8 @@ auto VNodePoint::InitContextMenu(QMenu *menu, vidtype pieceId, quint32 referens)
reseteLabelTemplateOption->setEnabled(not doc->GetDefaultPieceLabelPath().isEmpty()); reseteLabelTemplateOption->setEnabled(not doc->GetDefaultPieceLabelPath().isEmpty());
contextMenu.insert(static_cast<int>(ContextMenuOption::ResetLabelTemplate), reseteLabelTemplateOption); contextMenu.insert(static_cast<int>(ContextMenuOption::ResetLabelTemplate), reseteLabelTemplateOption);
QAction *actionRemove = menu->addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), QAction *actionRemove =
QCoreApplication::translate("VNodePoint", "Delete")); menu->addAction(FromTheme(VThemeIcon::EditDelete), QCoreApplication::translate("VNodePoint", "Delete"));
referens > 1 ? actionRemove->setEnabled(false) : actionRemove->setEnabled(true); referens > 1 ? actionRemove->setEnabled(false) : actionRemove->setEnabled(true);
contextMenu.insert(static_cast<int>(ContextMenuOption::Remove), actionRemove); contextMenu.insert(static_cast<int>(ContextMenuOption::Remove), actionRemove);

View File

@ -1538,7 +1538,7 @@ void VToolSeamAllowance::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
} }
QMenu menu; QMenu menu;
QAction *actionOption = menu.addAction(QIcon::fromTheme(QStringLiteral("preferences-other")), tr("Options")); QAction *actionOption = menu.addAction(FromTheme(VThemeIcon::PreferencesOther), tr("Options"));
const VPiece detail = VAbstractTool::data.GetPiece(m_id); const VPiece detail = VAbstractTool::data.GetPiece(m_id);
@ -1573,7 +1573,7 @@ void VToolSeamAllowance::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
QAction *reseteLabelTemplateOption = menu.addAction(tr("Reset piece label template")); QAction *reseteLabelTemplateOption = menu.addAction(tr("Reset piece label template"));
reseteLabelTemplateOption->setEnabled(not doc->GetDefaultPieceLabelPath().isEmpty()); reseteLabelTemplateOption->setEnabled(not doc->GetDefaultPieceLabelPath().isEmpty());
QAction *actionRemove = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete")); QAction *actionRemove = menu.addAction(FromTheme(VThemeIcon::EditDelete), tr("Delete"));
actionRemove->setDisabled(_referens > 0); actionRemove->setDisabled(_referens > 0);
QAction *selectedAction = menu.exec(event->screenPos()); QAction *selectedAction = menu.exec(event->screenPos());