From 8ef130a59d3e881a75ad77495590135479705aa8 Mon Sep 17 00:00:00 2001 From: Jeff Patterson Date: Wed, 16 Sep 2026 05:40:33 -0500 Subject: [PATCH] Add a "qet" icon theme and load icons by name QET had no icon theme: the 446 entries of the icon table and the 116 iconsets in .ui files each named a resource path, so an icon could only ever be one file, and a variant for another palette or a vector source had nowhere to go (GitHub #466, #690, #870). This adds the theme layout without changing a single pixel; a dark variant comes in a follow-up. The theme "qet" follows the freedesktop layout Qt's icon loader understands. misc/make_icon_themes.py generates ico/icon-themes.qrc, which aliases the existing ico//.png files into themes/qet//.png, and ico/themes/qet/index.theme. No file moves. The four table entries that paired a 16 pixel file with a 22 pixel file of another name (ConductorSettings, DiagramAdd, DiagramDelete, DialogInformation) get the 22 pixel file aliased under the 16 pixel name. QETApp::initIconTheme() registers the theme before initIcons() and makes it current on every platform, so a desktop icon theme cannot replace QET's icons. Icons are then looked up by name: QIcon::fromTheme() in qeticons.cpp and in the few places that built a QIcon from a resource path directly, and theme="..." on the iconsets in .ui files, with the resource path kept as fallback. Flags, color swatches, application and MIME icons stay on their paths. One entry does not go through the theme. The elements panel draws the project root with ProjectFileGP in the 50 pixel slot it reserves for element previews, and the name "project" also carries the 128 pixel file the configuration dialog uses. On a 2x display Qt's loader picks that file for a 50 pixel request and fills the slot. ProjectFileGP loads the 16 and 22 pixel files directly, as before. tests/qttest/tst_qeticons: every name in the theme resolves, the four aliases resolve at 22 pixels, a Fusion tool button shows its icon at 3:1 with disabled weaker than enabled, and the project root icon stays at 22 pixels or less when asked for 50 at 2x while the configuration dialog still gets its 128 pixel file. The rendering helpers shared with tst_qetpalette moved to tests/qttest/inkcontrast.h. --- CMakeLists.txt | 2 + ico/icon-themes.qrc | 285 ++++++ ico/themes/qet/index.theme | 30 + misc/make_icon_themes.py | 130 +++ .../fileelementcollectionitem.cpp | 8 +- sources/NameList/ui/namelistwidget.ui | 4 +- .../ui/replaceconductordialog.ui | 6 +- .../SearchAndReplace/ui/replacefoliowidget.ui | 2 +- .../ui/searchandreplacewidget.ui | 8 +- .../TerminalStrip/ui/freeterminaleditor.ui | 2 +- .../TerminalStrip/ui/terminalstripeditor.ui | 2 +- .../ui/terminalstripeditorwindow.ui | 6 +- sources/autoNum/ui/autonumberingdockwidget.ui | 8 +- sources/autoNum/ui/selectautonumw.ui | 10 +- sources/dataBase/ui/elementquerywidget.ui | 12 +- sources/dataBase/ui/summaryquerywidget.ui | 8 +- sources/editor/ui/polygoneditor.ui | 4 +- sources/editor/ui/qetelementeditor.ui | 78 +- sources/print/projectprintwindow.ui | 30 +- sources/qetapp.cpp | 17 + sources/qetapp.h | 1 + sources/qetdiagrameditor.cpp | 2 +- .../ui/graphicstablepropertieseditor.ui | 8 +- .../ui/projectdbmodelpropertieswidget.ui | 4 +- sources/qeticons.cpp | 836 ++++++++---------- sources/richtext/richtexteditor.cpp | 12 +- sources/ui/conductorpropertieswidget.ui | 8 +- sources/ui/configsaveloaderwidget.ui | 4 +- sources/ui/dynamicelementtextitemeditor.ui | 10 +- sources/ui/masterpropertieswidget.ui | 4 +- sources/ui/thirdpartybinaryinstalldialog.ui | 4 +- sources/ui/titleblockpropertieswidget.ui | 10 +- tests/qttest/CMakeLists.txt | 16 + tests/qttest/inkcontrast.h | 77 ++ tests/qttest/tst_qeticons.cpp | 166 ++++ tests/qttest/tst_qetpalette.cpp | 41 +- 36 files changed, 1237 insertions(+), 618 deletions(-) create mode 100644 ico/icon-themes.qrc create mode 100644 ico/themes/qet/index.theme create mode 100644 misc/make_icon_themes.py create mode 100644 tests/qttest/inkcontrast.h create mode 100644 tests/qttest/tst_qeticons.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fc0fffd4..60ea552e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,6 +139,7 @@ if(WIN32) ${QET_SRC_FILES} ${QM_FILES} ${QET_DIR}/qelectrotech.qrc + ${QET_DIR}/ico/icon-themes.qrc ) else() add_executable( @@ -147,6 +148,7 @@ else() ${QET_SRC_FILES} ${QM_FILES} ${QET_DIR}/qelectrotech.qrc + ${QET_DIR}/ico/icon-themes.qrc ) endif() diff --git a/ico/icon-themes.qrc b/ico/icon-themes.qrc new file mode 100644 index 000000000..1a3635da5 --- /dev/null +++ b/ico/icon-themes.qrc @@ -0,0 +1,285 @@ + + + + + themes/qet/index.theme + 16x16/application-exit.png + 16x16/arrow-left-double.png + 16x16/arrow-left.png + 16x16/arrow-right-double.png + 16x16/arrow-right.png + 16x16/circle.png + 16x16/conductor-edit.png + 16x16/conductor-reset.png + 16x16/conductor.png + 16x16/configure-toolbars.png + 16x16/configure.png + 16x16/diagram.png + 16x16/dialog-cancel.png + 16x16/dialog-ok.png + 16x16/document-close.png + 16x16/document-export.png + 16x16/document-import.png + 16x16/document-new.png + 16x16/document-open-recent.png + 16x16/document-open.png + 16x16/document-print-frame.png + 16x16/document-print.png + 16x16/document-save-all.png + 16x16/document-save-as.png + 16x16/document-save.png + 16x16/east.png + 16x16/edit-clear-locationbar-ltr.png + 16x16/edit-clear-locationbar-rtl.png + 16x16/edit-clear.png + 16x16/edit-copy.png + 16x16/edit-cut.png + 16x16/edit-delete.png + 16x16/edit-download.png + 16x16/edit-paste.png + 16x16/edit-redo.png + 16x16/edit-rename.png + 16x16/edit-select-all.png + 16x16/edit-select-invert.png + 16x16/edit-select-none.png + 16x16/edit-table-cell-merge.png + 16x16/edit-table-cell-split.png + 16x16/edit-table-delete-column.png + 16x16/edit-table-delete-row.png + 16x16/edit-table-insert-column-left.png + 16x16/edit-table-insert-column-right.png + 16x16/edit-table-insert-row-above.png + 16x16/edit-table-insert-row-under.png + 16x16/edit-undo.png + 16x16/element-delete.png + 16x16/element-edit.png + 16x16/element-master.png + 16x16/element-new.png + 16x16/element-slave.png + 16x16/element.png + 16x16/endline-circle.png + 16x16/endline-diamond.png + 16x16/endline-none.png + 16x16/endline-simple.png + 16x16/endline-triangle.png + 16x16/export-csv.png + 16x16/flip.png + 16x16/folder-delete.png + 16x16/folder-edit.png + 16x16/folder-new.png + 16x16/folder-only-this.png + 16x16/folder-open.png + 16x16/folder-properties.png + 16x16/folder-show-all.png + 16x16/folder.png + 16x16/folio-delete.png + 16x16/folio-new.png + 16x16/folio-properties.png + 16x16/folio-ref-coming.png + 16x16/go-bottom.png + 16x16/go-company.png + 16x16/go-down-double.png + 16x16/go-down.png + 16x16/go-home.png + 16x16/go-top.png + 16x16/go-up-double.png + 16x16/go-up.png + 16x16/grid.png + 16x16/ground.png + 16x16/help-contents.png + 16x16/help-donate.png + 16x16/item-cancel.png + 16x16/item-copy.png + 16x16/item-move.png + 16x16/kdenlive-show-video.png + 16x16/label.png + 16x16/list-add.png + 16x16/list-remove.png + 16x16/masquer.png + 16x16/mirror.png + 16x16/move.png + 16x16/neutral.png + 16x16/north.png + 16x16/object-group.png + 16x16/object-rotate-right.png + 16x16/orientations.png + 16x16/phase.png + 16x16/preferences-desktop-user.png + 16x16/project-close.png + 16x16/project-delete.png + 16x16/project-new.png + 16x16/project-properties.png + 16x16/project.png + 16x16/qet.png + 16x16/qt.png + 16x16/run-dxf.png + 16x16/select.png + 16x16/south.png + 16x16/table-of-content.png + 16x16/terminal.png + 16x16/terminalstrip.png + 16x16/text-xml.png + 16x16/transform-rotate.png + 16x16/user-busy.png + 16x16/user-online.png + 16x16/view-fullscreen.png + 16x16/view-refresh.png + 16x16/view-restore.png + 16x16/west.png + 16x16/window-new.png + 16x16/zoom-draw.png + 16x16/zoom-fit-best.png + 16x16/zoom-in.png + 16x16/zoom-original.png + 16x16/zoom-out.png + 22x22/Actions-player-time-icon.png + 22x22/all_pages.png + 22x22/application-exit.png + 22x22/applications-development-translation.png + 22x22/arc.png + 22x22/arrow-left-double.png + 22x22/arrow-left.png + 22x22/arrow-right-double.png + 22x22/arrow-right.png + 22x22/autoconnect.png + 22x22/bring_forward.png + 22x22/conductor2.png + 22x22/conductor2.png + 22x22/configure-toolbars.png + 22x22/configure.png + 22x22/diagram.png + 22x22/diagram_add.png + 22x22/diagram_add.png + 22x22/diagram_bg.png + 22x22/diagram_del.png + 22x22/diagram_del.png + 22x22/dialog-cancel.png + 22x22/dialog-information.png + 22x22/dialog-information.png + 22x22/dialog-ok.png + 22x22/document-close.png + 22x22/document-export.png + 22x22/document-import.png + 22x22/document-new.png + 22x22/document-open-recent.png + 22x22/document-open.png + 22x22/document-print-frame.png + 22x22/document-print.png + 22x22/document-save-all.png + 22x22/document-save-as.png + 22x22/document-save.png + 22x22/edit-clear-locationbar-ltr.png + 22x22/edit-clear-locationbar-rtl.png + 22x22/edit-clear.png + 22x22/edit-copy.png + 22x22/edit-cut.png + 22x22/edit-delete.png + 22x22/edit-paste.png + 22x22/edit-redo.png + 22x22/edit-rename.png + 22x22/edit-select-all.png + 22x22/edit-table-cell-merge.png + 22x22/edit-table-cell-split.png + 22x22/edit-table-delete-column.png + 22x22/edit-table-delete-row.png + 22x22/edit-table-insert-column-left.png + 22x22/edit-table-insert-column-right.png + 22x22/edit-table-insert-row-above.png + 22x22/edit-table-insert-row-under.png + 22x22/edit-undo.png + 22x22/element-delete.png + 22x22/element-edit.png + 22x22/element-new.png + 22x22/ellipse.png + 22x22/export-csv.png + 22x22/folder-delete.png + 22x22/folder-edit.png + 22x22/folder-new.png + 22x22/folder-open.png + 22x22/format-text-subscript.png + 22x22/format-text-superscript.png + 22x22/go-company.png + 22x22/go-down.png + 22x22/go-home.png + 22x22/go-up.png + 22x22/grid.png + 22x22/guides.png + 22x22/hotspot.png + 22x22/insert-image.png + 22x22/label.png + 22x22/landscape.png + 22x22/line.png + 22x22/list-add.png + 22x22/list-remove.png + 22x22/lower.png + 22x22/move.png + 22x22/names.png + 22x22/object-locked.png + 22x22/object-rotate-right.png + 22x22/object-unlocked.png + 22x22/pdf-import.png + 22x22/polygon.png + 22x22/portrait.png + 22x22/preferences-desktop-user.png + 22x22/project-close.png + 22x22/project-delete.png + 22x22/project-new.png + 22x22/project.png + 22x22/raise.png + 22x22/rectangle.png + 22x22/restaurer.png + 22x22/select.png + 22x22/send_backward.png + 22x22/single_page.png + 22x22/start.png + 22x22/terminal.png + 22x22/terminalstrip.png + 22x22/text-xml.png + 22x22/text.png + 22x22/textfield.png + 22x22/titleblock-bottom.png + 22x22/titleblock-right.png + 22x22/transform-scale.png + 22x22/two_pages.png + 22x22/view-fit-window.png + 22x22/view-fullscreen.png + 22x22/view-refresh.png + 22x22/view-restore.png + 22x22/view_fit_width.png + 22x22/window-new.png + 22x22/zoom-draw.png + 22x22/zoom-fit-best.png + 22x22/zoom-in.png + 22x22/zoom-original.png + 22x22/zoom-out.png + 32x32/application-pdf.png + 32x32/format-text-bold.png + 32x32/format-text-color.png + 32x32/format-text-italic.png + 32x32/format-text-underline.png + 32x32/image-x-eps.png + 32x32/insert-link.png + 32x32/printer.png + 32x32/qt.png + 32x32/simplifyrichtext.png + 32x32/text-xml.png + 48x48/document-print-frame.png + 48x48/user-away-extended.png + 48x48/user-away.png + 48x48/view-pim-journal.png + 128x128/diagram.png + 128x128/document-export.png + 128x128/plasmagik.png + 128x128/printer.png + 128x128/project.png + 128x128/settings.png + breeze-icons/scalable/apps/hidef/edit-opacity.svg + breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg + breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg + breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg + breeze-icons/scalable/apps/hidef/transform-crop.svg + generated/ellipse-to-bezier.svg + generated/rect-to-bezier.svg + generated/rect-to-polyline.svg + + diff --git a/ico/themes/qet/index.theme b/ico/themes/qet/index.theme new file mode 100644 index 000000000..74c1b904b --- /dev/null +++ b/ico/themes/qet/index.theme @@ -0,0 +1,30 @@ +[Icon Theme] +Name=qet +Comment=QElectroTech icons +Directories=16x16,22x22,32x32,48x48,128x128,scalable + +[16x16] +Size=16 +Type=Fixed + +[22x22] +Size=22 +Type=Fixed + +[32x32] +Size=32 +Type=Fixed + +[48x48] +Size=48 +Type=Fixed + +[128x128] +Size=128 +Type=Fixed + +[scalable] +Size=22 +Type=Scalable +MinSize=8 +MaxSize=256 diff --git a/misc/make_icon_themes.py b/misc/make_icon_themes.py new file mode 100644 index 000000000..864798b1a --- /dev/null +++ b/misc/make_icon_themes.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +# Copyright 2006-2026 The QElectroTech Team +# This file is part of QElectroTech. +# +# QElectroTech 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 2 of the License, or +# (at your option) any later version. +# +# QElectroTech 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 QElectroTech. If not, see . +"""Build QET's icon theme "qet" from the PNG and SVG sources in ico/. + +Run from the repository root: + + python3 misc/make_icon_themes.py + +It writes: + + ico/themes/qet/index.theme the theme description + ico/icon-themes.qrc resource file listing the theme + +The theme does not copy any file. The .qrc aliases the existing +ico//.png files into the theme layout Qt's icon loader +expects (themes/qet//.png), so QIcon::fromTheme("name") +finds them. Idempotent: running it twice changes nothing. +""" + +import os +import re +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +ICO = ROOT / "ico" +THEMES = ICO / "themes" +QRC = ICO / "icon-themes.qrc" + +# Fixed-size folders that hold toolbar, menu and dialog icons. The 24x16 +# flags, the 22x22/color swatches and the application icons are not theme +# icons and stay on their resource paths. +SIZES = ["16x16", "22x22", "32x32", "48x48", "128x128"] + +# Table entries in sources/qeticons.cpp that pair a 16 pixel file with a +# 22 pixel file of another name. The theme needs one name per icon, so +# the 22 pixel file is exposed under the 16 pixel name as well. +ALIASES = { + "22x22/conductor2.png": "conductor-reset", + "22x22/diagram_add.png": "folio-new", + "22x22/diagram_del.png": "folio-delete", + "22x22/dialog-information.png": "folio-properties", +} + +# SVG icons referenced from sources/qeticons.cpp. +SVGS = [ + "breeze-icons/scalable/apps/hidef/edit-opacity.svg", + "breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg", + "breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg", + "breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg", + "breeze-icons/scalable/apps/hidef/transform-crop.svg", + "generated/ellipse-to-bezier.svg", + "generated/rect-to-bezier.svg", + "generated/rect-to-polyline.svg", +] + + +def write_if_changed(path, data): + """Write text only when the content differs, so git stays quiet.""" + if path.exists() and path.read_text(encoding="utf-8") == data: + return False + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(data, encoding="utf-8") + return True + + +def index_theme(name, comment, dirs, inherits=None): + lines = ["[Icon Theme]", f"Name={name}", f"Comment={comment}"] + if inherits: + lines.append(f"Inherits={inherits}") + lines.append("Directories=" + ",".join(dirs)) + lines.append("") + for d in dirs: + lines.append(f"[{d}]") + if d == "scalable": + lines += ["Size=22", "Type=Scalable", "MinSize=8", "MaxSize=256"] + else: + lines += [f"Size={d.split('x')[0]}", "Type=Fixed"] + lines.append("") + return "\n".join(lines) + + +def main(): + entries = [] # (alias, source) pairs, paths relative to ico/ + changed = 0 + + for size in SIZES: + for png in sorted((ICO / size).glob("*.png")): + rel = f"{size}/{png.name}" + names = [png.stem] + if rel in ALIASES: + names.append(ALIASES[rel]) + for name in names: + entries.append((f"themes/qet/{size}/{name}.png", rel)) + + for rel in SVGS: + name = re.sub(r"-symbolic(?=\.svg$)", "", Path(rel).name) + entries.append((f"themes/qet/scalable/{name}", rel)) + + dirs = SIZES + ["scalable"] + changed += write_if_changed(THEMES / "qet" / "index.theme", + index_theme("qet", "QElectroTech icons", dirs)) + + qrc = ["", "", + '', ' ', + " themes/qet/index.theme"] + for alias, source in entries: + qrc.append(f' {source}') + qrc += [" ", "", ""] + changed += write_if_changed(QRC, "\n".join(qrc)) + + print(f"{len(entries)} theme entries; {changed} files written") + + +if __name__ == "__main__": + os.chdir(ROOT) + main() diff --git a/sources/ElementsCollection/fileelementcollectionitem.cpp b/sources/ElementsCollection/fileelementcollectionitem.cpp index 15a6cdb83..2183507ab 100644 --- a/sources/ElementsCollection/fileelementcollectionitem.cpp +++ b/sources/ElementsCollection/fileelementcollectionitem.cpp @@ -456,13 +456,13 @@ void FileElementCollectionItem::setUpIcon() if (macrosPath.endsWith("/")) macrosPath.remove(macrosPath.length() - 1, 1); if (m_path == QETApp::commonElementsDirN()) - setIcon(QIcon(":/ico/16x16/qet.png")); + setIcon(QIcon::fromTheme("qet")); else if (m_path == QETApp::companyElementsDirN()) - setIcon(QIcon(":/ico/16x16/go-company.png")); + setIcon(QIcon::fromTheme("go-company")); else if (m_path == macrosPath) - setIcon(QIcon(":/ico/16x16/go-home.png")); + setIcon(QIcon::fromTheme("go-home")); else - setIcon(QIcon(":/ico/16x16/go-home.png")); + setIcon(QIcon::fromTheme("go-home")); } else { diff --git a/sources/NameList/ui/namelistwidget.ui b/sources/NameList/ui/namelistwidget.ui index f021a77a3..a38dd046d 100644 --- a/sources/NameList/ui/namelistwidget.ui +++ b/sources/NameList/ui/namelistwidget.ui @@ -36,7 +36,7 @@ Ajouter une ligne - + :/ico/16x16/list-add.png:/ico/16x16/list-add.png @@ -48,7 +48,7 @@ Copier dans le presse papier - + :/ico/16x16/edit-paste.png:/ico/16x16/edit-paste.png diff --git a/sources/SearchAndReplace/ui/replaceconductordialog.ui b/sources/SearchAndReplace/ui/replaceconductordialog.ui index 4be6a94d3..f5cefc78c 100644 --- a/sources/SearchAndReplace/ui/replaceconductordialog.ui +++ b/sources/SearchAndReplace/ui/replaceconductordialog.ui @@ -370,7 +370,7 @@ phase - + :/ico/16x16/phase.png:/ico/16x16/phase.png @@ -397,7 +397,7 @@ neutre - + :/ico/16x16/neutral.png:/ico/16x16/neutral.png @@ -433,7 +433,7 @@ terre - + :/ico/16x16/ground.png:/ico/16x16/ground.png diff --git a/sources/SearchAndReplace/ui/replacefoliowidget.ui b/sources/SearchAndReplace/ui/replacefoliowidget.ui index b5ee7e0df..b438180b9 100644 --- a/sources/SearchAndReplace/ui/replacefoliowidget.ui +++ b/sources/SearchAndReplace/ui/replacefoliowidget.ui @@ -180,7 +180,7 @@ - + :/ico/22x22/start.png:/ico/22x22/start.png diff --git a/sources/SearchAndReplace/ui/searchandreplacewidget.ui b/sources/SearchAndReplace/ui/searchandreplacewidget.ui index fcc280960..597e1f439 100644 --- a/sources/SearchAndReplace/ui/searchandreplacewidget.ui +++ b/sources/SearchAndReplace/ui/searchandreplacewidget.ui @@ -106,7 +106,7 @@ - + :/ico/16x16/go-bottom.png:/ico/16x16/go-bottom.png @@ -123,7 +123,7 @@ - + :/ico/16x16/go-top.png:/ico/16x16/go-top.png @@ -140,7 +140,7 @@ - + :/ico/16x16/view-refresh.png:/ico/16x16/view-refresh.png @@ -157,7 +157,7 @@ - + :/ico/16x16/configure-toolbars.png:/ico/16x16/configure-toolbars.png diff --git a/sources/TerminalStrip/ui/freeterminaleditor.ui b/sources/TerminalStrip/ui/freeterminaleditor.ui index f464b3e1d..4f318c60e 100644 --- a/sources/TerminalStrip/ui/freeterminaleditor.ui +++ b/sources/TerminalStrip/ui/freeterminaleditor.ui @@ -84,7 +84,7 @@ - + :/ico/22x22/dialog-ok.png:/ico/22x22/dialog-ok.png diff --git a/sources/TerminalStrip/ui/terminalstripeditor.ui b/sources/TerminalStrip/ui/terminalstripeditor.ui index 29f6854e3..ef65cdf9c 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.ui +++ b/sources/TerminalStrip/ui/terminalstripeditor.ui @@ -63,7 +63,7 @@ - + :/ico/16x16/dialog-ok.png:/ico/16x16/dialog-ok.png diff --git a/sources/TerminalStrip/ui/terminalstripeditorwindow.ui b/sources/TerminalStrip/ui/terminalstripeditorwindow.ui index f390f33cf..53b413b3b 100644 --- a/sources/TerminalStrip/ui/terminalstripeditorwindow.ui +++ b/sources/TerminalStrip/ui/terminalstripeditorwindow.ui @@ -54,7 +54,7 @@ - + :/ico/16x16/list-add.png:/ico/16x16/list-add.png @@ -66,7 +66,7 @@ - + :/ico/16x16/list-remove.png:/ico/16x16/list-remove.png @@ -78,7 +78,7 @@ - + :/ico/16x16/view-refresh.png:/ico/16x16/view-refresh.png diff --git a/sources/autoNum/ui/autonumberingdockwidget.ui b/sources/autoNum/ui/autonumberingdockwidget.ui index 4fcd61901..b0bcc6e61 100644 --- a/sources/autoNum/ui/autonumberingdockwidget.ui +++ b/sources/autoNum/ui/autonumberingdockwidget.ui @@ -73,7 +73,7 @@ - + :/ico/16x16/view-refresh.png:/ico/16x16/view-refresh.png @@ -161,7 +161,7 @@ - + :/ico/16x16/view-refresh.png:/ico/16x16/view-refresh.png @@ -238,7 +238,7 @@ - + :/ico/16x16/view-refresh.png:/ico/16x16/view-refresh.png @@ -319,7 +319,7 @@ Configurer - + :/ico/16x16/configure.png:/ico/16x16/configure.png diff --git a/sources/autoNum/ui/selectautonumw.ui b/sources/autoNum/ui/selectautonumw.ui index 3c4d953af..8da8d2e70 100644 --- a/sources/autoNum/ui/selectautonumw.ui +++ b/sources/autoNum/ui/selectautonumw.ui @@ -63,7 +63,7 @@ - + :/ico/16x16/edit-delete.png:/ico/16x16/edit-delete.png @@ -136,7 +136,7 @@ - + :/ico/22x22/list-remove.png:/ico/22x22/list-remove.png @@ -153,7 +153,7 @@ - + :/ico/22x22/list-add.png:/ico/22x22/list-add.png @@ -170,7 +170,7 @@ - + :/ico/16x16/arrow-left.png:/ico/16x16/arrow-left.png @@ -184,7 +184,7 @@ - + :/ico/16x16/arrow-right.png:/ico/16x16/arrow-right.png diff --git a/sources/dataBase/ui/elementquerywidget.ui b/sources/dataBase/ui/elementquerywidget.ui index 8de65df47..8300b2387 100644 --- a/sources/dataBase/ui/elementquerywidget.ui +++ b/sources/dataBase/ui/elementquerywidget.ui @@ -88,7 +88,7 @@ - + :/ico/16x16/go-up.png:/ico/16x16/go-up.png @@ -105,7 +105,7 @@ - + :/ico/16x16/list-add.png:/ico/16x16/list-add.png @@ -119,7 +119,7 @@ - + :/ico/16x16/list-remove.png:/ico/16x16/list-remove.png @@ -133,7 +133,7 @@ - + :/ico/16x16/go-down.png:/ico/16x16/go-down.png @@ -353,7 +353,7 @@ - + :/ico/16x16/folder-open.png:/ico/16x16/folder-open.png @@ -380,7 +380,7 @@ - + :/ico/16x16/document-save.png:/ico/16x16/document-save.png diff --git a/sources/dataBase/ui/summaryquerywidget.ui b/sources/dataBase/ui/summaryquerywidget.ui index d6eb50e10..de98cd343 100644 --- a/sources/dataBase/ui/summaryquerywidget.ui +++ b/sources/dataBase/ui/summaryquerywidget.ui @@ -76,7 +76,7 @@ - + :/ico/16x16/go-up.png:/ico/16x16/go-up.png @@ -87,7 +87,7 @@ - + :/ico/16x16/list-add.png:/ico/16x16/list-add.png @@ -98,7 +98,7 @@ - + :/ico/16x16/list-remove.png:/ico/16x16/list-remove.png @@ -109,7 +109,7 @@ - + :/ico/16x16/go-down.png:/ico/16x16/go-down.png diff --git a/sources/editor/ui/polygoneditor.ui b/sources/editor/ui/polygoneditor.ui index 98612f832..c34d26888 100644 --- a/sources/editor/ui/polygoneditor.ui +++ b/sources/editor/ui/polygoneditor.ui @@ -48,7 +48,7 @@ - + :/ico/16x16/list-add.png:/ico/16x16/list-add.png @@ -57,7 +57,7 @@ - + :/ico/16x16/list-remove.png:/ico/16x16/list-remove.png diff --git a/sources/editor/ui/qetelementeditor.ui b/sources/editor/ui/qetelementeditor.ui index 65a55aa8b..0ec31adc3 100644 --- a/sources/editor/ui/qetelementeditor.ui +++ b/sources/editor/ui/qetelementeditor.ui @@ -14,7 +14,7 @@ QElectroTech - Éditeur d'élément - + :/ico/16x16/qet.png:/ico/16x16/qet.png @@ -55,7 +55,7 @@ Coller depuis... - + :/ico/16x16/edit-paste.png:/ico/16x16/edit-paste.png @@ -202,7 +202,7 @@ - + :/ico/16x16/edit-select-all.png:/ico/16x16/edit-select-all.png @@ -211,7 +211,7 @@ - + :/ico/22x22/document-new.png:/ico/22x22/document-new.png @@ -220,7 +220,7 @@ - + :/ico/22x22/folder-open.png:/ico/22x22/folder-open.png @@ -229,7 +229,7 @@ - + :/ico/22x22/folder-open.png:/ico/22x22/folder-open.png @@ -238,7 +238,7 @@ - + :/ico/22x22/document-save.png:/ico/22x22/document-save.png @@ -247,7 +247,7 @@ - + :/ico/22x22/document-save-as.png:/ico/22x22/document-save-as.png @@ -256,7 +256,7 @@ - + :/ico/22x22/document-save.png:/ico/22x22/document-save.png @@ -265,7 +265,7 @@ - + :/ico/22x22/document-export.png:/ico/22x22/document-export.png @@ -274,7 +274,7 @@ - + :/ico/22x22/view-refresh.png:/ico/22x22/view-refresh.png @@ -283,7 +283,7 @@ - + :/ico/16x16/application-exit.png:/ico/16x16/application-exit.png @@ -295,7 +295,7 @@ - + :/ico/16x16/edit-select-none.png:/ico/16x16/edit-select-none.png @@ -304,7 +304,7 @@ - + :/ico/16x16/edit-cut.png:/ico/16x16/edit-cut.png @@ -313,7 +313,7 @@ - + :/ico/16x16/edit-copy.png:/ico/16x16/edit-copy.png @@ -322,7 +322,7 @@ - + :/ico/16x16/edit-paste.png:/ico/16x16/edit-paste.png @@ -331,7 +331,7 @@ - + :/ico/16x16/edit-paste.png:/ico/16x16/edit-paste.png @@ -340,7 +340,7 @@ - + :/ico/16x16/text-xml.png:/ico/16x16/text-xml.png @@ -349,7 +349,7 @@ - + :/ico/16x16/element.png:/ico/16x16/element.png @@ -358,7 +358,7 @@ - + :/ico/16x16/edit-select-invert.png:/ico/16x16/edit-select-invert.png @@ -367,7 +367,7 @@ - + :/ico/22x22/edit-delete.png:/ico/22x22/edit-delete.png @@ -376,7 +376,7 @@ - + :/ico/22x22/names.png:/ico/22x22/names.png @@ -385,7 +385,7 @@ - + :/ico/16x16/preferences-desktop-user.png:/ico/16x16/preferences-desktop-user.png @@ -394,7 +394,7 @@ - + :/ico/22x22/element-edit.png:/ico/22x22/element-edit.png @@ -403,7 +403,7 @@ - + :/ico/22x22/zoom-in.png:/ico/22x22/zoom-in.png @@ -412,7 +412,7 @@ - + :/ico/22x22/zoom-out.png:/ico/22x22/zoom-out.png @@ -421,7 +421,7 @@ - + :/ico/22x22/zoom-fit-best.png:/ico/22x22/zoom-fit-best.png @@ -430,7 +430,7 @@ - + :/ico/22x22/zoom-original.png:/ico/22x22/zoom-original.png @@ -439,7 +439,7 @@ - + :/ico/16x16/qet.png:/ico/16x16/qet.png @@ -451,7 +451,7 @@ - + :/ico/16x16/help-contents.png:/ico/16x16/help-contents.png @@ -463,7 +463,7 @@ - + :/ico/16x16/kdenlive-show-video.png:/ico/16x16/kdenlive-show-video.png @@ -475,7 +475,7 @@ - + :/ico/16x16/help-donate.png:/ico/16x16/help-donate.png @@ -487,7 +487,7 @@ - + :/ico/16x16/qt.png:/ico/16x16/qt.png @@ -499,7 +499,7 @@ - + :/ico/16x16/orientations.png:/ico/16x16/orientations.png @@ -508,7 +508,7 @@ - + :/ico/16x16/orientations.png:/ico/16x16/orientations.png @@ -517,7 +517,7 @@ - + :/ico/16x16/mirror.png:/ico/16x16/mirror.png @@ -526,7 +526,7 @@ - + :/ico/16x16/flip.png:/ico/16x16/flip.png @@ -535,7 +535,7 @@ - + :/ico/16x16/run-dxf.png:/ico/16x16/run-dxf.png @@ -544,7 +544,7 @@ - + :/ico/22x22/folder-open.png:/ico/22x22/folder-open.png diff --git a/sources/print/projectprintwindow.ui b/sources/print/projectprintwindow.ui index a1db8e411..c13399fb0 100644 --- a/sources/print/projectprintwindow.ui +++ b/sources/print/projectprintwindow.ui @@ -134,7 +134,7 @@ - + :/ico/16x16/dialog-ok.png:/ico/16x16/dialog-ok.png @@ -305,7 +305,7 @@ - + :/ico/22x22/view_fit_width.png:/ico/22x22/view_fit_width.png @@ -314,7 +314,7 @@ - + :/ico/22x22/view-fit-window.png:/ico/22x22/view-fit-window.png @@ -323,7 +323,7 @@ - + :/ico/16x16/zoom-out.png:/ico/16x16/zoom-out.png @@ -332,7 +332,7 @@ - + :/ico/16x16/zoom-in.png:/ico/16x16/zoom-in.png @@ -341,7 +341,7 @@ - + :/ico/22x22/landscape.png:/ico/22x22/landscape.png @@ -350,7 +350,7 @@ - + :/ico/22x22/portrait.png:/ico/22x22/portrait.png @@ -359,7 +359,7 @@ - + :/ico/16x16/arrow-left-double.png:/ico/16x16/arrow-left-double.png @@ -368,7 +368,7 @@ - + :/ico/16x16/arrow-left.png:/ico/16x16/arrow-left.png @@ -377,7 +377,7 @@ - + :/ico/16x16/arrow-right.png:/ico/16x16/arrow-right.png @@ -386,7 +386,7 @@ - + :/ico/22x22/arrow-right-double.png:/ico/22x22/arrow-right-double.png @@ -395,7 +395,7 @@ - + :/ico/22x22/single_page.png:/ico/22x22/single_page.png @@ -404,7 +404,7 @@ - + :/ico/22x22/two_pages.png:/ico/22x22/two_pages.png @@ -413,7 +413,7 @@ - + :/ico/22x22/all_pages.png:/ico/22x22/all_pages.png @@ -422,7 +422,7 @@ - + :/ico/48x48/document-print-frame.png:/ico/48x48/document-print-frame.png diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 4f334c676..76c1203fc 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -120,6 +120,7 @@ QETApp::QETApp() : } initConfiguration(); initLanguage(); + initIconTheme(); QET::Icons::initIcons(); initFonts(); initStyle(); @@ -2330,6 +2331,22 @@ void QETApp::initFonts() } } +/** + @brief QETApp::initIconTheme + Register QET's icon theme "qet" (see misc/make_icon_themes.py and + ico/icon-themes.qrc) and make it the current theme, so + QIcon::fromTheme("name") resolves to QET's own icons on every + platform. Must run before QET::Icons::initIcons(), which looks icons + up by name. +*/ +void QETApp::initIconTheme() +{ + QStringList paths = QIcon::themeSearchPaths(); + paths.prepend(QStringLiteral(":/ico/themes")); + QIcon::setThemeSearchPaths(paths); + QIcon::setThemeName(QStringLiteral("qet")); +} + /** @brief QETApp::initStyle Setup the gui style diff --git a/sources/qetapp.h b/sources/qetapp.h index 7d0e5e7ee..8242abf71 100644 --- a/sources/qetapp.h +++ b/sources/qetapp.h @@ -286,6 +286,7 @@ class QETApp : public QObject void setSplashScreenStep(const QString & = QString()); void initLanguage(); void initFonts(); + void initIconTheme(); void initStyle(); void initConfiguration(); void initSystemTray(); diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 247d889ad..d1a4be91b 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -430,7 +430,7 @@ void QETDiagramEditor::setUpActions() }); // Draw or not the custom guides - m_draw_guides = new QAction ( QIcon(":/ico/22x22/guides.png"), tr("Afficher les guides"), this); + m_draw_guides = new QAction ( QIcon::fromTheme("guides"), tr("Afficher les guides"), this); m_draw_guides->setStatusTip(tr("Affiche ou masque les guides")); m_draw_guides->setCheckable(true); m_draw_guides->setChecked(settings.value("diagrameditor/guides_display_startup", false).toBool()); diff --git a/sources/qetgraphicsitem/ViewItem/ui/graphicstablepropertieseditor.ui b/sources/qetgraphicsitem/ViewItem/ui/graphicstablepropertieseditor.ui index 439512405..28edea330 100644 --- a/sources/qetgraphicsitem/ViewItem/ui/graphicstablepropertieseditor.ui +++ b/sources/qetgraphicsitem/ViewItem/ui/graphicstablepropertieseditor.ui @@ -62,7 +62,7 @@ - + :/ico/16x16/arrow-right.png:/ico/16x16/arrow-right.png @@ -104,7 +104,7 @@ - + :/ico/22x22/zoom-fit-best.png:/ico/22x22/zoom-fit-best.png @@ -179,7 +179,7 @@ - + :/ico/16x16/arrow-left.png:/ico/16x16/arrow-left.png @@ -203,7 +203,7 @@ - + :/ico/22x22/all_pages.png:/ico/22x22/all_pages.png diff --git a/sources/qetgraphicsitem/ViewItem/ui/projectdbmodelpropertieswidget.ui b/sources/qetgraphicsitem/ViewItem/ui/projectdbmodelpropertieswidget.ui index 3ce470886..649e756c7 100644 --- a/sources/qetgraphicsitem/ViewItem/ui/projectdbmodelpropertieswidget.ui +++ b/sources/qetgraphicsitem/ViewItem/ui/projectdbmodelpropertieswidget.ui @@ -20,7 +20,7 @@ Requête - + :/ico/16x16/edit-rename.png:/ico/16x16/edit-rename.png @@ -31,7 +31,7 @@ Recharger - + :/ico/16x16/view-refresh.png:/ico/16x16/view-refresh.png diff --git a/sources/qeticons.cpp b/sources/qeticons.cpp index 309ef423c..39030275c 100644 --- a/sources/qeticons.cpp +++ b/sources/qeticons.cpp @@ -392,471 +392,401 @@ void QET::Icons::initIcons() bool rtl = QApplication::isRightToLeft(); QTransform reverse = QTransform().scale(-1, 1); - Add .addFile(":/ico/16x16/list-add.png"); - Add .addFile(":/ico/22x22/list-add.png"); - AddFolio .addFile(":/ico/16x16/folio-new.png"); - Allowed .addFile(":/ico/16x16/user-online.png"); - ApplicationExit .addFile(":/ico/16x16/application-exit.png"); - ApplicationExit .addFile(":/ico/22x22/application-exit.png"); - ArrowLeft .addFile(":/ico/16x16/arrow-left.png"); - ArrowLeft .addFile(":/ico/22x22/arrow-left.png"); - ArrowLeftDouble .addFile(":/ico/16x16/arrow-left-double.png"); - ArrowLeftDouble .addFile(":/ico/22x22/arrow-left-double.png"); - ArrowRight .addFile(":/ico/16x16/arrow-right.png"); - ArrowRight .addFile(":/ico/22x22/arrow-right.png"); - ArrowRightDouble .addFile(":/ico/16x16/arrow-right-double.png"); - ArrowRightDouble .addFile(":/ico/22x22/arrow-right-double.png"); - Autoconnect .addFile(":/ico/22x22/autoconnect.png"); - BringForward .addFile(":/ico/22x22/bring_forward.png"); - Cancel .addFile(":/ico/16x16/item-cancel.png"); - Company .addFile(":/ico/16x16/go-company.png"); - Company .addFile(":/ico/22x22/go-company.png"); - Conductor .addFile(":/ico/16x16/conductor.png"); - ConductorEdit .addFile(":/ico/16x16/conductor-edit.png"); - ConductorSettings .addFile(":/ico/16x16/conductor-reset.png"); - ConductorSettings .addFile(":/ico/22x22/conductor2.png"); - Configure .addFile(":/ico/16x16/configure.png"); - Configure .addFile(":/ico/22x22/configure.png"); - ConfigureToolbars .addFile(":/ico/16x16/configure-toolbars.png"); - ConfigureToolbars .addFile(":/ico/22x22/configure-toolbars.png"); - IC_CopyFile .addFile(":/ico/16x16/item-copy.png"); - DiagramAdd .addFile(":/ico/16x16/folio-new.png"); - DiagramAdd .addFile(":/ico/22x22/diagram_add.png"); - Diagram .addFile(":/ico/16x16/diagram.png"); - Diagram .addFile(":/ico/diagram.png"); - DiagramBg .addFile(":/ico/22x22/diagram_bg.png"); - DiagramDelete .addFile(":/ico/16x16/folio-delete.png"); - DiagramDelete .addFile(":/ico/22x22/diagram_del.png"); - DialogCancel .addFile(":/ico/16x16/dialog-cancel.png"); - DialogCancel .addFile(":/ico/22x22/dialog-cancel.png"); - DialogInformation .addFile(":/ico/16x16/folio-properties.png"); - DialogInformation .addFile(":/ico/22x22/dialog-information.png"); - DialogOk .addFile(":/ico/16x16/dialog-ok.png"); - DialogOk .addFile(":/ico/22x22/dialog-ok.png"); - DocumentClose .addFile(":/ico/16x16/document-close.png"); - DocumentClose .addFile(":/ico/22x22/document-close.png"); - DocumentExport .addFile(":/ico/16x16/document-export.png"); - DocumentExport .addFile(":/ico/22x22/document-export.png"); - DocumentSpreadsheet .addFile(":/ico/16x16/export-csv.png"); - DocumentExport .addFile(":/ico/128x128/document-export.png"); - DocumentImport .addFile(":/ico/16x16/document-import.png"); - DocumentImport .addFile(":/ico/22x22/document-import.png"); - DocumentNew .addFile(":/ico/16x16/document-new.png"); - DocumentNew .addFile(":/ico/22x22/document-new.png"); - DocumentOpen .addFile(":/ico/16x16/document-open.png"); - DocumentOpen .addFile(":/ico/22x22/document-open.png"); - DocumentOpenRecent .addFile(":/ico/16x16/document-open-recent.png"); - DocumentOpenRecent .addFile(":/ico/22x22/document-open-recent.png"); - DocumentPrint .addFile(":/ico/16x16/document-print.png"); - DocumentPrint .addFile(":/ico/22x22/document-print.png"); - DocumentPrintFrame .addFile(":/ico/16x16/document-print-frame.png"); - DocumentPrintFrame .addFile(":/ico/48x48/document-print-frame.png"); - DocumentSave .addFile(":/ico/16x16/document-save.png"); - DocumentSave .addFile(":/ico/22x22/document-save.png"); - DocumentSaveAll .addFile(":/ico/16x16/document-save-all.png"); - DocumentSaveAll .addFile(":/ico/22x22/document-save-all.png"); - DocumentSaveAs .addFile(":/ico/16x16/document-save-as.png"); - DocumentSaveAs .addFile(":/ico/22x22/document-save-as.png"); - East .addFile(":/ico/16x16/east.png"); - EditClear .addFile(":/ico/16x16/edit-clear.png"); - EditClear .addFile(":/ico/22x22/edit-clear.png"); - EditText .addFile(":/ico/22x22/names.png"); - adding_image .addFile(":/ico/22x22/insert-image.png"); - adding_pdf .addFile(":/ico/22x22/pdf-import.png"); + Add = QIcon::fromTheme("list-add"); + AddFolio = QIcon::fromTheme("folio-new"); + Allowed = QIcon::fromTheme("user-online"); + ApplicationExit = QIcon::fromTheme("application-exit"); + ArrowLeft = QIcon::fromTheme("arrow-left"); + ArrowLeftDouble = QIcon::fromTheme("arrow-left-double"); + ArrowRight = QIcon::fromTheme("arrow-right"); + ArrowRightDouble = QIcon::fromTheme("arrow-right-double"); + Autoconnect = QIcon::fromTheme("autoconnect"); + BringForward = QIcon::fromTheme("bring_forward"); + Cancel = QIcon::fromTheme("item-cancel"); + Company = QIcon::fromTheme("go-company"); + Conductor = QIcon::fromTheme("conductor"); + ConductorEdit = QIcon::fromTheme("conductor-edit"); + ConductorSettings = QIcon::fromTheme("conductor-reset"); + Configure = QIcon::fromTheme("configure"); + ConfigureToolbars = QIcon::fromTheme("configure-toolbars"); + IC_CopyFile = QIcon::fromTheme("item-copy"); + DiagramAdd = QIcon::fromTheme("folio-new"); + Diagram.addFile(":/ico/16x16/diagram.png"); + Diagram.addFile(":/ico/diagram.png"); + DiagramBg = QIcon::fromTheme("diagram_bg"); + DiagramDelete = QIcon::fromTheme("folio-delete"); + DialogCancel = QIcon::fromTheme("dialog-cancel"); + DialogInformation = QIcon::fromTheme("folio-properties"); + DialogOk = QIcon::fromTheme("dialog-ok"); + DocumentClose = QIcon::fromTheme("document-close"); + DocumentExport = QIcon::fromTheme("document-export"); + DocumentSpreadsheet = QIcon::fromTheme("export-csv"); + DocumentExport = QIcon::fromTheme("document-export"); + DocumentImport = QIcon::fromTheme("document-import"); + DocumentNew = QIcon::fromTheme("document-new"); + DocumentOpen = QIcon::fromTheme("document-open"); + DocumentOpenRecent = QIcon::fromTheme("document-open-recent"); + DocumentPrint = QIcon::fromTheme("document-print"); + DocumentPrintFrame = QIcon::fromTheme("document-print-frame"); + DocumentSave = QIcon::fromTheme("document-save"); + DocumentSaveAll = QIcon::fromTheme("document-save-all"); + DocumentSaveAs = QIcon::fromTheme("document-save-as"); + East = QIcon::fromTheme("east"); + EditClear = QIcon::fromTheme("edit-clear"); + EditText = QIcon::fromTheme("names"); + adding_image = QIcon::fromTheme("insert-image"); + adding_pdf = QIcon::fromTheme("pdf-import"); if (rtl) { - EditClearLocationBar.addPixmap(QPixmap(":/ico/16x16/edit-clear-locationbar-ltr.png").transformed(reverse)); - EditClearLocationBar.addPixmap(QPixmap(":/ico/22x22/edit-clear-locationbar-ltr.png").transformed(reverse)); + EditClearLocationBar.addPixmap(QIcon::fromTheme("edit-clear-locationbar-ltr").pixmap(16).transformed(reverse)); + EditClearLocationBar.addPixmap(QIcon::fromTheme("edit-clear-locationbar-ltr").pixmap(22).transformed(reverse)); } else { - EditClearLocationBar.addFile(":/ico/16x16/edit-clear-locationbar-ltr.png"); - EditClearLocationBar.addFile(":/ico/22x22/edit-clear-locationbar-ltr.png"); + EditClearLocationBar= QIcon::fromTheme("edit-clear-locationbar-ltr"); } - EditCopy .addFile(":/ico/16x16/edit-copy.png"); - EditCopy .addFile(":/ico/22x22/edit-copy.png"); - EditCut .addFile(":/ico/16x16/edit-cut.png"); - EditCut .addFile(":/ico/22x22/edit-cut.png"); - EditDelete .addFile(":/ico/16x16/edit-delete.png"); - EditDelete .addFile(":/ico/22x22/edit-delete.png"); - EditOpacity .addFile(":/ico/breeze-icons/scalable/apps/hidef/edit-opacity.svg"); - EditPaste .addFile(":/ico/22x22/edit-paste.png"); - EditPaste .addFile(":/ico/16x16/edit-paste.png"); + EditCopy = QIcon::fromTheme("edit-copy"); + EditCut = QIcon::fromTheme("edit-cut"); + EditDelete = QIcon::fromTheme("edit-delete"); + EditOpacity = QIcon::fromTheme("edit-opacity"); + EditPaste = QIcon::fromTheme("edit-paste"); if (rtl) { - EditRedo.addPixmap(QPixmap(":/ico/16x16/edit-redo.png").transformed(reverse)); - EditRedo.addPixmap(QPixmap(":/ico/22x22/edit-redo.png").transformed(reverse)); + EditRedo.addPixmap(QIcon::fromTheme("edit-redo").pixmap(16).transformed(reverse)); + EditRedo.addPixmap(QIcon::fromTheme("edit-redo").pixmap(22).transformed(reverse)); } else { - EditRedo .addFile(":/ico/16x16/edit-redo.png"); - EditRedo .addFile(":/ico/22x22/edit-redo.png"); + EditRedo = QIcon::fromTheme("edit-redo"); } - EditRename .addFile(":/ico/16x16/edit-rename.png"); - EditRename .addFile(":/ico/22x22/edit-rename.png"); - EditSelectAll .addFile(":/ico/16x16/edit-select-all.png"); - EditSelectAll .addFile(":/ico/22x22/edit-select-all.png"); - EditSelectInvert .addFile(":/ico/16x16/edit-select-invert.png"); - EditSelectNone .addFile(":/ico/16x16/edit-select-none.png"); - EditTableCellMerge .addFile(":/ico/16x16/edit-table-cell-merge.png"); - EditTableCellMerge .addFile(":/ico/22x22/edit-table-cell-merge.png"); - EditTableCellSplit .addFile(":/ico/16x16/edit-table-cell-split.png"); - EditTableCellSplit .addFile(":/ico/22x22/edit-table-cell-split.png"); - EditTableDeleteColumn .addFile(":/ico/16x16/edit-table-delete-column.png"); - EditTableDeleteColumn .addFile(":/ico/22x22/edit-table-delete-column.png"); - EditTableDeleteRow .addFile(":/ico/16x16/edit-table-delete-row.png"); - EditTableDeleteRow .addFile(":/ico/22x22/edit-table-delete-row.png"); - EditTableInsertColumnLeft .addFile(":/ico/16x16/edit-table-insert-column-left.png"); - EditTableInsertColumnLeft .addFile(":/ico/22x22/edit-table-insert-column-left.png"); - EditTableInsertColumnRight.addFile(":/ico/16x16/edit-table-insert-column-right.png"); - EditTableInsertColumnRight.addFile(":/ico/22x22/edit-table-insert-column-right.png"); - EditTableInsertRowAbove .addFile(":/ico/16x16/edit-table-insert-row-above.png"); - EditTableInsertRowAbove .addFile(":/ico/22x22/edit-table-insert-row-above.png"); - EditTableInsertRowUnder .addFile(":/ico/16x16/edit-table-insert-row-under.png"); - EditTableInsertRowUnder .addFile(":/ico/22x22/edit-table-insert-row-under.png"); + EditRename = QIcon::fromTheme("edit-rename"); + EditSelectAll = QIcon::fromTheme("edit-select-all"); + EditSelectInvert = QIcon::fromTheme("edit-select-invert"); + EditSelectNone = QIcon::fromTheme("edit-select-none"); + EditTableCellMerge = QIcon::fromTheme("edit-table-cell-merge"); + EditTableCellSplit = QIcon::fromTheme("edit-table-cell-split"); + EditTableDeleteColumn= QIcon::fromTheme("edit-table-delete-column"); + EditTableDeleteRow = QIcon::fromTheme("edit-table-delete-row"); + EditTableInsertColumnLeft= QIcon::fromTheme("edit-table-insert-column-left"); + EditTableInsertColumnRight= QIcon::fromTheme("edit-table-insert-column-right"); + EditTableInsertRowAbove= QIcon::fromTheme("edit-table-insert-row-above"); + EditTableInsertRowUnder= QIcon::fromTheme("edit-table-insert-row-under"); if (rtl) { - EditUndo.addPixmap(QPixmap(":/ico/16x16/edit-undo.png").transformed(reverse)); - EditUndo.addPixmap(QPixmap(":/ico/22x22/edit-undo.png").transformed(reverse)); + EditUndo.addPixmap(QIcon::fromTheme("edit-undo").pixmap(16).transformed(reverse)); + EditUndo.addPixmap(QIcon::fromTheme("edit-undo").pixmap(22).transformed(reverse)); } else { - EditUndo .addFile(":/ico/16x16/edit-undo.png"); - EditUndo .addFile(":/ico/22x22/edit-undo.png"); + EditUndo = QIcon::fromTheme("edit-undo"); } - Element .addFile(":/ico/breeze-icons/16x16/mimetypes/application-x-qet-element.png"); - Element .addFile(":/ico/breeze-icons/22x22/mimetypes/application-x-qet-element.png"); - Element .addFile(":/ico/breeze-icons/32x32/mimetypes/application-x-qet-element.png"); - ElementDelete .addFile(":/ico/16x16/element-delete.png"); - ElementDelete .addFile(":/ico/22x22/element-delete.png"); - ElementEdit .addFile(":/ico/16x16/element-edit.png"); - ElementEdit .addFile(":/ico/22x22/element-edit.png"); - ElementNew .addFile(":/ico/16x16/element-new.png"); - ElementNew .addFile(":/ico/22x22/element-new.png"); - ElementSmall .addFile(":/ico/16x16/element.png"); - EllipseToBezier .addFile(":/ico/generated/ellipse-to-bezier.svg"); - EndLineCircle .addFile(":/ico/16x16/endline-circle.png"); - EndLineDiamond .addFile(":/ico/16x16/endline-diamond.png"); - EndLineNone .addFile(":/ico/16x16/endline-none.png"); - EndLineSimple .addFile(":/ico/16x16/endline-simple.png"); - EndLineTriangle .addFile(":/ico/16x16/endline-triangle.png"); - EPS .addFile(":/ico/32x32/image-x-eps.png"); - Flip .addFile(":/ico/16x16/flip.png"); - Folder .addFile(":/ico/16x16/folder.png"); - FolderDelete .addFile(":/ico/16x16/folder-delete.png"); - FolderDelete .addFile(":/ico/22x22/folder-delete.png"); - FolderEdit .addFile(":/ico/16x16/folder-edit.png"); - FolderEdit .addFile(":/ico/22x22/folder-edit.png"); - FolderNew .addFile(":/ico/16x16/folder-new.png"); - FolderNew .addFile(":/ico/22x22/folder-new.png"); - FolderOnlyThis .addFile(":/ico/16x16/folder-only-this.png"); - FolderOpen .addFile(":/ico/16x16/folder-open.png"); - FolderOpen .addFile(":/ico/22x22/folder-open.png"); - FolderProperties .addFile(":/ico/16x16/folder-properties.png"); - FolderShowAll .addFile(":/ico/16x16/folder-show-all.png"); - Forbidden .addFile(":/ico/16x16/user-busy.png"); - FullScreenEnter .addFile(":/ico/16x16/view-fullscreen.png"); - FullScreenEnter .addFile(":/ico/22x22/view-fullscreen.png"); - FullScreenExit .addFile(":/ico/16x16/view-restore.png"); - FullScreenExit .addFile(":/ico/22x22/view-restore.png"); - GoBottom .addFile(":/ico/16x16/go-bottom.png"); - GoDown .addFile(":/ico/16x16/go-down.png"); - GoDown .addFile(":/ico/22x22/go-down.png"); - GoDownDouble .addFile(":/ico/16x16/go-down-double.png"); - GoTop .addFile(":/ico/16x16/go-top.png"); - GoUp .addFile(":/ico/16x16/go-up.png"); - GoUp .addFile(":/ico/22x22/go-up.png"); - GoUpDouble .addFile(":/ico/16x16/go-up-double.png"); - Ground .addFile(":/ico/16x16/ground.png"); - Grid .addFile(":/ico/16x16/grid.png"); - Grid .addFile(":/ico/22x22/grid.png"); - Hide .addFile(":/ico/16x16/masquer.png"); - Home .addFile(":/ico/16x16/go-home.png"); - Home .addFile(":/ico/22x22/go-home.png"); - HotSpot .addFile(":/ico/22x22/hotspot.png"); - ImageFlipHorizontal .addFile(":/ico/breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg"); - ImageFlipVertical .addFile(":/ico/breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg"); - InsertImage .addFile(":/ico/22x22/insert-image.png"); - Lower .addFile(":/ico/22x22/lower.png"); - IC_MoveFile .addFile(":/ico/16x16/item-move.png"); - Mirror .addFile(":/ico/16x16/mirror.png"); - Names .addFile(":/ico/22x22/names.png"); - Neutral .addFile(":/ico/16x16/neutral.png"); - NewDiagram .addFile(":/ico/128x128/diagram.png"); - North .addFile(":/ico/16x16/north.png"); - ObjectLocked .addFile(":/ico/22x22/object-locked.png"); - ObjectRotateRight .addFile(":/ico/16x16/object-rotate-right.png"); - ObjectRotateRight .addFile(":/ico/22x22/object-rotate-right.png"); - ObjectUnlocked .addFile(":/ico/22x22/object-unlocked.png"); - Orientations .addFile(":/ico/16x16/orientations.png"); - PartArc .addFile(":/ico/22x22/arc.png"); - PartBezier .addFile(":/ico/breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg"); - PartCircle .addFile(":/ico/16x16/circle.png"); - PartEllipse .addFile(":/ico/22x22/ellipse.png"); - PartLine .addFile(":/ico/22x22/line.png"); - PartPolygon .addFile(":/ico/22x22/polygon.png"); - PartRectangle .addFile(":/ico/22x22/rectangle.png"); - PartSelect .addFile(":/ico/16x16/select.png"); - PartSelect .addFile(":/ico/22x22/select.png"); - PartText .addFile(":/ico/22x22/text.png"); - PartTextField .addFile(":/ico/22x22/textfield.png"); - PDF .addFile(":/ico/32x32/application-pdf.png"); - Phase .addFile(":/ico/16x16/phase.png"); - PrintAllPages .addFile(":/ico/22x22/all_pages.png"); - Printer .addFile(":/ico/32x32/printer.png"); - Printer .addFile(":/ico/128x128/printer.png"); - PrintLandscape .addFile(":/ico/22x22/landscape.png"); - PrintPortrait .addFile(":/ico/22x22/portrait.png"); - PrintTwoPages .addFile(":/ico/22x22/two_pages.png"); - Projects .addFile(":/ico/128x128/project.png"); - ProjectClose .addFile(":/ico/16x16/project-close.png"); - ProjectClose .addFile(":/ico/22x22/project-close.png"); - ProjectNew .addFile(":/ico/16x16/project-new.png"); - ProjectNew .addFile(":/ico/22x22/project-new.png"); - ProjectFile .addFile(":/ico/breeze-icons/16x16/mimetypes/application-x-qet-project.png"); - ProjectFile .addFile(":/ico/breeze-icons/22x22/mimetypes/application-x-qet-project.png"); - ProjectFile .addFile(":/ico/breeze-icons/32x32/mimetypes/application-x-qet-project.png"); - ProjectProperties .addFile(":/ico/16x16/project-properties.png"); - QETDonate .addFile(":/ico/16x16/help-donate.png"); - QETDownload .addFile(":/ico/16x16/edit-download.png"); - QETIcon .addFile(":/ico/256x256/qelectrotech.png"); - ProjectFileGP .addFile(":/ico/16x16/project.png"); - QETLogo .addFile(":/ico/16x16/qet.png"); - QETManual .addFile(":/ico/16x16/help-contents.png"); - QETLogo .addFile(":/ico/256x256/qet.png"); - QETOxygenLogo .addFile(":/ico/breeze-icons/128x128/apps/qelectrotech.png"); - QETOxygenLogo .addFile(":/ico/breeze-icons/16x16/apps/qelectrotech.png"); - QETOxygenLogo .addFile(":/ico/breeze-icons/22x22/apps/qelectrotech.png"); - QETOxygenLogo .addFile(":/ico/breeze-icons/256x256/apps/qelectrotech.png"); - QETOxygenLogo .addFile(":/ico/breeze-icons/32x32/apps/qelectrotech.png"); - QETOxygenLogo .addFile(":/ico/breeze-icons/48x48/apps/qelectrotech.png"); - QETOxygenLogo .addFile(":/ico/breeze-icons/64x64/apps/qelectrotech.png"); - QETVideo .addFile(":/ico/16x16/kdenlive-show-video.png"); - QtLogo .addFile(":/ico/16x16/qt.png"); - Raise .addFile(":/ico/22x22/raise.png"); - RectToBezier .addFile(":/ico/generated/rect-to-bezier.svg"); - RectToPolyline .addFile(":/ico/generated/rect-to-polyline.svg"); - Remove .addFile(":/ico/16x16/list-remove.png"); - Remove .addFile(":/ico/22x22/list-remove.png"); - resize_image .addFile(":/ico/22x22/transform-scale.png"); - Restore .addFile(":/ico/22x22/restaurer.png"); - RunDxf .addFile(":/ico/16x16/run-dxf.png"); - SendBackward .addFile(":/ico/22x22/send_backward.png"); - Settings .addFile(":/ico/128x128/settings.png"); - SinglePage .addFile(":/ico/22x22/single_page.png"); - South .addFile(":/ico/16x16/south.png"); - Start .addFile(":/ico/22x22/start.png"); - TableOfContent .addFile(":/ico/16x16/table-of-content.png"); - Terminal .addFile(":/ico/22x22/terminal.png"); - TerminalStrip .addFile(":/ico/16x16/terminalstrip.png"); - TerminalStrip .addFile(":/ico/22x22/terminalstrip.png"); - TitleBlock .addFile(":/ico/16x16/label.png"); - TitleBlock .addFile(":/ico/22x22/label.png"); - TitleBlockBottom .addFile(":/ico/22x22/titleblock-bottom.png"); - TitleBlockRight .addFile(":/ico/22x22/titleblock-right.png"); - TransformCrop .addFile(":/ico/breeze-icons/scalable/apps/hidef/transform-crop.svg"); - TransformRotate .addFile(":/ico/16x16/transform-rotate.png"); - UserInformations .addFile(":/ico/16x16/preferences-desktop-user.png"); - UserInformations .addFile(":/ico/22x22/preferences-desktop-user.png"); - ViewFitWidth .addFile(":/ico/22x22/view_fit_width.png"); - ViewFitWindow .addFile(":/ico/22x22/view-fit-window.png"); - ViewMove .addFile(":/ico/16x16/move.png"); - ViewMove .addFile(":/ico/22x22/move.png"); + Element.addFile(":/ico/breeze-icons/16x16/mimetypes/application-x-qet-element.png"); + Element.addFile(":/ico/breeze-icons/22x22/mimetypes/application-x-qet-element.png"); + Element.addFile(":/ico/breeze-icons/32x32/mimetypes/application-x-qet-element.png"); + ElementDelete = QIcon::fromTheme("element-delete"); + ElementEdit = QIcon::fromTheme("element-edit"); + ElementNew = QIcon::fromTheme("element-new"); + ElementSmall = QIcon::fromTheme("element"); + EllipseToBezier = QIcon::fromTheme("ellipse-to-bezier"); + EndLineCircle = QIcon::fromTheme("endline-circle"); + EndLineDiamond = QIcon::fromTheme("endline-diamond"); + EndLineNone = QIcon::fromTheme("endline-none"); + EndLineSimple = QIcon::fromTheme("endline-simple"); + EndLineTriangle = QIcon::fromTheme("endline-triangle"); + EPS = QIcon::fromTheme("image-x-eps"); + Flip = QIcon::fromTheme("flip"); + Folder = QIcon::fromTheme("folder"); + FolderDelete = QIcon::fromTheme("folder-delete"); + FolderEdit = QIcon::fromTheme("folder-edit"); + FolderNew = QIcon::fromTheme("folder-new"); + FolderOnlyThis = QIcon::fromTheme("folder-only-this"); + FolderOpen = QIcon::fromTheme("folder-open"); + FolderProperties = QIcon::fromTheme("folder-properties"); + FolderShowAll = QIcon::fromTheme("folder-show-all"); + Forbidden = QIcon::fromTheme("user-busy"); + FullScreenEnter = QIcon::fromTheme("view-fullscreen"); + FullScreenExit = QIcon::fromTheme("view-restore"); + GoBottom = QIcon::fromTheme("go-bottom"); + GoDown = QIcon::fromTheme("go-down"); + GoDownDouble = QIcon::fromTheme("go-down-double"); + GoTop = QIcon::fromTheme("go-top"); + GoUp = QIcon::fromTheme("go-up"); + GoUpDouble = QIcon::fromTheme("go-up-double"); + Ground = QIcon::fromTheme("ground"); + Grid = QIcon::fromTheme("grid"); + Hide = QIcon::fromTheme("masquer"); + Home = QIcon::fromTheme("go-home"); + HotSpot = QIcon::fromTheme("hotspot"); + ImageFlipHorizontal = QIcon::fromTheme("image-flip-horizontal"); + ImageFlipVertical = QIcon::fromTheme("image-flip-vertical"); + InsertImage = QIcon::fromTheme("insert-image"); + Lower = QIcon::fromTheme("lower"); + IC_MoveFile = QIcon::fromTheme("item-move"); + Mirror = QIcon::fromTheme("mirror"); + Names = QIcon::fromTheme("names"); + Neutral = QIcon::fromTheme("neutral"); + NewDiagram = QIcon::fromTheme("diagram"); + North = QIcon::fromTheme("north"); + ObjectLocked = QIcon::fromTheme("object-locked"); + ObjectRotateRight = QIcon::fromTheme("object-rotate-right"); + ObjectUnlocked = QIcon::fromTheme("object-unlocked"); + Orientations = QIcon::fromTheme("orientations"); + PartArc = QIcon::fromTheme("arc"); + PartBezier = QIcon::fromTheme("draw-bezier-curves"); + PartCircle = QIcon::fromTheme("circle"); + PartEllipse = QIcon::fromTheme("ellipse"); + PartLine = QIcon::fromTheme("line"); + PartPolygon = QIcon::fromTheme("polygon"); + PartRectangle = QIcon::fromTheme("rectangle"); + PartSelect = QIcon::fromTheme("select"); + PartText = QIcon::fromTheme("text"); + PartTextField = QIcon::fromTheme("textfield"); + PDF = QIcon::fromTheme("application-pdf"); + Phase = QIcon::fromTheme("phase"); + PrintAllPages = QIcon::fromTheme("all_pages"); + Printer = QIcon::fromTheme("printer"); + PrintLandscape = QIcon::fromTheme("landscape"); + PrintPortrait = QIcon::fromTheme("portrait"); + PrintTwoPages = QIcon::fromTheme("two_pages"); + Projects = QIcon::fromTheme("project"); + ProjectClose = QIcon::fromTheme("project-close"); + ProjectNew = QIcon::fromTheme("project-new"); + ProjectFile.addFile(":/ico/breeze-icons/16x16/mimetypes/application-x-qet-project.png"); + ProjectFile.addFile(":/ico/breeze-icons/22x22/mimetypes/application-x-qet-project.png"); + ProjectFile.addFile(":/ico/breeze-icons/32x32/mimetypes/application-x-qet-project.png"); + ProjectProperties = QIcon::fromTheme("project-properties"); + QETDonate = QIcon::fromTheme("help-donate"); + QETDownload = QIcon::fromTheme("edit-download"); + QETIcon.addFile(":/ico/256x256/qelectrotech.png"); + // The elements panel shows the project root with this icon in a 50 px + // slot meant for element previews. The theme name "project" also + // carries the 128 px file used by the configuration dialog, and on a + // 2x display Qt's theme loader would pick it and fill the slot. Load + // the two small files directly so the item stays at 16/22 px. + ProjectFileGP.addFile(":/ico/themes/qet/16x16/project.png"); + ProjectFileGP.addFile(":/ico/themes/qet/22x22/project.png"); + QETLogo = QIcon::fromTheme("qet"); + QETManual = QIcon::fromTheme("help-contents"); + QETLogo.addFile(":/ico/256x256/qet.png"); + QETOxygenLogo.addFile(":/ico/breeze-icons/128x128/apps/qelectrotech.png"); + QETOxygenLogo.addFile(":/ico/breeze-icons/16x16/apps/qelectrotech.png"); + QETOxygenLogo.addFile(":/ico/breeze-icons/22x22/apps/qelectrotech.png"); + QETOxygenLogo.addFile(":/ico/breeze-icons/256x256/apps/qelectrotech.png"); + QETOxygenLogo.addFile(":/ico/breeze-icons/32x32/apps/qelectrotech.png"); + QETOxygenLogo.addFile(":/ico/breeze-icons/48x48/apps/qelectrotech.png"); + QETOxygenLogo.addFile(":/ico/breeze-icons/64x64/apps/qelectrotech.png"); + QETVideo = QIcon::fromTheme("kdenlive-show-video"); + QtLogo = QIcon::fromTheme("qt"); + Raise = QIcon::fromTheme("raise"); + RectToBezier = QIcon::fromTheme("rect-to-bezier"); + RectToPolyline = QIcon::fromTheme("rect-to-polyline"); + Remove = QIcon::fromTheme("list-remove"); + resize_image = QIcon::fromTheme("transform-scale"); + Restore = QIcon::fromTheme("restaurer"); + RunDxf = QIcon::fromTheme("run-dxf"); + SendBackward = QIcon::fromTheme("send_backward"); + Settings = QIcon::fromTheme("settings"); + SinglePage = QIcon::fromTheme("single_page"); + South = QIcon::fromTheme("south"); + Start = QIcon::fromTheme("start"); + TableOfContent = QIcon::fromTheme("table-of-content"); + Terminal = QIcon::fromTheme("terminal"); + TerminalStrip = QIcon::fromTheme("terminalstrip"); + TitleBlock = QIcon::fromTheme("label"); + TitleBlockBottom = QIcon::fromTheme("titleblock-bottom"); + TitleBlockRight = QIcon::fromTheme("titleblock-right"); + TransformCrop = QIcon::fromTheme("transform-crop"); + TransformRotate = QIcon::fromTheme("transform-rotate"); + UserInformations = QIcon::fromTheme("preferences-desktop-user"); + ViewFitWidth = QIcon::fromTheme("view_fit_width"); + ViewFitWindow = QIcon::fromTheme("view-fit-window"); + ViewMove = QIcon::fromTheme("move"); if (rtl) { - ViewRefresh.addPixmap(QPixmap(":/ico/16x16/view-refresh.png").transformed(reverse)); - ViewRefresh.addPixmap(QPixmap(":/ico/22x22/view-refresh.png").transformed(reverse)); + ViewRefresh.addPixmap(QIcon::fromTheme("view-refresh").pixmap(16).transformed(reverse)); + ViewRefresh.addPixmap(QIcon::fromTheme("view-refresh").pixmap(22).transformed(reverse)); } else { - ViewRefresh .addFile(":/ico/16x16/view-refresh.png"); - ViewRefresh .addFile(":/ico/22x22/view-refresh.png"); + ViewRefresh = QIcon::fromTheme("view-refresh"); } - West .addFile(":/ico/16x16/west.png"); - WindowNew .addFile(":/ico/16x16/window-new.png"); - WindowNew .addFile(":/ico/22x22/window-new.png"); - XmlTextFile .addFile(":/ico/16x16/text-xml.png"); - XmlTextFile .addFile(":/ico/22x22/text-xml.png"); - XmlTextFile .addFile(":/ico/32x32/text-xml.png"); - ZoomDraw .addFile(":/ico/16x16/zoom-draw.png"); - ZoomDraw .addFile(":/ico/22x22/zoom-draw.png"); - ZoomFitBest .addFile(":/ico/16x16/zoom-fit-best.png"); - ZoomFitBest .addFile(":/ico/22x22/zoom-fit-best.png"); - ZoomIn .addFile(":/ico/16x16/zoom-in.png"); - ZoomIn .addFile(":/ico/22x22/zoom-in.png"); - ZoomOriginal .addFile(":/ico/16x16/zoom-original.png"); - ZoomOriginal .addFile(":/ico/22x22/zoom-original.png"); - ZoomOut .addFile(":/ico/16x16/zoom-out.png"); - ZoomOut .addFile(":/ico/22x22/zoom-out.png"); - sa .addFile(":/ico/24x16/sa.png"); - br .addFile(":/ico/24x16/br.png"); - catalonia .addFile(":/ico/24x16/catalonia.png"); - cs .addFile(":/ico/24x16/cs.png"); - da .addFile(":/ico/24x16/dk.png"); - de .addFile(":/ico/24x16/de.png"); - gr .addFile(":/ico/24x16/gr.png"); - en .addFile(":/ico/24x16/en.png"); - es .addFile(":/ico/24x16/es.png"); - fr .addFile(":/ico/24x16/fr.png"); - hr .addFile(":/ico/24x16/hr.png"); - hu .addFile(":/ico/24x16/hu.png"); - it .addFile(":/ico/24x16/it.png"); - jp .addFile(":/ico/24x16/jp.png"); - ko .addFile(":/ico/24x16/kr.png"); - pl .addFile(":/ico/24x16/pl.png"); - pt .addFile(":/ico/24x16/pt.png"); - ro .addFile(":/ico/24x16/ro.png"); - ru .addFile(":/ico/24x16/ru.png"); - sl .addFile(":/ico/24x16/sl.png"); - nl .addFile(":/ico/24x16/nl.png"); - no .addFile(":/ico/24x16/no.png"); - nl_BE .addFile(":/ico/24x16/nl_BE.png"); - tr .addFile(":/ico/24x16/tr.png"); - uk .addFile(":/ico/24x16/ua.png"); - mn .addFile(":/ico/24x16/mn.png"); - zh .addFile(":/ico/24x16/zh.png"); - se .addFile(":/ico/24x16/se.png"); - translation .addFile(":/ico/22x22/applications-development-translation.png"); - listDrawings .addFile(":/ico/48x48/view-pim-journal.png"); - AutoNum .addFile(":/ico/128x128/plasmagik.png"); - sub .addFile(":/ico/22x22/format-text-subscript.png"); - super .addFile(":/ico/22x22/format-text-superscript.png"); - textGroup .addFile(":/ico/16x16/object-group.png"); - ElementMaster .addFile(":/ico/16x16/element-master.png"); - ElementSlave .addFile(":/ico/16x16/element-slave.png"); - FolioXrefComing .addFile(":/ico/16x16/folio-ref-coming.png"); - ElementTerminal .addFile(":/ico/16x16/terminal.png"); - ColorBrown .addFile(":/ico/22x22/color/color-brown.png"); - ColorGray .addFile(":/ico/22x22/color/color-gray.png"); - ColorOrange .addFile(":/ico/22x22/color/color-orange.png"); - ColorPurple .addFile(":/ico/22x22/color/color-purple.png"); - ColorHTMLPinkPink .addFile(":/ico/22x22/color/color-01-pink-01-pink.png"); - ColorHTMLPinkLightPink .addFile(":/ico/22x22/color/color-01-pink-02-lightpink.png"); - ColorHTMLPinkHotPink .addFile(":/ico/22x22/color/color-01-pink-03-hotpink.png"); - ColorHTMLPinkDeepPink .addFile(":/ico/22x22/color/color-01-pink-04-deeppink.png"); - ColorHTMLPinkPaleVioletRed .addFile(":/ico/22x22/color/color-01-pink-05-palevioletred.png"); - ColorHTMLPinkMediumVioletRed .addFile(":/ico/22x22/color/color-01-pink-06-mediumvioletred.png"); - ColorHTMLRedLightSalmon .addFile(":/ico/22x22/color/color-02-red-01-lightsalmon.png"); - ColorHTMLRedSalmon .addFile(":/ico/22x22/color/color-02-red-02-salmon.png"); - ColorHTMLRedDarkSalmon .addFile(":/ico/22x22/color/color-02-red-03-darksalmon.png"); - ColorHTMLRedLightCoral .addFile(":/ico/22x22/color/color-02-red-04-lightcoral.png"); - ColorHTMLRedIndianRed .addFile(":/ico/22x22/color/color-02-red-05-indianred.png"); - ColorHTMLRedCrimson .addFile(":/ico/22x22/color/color-02-red-06-crimson.png"); - ColorHTMLRedFirebrick .addFile(":/ico/22x22/color/color-02-red-07-firebrick.png"); - ColorHTMLRedDarkRed .addFile(":/ico/22x22/color/color-02-red-08-darkred.png"); - ColorHTMLRedRed .addFile(":/ico/22x22/color/color-02-red-09-red.png"); - ColorHTMLOrangeOrangeRed .addFile(":/ico/22x22/color/color-03-orange-01-orangered.png"); - ColorHTMLOrangeTomato .addFile(":/ico/22x22/color/color-03-orange-02-tomato.png"); - ColorHTMLOrangeCoral .addFile(":/ico/22x22/color/color-03-orange-03-coral.png"); - ColorHTMLOrangeDarkOrange .addFile(":/ico/22x22/color/color-03-orange-04-darkorange.png"); - ColorHTMLOrangeOrange .addFile(":/ico/22x22/color/color-03-orange-05-orange.png"); - ColorHTMLYellowYellow .addFile(":/ico/22x22/color/color-04-yellow-01-yellow.png"); - ColorHTMLYellowLightYellow .addFile(":/ico/22x22/color/color-04-yellow-02-lightyellow.png"); - ColorHTMLYellowLemonChiffon .addFile(":/ico/22x22/color/color-04-yellow-03-lemonchiffon.png"); + West = QIcon::fromTheme("west"); + WindowNew = QIcon::fromTheme("window-new"); + XmlTextFile = QIcon::fromTheme("text-xml"); + ZoomDraw = QIcon::fromTheme("zoom-draw"); + ZoomFitBest = QIcon::fromTheme("zoom-fit-best"); + ZoomIn = QIcon::fromTheme("zoom-in"); + ZoomOriginal = QIcon::fromTheme("zoom-original"); + ZoomOut = QIcon::fromTheme("zoom-out"); + sa.addFile(":/ico/24x16/sa.png"); + br.addFile(":/ico/24x16/br.png"); + catalonia.addFile(":/ico/24x16/catalonia.png"); + cs.addFile(":/ico/24x16/cs.png"); + da.addFile(":/ico/24x16/dk.png"); + de.addFile(":/ico/24x16/de.png"); + gr.addFile(":/ico/24x16/gr.png"); + en.addFile(":/ico/24x16/en.png"); + es.addFile(":/ico/24x16/es.png"); + fr.addFile(":/ico/24x16/fr.png"); + hr.addFile(":/ico/24x16/hr.png"); + hu.addFile(":/ico/24x16/hu.png"); + it.addFile(":/ico/24x16/it.png"); + jp.addFile(":/ico/24x16/jp.png"); + ko.addFile(":/ico/24x16/kr.png"); + pl.addFile(":/ico/24x16/pl.png"); + pt.addFile(":/ico/24x16/pt.png"); + ro.addFile(":/ico/24x16/ro.png"); + ru.addFile(":/ico/24x16/ru.png"); + sl.addFile(":/ico/24x16/sl.png"); + nl.addFile(":/ico/24x16/nl.png"); + no.addFile(":/ico/24x16/no.png"); + nl_BE.addFile(":/ico/24x16/nl_BE.png"); + tr.addFile(":/ico/24x16/tr.png"); + uk.addFile(":/ico/24x16/ua.png"); + mn.addFile(":/ico/24x16/mn.png"); + zh.addFile(":/ico/24x16/zh.png"); + se.addFile(":/ico/24x16/se.png"); + translation = QIcon::fromTheme("applications-development-translation"); + listDrawings = QIcon::fromTheme("view-pim-journal"); + AutoNum = QIcon::fromTheme("plasmagik"); + sub = QIcon::fromTheme("format-text-subscript"); + super = QIcon::fromTheme("format-text-superscript"); + textGroup = QIcon::fromTheme("object-group"); + ElementMaster = QIcon::fromTheme("element-master"); + ElementSlave = QIcon::fromTheme("element-slave"); + FolioXrefComing = QIcon::fromTheme("folio-ref-coming"); + ElementTerminal = QIcon::fromTheme("terminal"); + ColorBrown.addFile(":/ico/22x22/color/color-brown.png"); + ColorGray.addFile(":/ico/22x22/color/color-gray.png"); + ColorOrange.addFile(":/ico/22x22/color/color-orange.png"); + ColorPurple.addFile(":/ico/22x22/color/color-purple.png"); + ColorHTMLPinkPink.addFile(":/ico/22x22/color/color-01-pink-01-pink.png"); + ColorHTMLPinkLightPink.addFile(":/ico/22x22/color/color-01-pink-02-lightpink.png"); + ColorHTMLPinkHotPink.addFile(":/ico/22x22/color/color-01-pink-03-hotpink.png"); + ColorHTMLPinkDeepPink.addFile(":/ico/22x22/color/color-01-pink-04-deeppink.png"); + ColorHTMLPinkPaleVioletRed.addFile(":/ico/22x22/color/color-01-pink-05-palevioletred.png"); + ColorHTMLPinkMediumVioletRed.addFile(":/ico/22x22/color/color-01-pink-06-mediumvioletred.png"); + ColorHTMLRedLightSalmon.addFile(":/ico/22x22/color/color-02-red-01-lightsalmon.png"); + ColorHTMLRedSalmon.addFile(":/ico/22x22/color/color-02-red-02-salmon.png"); + ColorHTMLRedDarkSalmon.addFile(":/ico/22x22/color/color-02-red-03-darksalmon.png"); + ColorHTMLRedLightCoral.addFile(":/ico/22x22/color/color-02-red-04-lightcoral.png"); + ColorHTMLRedIndianRed.addFile(":/ico/22x22/color/color-02-red-05-indianred.png"); + ColorHTMLRedCrimson.addFile(":/ico/22x22/color/color-02-red-06-crimson.png"); + ColorHTMLRedFirebrick.addFile(":/ico/22x22/color/color-02-red-07-firebrick.png"); + ColorHTMLRedDarkRed.addFile(":/ico/22x22/color/color-02-red-08-darkred.png"); + ColorHTMLRedRed.addFile(":/ico/22x22/color/color-02-red-09-red.png"); + ColorHTMLOrangeOrangeRed.addFile(":/ico/22x22/color/color-03-orange-01-orangered.png"); + ColorHTMLOrangeTomato.addFile(":/ico/22x22/color/color-03-orange-02-tomato.png"); + ColorHTMLOrangeCoral.addFile(":/ico/22x22/color/color-03-orange-03-coral.png"); + ColorHTMLOrangeDarkOrange.addFile(":/ico/22x22/color/color-03-orange-04-darkorange.png"); + ColorHTMLOrangeOrange.addFile(":/ico/22x22/color/color-03-orange-05-orange.png"); + ColorHTMLYellowYellow.addFile(":/ico/22x22/color/color-04-yellow-01-yellow.png"); + ColorHTMLYellowLightYellow.addFile(":/ico/22x22/color/color-04-yellow-02-lightyellow.png"); + ColorHTMLYellowLemonChiffon.addFile(":/ico/22x22/color/color-04-yellow-03-lemonchiffon.png"); ColorHTMLYellowLightGoldenrodYellow.addFile(":/ico/22x22/color/color-04-yellow-04-lightgoldenrodyellow.png"); - ColorHTMLYellowPapayaWhip .addFile(":/ico/22x22/color/color-04-yellow-05-papayawhip.png"); - ColorHTMLYellowMoccasin .addFile(":/ico/22x22/color/color-04-yellow-06-moccasin.png"); - ColorHTMLYellowPeachPuff .addFile(":/ico/22x22/color/color-04-yellow-07-peachpuff.png"); - ColorHTMLYellowPaleGoldenrod .addFile(":/ico/22x22/color/color-04-yellow-08-palegoldenrod.png"); - ColorHTMLYellowKhaki .addFile(":/ico/22x22/color/color-04-yellow-09-khaki.png"); - ColorHTMLYellowDarkKhaki .addFile(":/ico/22x22/color/color-04-yellow-10-darkkhaki.png"); - ColorHTMLYellowGold .addFile(":/ico/22x22/color/color-04-yellow-11-gold.png"); - ColorHTMLBrownCornsilk .addFile(":/ico/22x22/color/color-05-brown-01-cornsilk.png"); - ColorHTMLBrownBlanchedAlmond .addFile(":/ico/22x22/color/color-05-brown-02-blanchedalmond.png"); - ColorHTMLBrownBisque .addFile(":/ico/22x22/color/color-05-brown-03-bisque.png"); - ColorHTMLBrownNavajoWhite .addFile(":/ico/22x22/color/color-05-brown-04-navajowhite.png"); - ColorHTMLBrownWheat .addFile(":/ico/22x22/color/color-05-brown-05-wheat.png"); - ColorHTMLBrownBurlywood .addFile(":/ico/22x22/color/color-05-brown-06-burlywood.png"); - ColorHTMLBrownTan .addFile(":/ico/22x22/color/color-05-brown-07-tan.png"); - ColorHTMLBrownRosyBrown .addFile(":/ico/22x22/color/color-05-brown-08-rosybrown.png"); - ColorHTMLBrownSandyBrown .addFile(":/ico/22x22/color/color-05-brown-09-sandybrown.png"); - ColorHTMLBrownGoldenrod .addFile(":/ico/22x22/color/color-05-brown-10-goldenrod.png"); - ColorHTMLBrownDarkGoldenrod .addFile(":/ico/22x22/color/color-05-brown-11-darkgoldenrod.png"); - ColorHTMLBrownPeru .addFile(":/ico/22x22/color/color-05-brown-12-peru.png"); - ColorHTMLBrownChocolate .addFile(":/ico/22x22/color/color-05-brown-13-chocolate.png"); - ColorHTMLBrownSaddleBrown .addFile(":/ico/22x22/color/color-05-brown-14-saddlebrown.png"); - ColorHTMLBrownSienna .addFile(":/ico/22x22/color/color-05-brown-15-sienna.png"); - ColorHTMLBrownBrown .addFile(":/ico/22x22/color/color-05-brown-16-brown.png"); - ColorHTMLBrownMaroon .addFile(":/ico/22x22/color/color-05-brown-17-maroon.png"); - ColorHTMLGreenDarkOliveGreen .addFile(":/ico/22x22/color/color-06-green-01-darkolivegreen.png"); - ColorHTMLGreenOlive .addFile(":/ico/22x22/color/color-06-green-02-olive.png"); - ColorHTMLGreenOliveDrab .addFile(":/ico/22x22/color/color-06-green-03-olivedrab.png"); - ColorHTMLGreenYellowGreen .addFile(":/ico/22x22/color/color-06-green-04-yellowgreen.png"); - ColorHTMLGreenLimeGreen .addFile(":/ico/22x22/color/color-06-green-05-limegreen.png"); - ColorHTMLGreenLime .addFile(":/ico/22x22/color/color-06-green-06-lime.png"); - ColorHTMLGreenLawnGreen .addFile(":/ico/22x22/color/color-06-green-07-lawngreen.png"); - ColorHTMLGreenChartreuse .addFile(":/ico/22x22/color/color-06-green-08-chartreuse.png"); - ColorHTMLGreenGreenYellow .addFile(":/ico/22x22/color/color-06-green-09-greenyellow.png"); - ColorHTMLGreenSpringGreen .addFile(":/ico/22x22/color/color-06-green-10-springgreen.png"); - ColorHTMLGreenMediumSpringGreen .addFile(":/ico/22x22/color/color-06-green-11-mediumspringgreen.png"); - ColorHTMLGreenLightGreen .addFile(":/ico/22x22/color/color-06-green-12-lightgreen.png"); - ColorHTMLGreenPaleGreen .addFile(":/ico/22x22/color/color-06-green-13-palegreen.png"); - ColorHTMLGreenDarkSeaGreen .addFile(":/ico/22x22/color/color-06-green-14-darkseagreen.png"); - ColorHTMLGreenMediumAquamarine .addFile(":/ico/22x22/color/color-06-green-15-mediumaquamarine.png"); - ColorHTMLGreenMediumSeaGreen .addFile(":/ico/22x22/color/color-06-green-16-mediumseagreen.png"); - ColorHTMLGreenSeaGreen .addFile(":/ico/22x22/color/color-06-green-17-seagreen.png"); - ColorHTMLGreenForestGreen .addFile(":/ico/22x22/color/color-06-green-18-forestgreen.png"); - ColorHTMLGreenGreen .addFile(":/ico/22x22/color/color-06-green-19-green.png"); - ColorHTMLGreenDarkGreen .addFile(":/ico/22x22/color/color-06-green-20-darkgreen.png"); - ColorHTMLCyanAqua .addFile(":/ico/22x22/color/color-07-cyan-01-aqua.png"); - ColorHTMLCyanCyan .addFile(":/ico/22x22/color/color-07-cyan-02-cyan.png"); - ColorHTMLCyanLightCyan .addFile(":/ico/22x22/color/color-07-cyan-03-lightcyan.png"); - ColorHTMLCyanPaleTurquoise .addFile(":/ico/22x22/color/color-07-cyan-04-paleturquoise.png"); - ColorHTMLCyanAquamarine .addFile(":/ico/22x22/color/color-07-cyan-05-aquamarine.png"); - ColorHTMLCyanTurquoise .addFile(":/ico/22x22/color/color-07-cyan-06-turquoise.png"); - ColorHTMLCyanMediumTurquoise .addFile(":/ico/22x22/color/color-07-cyan-07-mediumturquoise.png"); - ColorHTMLCyanDarkTurquoise .addFile(":/ico/22x22/color/color-07-cyan-08-darkturquoise.png"); - ColorHTMLCyanLightSeaGreen .addFile(":/ico/22x22/color/color-07-cyan-09-lightseagreen.png"); - ColorHTMLCyanCadetBlue .addFile(":/ico/22x22/color/color-07-cyan-10-cadetblue.png"); - ColorHTMLCyanDarkCyan .addFile(":/ico/22x22/color/color-07-cyan-11-darkcyan.png"); - ColorHTMLCyanTeal .addFile(":/ico/22x22/color/color-07-cyan-12-teal.png"); - ColorHTMLBlueLightSteelBlue .addFile(":/ico/22x22/color/color-08-blue-01-lightsteelblue.png"); - ColorHTMLBluePowderBlue .addFile(":/ico/22x22/color/color-08-blue-02-powderblue.png"); - ColorHTMLBlueLightBlue .addFile(":/ico/22x22/color/color-08-blue-03-lightblue.png"); - ColorHTMLBlueSkyBlue .addFile(":/ico/22x22/color/color-08-blue-04-skyblue.png"); - ColorHTMLBlueLightSkyBlue .addFile(":/ico/22x22/color/color-08-blue-05-lightskyblue.png"); - ColorHTMLBlueDeepSkyBlue .addFile(":/ico/22x22/color/color-08-blue-06-deepskyblue.png"); - ColorHTMLBlueDodgerBlue .addFile(":/ico/22x22/color/color-08-blue-07-dodgerblue.png"); - ColorHTMLBlueCornflowerBlue .addFile(":/ico/22x22/color/color-08-blue-08-cornflowerblue.png"); - ColorHTMLBlueSteelBlue .addFile(":/ico/22x22/color/color-08-blue-09-steelblue.png"); - ColorHTMLBlueRoyalBlue .addFile(":/ico/22x22/color/color-08-blue-10-royalblue.png"); - ColorHTMLBlueBlue .addFile(":/ico/22x22/color/color-08-blue-11-blue.png"); - ColorHTMLBlueMediumBlue .addFile(":/ico/22x22/color/color-08-blue-12-mediumblue.png"); - ColorHTMLBlueDarkBlue .addFile(":/ico/22x22/color/color-08-blue-13-darkblue.png"); - ColorHTMLBlueNavy .addFile(":/ico/22x22/color/color-08-blue-14-navy.png"); - ColorHTMLBlueMidnightBlue .addFile(":/ico/22x22/color/color-08-blue-15-midnightblue.png"); - ColorHTMLPurpleLavender .addFile(":/ico/22x22/color/color-09-purple-01-lavender.png"); - ColorHTMLPurpleThistle .addFile(":/ico/22x22/color/color-09-purple-02-thistle.png"); - ColorHTMLPurplePlum .addFile(":/ico/22x22/color/color-09-purple-03-plum.png"); - ColorHTMLPurpleViolet .addFile(":/ico/22x22/color/color-09-purple-04-violet.png"); - ColorHTMLPurpleOrchid .addFile(":/ico/22x22/color/color-09-purple-05-orchid.png"); - ColorHTMLPurpleFuchsia .addFile(":/ico/22x22/color/color-09-purple-06-fuchsia.png"); - ColorHTMLPurpleMagenta .addFile(":/ico/22x22/color/color-09-purple-07-magenta.png"); - ColorHTMLPurpleMediumOrchid .addFile(":/ico/22x22/color/color-09-purple-08-mediumorchid.png"); - ColorHTMLPurpleMediumPurple .addFile(":/ico/22x22/color/color-09-purple-09-mediumpurple.png"); - ColorHTMLPurpleBlueViolet .addFile(":/ico/22x22/color/color-09-purple-10-blueviolet.png"); - ColorHTMLPurpleDarkViolet .addFile(":/ico/22x22/color/color-09-purple-11-darkviolet.png"); - ColorHTMLPurpleDarkOrchid .addFile(":/ico/22x22/color/color-09-purple-12-darkorchid.png"); - ColorHTMLPurpleDarkMagenta .addFile(":/ico/22x22/color/color-09-purple-13-darkmagenta.png"); - ColorHTMLPurplePurple .addFile(":/ico/22x22/color/color-09-purple-14-purple.png"); - ColorHTMLPurpleIndigo .addFile(":/ico/22x22/color/color-09-purple-15-indigo.png"); - ColorHTMLPurpleDarkSlateBlue .addFile(":/ico/22x22/color/color-09-purple-16-darkslateblue.png"); - ColorHTMLPurpleSlateBlue .addFile(":/ico/22x22/color/color-09-purple-17-slateblue.png"); - ColorHTMLPurpleMediumSlateBlue .addFile(":/ico/22x22/color/color-09-purple-18-mediumslateblue.png"); - ColorHTMLWhiteWhite .addFile(":/ico/22x22/color/color-10-white-01-white.png"); - ColorHTMLWhiteSnow .addFile(":/ico/22x22/color/color-10-white-02-snow.png"); - ColorHTMLWhiteHoneydew .addFile(":/ico/22x22/color/color-10-white-03-honeydew.png"); - ColorHTMLWhiteMintCream .addFile(":/ico/22x22/color/color-10-white-04-mintcream.png"); - ColorHTMLWhiteAzure .addFile(":/ico/22x22/color/color-10-white-05-azure.png"); - ColorHTMLWhiteAliceBlue .addFile(":/ico/22x22/color/color-10-white-06-aliceblue.png"); - ColorHTMLWhiteGhostWhite .addFile(":/ico/22x22/color/color-10-white-07-ghostwhite.png"); - ColorHTMLWhiteWhiteSmoke .addFile(":/ico/22x22/color/color-10-white-08-whitesmoke.png"); - ColorHTMLWhiteSeashell .addFile(":/ico/22x22/color/color-10-white-09-seashell.png"); - ColorHTMLWhiteBeige .addFile(":/ico/22x22/color/color-10-white-10-beige.png"); - ColorHTMLWhiteOldLace .addFile(":/ico/22x22/color/color-10-white-11-oldlace.png"); - ColorHTMLWhiteFloralWhite .addFile(":/ico/22x22/color/color-10-white-12-floralwhite.png"); - ColorHTMLWhiteIvory .addFile(":/ico/22x22/color/color-10-white-13-ivory.png"); - ColorHTMLWhiteAntiqueWhite .addFile(":/ico/22x22/color/color-10-white-14-antiquewhite.png"); - ColorHTMLWhiteLinen .addFile(":/ico/22x22/color/color-10-white-15-linen.png"); - ColorHTMLWhiteLavenderBlush .addFile(":/ico/22x22/color/color-10-white-16-lavenderblush.png"); - ColorHTMLWhiteMistyRose .addFile(":/ico/22x22/color/color-10-white-17-mistyrose.png"); - ColorHTMLGrayGainsboro .addFile(":/ico/22x22/color/color-11-gray-01-gainsboro.png"); - ColorHTMLGrayLightGray .addFile(":/ico/22x22/color/color-11-gray-02-lightgray.png"); - ColorHTMLGraySilver .addFile(":/ico/22x22/color/color-11-gray-03-silver.png"); - ColorHTMLGrayDarkGray .addFile(":/ico/22x22/color/color-11-gray-04-darkgray.png"); - ColorHTMLGrayGray .addFile(":/ico/22x22/color/color-11-gray-05-gray.png"); - ColorHTMLGrayDimGray .addFile(":/ico/22x22/color/color-11-gray-06-dimgray.png"); - ColorHTMLGrayLightSlateGray .addFile(":/ico/22x22/color/color-11-gray-07-lightslategray.png"); - ColorHTMLGraySlateGray .addFile(":/ico/22x22/color/color-11-gray-08-slategray.png"); - ColorHTMLGrayDarkSlateGray .addFile(":/ico/22x22/color/color-11-gray-09-darkslategray.png"); - ColorHTMLGrayBlack .addFile(":/ico/22x22/color/color-11-gray-10-black.png"); + ColorHTMLYellowPapayaWhip.addFile(":/ico/22x22/color/color-04-yellow-05-papayawhip.png"); + ColorHTMLYellowMoccasin.addFile(":/ico/22x22/color/color-04-yellow-06-moccasin.png"); + ColorHTMLYellowPeachPuff.addFile(":/ico/22x22/color/color-04-yellow-07-peachpuff.png"); + ColorHTMLYellowPaleGoldenrod.addFile(":/ico/22x22/color/color-04-yellow-08-palegoldenrod.png"); + ColorHTMLYellowKhaki.addFile(":/ico/22x22/color/color-04-yellow-09-khaki.png"); + ColorHTMLYellowDarkKhaki.addFile(":/ico/22x22/color/color-04-yellow-10-darkkhaki.png"); + ColorHTMLYellowGold.addFile(":/ico/22x22/color/color-04-yellow-11-gold.png"); + ColorHTMLBrownCornsilk.addFile(":/ico/22x22/color/color-05-brown-01-cornsilk.png"); + ColorHTMLBrownBlanchedAlmond.addFile(":/ico/22x22/color/color-05-brown-02-blanchedalmond.png"); + ColorHTMLBrownBisque.addFile(":/ico/22x22/color/color-05-brown-03-bisque.png"); + ColorHTMLBrownNavajoWhite.addFile(":/ico/22x22/color/color-05-brown-04-navajowhite.png"); + ColorHTMLBrownWheat.addFile(":/ico/22x22/color/color-05-brown-05-wheat.png"); + ColorHTMLBrownBurlywood.addFile(":/ico/22x22/color/color-05-brown-06-burlywood.png"); + ColorHTMLBrownTan.addFile(":/ico/22x22/color/color-05-brown-07-tan.png"); + ColorHTMLBrownRosyBrown.addFile(":/ico/22x22/color/color-05-brown-08-rosybrown.png"); + ColorHTMLBrownSandyBrown.addFile(":/ico/22x22/color/color-05-brown-09-sandybrown.png"); + ColorHTMLBrownGoldenrod.addFile(":/ico/22x22/color/color-05-brown-10-goldenrod.png"); + ColorHTMLBrownDarkGoldenrod.addFile(":/ico/22x22/color/color-05-brown-11-darkgoldenrod.png"); + ColorHTMLBrownPeru.addFile(":/ico/22x22/color/color-05-brown-12-peru.png"); + ColorHTMLBrownChocolate.addFile(":/ico/22x22/color/color-05-brown-13-chocolate.png"); + ColorHTMLBrownSaddleBrown.addFile(":/ico/22x22/color/color-05-brown-14-saddlebrown.png"); + ColorHTMLBrownSienna.addFile(":/ico/22x22/color/color-05-brown-15-sienna.png"); + ColorHTMLBrownBrown.addFile(":/ico/22x22/color/color-05-brown-16-brown.png"); + ColorHTMLBrownMaroon.addFile(":/ico/22x22/color/color-05-brown-17-maroon.png"); + ColorHTMLGreenDarkOliveGreen.addFile(":/ico/22x22/color/color-06-green-01-darkolivegreen.png"); + ColorHTMLGreenOlive.addFile(":/ico/22x22/color/color-06-green-02-olive.png"); + ColorHTMLGreenOliveDrab.addFile(":/ico/22x22/color/color-06-green-03-olivedrab.png"); + ColorHTMLGreenYellowGreen.addFile(":/ico/22x22/color/color-06-green-04-yellowgreen.png"); + ColorHTMLGreenLimeGreen.addFile(":/ico/22x22/color/color-06-green-05-limegreen.png"); + ColorHTMLGreenLime.addFile(":/ico/22x22/color/color-06-green-06-lime.png"); + ColorHTMLGreenLawnGreen.addFile(":/ico/22x22/color/color-06-green-07-lawngreen.png"); + ColorHTMLGreenChartreuse.addFile(":/ico/22x22/color/color-06-green-08-chartreuse.png"); + ColorHTMLGreenGreenYellow.addFile(":/ico/22x22/color/color-06-green-09-greenyellow.png"); + ColorHTMLGreenSpringGreen.addFile(":/ico/22x22/color/color-06-green-10-springgreen.png"); + ColorHTMLGreenMediumSpringGreen.addFile(":/ico/22x22/color/color-06-green-11-mediumspringgreen.png"); + ColorHTMLGreenLightGreen.addFile(":/ico/22x22/color/color-06-green-12-lightgreen.png"); + ColorHTMLGreenPaleGreen.addFile(":/ico/22x22/color/color-06-green-13-palegreen.png"); + ColorHTMLGreenDarkSeaGreen.addFile(":/ico/22x22/color/color-06-green-14-darkseagreen.png"); + ColorHTMLGreenMediumAquamarine.addFile(":/ico/22x22/color/color-06-green-15-mediumaquamarine.png"); + ColorHTMLGreenMediumSeaGreen.addFile(":/ico/22x22/color/color-06-green-16-mediumseagreen.png"); + ColorHTMLGreenSeaGreen.addFile(":/ico/22x22/color/color-06-green-17-seagreen.png"); + ColorHTMLGreenForestGreen.addFile(":/ico/22x22/color/color-06-green-18-forestgreen.png"); + ColorHTMLGreenGreen.addFile(":/ico/22x22/color/color-06-green-19-green.png"); + ColorHTMLGreenDarkGreen.addFile(":/ico/22x22/color/color-06-green-20-darkgreen.png"); + ColorHTMLCyanAqua.addFile(":/ico/22x22/color/color-07-cyan-01-aqua.png"); + ColorHTMLCyanCyan.addFile(":/ico/22x22/color/color-07-cyan-02-cyan.png"); + ColorHTMLCyanLightCyan.addFile(":/ico/22x22/color/color-07-cyan-03-lightcyan.png"); + ColorHTMLCyanPaleTurquoise.addFile(":/ico/22x22/color/color-07-cyan-04-paleturquoise.png"); + ColorHTMLCyanAquamarine.addFile(":/ico/22x22/color/color-07-cyan-05-aquamarine.png"); + ColorHTMLCyanTurquoise.addFile(":/ico/22x22/color/color-07-cyan-06-turquoise.png"); + ColorHTMLCyanMediumTurquoise.addFile(":/ico/22x22/color/color-07-cyan-07-mediumturquoise.png"); + ColorHTMLCyanDarkTurquoise.addFile(":/ico/22x22/color/color-07-cyan-08-darkturquoise.png"); + ColorHTMLCyanLightSeaGreen.addFile(":/ico/22x22/color/color-07-cyan-09-lightseagreen.png"); + ColorHTMLCyanCadetBlue.addFile(":/ico/22x22/color/color-07-cyan-10-cadetblue.png"); + ColorHTMLCyanDarkCyan.addFile(":/ico/22x22/color/color-07-cyan-11-darkcyan.png"); + ColorHTMLCyanTeal.addFile(":/ico/22x22/color/color-07-cyan-12-teal.png"); + ColorHTMLBlueLightSteelBlue.addFile(":/ico/22x22/color/color-08-blue-01-lightsteelblue.png"); + ColorHTMLBluePowderBlue.addFile(":/ico/22x22/color/color-08-blue-02-powderblue.png"); + ColorHTMLBlueLightBlue.addFile(":/ico/22x22/color/color-08-blue-03-lightblue.png"); + ColorHTMLBlueSkyBlue.addFile(":/ico/22x22/color/color-08-blue-04-skyblue.png"); + ColorHTMLBlueLightSkyBlue.addFile(":/ico/22x22/color/color-08-blue-05-lightskyblue.png"); + ColorHTMLBlueDeepSkyBlue.addFile(":/ico/22x22/color/color-08-blue-06-deepskyblue.png"); + ColorHTMLBlueDodgerBlue.addFile(":/ico/22x22/color/color-08-blue-07-dodgerblue.png"); + ColorHTMLBlueCornflowerBlue.addFile(":/ico/22x22/color/color-08-blue-08-cornflowerblue.png"); + ColorHTMLBlueSteelBlue.addFile(":/ico/22x22/color/color-08-blue-09-steelblue.png"); + ColorHTMLBlueRoyalBlue.addFile(":/ico/22x22/color/color-08-blue-10-royalblue.png"); + ColorHTMLBlueBlue.addFile(":/ico/22x22/color/color-08-blue-11-blue.png"); + ColorHTMLBlueMediumBlue.addFile(":/ico/22x22/color/color-08-blue-12-mediumblue.png"); + ColorHTMLBlueDarkBlue.addFile(":/ico/22x22/color/color-08-blue-13-darkblue.png"); + ColorHTMLBlueNavy.addFile(":/ico/22x22/color/color-08-blue-14-navy.png"); + ColorHTMLBlueMidnightBlue.addFile(":/ico/22x22/color/color-08-blue-15-midnightblue.png"); + ColorHTMLPurpleLavender.addFile(":/ico/22x22/color/color-09-purple-01-lavender.png"); + ColorHTMLPurpleThistle.addFile(":/ico/22x22/color/color-09-purple-02-thistle.png"); + ColorHTMLPurplePlum.addFile(":/ico/22x22/color/color-09-purple-03-plum.png"); + ColorHTMLPurpleViolet.addFile(":/ico/22x22/color/color-09-purple-04-violet.png"); + ColorHTMLPurpleOrchid.addFile(":/ico/22x22/color/color-09-purple-05-orchid.png"); + ColorHTMLPurpleFuchsia.addFile(":/ico/22x22/color/color-09-purple-06-fuchsia.png"); + ColorHTMLPurpleMagenta.addFile(":/ico/22x22/color/color-09-purple-07-magenta.png"); + ColorHTMLPurpleMediumOrchid.addFile(":/ico/22x22/color/color-09-purple-08-mediumorchid.png"); + ColorHTMLPurpleMediumPurple.addFile(":/ico/22x22/color/color-09-purple-09-mediumpurple.png"); + ColorHTMLPurpleBlueViolet.addFile(":/ico/22x22/color/color-09-purple-10-blueviolet.png"); + ColorHTMLPurpleDarkViolet.addFile(":/ico/22x22/color/color-09-purple-11-darkviolet.png"); + ColorHTMLPurpleDarkOrchid.addFile(":/ico/22x22/color/color-09-purple-12-darkorchid.png"); + ColorHTMLPurpleDarkMagenta.addFile(":/ico/22x22/color/color-09-purple-13-darkmagenta.png"); + ColorHTMLPurplePurple.addFile(":/ico/22x22/color/color-09-purple-14-purple.png"); + ColorHTMLPurpleIndigo.addFile(":/ico/22x22/color/color-09-purple-15-indigo.png"); + ColorHTMLPurpleDarkSlateBlue.addFile(":/ico/22x22/color/color-09-purple-16-darkslateblue.png"); + ColorHTMLPurpleSlateBlue.addFile(":/ico/22x22/color/color-09-purple-17-slateblue.png"); + ColorHTMLPurpleMediumSlateBlue.addFile(":/ico/22x22/color/color-09-purple-18-mediumslateblue.png"); + ColorHTMLWhiteWhite.addFile(":/ico/22x22/color/color-10-white-01-white.png"); + ColorHTMLWhiteSnow.addFile(":/ico/22x22/color/color-10-white-02-snow.png"); + ColorHTMLWhiteHoneydew.addFile(":/ico/22x22/color/color-10-white-03-honeydew.png"); + ColorHTMLWhiteMintCream.addFile(":/ico/22x22/color/color-10-white-04-mintcream.png"); + ColorHTMLWhiteAzure.addFile(":/ico/22x22/color/color-10-white-05-azure.png"); + ColorHTMLWhiteAliceBlue.addFile(":/ico/22x22/color/color-10-white-06-aliceblue.png"); + ColorHTMLWhiteGhostWhite.addFile(":/ico/22x22/color/color-10-white-07-ghostwhite.png"); + ColorHTMLWhiteWhiteSmoke.addFile(":/ico/22x22/color/color-10-white-08-whitesmoke.png"); + ColorHTMLWhiteSeashell.addFile(":/ico/22x22/color/color-10-white-09-seashell.png"); + ColorHTMLWhiteBeige.addFile(":/ico/22x22/color/color-10-white-10-beige.png"); + ColorHTMLWhiteOldLace.addFile(":/ico/22x22/color/color-10-white-11-oldlace.png"); + ColorHTMLWhiteFloralWhite.addFile(":/ico/22x22/color/color-10-white-12-floralwhite.png"); + ColorHTMLWhiteIvory.addFile(":/ico/22x22/color/color-10-white-13-ivory.png"); + ColorHTMLWhiteAntiqueWhite.addFile(":/ico/22x22/color/color-10-white-14-antiquewhite.png"); + ColorHTMLWhiteLinen.addFile(":/ico/22x22/color/color-10-white-15-linen.png"); + ColorHTMLWhiteLavenderBlush.addFile(":/ico/22x22/color/color-10-white-16-lavenderblush.png"); + ColorHTMLWhiteMistyRose.addFile(":/ico/22x22/color/color-10-white-17-mistyrose.png"); + ColorHTMLGrayGainsboro.addFile(":/ico/22x22/color/color-11-gray-01-gainsboro.png"); + ColorHTMLGrayLightGray.addFile(":/ico/22x22/color/color-11-gray-02-lightgray.png"); + ColorHTMLGraySilver.addFile(":/ico/22x22/color/color-11-gray-03-silver.png"); + ColorHTMLGrayDarkGray.addFile(":/ico/22x22/color/color-11-gray-04-darkgray.png"); + ColorHTMLGrayGray.addFile(":/ico/22x22/color/color-11-gray-05-gray.png"); + ColorHTMLGrayDimGray.addFile(":/ico/22x22/color/color-11-gray-06-dimgray.png"); + ColorHTMLGrayLightSlateGray.addFile(":/ico/22x22/color/color-11-gray-07-lightslategray.png"); + ColorHTMLGraySlateGray.addFile(":/ico/22x22/color/color-11-gray-08-slategray.png"); + ColorHTMLGrayDarkSlateGray.addFile(":/ico/22x22/color/color-11-gray-09-darkslategray.png"); + ColorHTMLGrayBlack.addFile(":/ico/22x22/color/color-11-gray-10-black.png"); } diff --git a/sources/richtext/richtexteditor.cpp b/sources/richtext/richtexteditor.cpp index 489d3391a..9c8b9b0a6 100644 --- a/sources/richtext/richtexteditor.cpp +++ b/sources/richtext/richtexteditor.cpp @@ -514,19 +514,19 @@ RichTextEditorToolBar::RichTextEditorToolBar(RichTextEditor *editor, // Bold, italic and underline buttons m_bold_action = createCheckableAction( - QIcon(":/ico/32x32/format-text-bold.png"), + QIcon::fromTheme("format-text-bold"), tr("Texte en gras"), editor, &RichTextEditor::setFontBold, this); ShortcutManager::instance().registerAction(m_bold_action, "richtext.bold", tr("Éditeur de texte"), Qt::CTRL | Qt::Key_B); addAction(m_bold_action); m_italic_action = createCheckableAction( - QIcon(":/ico/32x32/format-text-italic.png"), + QIcon::fromTheme("format-text-italic"), tr("Texte en italique"), editor, &RichTextEditor::setFontItalic, this); ShortcutManager::instance().registerAction(m_italic_action, "richtext.italic", tr("Éditeur de texte"), Qt::CTRL | Qt::Key_I); addAction(m_italic_action); m_underline_action = createCheckableAction( - QIcon(":/ico/32x32/format-text-underline.png"), + QIcon::fromTheme("format-text-underline"), tr("Texte souligé"), editor, &RichTextEditor::setFontUnderline, this); ShortcutManager::instance().registerAction(m_underline_action, "richtext.underline", tr("Éditeur de texte"), Qt::CTRL | Qt::Key_U); addAction(m_underline_action); @@ -567,13 +567,13 @@ RichTextEditorToolBar::RichTextEditorToolBar(RichTextEditor *editor, // Superscript and subscript buttons m_valign_sup_action = createCheckableAction( - QIcon(":/ico/22x22/format-text-superscript.png"), + QIcon::fromTheme("format-text-superscript"), tr("Superscript"), this, &RichTextEditorToolBar::setVAlignSuper, this); addAction(m_valign_sup_action); m_valign_sub_action = createCheckableAction( - QIcon(":/ico/22x22/format-text-subscript.png"), + QIcon::fromTheme("format-text-subscript"), tr("Subscript"), this, &RichTextEditorToolBar::setVAlignSub, this); addAction(m_valign_sub_action); @@ -601,7 +601,7 @@ RichTextEditorToolBar::RichTextEditorToolBar(RichTextEditor *editor, // Simplify rich text m_simplify_richtext_action = createCheckableAction( - QIcon(":/ico/32x32/simplifyrichtext.png"), + QIcon::fromTheme("simplifyrichtext"), tr("Simplify Rich Text"), editor, &RichTextEditor::setSimplifyRichText, this); m_simplify_richtext_action->setChecked(editor->simplifyRichText()); connect(m_editor, &RichTextEditor::simplifyRichTextChanged, m_simplify_richtext_action, &QAction::setChecked); diff --git a/sources/ui/conductorpropertieswidget.ui b/sources/ui/conductorpropertieswidget.ui index 48ea44ac8..8a31d43a3 100644 --- a/sources/ui/conductorpropertieswidget.ui +++ b/sources/ui/conductorpropertieswidget.ui @@ -233,7 +233,7 @@ - + :/ico/16x16/configure.png:/ico/16x16/configure.png @@ -363,7 +363,7 @@ neutre - + :/ico/16x16/neutral.png:/ico/16x16/neutral.png @@ -377,7 +377,7 @@ terre - + :/ico/16x16/ground.png:/ico/16x16/ground.png @@ -391,7 +391,7 @@ phase - + :/ico/16x16/phase.png:/ico/16x16/phase.png diff --git a/sources/ui/configsaveloaderwidget.ui b/sources/ui/configsaveloaderwidget.ui index f0b69605b..aaa8aa130 100644 --- a/sources/ui/configsaveloaderwidget.ui +++ b/sources/ui/configsaveloaderwidget.ui @@ -29,7 +29,7 @@ - + :/ico/16x16/folder-open.png:/ico/16x16/folder-open.png @@ -40,7 +40,7 @@ - + :/ico/16x16/document-save.png:/ico/16x16/document-save.png diff --git a/sources/ui/dynamicelementtextitemeditor.ui b/sources/ui/dynamicelementtextitemeditor.ui index 66a326d4f..273637c2e 100644 --- a/sources/ui/dynamicelementtextitemeditor.ui +++ b/sources/ui/dynamicelementtextitemeditor.ui @@ -25,7 +25,7 @@ ... - + :/ico/16x16/document-save.png:/ico/16x16/document-save.png @@ -39,7 +39,7 @@ ... - + :/ico/16x16/folder-open.png:/ico/16x16/folder-open.png @@ -66,7 +66,7 @@ ... - + :/ico/22x22/textfield.png:/ico/22x22/textfield.png @@ -80,7 +80,7 @@ ... - + :/ico/16x16/object-group.png:/ico/16x16/object-group.png @@ -94,7 +94,7 @@ ... - + :/ico/16x16/list-remove.png:/ico/16x16/list-remove.png diff --git a/sources/ui/masterpropertieswidget.ui b/sources/ui/masterpropertieswidget.ui index 71eb57dd8..910ac27c0 100644 --- a/sources/ui/masterpropertieswidget.ui +++ b/sources/ui/masterpropertieswidget.ui @@ -136,7 +136,7 @@ - + :/ico/16x16/go-up.png:/ico/16x16/go-up.png @@ -150,7 +150,7 @@ - + :/ico/16x16/go-down.png:/ico/16x16/go-down.png diff --git a/sources/ui/thirdpartybinaryinstalldialog.ui b/sources/ui/thirdpartybinaryinstalldialog.ui index 899666d2c..cbd94b056 100644 --- a/sources/ui/thirdpartybinaryinstalldialog.ui +++ b/sources/ui/thirdpartybinaryinstalldialog.ui @@ -33,7 +33,7 @@ Télechargement - + :/ico/16x16/edit-download.png:/ico/16x16/edit-download.png @@ -44,7 +44,7 @@ Dossier installation - + :/ico/16x16/folder-open.png:/ico/16x16/folder-open.png diff --git a/sources/ui/titleblockpropertieswidget.ui b/sources/ui/titleblockpropertieswidget.ui index 2389eabcf..0be2a3623 100644 --- a/sources/ui/titleblockpropertieswidget.ui +++ b/sources/ui/titleblockpropertieswidget.ui @@ -94,7 +94,7 @@ - + :/ico/22x22/titleblock-bottom.png:/ico/22x22/titleblock-bottom.png @@ -103,7 +103,7 @@ - + :/ico/22x22/titleblock-right.png:/ico/22x22/titleblock-right.png @@ -121,7 +121,7 @@ - + :/ico/22x22/edit-rename.png:/ico/22x22/edit-rename.png @@ -210,7 +210,7 @@ - + :/ico/16x16/configure.png:/ico/16x16/configure.png @@ -305,7 +305,7 @@ - + :/ico/22x22/start.png:/ico/22x22/start.png diff --git a/tests/qttest/CMakeLists.txt b/tests/qttest/CMakeLists.txt index 855a9acd2..638d3961a 100644 --- a/tests/qttest/CMakeLists.txt +++ b/tests/qttest/CMakeLists.txt @@ -82,12 +82,28 @@ target_link_libraries(tst_contactusage PRIVATE Qt::Test) add_executable( tst_qetpalette tst_qetpalette.cpp + inkcontrast.h ${QET_DIR}/sources/qetpalette.cpp ${QET_DIR}/sources/qetpalette.h) add_test(NAME tst_qetpalette COMMAND tst_qetpalette) target_include_directories(tst_qetpalette PRIVATE ${QET_DIR}/sources) target_link_libraries(tst_qetpalette PRIVATE Qt::Test Qt::Widgets) +# qeticons.cpp is compiled in so the test can check the table entries +# themselves (icon sizes in the element panel), not only the theme files. +add_executable( + tst_qeticons + tst_qeticons.cpp + inkcontrast.h + ${QET_DIR}/sources/qeticons.cpp + ${QET_DIR}/sources/qeticons.h + ${QET_DIR}/sources/qetpalette.cpp + ${QET_DIR}/sources/qetpalette.h + ${QET_DIR}/ico/icon-themes.qrc) +add_test(NAME tst_qeticons COMMAND tst_qeticons) +target_include_directories(tst_qeticons PRIVATE ${QET_DIR}/sources) +target_link_libraries(tst_qeticons PRIVATE Qt::Test Qt::Widgets Qt::Svg) + add_executable( tst_smart_device tst_smart_device.cpp diff --git a/tests/qttest/inkcontrast.h b/tests/qttest/inkcontrast.h new file mode 100644 index 000000000..282a4db2e --- /dev/null +++ b/tests/qttest/inkcontrast.h @@ -0,0 +1,77 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech 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 2 of the License, or + (at your option) any later version. + + QElectroTech 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 QElectroTech. If not, see . +*/ +#ifndef QET_TEST_INKCONTRAST_H +#define QET_TEST_INKCONTRAST_H + +#include +#include +#include +#include +#include +#include + +#include "qetpalette.h" + +/** + Shared helpers for the rendering tests: paint a widget on the offscreen + platform and measure the ink against the background. +*/ +namespace QET { + namespace Test { + /** + Grab a widget for measuring. With QET_TEST_DUMP_DIR set, the + image is also written there as -.png so a failure + can be looked at. + */ + inline QImage grab(QWidget *widget, const char *name) + { + const QImage image = widget->grab().toImage(); + const QByteArray dir = qgetenv("QET_TEST_DUMP_DIR"); + if (!dir.isEmpty()) + image.save(QString("%1/%2-%3.png").arg(QString::fromLocal8Bit(dir), + QTest::currentDataTag(), name)); + return image; + } + + /** + Contrast between the background of a rendered widget (its most + frequent color) and the ink drawn on it (the pixel whose + luminance differs most from the background), inside rect. + */ + inline double inkContrast(const QImage &image, const QRect &rect) + { + QHash histogram; + for (int y = rect.top(); y <= rect.bottom(); ++y) + for (int x = rect.left(); x <= rect.right(); ++x) + ++histogram[image.pixel(x, y)]; + + QRgb background = 0; + int best = -1; + for (auto it = histogram.cbegin(); it != histogram.cend(); ++it) + if (it.value() > best) { best = it.value(); background = it.key(); } + + double contrast = 1.0; + for (auto it = histogram.cbegin(); it != histogram.cend(); ++it) + contrast = qMax(contrast, QET::Palette::contrastRatio(QColor(background), + QColor(it.key()))); + return contrast; + } + } +} + +#endif diff --git a/tests/qttest/tst_qeticons.cpp b/tests/qttest/tst_qeticons.cpp new file mode 100644 index 000000000..af5966d0d --- /dev/null +++ b/tests/qttest/tst_qeticons.cpp @@ -0,0 +1,166 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech 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 2 of the License, or + (at your option) any later version. + + QElectroTech 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 QElectroTech. If not, see . +*/ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "inkcontrast.h" +#include "qeticons.h" +#include "qetpalette.h" + +/** + Checks on QET's icon theme "qet", generated by misc/make_icon_themes.py + into ico/icon-themes.qrc, and on the icon table that uses it. + + Every icon name must resolve. A toolbar button painted with Fusion must + show its icon at 3:1 (WCAG 1.4.11), with the disabled state reading + weaker than the enabled one. And the icons the elements panel draws in + its 50 px slots must stay small (GitHub #870). +*/ +class tst_qeticons : public QObject +{ + Q_OBJECT + + private slots: + void initTestCase(); + void everyIconResolves(); + void toolbarIconIsReadable_data(); + void toolbarIconIsReadable(); + void panelProjectIconStaysSmall(); +}; + +namespace { + const double kIconRatio = 3.0; + + QStringList iconNames(const QString &theme) + { + QStringList names; + for (const QString &size : {"16x16", "22x22", "32x32", "48x48", "128x128", "scalable"}) + { + QDir dir(QString(":/ico/themes/%1/%2").arg(theme, size)); + for (const QString &file : dir.entryList(QDir::Files)) + names << file.section('.', 0, -2); + } + names.removeDuplicates(); + names.sort(); + return names; + } +} + +void tst_qeticons::initTestCase() +{ + QStringList paths = QIcon::themeSearchPaths(); + paths.prepend(QStringLiteral(":/ico/themes")); + QIcon::setThemeSearchPaths(paths); + QIcon::setThemeName(QStringLiteral("qet")); + QVERIFY2(!iconNames("qet").isEmpty(), "theme has no icons: is ico/icon-themes.qrc compiled in?"); +} + +void tst_qeticons::everyIconResolves() +{ + QVERIFY(QIcon::hasThemeIcon("list-add")); + for (const QString &name : iconNames("qet")) + QVERIFY2(!QIcon::fromTheme(name).isNull(), qPrintable(QString("%1 missing").arg(name))); + // Names the icon table relies on that come from the alias list in + // misc/make_icon_themes.py, not from a file of that name at 22 pixels. + for (const QString &name : {"folio-new", "folio-delete", "folio-properties", "conductor-reset"}) + QVERIFY2(!QIcon::fromTheme(name).pixmap(22).isNull(), qPrintable(name)); +} + +void tst_qeticons::toolbarIconIsReadable_data() +{ + QTest::addColumn("palette"); + QTest::newRow("light") << QET::Palette::fusionLight(); +} + +/** + A line-art icon on a Fusion tool button, as in the diagram editor + toolbar. Enabled must reach 3:1; disabled must be weaker than enabled. +*/ +void tst_qeticons::toolbarIconIsReadable() +{ + QFETCH(QPalette, palette); + QApplication::setStyle(QStyleFactory::create("Fusion")); + QApplication::setPalette(palette); + + QMainWindow window; + QToolBar *toolbar = window.addToolBar("view"); + auto make = [&](const char *name, bool enabled) { + auto *button = new QToolButton; + button->setIcon(QIcon::fromTheme("zoom-fit-best")); + button->setAutoRaise(true); + button->setEnabled(enabled); + button->setObjectName(name); + toolbar->addWidget(button); + return button; + }; + QToolButton *enabled = make("enabled", true); + QToolButton *disabled = make("disabled", false); + window.resize(300, 100); + window.show(); + QVERIFY(QTest::qWaitForWindowExposed(&window)); + + const double enabled_contrast = QET::Test::inkContrast(QET::Test::grab(enabled, "enabled"), enabled->rect()); + const double disabled_contrast = QET::Test::inkContrast(QET::Test::grab(disabled, "disabled"), disabled->rect()); + QVERIFY2(enabled_contrast >= kIconRatio, + qPrintable(QString("enabled icon: %1").arg(enabled_contrast))); + QVERIFY2(disabled_contrast < enabled_contrast, + qPrintable(QString("disabled %1 reads better than enabled %2") + .arg(disabled_contrast).arg(enabled_contrast))); +} + +/** + The elements panel sets a 50 px icon size so element previews are + large. Its project root item uses ProjectFileGP, whose theme name also + has a 128 px file for the configuration dialog. On a 2x display the + theme loader would pick that file for a 50 px request and fill the + slot, so the entry must not resolve through the theme name. +*/ +void tst_qeticons::panelProjectIconStaysSmall() +{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QSKIP("QIcon::pixmap(size, devicePixelRatio) needs Qt 6"); +#else + QET::Icons::initIcons(); + + const QPixmap panel = QET::Icons::ProjectFileGP.pixmap(QSize(50, 50), 2.0); + QVERIFY(!panel.isNull()); + const int logical = qRound(panel.width() / panel.devicePixelRatio()); + QVERIFY2(logical <= 22, qPrintable(QString("project root icon is %1 px in a 50 px slot").arg(logical))); + + // The configuration dialog's page list still gets the large file. + QCOMPARE(QET::Icons::Projects.pixmap(QSize(128, 128), 1.0).width(), 128); +#endif +} + +int main(int argc, char **argv) +{ + if (qEnvironmentVariableIsEmpty("QT_QPA_PLATFORM")) + qputenv("QT_QPA_PLATFORM", "offscreen"); + QApplication app(argc, argv); + tst_qeticons test; + QTEST_SET_MAIN_SOURCE_PATH + return QTest::qExec(&test, argc, argv); +} + +#include "tst_qeticons.moc" diff --git a/tests/qttest/tst_qetpalette.cpp b/tests/qttest/tst_qetpalette.cpp index 7cc589bdd..ccbe07f15 100644 --- a/tests/qttest/tst_qetpalette.cpp +++ b/tests/qttest/tst_qetpalette.cpp @@ -28,9 +28,12 @@ #include #include +#include "inkcontrast.h" #include "qetpalette.h" using QET::Palette::contrastRatio; +using QET::Test::grab; +using QET::Test::inkContrast; /** Contrast checks for the palettes QET installs under the Fusion style. @@ -94,44 +97,6 @@ namespace { {"Link/Window", QPalette::Link, QPalette::Window}, }; - /** - Grab a widget for measuring. With QET_TEST_DUMP_DIR set, the image - is also written there as -.png so a failure can be - looked at. - */ - QImage grab(QWidget *widget, const char *name) - { - const QImage image = widget->grab().toImage(); - const QByteArray dir = qgetenv("QET_TEST_DUMP_DIR"); - if (!dir.isEmpty()) - image.save(QString("%1/%2-%3.png").arg(QString::fromLocal8Bit(dir), - QTest::currentDataTag(), name)); - return image; - } - - /** - Contrast between the background of a rendered widget (its most - frequent color) and the ink drawn on it (the pixel whose luminance - differs most from the background), inside rect. - */ - double inkContrast(const QImage &image, const QRect &rect) - { - QHash histogram; - for (int y = rect.top(); y <= rect.bottom(); ++y) - for (int x = rect.left(); x <= rect.right(); ++x) - ++histogram[image.pixel(x, y)]; - - QRgb background = 0; - int best = -1; - for (auto it = histogram.cbegin(); it != histogram.cend(); ++it) - if (it.value() > best) { best = it.value(); background = it.key(); } - - double contrast = 1.0; - for (auto it = histogram.cbegin(); it != histogram.cend(); ++it) - contrast = qMax(contrast, contrastRatio(QColor(background), - QColor(it.key()))); - return contrast; - } } void tst_qetpalette::addPaletteRows()