From e60ba5bedbfb87168e0c4295adfebc3e429241e2 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 5 Aug 2023 17:51:23 +0300 Subject: [PATCH] Support for dark theme for custom icons. --- src/app/puzzle/carousel/vpcarrouselpiece.cpp | 60 ++-- src/app/puzzle/carousel/vpcarrouselpiece.h | 2 + .../puzzle/carousel/vpcarrouselpiecelist.cpp | 119 ++++--- .../puzzle/carousel/vpcarrouselpiecelist.h | 8 +- .../puzzlepreferenceslayoutpage.ui | 8 +- src/app/puzzle/layout/vpsheet.cpp | 8 + src/app/puzzle/main.cpp | 1 + src/app/puzzle/scene/vpgraphicspiece.cpp | 23 +- .../puzzle/scene/vpgraphicspiececontrols.cpp | 70 ++-- .../puzzle/scene/vpgraphicspiececontrols.h | 50 +-- src/app/puzzle/scene/vpgraphicssheet.cpp | 78 ++-- src/app/puzzle/scene/vpgraphicstilegrid.cpp | 79 ++-- src/app/puzzle/share/resources/puzzleicon.qrc | 31 +- .../share/resources/puzzleicon/16x16/roll.png | Bin 241 -> 0 bytes .../resources/puzzleicon/16x16/template.png | Bin 372 -> 0 bytes .../puzzleicon/32X32/horizontal_grainline.png | Bin 2669 -> 0 bytes .../32X32/horizontal_grainline@2x.png | Bin 4906 -> 0 bytes .../puzzleicon/32X32/vertical_grainline.png | Bin 2719 -> 0 bytes .../32X32/vertical_grainline@2x.png | Bin 4356 -> 0 bytes .../puzzleicon/64x64/cursorRotate.png | Bin 1452 -> 0 bytes .../puzzleicon/64x64/cursorRotate@2x.png | Bin 2838 -> 0 bytes .../dark/32x32/horizontal_grainline.png | Bin 0 -> 878 bytes .../dark/32x32/horizontal_grainline@2x.png | Bin 0 -> 1725 bytes .../dark/32x32/vertical_grainline.png | Bin 0 -> 968 bytes .../dark/32x32/vertical_grainline@2x.png | Bin 0 -> 1803 bytes .../dark/64x64/iconCurrentPiece.png | Bin 0 -> 1405 bytes .../dark/64x64/iconCurrentPiece@2x.png | Bin 0 -> 2891 bytes .../puzzleicon/dark/64x64/iconTiles.png | Bin 0 -> 615 bytes .../puzzleicon/dark/64x64/iconTiles@2x.png | Bin 0 -> 757 bytes .../light/32x32/horizontal_grainline.png | Bin 0 -> 765 bytes .../light/32x32/horizontal_grainline@2x.png | Bin 0 -> 1541 bytes .../light/32x32/vertical_grainline.png | Bin 0 -> 831 bytes .../light/32x32/vertical_grainline@2x.png | Bin 0 -> 1566 bytes .../{ => light}/64x64/iconCurrentPiece.png | Bin .../{ => light}/64x64/iconCurrentPiece@2x.png | Bin .../{ => light}/64x64/iconTiles.png | Bin .../{ => light}/64x64/iconTiles@2x.png | Bin .../svg/dark/horizontal_grainline.svg | 56 +++ .../svg/dark/icon_current_piece.svg | 78 ++++ .../puzzleicon/svg/dark/icon_tiles.svg | 94 +++++ .../svg/dark/no_watermark_image.svg | 83 +++++ .../svg/dark/vertical_grainline.svg | 56 +++ .../svg/icon_grainline_horizontal.svg | 64 ---- .../svg/icon_grainline_vertical.svg | 64 ---- .../puzzleicon/svg/icon_landscape.svg | 75 ---- .../svg/icon_rotate_90_anticlockwise.svg | 79 ---- .../svg/icon_rotate_90_clockwise.svg | 79 ---- .../svg/icon_rotate_grainline_horizontal.svg | 77 ---- .../svg/icon_rotate_grainline_vertical.svg | 77 ---- .../svg/light/horizontal_grainline.svg | 56 +++ .../svg/{ => light}/icon_current_piece.svg | 0 .../icon_layers.svg} | 43 ++- .../puzzleicon/svg/{ => light}/icon_tiles.svg | 0 .../svg/{ => light}/no_watermark_image.svg | 0 .../svg/light/vertical_grainline.svg | 56 +++ .../share/resources/puzzleicon/svg/roll.svg | 49 +++ src/app/puzzle/vpmainwindow.cpp | 52 ++- src/app/puzzle/vpmainwindow.h | 54 +-- src/app/puzzle/vpmainwindow.ui | 24 +- src/app/puzzle/vptilefactory.cpp | 22 +- src/app/puzzle/vptilefactory.h | 3 +- src/app/tape/dialogs/dialognewmeasurements.ui | 14 +- .../tape/dialogs/dialogrestrictdimension.cpp | 48 +-- .../tape/dialogs/dialogtapepreferences.cpp | 15 +- src/app/tape/main.cpp | 11 +- src/app/tape/mapplication.cpp | 9 + src/app/tape/share/resources/tapeicon.qrc | 8 +- .../share/resources/tapeicon/24x24/fx.png | Bin 697 -> 0 bytes .../resources/tapeicon/24x24/mannequin.png | Bin 520 -> 0 bytes .../tapeicon/24x24/padlock_locked.png | Bin 479 -> 572 bytes .../tapeicon/24x24/padlock_locked@2x.png | Bin 0 -> 1045 bytes .../tapeicon/24x24/padlock_opened.png | Bin 517 -> 561 bytes .../tapeicon/24x24/padlock_opened@2x.png | Bin 0 -> 1018 bytes .../tapeicon/dark/24x24/mannequin.png | Bin 0 -> 948 bytes .../tapeicon/dark/24x24/mannequin@2x.png | Bin 0 -> 1883 bytes .../tapeicon/light/24x24/mannequin.png | Bin 0 -> 707 bytes .../tapeicon/light/24x24/mannequin@2x.png | Bin 0 -> 1351 bytes .../resources/tapeicon/svg/dark/mannequin.svg | 43 +++ .../tapeicon/svg/light/mannequin.svg | 41 +++ .../resources/tapeicon/svg/padlock_locked.svg | 104 ++++++ .../resources/tapeicon/svg/padlock_opened.svg | 103 ++++++ src/app/tape/tmainwindow.cpp | 70 ++-- src/app/tape/tmainwindow.h | 65 ++-- src/app/tape/tmainwindow.ui | 43 ++- .../core/vtooloptionspropertybrowser.cpp | 168 +++++++-- .../core/vtooloptionspropertybrowser.h | 139 +++----- .../dialogs/dialogfinalmeasurements.cpp | 21 +- .../dialogs/dialogfinalmeasurements.h | 21 +- .../dialogs/dialogfinalmeasurements.ui | 16 +- src/app/valentina/dialogs/dialoghistory.ui | 4 +- .../valentina/dialogs/dialogincrements.cpp | 19 + src/app/valentina/dialogs/dialogincrements.h | 30 +- src/app/valentina/dialogs/dialogincrements.ui | 32 +- .../valentina/dialogs/dialogknownmaterials.ui | 4 +- .../dialogs/dialoglayoutprogress.cpp | 62 ++-- .../valentina/dialogs/dialoglayoutprogress.h | 2 +- .../valentina/dialogs/dialoglayoutsettings.ui | 4 +- .../valentina/dialogs/dialogpreferences.cpp | 15 +- src/app/valentina/dialogs/dialogsavelayout.ui | 6 +- .../dialogs/vwidgetbackgroundimages.cpp | 149 ++++---- .../dialogs/vwidgetbackgroundimages.ui | 8 +- src/app/valentina/dialogs/vwidgetgroups.cpp | 104 +++--- src/app/valentina/main.cpp | 15 +- src/app/valentina/mainwindow.cpp | 183 +++++----- src/app/valentina/mainwindowsnogui.cpp | 15 +- src/libs/fervor/fvupdatewindow.cpp | 17 +- src/libs/ifc/ifcdef.cpp | 20 +- src/libs/ifc/ifcdef.h | 6 +- src/libs/vdxf/vdxfengine.cpp | 1 - src/libs/vgeometry/vspline_p.h | 20 +- src/libs/vlayout/dialogs/dialoglayoutscale.ui | 2 +- src/libs/vlayout/dialogs/watermarkwindow.cpp | 157 ++++---- src/libs/vlayout/dialogs/watermarkwindow.ui | 2 +- src/libs/vlayout/vgraphicsfillitem.cpp | 16 +- src/libs/vlayout/vgraphicsfillitem.h | 17 +- src/libs/vlayout/vlayoutpaper.cpp | 1 - src/libs/vlayout/vlayoutpiece.cpp | 8 +- src/libs/vlayout/vposition.cpp | 132 ++++--- src/libs/vlayout/vposter.cpp | 112 +++--- src/libs/vlayout/vtextmanager.h | 1 - src/libs/vmisc/def.h | 1 - src/libs/vmisc/qxtcsvmodel.cpp | 83 ++--- src/libs/vmisc/qxtcsvmodel.h | 1 - .../breezethemes/dark/stylesheet.qss | 38 +- src/libs/vmisc/share/resources/icon.qrc | 205 +++++++---- .../share/resources/icon/16x16/closed_eye.png | Bin 254 -> 0 bytes .../resources/icon/16x16/closed_eye@2x.png | Bin 479 -> 0 bytes .../vmisc/share/resources/icon/16x16/fx.png | Bin 533 -> 0 bytes .../share/resources/icon/16x16/hold_image.png | Bin 1681 -> 0 bytes .../resources/icon/16x16/hold_image@2x.png | Bin 1990 -> 0 bytes .../resources/icon/16x16/not_hold_image.png | Bin 1682 -> 0 bytes .../icon/16x16/not_hold_image@2x.png | Bin 1981 -> 0 bytes .../share/resources/icon/16x16/open_eye.png | Bin 275 -> 0 bytes .../resources/icon/16x16/open_eye@2x.png | Bin 546 -> 0 bytes .../share/resources/icon/16x16/progress.gif | Bin 1431 -> 0 bytes .../vmisc/share/resources/icon/16x16/roll.png | Bin 241 -> 292 bytes .../share/resources/icon/16x16/roll@2x.png | Bin 0 -> 483 bytes .../share/resources/icon/24x24/close.png | Bin 548 -> 351 bytes .../share/resources/icon/24x24/close@2x.png | Bin 753 -> 689 bytes .../share/resources/icon/24x24/equal.png | Bin 98 -> 0 bytes .../fast_forward_left_to_right_arrow.png | Bin 687 -> 0 bytes .../fast_forward_right_to_left_arrow.png | Bin 687 -> 0 bytes .../vmisc/share/resources/icon/24x24/fx.png | Bin 941 -> 0 bytes .../icon/24x24/left_to_right_arrow.png | Bin 568 -> 0 bytes .../vmisc/share/resources/icon/24x24/star.png | Bin 659 -> 599 bytes .../share/resources/icon/24x24/star@2x.png | Bin 827 -> 1163 bytes .../share/resources/icon/32x32/clockwise.png | Bin 382 -> 0 bytes .../double-arrow-horizontal-disabled.png | Bin 2930 -> 0 bytes .../double-arrow-horizontal-disabled@2x.png | Bin 5115 -> 0 bytes .../32x32/double-arrow-horizontal-hover.png | Bin 634 -> 0 bytes .../double-arrow-horizontal-hover@2x.png | Bin 1054 -> 0 bytes .../icon/32x32/double-arrow-horizontal.png | Bin 310 -> 0 bytes .../icon/32x32/double-arrow-horizontal@2x.png | Bin 501 -> 0 bytes .../32x32/double-arrow-vertical-disabled.png | Bin 3103 -> 0 bytes .../double-arrow-vertical-disabled@2x.png | Bin 5605 -> 0 bytes .../32x32/double-arrow-vertical-hover.png | Bin 758 -> 0 bytes .../32x32/double-arrow-vertical-hover@2x.png | Bin 1504 -> 0 bytes .../icon/32x32/double-arrow-vertical.png | Bin 316 -> 0 bytes .../icon/32x32/double-arrow-vertical@2x.png | Bin 575 -> 0 bytes .../resources/icon/32x32/expand1-disabled.png | Bin 3681 -> 0 bytes .../icon/32x32/expand1-disabled@2x.png | Bin 7292 -> 0 bytes .../resources/icon/32x32/expand1-hover.png | Bin 3846 -> 0 bytes .../resources/icon/32x32/expand1-hover@2x.png | Bin 7417 -> 0 bytes .../share/resources/icon/32x32/expand1.png | Bin 1680 -> 0 bytes .../share/resources/icon/32x32/expand1@2x.png | Bin 1979 -> 0 bytes .../resources/icon/32x32/expand2-disabled.png | Bin 3743 -> 0 bytes .../icon/32x32/expand2-disabled@2x.png | Bin 7417 -> 0 bytes .../resources/icon/32x32/expand2-hover.png | Bin 1495 -> 0 bytes .../resources/icon/32x32/expand2-hover@2x.png | Bin 3241 -> 0 bytes .../share/resources/icon/32x32/expand2.png | Bin 484 -> 0 bytes .../share/resources/icon/32x32/expand2@2x.png | Bin 899 -> 0 bytes .../share/resources/icon/32x32/put_after.png | Bin 410 -> 0 bytes .../32x32/rotate-bottom-left-disabled.png | Bin 3542 -> 0 bytes .../32x32/rotate-bottom-left-disabled@2x.png | Bin 6319 -> 0 bytes .../icon/32x32/rotate-bottom-left-hover.png | Bin 1233 -> 0 bytes .../32x32/rotate-bottom-left-hover@2x.png | Bin 2555 -> 0 bytes .../icon/32x32/rotate-bottom-left.png | Bin 609 -> 0 bytes .../icon/32x32/rotate-bottom-left@2x.png | Bin 1265 -> 0 bytes .../32x32/rotate-bottom-right-disabled.png | Bin 3485 -> 0 bytes .../32x32/rotate-bottom-right-disabled@2x.png | Bin 6357 -> 0 bytes .../icon/32x32/rotate-bottom-right-hover.png | Bin 1206 -> 0 bytes .../32x32/rotate-bottom-right-hover@2x.png | Bin 2440 -> 0 bytes .../icon/32x32/rotate-bottom-right.png | Bin 599 -> 0 bytes .../icon/32x32/rotate-bottom-right@2x.png | Bin 1243 -> 0 bytes .../icon/32x32/rotate-top-left-disabled.png | Bin 3565 -> 0 bytes .../32x32/rotate-top-left-disabled@2x.png | Bin 6195 -> 0 bytes .../icon/32x32/rotate-top-left-hover.png | Bin 1245 -> 0 bytes .../icon/32x32/rotate-top-left-hover@2x.png | Bin 2402 -> 0 bytes .../resources/icon/32x32/rotate-top-left.png | Bin 612 -> 0 bytes .../icon/32x32/rotate-top-left@2x.png | Bin 1192 -> 0 bytes .../icon/32x32/rotate-top-right-disabled.png | Bin 3571 -> 0 bytes .../32x32/rotate-top-right-disabled@2x.png | Bin 6309 -> 0 bytes .../icon/32x32/rotate-top-right-hover.png | Bin 1283 -> 0 bytes .../icon/32x32/rotate-top-right-hover@2x.png | Bin 2605 -> 0 bytes .../resources/icon/32x32/rotate-top-right.png | Bin 606 -> 0 bytes .../icon/32x32/rotate-top-right@2x.png | Bin 1252 -> 0 bytes .../resources/icon/dark/16x16/closed_eye.png | Bin 0 -> 547 bytes .../icon/dark/16x16/closed_eye@2x.png | Bin 0 -> 1090 bytes .../share/resources/icon/dark/16x16/fx.png | Bin 0 -> 357 bytes .../share/resources/icon/dark/16x16/fx@2x.png | Bin 0 -> 566 bytes .../resources/icon/dark/16x16/hold_image.png | Bin 0 -> 413 bytes .../icon/dark/16x16/hold_image@2x.png | Bin 0 -> 724 bytes .../icon/dark/16x16/not_hold_image.png | Bin 0 -> 434 bytes .../icon/dark/16x16/not_hold_image@2x.png | Bin 0 -> 775 bytes .../resources/icon/dark/16x16/open_eye.png | Bin 0 -> 537 bytes .../resources/icon/dark/16x16/open_eye@2x.png | Bin 0 -> 1112 bytes .../resources/icon/dark/16x16/progress.gif | Bin 0 -> 15703 bytes .../share/resources/icon/dark/24x24/equal.png | Bin 0 -> 263 bytes .../resources/icon/dark/24x24/equal@2x.png | Bin 0 -> 343 bytes .../share/resources/icon/dark/24x24/fx.png | Bin 0 -> 378 bytes .../share/resources/icon/dark/24x24/fx@2x.png | Bin 0 -> 725 bytes .../icon/dark/24x24/go-next-skip.png | Bin 0 -> 264 bytes .../icon/dark/24x24/go-next-skip@2x.png | Bin 0 -> 459 bytes .../resources/icon/dark/24x24/go-next.png | Bin 0 -> 276 bytes .../resources/icon/dark/24x24/go-next@2x.png | Bin 0 -> 437 bytes .../icon/dark/24x24/go-previous-skip.png | Bin 0 -> 268 bytes .../icon/dark/24x24/go-previous-skip@2x.png | Bin 0 -> 464 bytes .../resources/icon/dark/24x24/go-previous.png | Bin 0 -> 275 bytes .../icon/dark/24x24/go-previous@2x.png | Bin 0 -> 450 bytes .../resources/icon/dark/32x32/clockwise.png | Bin 0 -> 1041 bytes .../icon/dark/32x32/clockwise@2x.png | Bin 0 -> 1960 bytes .../double-arrow-horizontal-disabled.png | Bin 0 -> 769 bytes .../double-arrow-horizontal-disabled@2x.png | Bin 0 -> 1611 bytes .../32x32/double-arrow-horizontal-hover.png | Bin 0 -> 807 bytes .../double-arrow-horizontal-hover@2x.png | Bin 0 -> 1676 bytes .../dark/32x32/double-arrow-horizontal.png | Bin 0 -> 590 bytes .../dark/32x32/double-arrow-horizontal@2x.png | Bin 0 -> 1186 bytes .../32x32/double-arrow-vertical-disabled.png | Bin 0 -> 926 bytes .../double-arrow-vertical-disabled@2x.png | Bin 0 -> 1643 bytes .../32x32/double-arrow-vertical-hover.png | Bin 0 -> 934 bytes .../32x32/double-arrow-vertical-hover@2x.png | Bin 0 -> 1714 bytes .../icon/dark/32x32/double-arrow-vertical.png | Bin 0 -> 677 bytes .../dark/32x32/double-arrow-vertical@2x.png | Bin 0 -> 1196 bytes .../resources/icon/dark/32x32/put_after.png | Bin 0 -> 625 bytes .../icon/dark/32x32/put_after@2x.png | Bin 0 -> 1157 bytes .../32x32/rotate-bottom-left-disabled.png | Bin 0 -> 1098 bytes .../32x32/rotate-bottom-left-disabled@2x.png | Bin 0 -> 2298 bytes .../dark/32x32/rotate-bottom-left-hover.png | Bin 0 -> 1183 bytes .../32x32/rotate-bottom-left-hover@2x.png | Bin 0 -> 2558 bytes .../icon/dark/32x32/rotate-bottom-left.png | Bin 0 -> 824 bytes .../icon/dark/32x32/rotate-bottom-left@2x.png | Bin 0 -> 1644 bytes .../32x32/rotate-bottom-right-disabled.png | Bin 0 -> 1076 bytes .../32x32/rotate-bottom-right-disabled@2x.png | Bin 0 -> 2177 bytes .../dark/32x32/rotate-bottom-right-hover.png | Bin 0 -> 1185 bytes .../32x32/rotate-bottom-right-hover@2x.png | Bin 0 -> 2426 bytes .../icon/dark/32x32/rotate-bottom-right.png | Bin 0 -> 803 bytes .../dark/32x32/rotate-bottom-right@2x.png | Bin 0 -> 1533 bytes .../dark/32x32/rotate-top-left-disabled.png | Bin 0 -> 1130 bytes .../32x32/rotate-top-left-disabled@2x.png | Bin 0 -> 2250 bytes .../icon/dark/32x32/rotate-top-left-hover.png | Bin 0 -> 1219 bytes .../dark/32x32/rotate-top-left-hover@2x.png | Bin 0 -> 2541 bytes .../icon/dark/32x32/rotate-top-left.png | Bin 0 -> 803 bytes .../icon/dark/32x32/rotate-top-left@2x.png | Bin 0 -> 1578 bytes .../dark/32x32/rotate-top-right-disabled.png | Bin 0 -> 1146 bytes .../32x32/rotate-top-right-disabled@2x.png | Bin 0 -> 2128 bytes .../dark/32x32/rotate-top-right-hover.png | Bin 0 -> 1213 bytes .../dark/32x32/rotate-top-right-hover@2x.png | Bin 0 -> 2387 bytes .../icon/dark/32x32/rotate-top-right.png | Bin 0 -> 830 bytes .../icon/dark/32x32/rotate-top-right@2x.png | Bin 0 -> 1516 bytes .../resources/icon/light/16x16/closed_eye.png | Bin 0 -> 391 bytes .../icon/light/16x16/closed_eye@2x.png | Bin 0 -> 685 bytes .../share/resources/icon/light/16x16/fx.png | Bin 0 -> 359 bytes .../resources/icon/light/16x16/fx@2x.png | Bin 0 -> 571 bytes .../resources/icon/light/16x16/hold_image.png | Bin 0 -> 344 bytes .../icon/light/16x16/hold_image@2x.png | Bin 0 -> 544 bytes .../icon/light/16x16/not_hold_image.png | Bin 0 -> 348 bytes .../icon/light/16x16/not_hold_image@2x.png | Bin 0 -> 585 bytes .../resources/icon/light/16x16/open_eye.png | Bin 0 -> 391 bytes .../icon/light/16x16/open_eye@2x.png | Bin 0 -> 696 bytes .../resources/icon/light/16x16/progress.gif | Bin 0 -> 14138 bytes .../resources/icon/light/24x24/equal.png | Bin 0 -> 238 bytes .../resources/icon/light/24x24/equal@2x.png | Bin 0 -> 330 bytes .../share/resources/icon/light/24x24/fx.png | Bin 0 -> 387 bytes .../resources/icon/light/24x24/fx@2x.png | Bin 0 -> 758 bytes .../icon/light/24x24/go-next-skip.png | Bin 0 -> 278 bytes .../icon/light/24x24/go-next-skip@2x.png | Bin 0 -> 480 bytes .../resources/icon/light/24x24/go-next.png | Bin 0 -> 267 bytes .../resources/icon/light/24x24/go-next@2x.png | Bin 0 -> 464 bytes .../icon/light/24x24/go-previous-skip.png | Bin 0 -> 282 bytes .../icon/light/24x24/go-previous-skip@2x.png | Bin 0 -> 480 bytes .../icon/light/24x24/go-previous.png | Bin 0 -> 271 bytes .../icon/light/24x24/go-previous@2x.png | Bin 0 -> 466 bytes .../resources/icon/light/32x32/clockwise.png | Bin 0 -> 710 bytes .../icon/light/32x32/clockwise@2x.png | Bin 0 -> 1414 bytes .../double-arrow-horizontal-disabled.png | Bin 0 -> 607 bytes .../double-arrow-horizontal-disabled@2x.png | Bin 0 -> 1199 bytes .../32x32/double-arrow-horizontal-hover.png | Bin 0 -> 709 bytes .../double-arrow-horizontal-hover@2x.png | Bin 0 -> 1458 bytes .../light/32x32/double-arrow-horizontal.png | Bin 0 -> 479 bytes .../32x32/double-arrow-horizontal@2x.png | Bin 0 -> 904 bytes .../32x32/double-arrow-vertical-disabled.png | Bin 0 -> 632 bytes .../double-arrow-vertical-disabled@2x.png | Bin 0 -> 1083 bytes .../32x32/double-arrow-vertical-hover.png | Bin 0 -> 804 bytes .../32x32/double-arrow-vertical-hover@2x.png | Bin 0 -> 1488 bytes .../light/32x32/double-arrow-vertical.png | Bin 0 -> 496 bytes .../light/32x32/double-arrow-vertical@2x.png | Bin 0 -> 866 bytes .../icon/light/32x32/expand1-disabled.png | Bin 0 -> 823 bytes .../icon/light/32x32/expand1-disabled@2x.png | Bin 0 -> 1694 bytes .../icon/light/32x32/expand1-hover.png | Bin 0 -> 1272 bytes .../icon/light/32x32/expand1-hover@2x.png | Bin 0 -> 2493 bytes .../resources/icon/light/32x32/expand1.png | Bin 0 -> 742 bytes .../resources/icon/light/32x32/expand1@2x.png | Bin 0 -> 1534 bytes .../icon/light/32x32/expand2-disabled.png | Bin 0 -> 860 bytes .../icon/light/32x32/expand2-disabled@2x.png | Bin 0 -> 1760 bytes .../icon/light/32x32/expand2-hover.png | Bin 0 -> 1328 bytes .../icon/light/32x32/expand2-hover@2x.png | Bin 0 -> 2776 bytes .../resources/icon/light/32x32/expand2.png | Bin 0 -> 801 bytes .../resources/icon/light/32x32/expand2@2x.png | Bin 0 -> 1713 bytes .../resources/icon/light/32x32/put_after.png | Bin 0 -> 506 bytes .../icon/light/32x32/put_after@2x.png | Bin 0 -> 911 bytes .../32x32/rotate-bottom-left-disabled.png | Bin 0 -> 946 bytes .../32x32/rotate-bottom-left-disabled@2x.png | Bin 0 -> 2065 bytes .../light/32x32/rotate-bottom-left-hover.png | Bin 0 -> 1094 bytes .../32x32/rotate-bottom-left-hover@2x.png | Bin 0 -> 2343 bytes .../icon/light/32x32/rotate-bottom-left.png | Bin 0 -> 585 bytes .../light/32x32/rotate-bottom-left@2x.png | Bin 0 -> 1273 bytes .../32x32/rotate-bottom-right-disabled.png | Bin 0 -> 941 bytes .../32x32/rotate-bottom-right-disabled@2x.png | Bin 0 -> 2111 bytes .../light/32x32/rotate-bottom-right-hover.png | Bin 0 -> 1072 bytes .../32x32/rotate-bottom-right-hover@2x.png | Bin 0 -> 2269 bytes .../icon/light/32x32/rotate-bottom-right.png | Bin 0 -> 578 bytes .../light/32x32/rotate-bottom-right@2x.png | Bin 0 -> 1208 bytes .../light/32x32/rotate-top-left-disabled.png | Bin 0 -> 1005 bytes .../32x32/rotate-top-left-disabled@2x.png | Bin 0 -> 2023 bytes .../light/32x32/rotate-top-left-hover.png | Bin 0 -> 1133 bytes .../light/32x32/rotate-top-left-hover@2x.png | Bin 0 -> 2321 bytes .../icon/light/32x32/rotate-top-left.png | Bin 0 -> 632 bytes .../icon/light/32x32/rotate-top-left@2x.png | Bin 0 -> 1224 bytes .../light/32x32/rotate-top-right-disabled.png | Bin 0 -> 931 bytes .../32x32/rotate-top-right-disabled@2x.png | Bin 0 -> 1937 bytes .../light/32x32/rotate-top-right-hover.png | Bin 0 -> 1101 bytes .../light/32x32/rotate-top-right-hover@2x.png | Bin 0 -> 2253 bytes .../icon/light/32x32/rotate-top-right.png | Bin 0 -> 571 bytes .../icon/light/32x32/rotate-top-right@2x.png | Bin 0 -> 1179 bytes .../vmisc/share/resources/icon/svg/close.svg | 47 +++ .../resources/icon/svg/dark/clockwise.svg | 48 +++ .../resources/icon/svg/dark/closed_eye.svg | 46 +++ .../dark/double-arrow-horizontal-disabled.svg | 48 +++ .../dark/double-arrow-horizontal-hover.svg | 44 +++ .../icon/svg/dark/double-arrow-horizontal.svg | 48 +++ .../dark/double-arrow-vertical-disabled.svg | 48 +++ .../svg/dark/double-arrow-vertical-hover.svg | 48 +++ .../icon/svg/dark/double-arrow-vertical.svg | 48 +++ .../share/resources/icon/svg/dark/equal.svg | 44 +++ .../icon/svg/dark/expand1-disabled.svg | 45 +++ .../resources/icon/svg/dark/expand1-hover.svg | 45 +++ .../share/resources/icon/svg/dark/expand1.svg | 45 +++ .../icon/svg/dark/expand2-disabled.svg | 44 +++ .../resources/icon/svg/dark/expand2-hover.svg | 44 +++ .../share/resources/icon/svg/dark/expand2.svg | 44 +++ .../share/resources/icon/svg/dark/fx.svg | 14 + .../resources/icon/svg/dark/go-next-skip.svg | 47 +++ .../share/resources/icon/svg/dark/go-next.svg | 44 +++ .../icon/svg/dark/go-previous-skip.svg | 47 +++ .../resources/icon/svg/dark/go-previous.svg | 44 +++ .../resources/icon/svg/dark/hold_image.svg | 46 +++ .../icon/svg/dark/not_hold_image.svg | 46 +++ .../resources/icon/svg/dark/open_eye.svg | 46 +++ .../resources/icon/svg/dark/put_after.svg | 58 +++ .../svg/dark/rotate-bottom-left-disabled.svg | 60 ++++ .../svg/dark/rotate-bottom-left-hover.svg | 61 ++++ .../icon/svg/dark/rotate-bottom-left.svg | 59 +++ .../svg/dark/rotate-bottom-right-disabled.svg | 60 ++++ .../svg/dark/rotate-bottom-right-hover.svg | 61 ++++ .../icon/svg/dark/rotate-bottom-right.svg | 61 ++++ .../svg/dark/rotate-top-left-disabled.svg | 60 ++++ .../icon/svg/dark/rotate-top-left-hover.svg | 61 ++++ .../icon/svg/dark/rotate-top-left.svg | 61 ++++ .../svg/dark/rotate-top-right-disabled.svg | 60 ++++ .../icon/svg/dark/rotate-top-right-hover.svg | 61 ++++ .../icon/svg/dark/rotate-top-right.svg | 61 ++++ .../resources/icon/svg/light/clockwise.svg | 47 +++ .../resources/icon/svg/light/closed_eye.svg | 45 +++ .../double-arrow-horizontal-disabled.svg | 48 +++ .../light/double-arrow-horizontal-hover.svg | 44 +++ .../svg/light/double-arrow-horizontal.svg | 48 +++ .../light/double-arrow-vertical-disabled.svg | 48 +++ .../svg/light/double-arrow-vertical-hover.svg | 48 +++ .../icon/svg/light/double-arrow-vertical.svg | 48 +++ .../share/resources/icon/svg/light/equal.svg | 44 +++ .../icon/svg/light/expand1-disabled.svg | 47 +++ .../icon/svg/light/expand1-hover.svg | 47 +++ .../resources/icon/svg/light/expand1.svg | 47 +++ .../icon/svg/light/expand2-disabled.svg | 47 +++ .../icon/svg/light/expand2-hover.svg | 47 +++ .../resources/icon/svg/light/expand2.svg | 47 +++ .../share/resources/icon/svg/light/fx.svg | 14 + .../resources/icon/svg/light/go-next-skip.svg | 47 +++ .../resources/icon/svg/light/go-next.svg | 44 +++ .../icon/svg/light/go-previous-skip.svg | 47 +++ .../resources/icon/svg/light/go-previous.svg | 44 +++ .../resources/icon/svg/light/hold_image.svg | 45 +++ .../icon/svg/light/not_hold_image.svg | 45 +++ .../resources/icon/svg/light/open_eye.svg | 45 +++ .../resources/icon/svg/light/put_after.svg | 58 +++ .../svg/light/rotate-bottom-left-disabled.svg | 60 ++++ .../svg/light/rotate-bottom-left-hover.svg | 59 +++ .../icon/svg/light/rotate-bottom-left.svg | 61 ++++ .../light/rotate-bottom-right-disabled.svg | 60 ++++ .../svg/light/rotate-bottom-right-hover.svg | 59 +++ .../icon/svg/light/rotate-bottom-right.svg | 61 ++++ .../svg/light/rotate-top-left-disabled.svg | 60 ++++ .../icon/svg/light/rotate-top-left-hover.svg | 59 +++ .../icon/svg/light/rotate-top-left.svg | 59 +++ .../svg/light/rotate-top-right-disabled.svg | 60 ++++ .../icon/svg/light/rotate-top-right-hover.svg | 59 +++ .../icon/svg/light/rotate-top-right.svg | 59 +++ .../vmisc/share/resources/icon/svg/roll.svg | 26 ++ .../vmisc/share/resources/icon/svg/star.svg | 70 ++++ src/libs/vmisc/share/resources/scenestyle.qrc | 6 + .../resources/scenestyle/dark/style.json | 48 +++ .../resources/scenestyle/light/style.json | 45 +++ src/libs/vmisc/theme/themeDef.h | 56 +++ src/libs/vmisc/theme/vmanuallayoutstyle.cpp | 119 +++++++ src/libs/vmisc/theme/vmanuallayoutstyle.h | 170 +++++++++ src/libs/vmisc/theme/vpatternpiecestyle.cpp | 95 +++++ src/libs/vmisc/theme/vpatternpiecestyle.h | 122 +++++++ src/libs/vmisc/theme/vscenestylesheet.cpp | 172 +++++++++ src/libs/vmisc/theme/vscenestylesheet.h | 77 ++++ src/libs/vmisc/theme/vstylesheetstyle.cpp | 152 ++++++++ src/libs/vmisc/theme/vstylesheetstyle.h | 78 ++++ src/libs/vmisc/theme/vtheme.cpp | 15 +- src/libs/vmisc/theme/vtheme.h | 4 + src/libs/vmisc/theme/vtoolstyle.cpp | 158 ++++++++ src/libs/vmisc/theme/vtoolstyle.h | 188 ++++++++++ src/libs/vmisc/vabstractapplication.cpp | 1 - src/libs/vmisc/vmisc.qbs | 14 +- src/libs/vmisc/vtablesearch.cpp | 37 +- .../vpropertyexplorer/checkablemessagebox.cpp | 33 +- .../plugins/Vector3d/vvector3dproperty.h | 31 +- .../vpropertyexplorer/plugins/vboolproperty.h | 1 - .../plugins/vcolorproperty.h | 1 - .../plugins/vemptyproperty.h | 1 - .../vpropertyexplorer/plugins/venumproperty.h | 1 - .../vpropertyexplorer/plugins/vfileproperty.h | 11 +- .../plugins/vfilepropertyeditor.cpp | 70 ++-- .../plugins/vlinecolorproperty.cpp | 37 +- .../plugins/vlinecolorproperty.h | 14 +- .../plugins/vlinetypeproperty.cpp | 27 +- .../plugins/vlinetypeproperty.h | 26 +- .../plugins/vobjectproperty.h | 13 +- .../plugins/vpointfproperty.h | 11 +- .../plugins/vshortcutproperty.h | 7 +- .../plugins/vshortcutpropertyeditor.cpp | 17 +- src/libs/vpropertyexplorer/vproperty.h | 2 +- .../vpropertyexplorer/vpropertyformview.cpp | 55 ++- .../vpropertyexplorer/vpropertyformview.h | 26 +- .../vpropertyexplorer/vpropertyformwidget.cpp | 45 +-- src/libs/vpropertyexplorer/vpropertymodel.h | 19 +- src/libs/vtools/dialogs/dialogtoolbox.cpp | 35 +- src/libs/vtools/dialogs/dialogtoolbox.h | 26 +- .../vtools/dialogs/support/dialogeditlabel.ui | 28 +- .../support/dialogeditwrongformula.cpp | 123 ++++--- .../dialogs/support/dialogeditwrongformula.h | 3 + .../dialogs/support/dialogeditwrongformula.ui | 4 +- .../vtools/dialogs/support/dialogundo.cpp | 27 +- .../vtools/dialogs/tools/dialogalongline.cpp | 82 +++-- .../vtools/dialogs/tools/dialogalongline.h | 3 + .../vtools/dialogs/tools/dialogalongline.ui | 6 +- src/libs/vtools/dialogs/tools/dialogarc.cpp | 106 ++++-- src/libs/vtools/dialogs/tools/dialogarc.h | 3 + src/libs/vtools/dialogs/tools/dialogarc.ui | 18 +- .../dialogs/tools/dialogarcwithlength.cpp | 108 ++++-- .../dialogs/tools/dialogarcwithlength.h | 3 + .../dialogs/tools/dialogarcwithlength.ui | 18 +- .../vtools/dialogs/tools/dialogbisector.cpp | 88 +++-- .../vtools/dialogs/tools/dialogbisector.h | 3 + .../vtools/dialogs/tools/dialogbisector.ui | 6 +- .../dialogs/tools/dialogcubicbezier.cpp | 32 +- .../dialogs/tools/dialogcubicbezierpath.cpp | 41 +-- .../tools/dialogcurveintersectaxis.cpp | 116 +++--- .../dialogs/tools/dialogcurveintersectaxis.h | 3 + .../dialogs/tools/dialogcurveintersectaxis.ui | 6 +- .../vtools/dialogs/tools/dialogcutarc.cpp | 74 ++-- src/libs/vtools/dialogs/tools/dialogcutarc.h | 3 + src/libs/vtools/dialogs/tools/dialogcutarc.ui | 6 +- .../vtools/dialogs/tools/dialogcutspline.cpp | 74 ++-- .../vtools/dialogs/tools/dialogcutspline.h | 3 + .../vtools/dialogs/tools/dialogcutspline.ui | 6 +- .../dialogs/tools/dialogcutsplinepath.cpp | 74 ++-- .../dialogs/tools/dialogcutsplinepath.h | 3 + .../dialogs/tools/dialogcutsplinepath.ui | 6 +- .../dialogs/tools/dialogellipticalarc.cpp | 137 ++++--- .../dialogs/tools/dialogellipticalarc.h | 3 + .../dialogs/tools/dialogellipticalarc.ui | 30 +- .../vtools/dialogs/tools/dialogendline.cpp | 120 ++++--- src/libs/vtools/dialogs/tools/dialogendline.h | 3 + .../vtools/dialogs/tools/dialogendline.ui | 12 +- .../dialogs/tools/dialogflippingbyaxis.cpp | 43 +-- .../dialogs/tools/dialogflippingbyline.cpp | 52 +-- .../vtools/dialogs/tools/dialogheight.cpp | 36 +- src/libs/vtools/dialogs/tools/dialogline.cpp | 21 +- .../dialogs/tools/dialoglineintersectaxis.cpp | 111 +++--- .../dialogs/tools/dialoglineintersectaxis.h | 3 + .../dialogs/tools/dialoglineintersectaxis.ui | 6 +- src/libs/vtools/dialogs/tools/dialogmove.cpp | 171 +++++---- src/libs/vtools/dialogs/tools/dialogmove.h | 2 + src/libs/vtools/dialogs/tools/dialogmove.ui | 18 +- .../vtools/dialogs/tools/dialognormal.cpp | 102 ++++-- src/libs/vtools/dialogs/tools/dialognormal.h | 3 + src/libs/vtools/dialogs/tools/dialognormal.ui | 22 +- .../tools/dialogpointfromcircleandtangent.cpp | 84 +++-- .../tools/dialogpointfromcircleandtangent.h | 3 + .../tools/dialogpointfromcircleandtangent.ui | 6 +- .../dialogs/tools/dialogpointofcontact.cpp | 87 +++-- .../dialogs/tools/dialogpointofcontact.h | 3 + .../dialogs/tools/dialogpointofcontact.ui | 6 +- .../dialogpointofintersectioncircles.cpp | 114 +++--- .../tools/dialogpointofintersectioncircles.h | 3 + .../tools/dialogpointofintersectioncircles.ui | 12 +- .../vtools/dialogs/tools/dialogrotation.cpp | 116 +++--- .../vtools/dialogs/tools/dialogrotation.h | 3 + .../vtools/dialogs/tools/dialogrotation.ui | 6 +- .../dialogs/tools/dialogshoulderpoint.cpp | 83 +++-- .../dialogs/tools/dialogshoulderpoint.h | 3 + .../dialogs/tools/dialogshoulderpoint.ui | 6 +- .../vtools/dialogs/tools/dialogspline.cpp | 43 ++- src/libs/vtools/dialogs/tools/dialogspline.h | 3 + src/libs/vtools/dialogs/tools/dialogspline.ui | 24 +- .../vtools/dialogs/tools/dialogsplinepath.cpp | 197 +++++----- .../vtools/dialogs/tools/dialogsplinepath.h | 3 + .../vtools/dialogs/tools/dialogsplinepath.ui | 24 +- src/libs/vtools/dialogs/tools/dialogtool.cpp | 103 +++--- .../vtools/dialogs/tools/dialogtruedarts.cpp | 55 ++- .../dialogs/tools/piece/dialogpiecepath.cpp | 45 ++- .../dialogs/tools/piece/dialogpiecepath.h | 6 +- .../dialogs/tools/piece/dialogpiecepath.ui | 38 +- .../dialogs/tools/piece/dialogplacelabel.cpp | 146 +++++--- .../dialogs/tools/piece/dialogplacelabel.h | 31 +- .../dialogs/tools/piece/dialogplacelabel.ui | 24 +- .../tools/piece/dialogseamallowance.cpp | 59 +++ .../dialogs/tools/piece/dialogseamallowance.h | 3 + .../dialogs/tools/piece/tabs/tabgrainline.ui | 12 +- .../dialogs/tools/piece/tabs/tablabels.ui | 38 +- .../dialogs/tools/piece/tabs/tabpassmarks.ui | 6 +- .../dialogs/tools/piece/tabs/tabpaths.ui | 28 +- .../vbackgroundimagecontrols.cpp | 336 ++++++++---------- .../operation/flipping/vtoolflippingbyaxis.h | 47 +-- .../operation/vabstractoperation.cpp | 211 ++++++----- .../drawTools/operation/vabstractoperation.h | 49 +-- .../tools/drawTools/operation/vtoolmove.h | 55 +-- .../drawTools/operation/vtoolrotation.cpp | 95 +++-- .../tools/drawTools/operation/vtoolrotation.h | 49 +-- .../drawTools/toolcurve/vabstractspline.cpp | 5 +- .../toolcurve/vtoolarcwithlength.cpp | 1 - .../drawTools/toolcurve/vtoolcubicbezier.cpp | 1 - .../toolcurve/vtoolcubicbezierpath.cpp | 1 - .../toolcurve/vtoolellipticalarc.cpp | 1 - .../tooldoublepoint/vtooldoublepoint.cpp | 45 ++- .../tooldoublepoint/vtooldoublepoint.h | 72 ++-- .../toollinepoint/vtoollinepoint.cpp | 7 +- .../toollinepoint/vtoollinepoint.h | 54 +-- .../toolsinglepoint/vtoolbasepoint.cpp | 32 +- .../toolsinglepoint/vtoolbasepoint.h | 39 +- .../vtoolpointfromarcandtangent.h | 51 +-- .../vtoolpointofintersectioncurves.cpp | 121 +++---- .../toolsinglepoint/vtoolsinglepoint.cpp | 40 +-- .../toolsinglepoint/vtoolsinglepoint.h | 88 +++-- .../drawTools/toolpoint/vabstractpoint.h | 1 - src/libs/vtools/tools/drawTools/vdrawtool.cpp | 31 +- src/libs/vtools/tools/drawTools/vtoolline.cpp | 59 ++- src/libs/vtools/tools/drawTools/vtoolline.h | 94 +++-- .../tools/nodeDetails/vabstractnode.cpp | 23 +- .../vtools/tools/nodeDetails/vnodepoint.cpp | 95 ++--- .../vtools/tools/nodeDetails/vnodepoint.h | 56 +-- .../tools/nodeDetails/vtoolpiecepath.cpp | 30 +- src/libs/vtools/tools/toolsdef.cpp | 20 +- src/libs/vtools/tools/toolsdef.h | 4 +- src/libs/vtools/tools/vabstracttool.h | 1 - src/libs/vtools/tools/vtoolseamallowance.cpp | 7 +- src/libs/vtools/tools/vtoolseamallowance.h | 3 +- .../line/operation/visoperation.cpp | 23 +- .../line/operation/visoperation.h | 23 +- .../line/operation/vistoolflippingbyaxis.cpp | 10 +- .../line/operation/vistoolflippingbyline.cpp | 14 +- .../line/operation/vistoolmove.cpp | 83 ++--- .../line/operation/vistoolrotation.cpp | 51 ++- .../vtools/visualization/line/visline.cpp | 27 +- src/libs/vtools/visualization/line/visline.h | 19 +- .../visualization/line/vistoolalongline.cpp | 42 ++- .../visualization/line/vistoolbisector.cpp | 66 ++-- .../line/vistoolcurveintersectaxis.cpp | 30 +- .../visualization/line/vistoolendline.cpp | 18 +- .../visualization/line/vistoolheight.cpp | 38 +- .../vtools/visualization/line/vistoolline.cpp | 12 +- .../vtools/visualization/line/vistoolline.h | 15 +- .../line/vistoollineintersect.cpp | 43 ++- .../line/vistoollineintersectaxis.cpp | 51 ++- .../visualization/line/vistoolnormal.cpp | 43 ++- .../line/vistoolpointfromarcandtangent.cpp | 40 +-- .../line/vistoolpointfromcircleandtangent.cpp | 49 +-- .../line/vistoolpointofcontact.cpp | 42 +-- .../line/vistoolpointofintersection.cpp | 35 +- .../line/vistoolpointofintersection.h | 2 +- .../line/vistoolpointofintersectionarcs.cpp | 19 +- .../vistoolpointofintersectioncircles.cpp | 45 ++- .../line/vistoolshoulderpoint.cpp | 71 ++-- .../line/vistoolspecialpoint.cpp | 12 +- .../visualization/line/vistooltriangle.cpp | 74 ++-- .../visualization/line/vistooltriangle.h | 26 +- .../visualization/line/vistooltruedarts.cpp | 67 ++-- .../vtools/visualization/path/vispath.cpp | 14 +- src/libs/vtools/visualization/path/vispath.h | 13 +- .../path/vispiecespecialpoints.cpp | 19 +- .../path/vispiecespecialpoints.h | 2 +- .../vtools/visualization/path/vistoolarc.cpp | 48 ++- .../path/vistoolarcwithlength.cpp | 47 ++- .../visualization/path/vistoolcubicbezier.cpp | 47 ++- .../path/vistoolcubicbezierpath.cpp | 109 +++--- .../path/vistoolcubicbezierpath.h | 30 +- .../visualization/path/vistoolcutarc.cpp | 31 +- .../visualization/path/vistoolcutspline.cpp | 30 +- .../path/vistoolcutsplinepath.cpp | 21 +- .../path/vistoolduplicatedetail.cpp | 7 +- .../path/vistoolellipticalarc.cpp | 63 ++-- .../visualization/path/vistoolpiece.cpp | 36 +- .../vtools/visualization/path/vistoolpiece.h | 17 +- .../visualization/path/vistoolpiecepath.cpp | 21 +- .../visualization/path/vistoolpiecepath.h | 2 +- .../path/vistoolpointofintersectioncurves.cpp | 24 +- .../visualization/path/vistoolspline.cpp | 36 +- .../visualization/path/vistoolsplinepath.cpp | 70 ++-- .../vtools/visualization/visualization.cpp | 131 +++---- src/libs/vtools/visualization/visualization.h | 49 +-- src/libs/vwidgets/global.cpp | 13 - src/libs/vwidgets/global.h | 2 - src/libs/vwidgets/scalesceneitems.cpp | 41 ++- src/libs/vwidgets/scalesceneitems.h | 39 +- src/libs/vwidgets/vabstractsimple.h | 10 +- src/libs/vwidgets/vcontrolpointspline.cpp | 60 ++-- src/libs/vwidgets/vcontrolpointspline.h | 17 +- src/libs/vwidgets/vcurvepathitem.cpp | 43 ++- src/libs/vwidgets/vcurvepathitem.h | 39 +- src/libs/vwidgets/vgrainlineitem.cpp | 127 +++---- src/libs/vwidgets/vgrainlineitem.h | 80 +++-- src/libs/vwidgets/vgraphicssimpletextitem.cpp | 99 +++--- src/libs/vwidgets/vgraphicssimpletextitem.h | 107 ++++-- src/libs/vwidgets/vmaingraphicsscene.cpp | 53 +-- src/libs/vwidgets/vmaingraphicsview.h | 1 - src/libs/vwidgets/vscenepoint.cpp | 92 +++-- src/libs/vwidgets/vscenepoint.h | 64 +++- src/libs/vwidgets/vsimplecurve.cpp | 36 +- src/libs/vwidgets/vsimplecurve.h | 27 +- src/libs/vwidgets/vsimplepoint.cpp | 23 +- src/libs/vwidgets/vsimplepoint.h | 34 +- src/libs/vwidgets/vtextgraphicsitem.cpp | 17 +- src/libs/vwidgets/vwidgetpopup.cpp | 19 +- 647 files changed, 12550 insertions(+), 5700 deletions(-) delete mode 100644 src/app/puzzle/share/resources/puzzleicon/16x16/roll.png delete mode 100644 src/app/puzzle/share/resources/puzzleicon/16x16/template.png delete mode 100644 src/app/puzzle/share/resources/puzzleicon/32X32/horizontal_grainline.png delete mode 100644 src/app/puzzle/share/resources/puzzleicon/32X32/horizontal_grainline@2x.png delete mode 100644 src/app/puzzle/share/resources/puzzleicon/32X32/vertical_grainline.png delete mode 100644 src/app/puzzle/share/resources/puzzleicon/32X32/vertical_grainline@2x.png delete mode 100644 src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate.png delete mode 100644 src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate@2x.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/32x32/horizontal_grainline.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/32x32/horizontal_grainline@2x.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/32x32/vertical_grainline.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/32x32/vertical_grainline@2x.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconCurrentPiece.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconCurrentPiece@2x.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconTiles.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconTiles@2x.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/light/32x32/horizontal_grainline.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/light/32x32/horizontal_grainline@2x.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/light/32x32/vertical_grainline.png create mode 100644 src/app/puzzle/share/resources/puzzleicon/light/32x32/vertical_grainline@2x.png rename src/app/puzzle/share/resources/puzzleicon/{ => light}/64x64/iconCurrentPiece.png (100%) rename src/app/puzzle/share/resources/puzzleicon/{ => light}/64x64/iconCurrentPiece@2x.png (100%) rename src/app/puzzle/share/resources/puzzleicon/{ => light}/64x64/iconTiles.png (100%) rename src/app/puzzle/share/resources/puzzleicon/{ => light}/64x64/iconTiles@2x.png (100%) create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/dark/horizontal_grainline.svg create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_current_piece.svg create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_tiles.svg create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/dark/no_watermark_image.svg create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/dark/vertical_grainline.svg delete mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_horizontal.svg delete mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_vertical.svg delete mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/icon_landscape.svg delete mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_anticlockwise.svg delete mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_clockwise.svg delete mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_horizontal.svg delete mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_vertical.svg create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/light/horizontal_grainline.svg rename src/app/puzzle/share/resources/puzzleicon/svg/{ => light}/icon_current_piece.svg (100%) rename src/app/puzzle/share/resources/puzzleicon/svg/{icon_portrait.svg => light/icon_layers.svg} (67%) rename src/app/puzzle/share/resources/puzzleicon/svg/{ => light}/icon_tiles.svg (100%) rename src/app/puzzle/share/resources/puzzleicon/svg/{ => light}/no_watermark_image.svg (100%) create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/light/vertical_grainline.svg create mode 100644 src/app/puzzle/share/resources/puzzleicon/svg/roll.svg delete mode 100644 src/app/tape/share/resources/tapeicon/24x24/fx.png delete mode 100644 src/app/tape/share/resources/tapeicon/24x24/mannequin.png create mode 100644 src/app/tape/share/resources/tapeicon/24x24/padlock_locked@2x.png create mode 100644 src/app/tape/share/resources/tapeicon/24x24/padlock_opened@2x.png create mode 100644 src/app/tape/share/resources/tapeicon/dark/24x24/mannequin.png create mode 100644 src/app/tape/share/resources/tapeicon/dark/24x24/mannequin@2x.png create mode 100644 src/app/tape/share/resources/tapeicon/light/24x24/mannequin.png create mode 100644 src/app/tape/share/resources/tapeicon/light/24x24/mannequin@2x.png create mode 100644 src/app/tape/share/resources/tapeicon/svg/dark/mannequin.svg create mode 100644 src/app/tape/share/resources/tapeicon/svg/light/mannequin.svg create mode 100644 src/app/tape/share/resources/tapeicon/svg/padlock_locked.svg create mode 100644 src/app/tape/share/resources/tapeicon/svg/padlock_opened.svg delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/closed_eye.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/closed_eye@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/fx.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/hold_image.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/hold_image@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/not_hold_image.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/not_hold_image@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/open_eye.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/open_eye@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/16x16/progress.gif create mode 100644 src/libs/vmisc/share/resources/icon/16x16/roll@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/24x24/equal.png delete mode 100644 src/libs/vmisc/share/resources/icon/24x24/fast_forward_left_to_right_arrow.png delete mode 100644 src/libs/vmisc/share/resources/icon/24x24/fast_forward_right_to_left_arrow.png delete mode 100644 src/libs/vmisc/share/resources/icon/24x24/fx.png delete mode 100644 src/libs/vmisc/share/resources/icon/24x24/left_to_right_arrow.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/clockwise.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand1-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand1-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand1-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand1-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand1.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand1@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand2-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand2-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand2-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand2-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand2.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/expand2@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/put_after.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-left.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-left@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-disabled.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-disabled@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-hover.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-hover@2x.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-right.png delete mode 100644 src/libs/vmisc/share/resources/icon/32x32/rotate-top-right@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/closed_eye.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/closed_eye@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/fx.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/fx@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/hold_image.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/hold_image@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/not_hold_image.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/not_hold_image@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/open_eye.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/open_eye@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/16x16/progress.gif create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/equal.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/equal@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/fx.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/fx@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-next-skip.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-next-skip@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-next.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-next@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-previous-skip.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-previous-skip@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-previous.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/24x24/go-previous@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/clockwise.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/clockwise@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/put_after.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/put_after@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right.png create mode 100644 src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/closed_eye.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/closed_eye@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/fx.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/fx@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/hold_image.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/hold_image@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/not_hold_image.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/not_hold_image@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/open_eye.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/open_eye@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/16x16/progress.gif create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/equal.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/equal@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/fx.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/fx@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-next-skip.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-next-skip@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-next.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-next@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-previous-skip.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-previous-skip@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-previous.png create mode 100644 src/libs/vmisc/share/resources/icon/light/24x24/go-previous@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/clockwise.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/clockwise@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-vertical-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-vertical-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-vertical-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-vertical-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-vertical.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-vertical@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand1-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand1-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand1-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand1-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand1.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand1@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand2-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand2-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand2-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand2-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand2.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/expand2@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/put_after.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/put_after@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-disabled.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-disabled@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-hover.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-hover@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right.png create mode 100644 src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right@2x.png create mode 100644 src/libs/vmisc/share/resources/icon/svg/close.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/clockwise.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/closed_eye.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/equal.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/expand1-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/expand1-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/expand1.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/expand2-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/expand2-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/expand2.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/fx.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/go-next-skip.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/go-next.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/go-previous-skip.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/go-previous.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/hold_image.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/not_hold_image.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/open_eye.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/put_after.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/clockwise.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/closed_eye.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/equal.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/expand1-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/expand1-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/expand1.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/expand2-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/expand2-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/expand2.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/fx.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/go-next-skip.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/go-next.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/go-previous-skip.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/go-previous.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/hold_image.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/not_hold_image.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/open_eye.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/put_after.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-disabled.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-hover.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/roll.svg create mode 100644 src/libs/vmisc/share/resources/icon/svg/star.svg create mode 100644 src/libs/vmisc/share/resources/scenestyle.qrc create mode 100644 src/libs/vmisc/share/resources/scenestyle/dark/style.json create mode 100644 src/libs/vmisc/share/resources/scenestyle/light/style.json create mode 100644 src/libs/vmisc/theme/themeDef.h create mode 100644 src/libs/vmisc/theme/vmanuallayoutstyle.cpp create mode 100644 src/libs/vmisc/theme/vmanuallayoutstyle.h create mode 100644 src/libs/vmisc/theme/vpatternpiecestyle.cpp create mode 100644 src/libs/vmisc/theme/vpatternpiecestyle.h create mode 100644 src/libs/vmisc/theme/vscenestylesheet.cpp create mode 100644 src/libs/vmisc/theme/vscenestylesheet.h create mode 100644 src/libs/vmisc/theme/vstylesheetstyle.cpp create mode 100644 src/libs/vmisc/theme/vstylesheetstyle.h create mode 100644 src/libs/vmisc/theme/vtoolstyle.cpp create mode 100644 src/libs/vmisc/theme/vtoolstyle.h diff --git a/src/app/puzzle/carousel/vpcarrouselpiece.cpp b/src/app/puzzle/carousel/vpcarrouselpiece.cpp index a98903209..cc4261edf 100644 --- a/src/app/puzzle/carousel/vpcarrouselpiece.cpp +++ b/src/app/puzzle/carousel/vpcarrouselpiece.cpp @@ -33,6 +33,7 @@ #include #include "../layout/vppiece.h" +#include "../vmisc/theme/vscenestylesheet.h" #include @@ -44,18 +45,17 @@ Q_LOGGING_CATEGORY(pCarrouselPiece, "p.carrouselPiece") // NOLINT QT_WARNING_POP - //--------------------------------------------------------------------------------------------------------------------- -VPCarrouselPiece::VPCarrouselPiece(const VPPiecePtr &piece, QListWidget* parent) : - QListWidgetItem(parent, Type), +VPCarrouselPiece::VPCarrouselPiece(const VPPiecePtr &piece, QListWidget *parent) + : QListWidgetItem(parent, Type), m_piece(piece) { SCASSERT(m_piece != nullptr) - int width = 120 - 8; - QFontMetrics metrix = QFontMetrics(QFont()); - QString clippedText = metrix.elidedText(piece->GetName(), Qt::ElideRight, width); - setIcon(CreatePieceIcon(QSize(120, 120))); + const int width = 120 - 8; + QString clippedText = QFontMetrics(font()).elidedText(piece->GetName(), Qt::ElideRight, width); + RefreshPieceIcon(); setText(clippedText); + setToolTip(piece->GetName()); } //--------------------------------------------------------------------------------------------------------------------- @@ -74,6 +74,12 @@ void VPCarrouselPiece::RefreshSelection() } } +//--------------------------------------------------------------------------------------------------------------------- +void VPCarrouselPiece::RefreshPieceIcon() +{ + setIcon(CreatePieceIcon(QSize(120, 120))); +} + //--------------------------------------------------------------------------------------------------------------------- auto VPCarrouselPiece::CreatePieceIcon(const QSize &size, bool isDragIcon) const -> QIcon { @@ -93,25 +99,19 @@ auto VPCarrouselPiece::CreatePieceIcon(const QSize &size, bool isDragIcon) const QVector iconModes; iconModes.append(QIcon::Normal); - if(not isDragIcon) + if (not isDragIcon) { iconModes.append(QIcon::Selected); } QIcon icon; - for(auto iconMode : iconModes) + const VManualLayoutStyle &style = VSceneStylesheet::ManualLayoutStyle(); + + for (auto iconMode : iconModes) { QPixmap pixmap(size); - - if(not isDragIcon) - { - pixmap.fill(QColor(Qt::white)); - } - else - { - pixmap.fill(QColor(Qt::transparent)); - } + pixmap.fill(not isDragIcon ? style.CarrouselPieceBackgroundColor() : QColor(Qt::transparent)); QPainter painter; painter.begin(&pixmap); @@ -122,34 +122,28 @@ auto VPCarrouselPiece::CreatePieceIcon(const QSize &size, bool isDragIcon) const painter.translate(spacing, spacing); - qreal scaleFactorX = canvasSize * 100 / (size.width() - spacing*2) / 100; - qreal scaleFactorY = canvasSize * 100 / (size.height() - spacing*2) / 100; - painter.scale(1./scaleFactorX, 1./scaleFactorY); - painter.setPen(QPen(Qt::black, 0.8*qMax(scaleFactorX, scaleFactorY))); + qreal scaleFactorX = canvasSize * 100 / (size.width() - spacing * 2) / 100; + qreal scaleFactorY = canvasSize * 100 / (size.height() - spacing * 2) / 100; + painter.scale(1. / scaleFactorX, 1. / scaleFactorY); + painter.setPen(QPen(style.CarrouselPieceColor(), 0.8 * qMax(scaleFactorX, scaleFactorY))); - if(not isDragIcon) + if (not isDragIcon) { painter.translate(dx, dy); } else { - painter.translate(-boundingRect.topLeft().x()+spacing, -boundingRect.topLeft().y()+spacing); + painter.translate(-boundingRect.topLeft().x() + spacing, -boundingRect.topLeft().y() + spacing); } - if(iconMode == QIcon::Selected) - { - painter.setBrush(QBrush(QColor(255,160,160,60))); - } - else - { - painter.setBrush(QBrush(Qt::white)); - } + painter.setBrush(QBrush(iconMode == QIcon::Selected ? style.CarrouselPieceSelectedColor() + : style.CarrouselPieceForegroundColor())); piece->DrawMiniature(painter); painter.end(); - icon.addPixmap(pixmap,iconMode); + icon.addPixmap(pixmap, iconMode); } return icon; diff --git a/src/app/puzzle/carousel/vpcarrouselpiece.h b/src/app/puzzle/carousel/vpcarrouselpiece.h index a9b0c7782..2dc5b54fa 100644 --- a/src/app/puzzle/carousel/vpcarrouselpiece.h +++ b/src/app/puzzle/carousel/vpcarrouselpiece.h @@ -58,6 +58,8 @@ public: */ void RefreshSelection(); + void RefreshPieceIcon(); + /** * @brief CreatePieceIcon Creates an icon of the piece of given size * @param size of the icon diff --git a/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp b/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp index 037ed73c3..a8f6be62e 100644 --- a/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp +++ b/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp @@ -27,24 +27,25 @@ *************************************************************************/ #include "vpcarrouselpiecelist.h" +#include #include #include -#include -#include +#include #include +#include +#include "../layout/vplayout.h" +#include "../layout/vppiece.h" +#include "../layout/vpsheet.h" +#include "../undocommands/vpundomovepieceonsheet.h" +#include "../vmisc/theme/vtheme.h" #include "vpcarrousel.h" #include "vpcarrouselpiece.h" +#include "vpmimedatapiece.h" + #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "vpmimedatapiece.h" -#include "../layout/vpsheet.h" -#include "../layout/vplayout.h" -#include "../undocommands/vpundomovepieceonsheet.h" -#include "../layout/vppiece.h" - -#include QT_WARNING_PUSH QT_WARNING_DISABLE_CLANG("-Wmissing-prototypes") @@ -55,14 +56,29 @@ Q_LOGGING_CATEGORY(pCarrouselPieceList, "p.carrouselPieceList") // NOLINT QT_WARNING_POP //--------------------------------------------------------------------------------------------------------------------- -VPCarrouselPieceList::VPCarrouselPieceList(QWidget* parent) : - QListWidget(parent) +VPCarrouselPieceList::VPCarrouselPieceList(QWidget *parent) + : QListWidget(parent) { - setStyleSheet("QListWidget::item{border: 2px solid transparent; color: black;} " - "QListWidget::item:selected {border: 2px solid rgb(255,160,160);}"); + InitStyleSheet(); setContextMenuPolicy(Qt::DefaultContextMenu); setSelectionMode(QAbstractItemView::MultiSelection); setViewMode(QListView::IconMode); + + // Because we cannot control icon color with stylesheet we must wait until scene style update. It happens after + // the palette change signal. + connect(VTheme::Instance(), &VTheme::ThemeSettingsChanged, this, + [this]() + { + for (int i = 0; i < count(); ++i) + { + if (auto *pieceItem = dynamic_cast(item(i))) + { + pieceItem->RefreshPieceIcon(); + } + } + + InitStyleSheet(); + }); } //--------------------------------------------------------------------------------------------------------------------- @@ -76,20 +92,22 @@ void VPCarrouselPieceList::Refresh() { clear(); - if(not m_pieceList.isEmpty()) + if (m_pieceList.isEmpty()) { - // create the corresponding carrousel pieces - for (const auto &piece : qAsConst(m_pieceList)) // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) - { - if (not piece.isNull()) - { - // update the label of the piece - auto* carrouselpiece = new VPCarrouselPiece(piece, this); - carrouselpiece->setSelected(piece->IsSelected()); - } - } - sortItems(); + return; } + + // create the corresponding carrousel pieces + for (const auto &piece : qAsConst(m_pieceList)) // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + { + if (not piece.isNull()) + { + // update the label of the piece + auto *carrouselpiece = new VPCarrouselPiece(piece, this); + carrouselpiece->setSelected(piece->IsSelected()); + } + } + sortItems(); } //--------------------------------------------------------------------------------------------------------------------- @@ -111,8 +129,8 @@ void VPCarrouselPieceList::mousePressEvent(QMouseEvent *event) if (!(event->modifiers() & Qt::ControlModifier)) { // clearSelection doesn't work properly here so we go through the elements. - const QList items = selectedItems(); - for(auto *item: items) + const QList items = selectedItems(); + for (auto *item : items) { item->setSelected(false); } @@ -142,10 +160,10 @@ void VPCarrouselPieceList::startDrag(Qt::DropActions supportedActions) { Q_UNUSED(supportedActions) - QListWidgetItem* _item = currentItem(); - if(_item->type() == VPCarrouselPiece::Type) + QListWidgetItem *_item = currentItem(); + if (_item->type() == VPCarrouselPiece::Type) { - auto *pieceItem = dynamic_cast (_item); + auto *pieceItem = dynamic_cast(_item); SCASSERT(pieceItem != nullptr) if (m_carrousel == nullptr) @@ -169,7 +187,7 @@ void VPCarrouselPieceList::startDrag(Qt::DropActions supportedActions) drag->setDragCursor(VPMimeDataPiece::DragCursor(pixmap), Qt::MoveAction); drag->setMimeData(mimeData); - if(drag->exec() == Qt::MoveAction) + if (drag->exec() == Qt::MoveAction) { m_carrousel->Refresh(); piece->SetSelected(false); @@ -184,7 +202,7 @@ void VPCarrouselPieceList::startDrag(Qt::DropActions supportedActions) } //--------------------------------------------------------------------------------------------------------------------- -void VPCarrouselPieceList::dragMoveEvent(QDragMoveEvent* e) +void VPCarrouselPieceList::dragMoveEvent(QDragMoveEvent *e) { qCDebug(pCarrouselPieceList, "drag move"); e->acceptProposedAction(); @@ -193,13 +211,13 @@ void VPCarrouselPieceList::dragMoveEvent(QDragMoveEvent* e) //--------------------------------------------------------------------------------------------------------------------- void VPCarrouselPieceList::contextMenuEvent(QContextMenuEvent *event) { - QListWidgetItem* _item = currentItem(); - if(_item == nullptr || _item->type() != VPCarrouselPiece::Type) + QListWidgetItem *_item = currentItem(); + if (_item == nullptr || _item->type() != VPCarrouselPiece::Type) { return; } - auto *pieceItem = dynamic_cast (_item); + auto *pieceItem = dynamic_cast(_item); SCASSERT(pieceItem != nullptr) VPPiecePtr piece = pieceItem->GetPiece(); @@ -212,7 +230,7 @@ void VPCarrouselPieceList::contextMenuEvent(QContextMenuEvent *event) QMenu menu; - QVector moveToActions; + QVector moveToActions; if (not piece->Sheet().isNull()) { @@ -227,7 +245,7 @@ void VPCarrouselPieceList::contextMenuEvent(QContextMenuEvent *event) { if (not sheet.isNull()) { - QAction* moveToSheet = moveMenu->addAction(sheet->GetName()); + QAction *moveToSheet = moveMenu->addAction(sheet->GetName()); moveToSheet->setData(QVariant::fromValue(sheet)); moveToActions.append(moveToSheet); } @@ -244,13 +262,13 @@ void VPCarrouselPieceList::contextMenuEvent(QContextMenuEvent *event) QAction *removeAction = menu.addAction(tr("Remove from Sheet")); removeAction->setVisible(false); - if(not m_pieceList.isEmpty() && ConstFirst(m_pieceList)->Sheet() == nullptr) + if (not m_pieceList.isEmpty() && ConstFirst(m_pieceList)->Sheet() == nullptr) { moveAction->setVisible(true); deleteAction->setVisible(true); } - if(not m_pieceList.isEmpty() && ConstFirst(m_pieceList)->Sheet() != nullptr) + if (not m_pieceList.isEmpty() && ConstFirst(m_pieceList)->Sheet() != nullptr) { removeAction->setVisible(true); } @@ -287,16 +305,31 @@ void VPCarrouselPieceList::contextMenuEvent(QContextMenuEvent *event) } } +//--------------------------------------------------------------------------------------------------------------------- +void VPCarrouselPieceList::InitStyleSheet() +{ + if (VTheme::ColorSheme() == VColorSheme::Dark) + { + setStyleSheet("QListWidget::item{border: 2px solid transparent;}" + "QListWidget::item:selected {border: 2px solid rgb(255,160,160);}"); + } + else + { + setStyleSheet("QListWidget::item{border: 2px solid transparent; color: black;} " + "QListWidget::item:selected {border: 2px solid rgb(255,160,160);}"); + } +} + //--------------------------------------------------------------------------------------------------------------------- void VPCarrouselPieceList::on_SelectionChangedExternal() { blockSignals(true); - for(int i = 0; i < count(); ++i) + for (int i = 0; i < count(); ++i) { - QListWidgetItem* _item = item(i); - if(_item->type() == VPCarrouselPiece::Type) + QListWidgetItem *_item = item(i); + if (_item->type() == VPCarrouselPiece::Type) { - auto *itemPiece = dynamic_cast (_item); + auto *itemPiece = dynamic_cast(_item); SCASSERT(itemPiece != nullptr) itemPiece->RefreshSelection(); } diff --git a/src/app/puzzle/carousel/vpcarrouselpiecelist.h b/src/app/puzzle/carousel/vpcarrouselpiecelist.h index 9a0fae51b..42cc76348 100644 --- a/src/app/puzzle/carousel/vpcarrouselpiecelist.h +++ b/src/app/puzzle/carousel/vpcarrouselpiecelist.h @@ -33,12 +33,12 @@ #include "vpcarrousel.h" - class VPCarrouselPieceList : public QListWidget { Q_OBJECT // NOLINT + public: - explicit VPCarrouselPieceList(QWidget* parent); + explicit VPCarrouselPieceList(QWidget *parent); ~VPCarrouselPieceList() override = default; /** @@ -66,7 +66,7 @@ public slots: protected: void startDrag(Qt::DropActions supportedActions) override; - void dragMoveEvent(QDragMoveEvent* e) override; + void dragMoveEvent(QDragMoveEvent *e) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; @@ -79,6 +79,8 @@ private: QList m_pieceList{}; QPoint m_dragStart{}; VPCarrousel *m_carrousel{nullptr}; + + void InitStyleSheet(); }; #endif // VPCARROUSELPIECELIST_H diff --git a/src/app/puzzle/dialogs/configpages/puzzlepreferenceslayoutpage.ui b/src/app/puzzle/dialogs/configpages/puzzlepreferenceslayoutpage.ui index 659be6fb9..07b800a46 100644 --- a/src/app/puzzle/dialogs/configpages/puzzlepreferenceslayoutpage.ui +++ b/src/app/puzzle/dialogs/configpages/puzzlepreferenceslayoutpage.ui @@ -87,7 +87,7 @@ - ... + @@ -107,7 +107,7 @@ - ... + @@ -475,7 +475,7 @@ - ... + @@ -495,7 +495,7 @@ - ... + diff --git a/src/app/puzzle/layout/vpsheet.cpp b/src/app/puzzle/layout/vpsheet.cpp index 8cbbeaecc..c1791b4e0 100644 --- a/src/app/puzzle/layout/vpsheet.cpp +++ b/src/app/puzzle/layout/vpsheet.cpp @@ -33,6 +33,8 @@ #include "../scene/vpgraphicstilegrid.h" #include "../vpapplication.h" #include "../vwidgets/vmaingraphicsscene.h" +#include "theme/vscenestylesheet.h" +#include "theme/vstylesheetstyle.h" #include "vplayout.h" #include "vppiece.h" @@ -121,6 +123,9 @@ void VPSheetSceneData::RefreshPieces() //--------------------------------------------------------------------------------------------------------------------- void VPSheetSceneData::PrepareForExport() { + VStylesheetStyle::SetExportColorScheme(ExportColorScheme::BackAndWhite); + VSceneStylesheet::ResetStyles(); + m_graphicsSheet->SetShowBorder(false); m_graphicsSheet->SetShowMargin(false); @@ -161,6 +166,9 @@ void VPSheetSceneData::PrepareForExport() //--------------------------------------------------------------------------------------------------------------------- void VPSheetSceneData::CleanAfterExport() { + VStylesheetStyle::SetExportColorScheme(ExportColorScheme::Default); + VSceneStylesheet::ResetStyles(); + m_graphicsSheet->SetShowBorder(true); m_graphicsSheet->SetShowMargin(true); diff --git a/src/app/puzzle/main.cpp b/src/app/puzzle/main.cpp index 6585ae0e4..b85540c37 100644 --- a/src/app/puzzle/main.cpp +++ b/src/app/puzzle/main.cpp @@ -59,6 +59,7 @@ auto main(int argc, char *argv[]) -> int Q_INIT_RESOURCE(flags); // NOLINT Q_INIT_RESOURCE(breeze); // NOLINT Q_INIT_RESOURCE(cursor); // NOLINT + Q_INIT_RESOURCE(scenestyle); // NOLINT #if defined(Q_OS_MACX) Q_INIT_RESOURCE(mac_theme); // NOLINT #else diff --git a/src/app/puzzle/scene/vpgraphicspiece.cpp b/src/app/puzzle/scene/vpgraphicspiece.cpp index 82d5a2083..d4e57fb2f 100644 --- a/src/app/puzzle/scene/vpgraphicspiece.cpp +++ b/src/app/puzzle/scene/vpgraphicspiece.cpp @@ -50,6 +50,7 @@ #include "../vmisc/svgfont/vsvgfont.h" #include "../vmisc/svgfont/vsvgfontdatabase.h" #include "../vmisc/svgfont/vsvgfontengine.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vpapplication.h" #include "compatibility.h" #include "undocommands/vpundomovepieceonsheet.h" @@ -72,14 +73,6 @@ QT_WARNING_POP namespace { -QT_WARNING_PUSH -QT_WARNING_DISABLE_CLANG("-Wunused-member-function") - -Q_GLOBAL_STATIC_WITH_ARGS(QColor, mainColor, (Qt::black)) // NOLINT -Q_GLOBAL_STATIC_WITH_ARGS(QColor, errorColor, (Qt::red)) // NOLINT - -QT_WARNING_POP - //--------------------------------------------------------------------------------------------------------------------- inline auto LineMatrix(const VPPiecePtr &piece, const QPointF &topLeft, qreal angle, const QPointF &linePos, int maxLineWidth) -> QTransform @@ -789,11 +782,11 @@ void VPGraphicsPiece::PaintStickyPath(QPainter *painter) if (painter != nullptr) { painter->save(); - painter->setBrush(QBrush(Qt::BDiagPattern)); + painter->setBrush(QBrush(VSceneStylesheet::ManualLayoutStyle().PieceOkColor(), Qt::BDiagPattern)); QPen pen = painter->pen(); pen.setStyle(Qt::DashLine); - pen.setColor(*mainColor); + pen.setColor(VSceneStylesheet::ManualLayoutStyle().PieceOkColor()); painter->setPen(pen); painter->drawPath(m_stickyPath); @@ -876,13 +869,13 @@ auto VPGraphicsPiece::PieceColor() const -> QColor VPPiecePtr piece = m_piece.toStrongRef(); if (piece.isNull()) { - return *mainColor; + return VSceneStylesheet::ManualLayoutStyle().PieceOkColor(); } VPLayoutPtr layout = piece->Layout(); if (layout.isNull()) { - return *mainColor; + return VSceneStylesheet::ManualLayoutStyle().PieceOkColor(); } bool outOfBound = false; @@ -899,16 +892,16 @@ auto VPGraphicsPiece::PieceColor() const -> QColor if (outOfBound || superposition) { - return *errorColor; + return VSceneStylesheet::ManualLayoutStyle().PieceErrorColor(); } - return *mainColor; + return VSceneStylesheet::ManualLayoutStyle().PieceOkColor(); } //--------------------------------------------------------------------------------------------------------------------- auto VPGraphicsPiece::NoBrush() const -> QBrush { - return m_hoverMode ? QBrush(QColor(199, 244, 249, 60)) : QBrush(Qt::NoBrush); + return m_hoverMode ? QBrush(VSceneStylesheet::ManualLayoutStyle().PieceHoverColor()) : QBrush(Qt::NoBrush); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/puzzle/scene/vpgraphicspiececontrols.cpp b/src/app/puzzle/scene/vpgraphicspiececontrols.cpp index 1e199f4b6..45b2c8da2 100644 --- a/src/app/puzzle/scene/vpgraphicspiececontrols.cpp +++ b/src/app/puzzle/scene/vpgraphicspiececontrols.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -43,10 +44,9 @@ #include "../undocommands/vpundooriginmove.h" #include "../undocommands/vpundopiecerotate.h" #include "../vmisc/compatibility.h" +#include "../vmisc/theme/vscenestylesheet.h" +#include "../vmisc/theme/vtheme.h" #include "../vwidgets/global.h" -#include "qgraphicsscene.h" -#include "qgraphicsview.h" -#include "qnamespace.h" #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) #include "../vmisc/diagnostic.h" @@ -59,14 +59,6 @@ constexpr qreal penWidth = 2; const qreal centerRadius1 = 5; const qreal centerRadius2 = 10; -QT_WARNING_PUSH -QT_WARNING_DISABLE_CLANG("-Wunused-member-function") - -Q_GLOBAL_STATIC_WITH_ARGS(const QColor, defaultColor, (Qt::black)) // NOLINT -Q_GLOBAL_STATIC_WITH_ARGS(const QColor, hoverColor, (Qt::green)) // NOLINT - -QT_WARNING_POP - //--------------------------------------------------------------------------------------------------------------------- auto TransformationOrigin(const VPLayoutPtr &layout, const QRectF &boundingRect) -> VPTransformationOrigon { @@ -94,8 +86,7 @@ auto TransformationOrigin(const VPLayoutPtr &layout, const QRectF &boundingRect) //--------------------------------------------------------------------------------------------------------------------- VPGraphicsTransformationOrigin::VPGraphicsTransformationOrigin(const VPLayoutPtr &layout, QGraphicsItem *parent) : QGraphicsObject(parent), - m_layout(layout), - m_color(*defaultColor) + m_layout(layout) { SCASSERT(m_layout != nullptr) setCursor(Qt::OpenHandCursor); @@ -147,14 +138,14 @@ void VPGraphicsTransformationOrigin::paint(QPainter *painter, const QStyleOption const qreal scale = SceneScale(scene()); - QPen pen(m_color, penWidth / scale, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + QPen pen(CurrentColor(), penWidth / scale, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); painter->setPen(pen); if (m_originVisible) { painter->save(); - painter->setBrush(QBrush(m_color)); + painter->setBrush(QBrush(CurrentColor())); painter->drawPath(Center1()); painter->restore(); @@ -221,14 +212,14 @@ void VPGraphicsTransformationOrigin::mouseReleaseEvent(QGraphicsSceneMouseEvent //--------------------------------------------------------------------------------------------------------------------- void VPGraphicsTransformationOrigin::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { - m_color = *hoverColor; + m_hoverMode = true; QGraphicsObject::hoverEnterEvent(event); } //--------------------------------------------------------------------------------------------------------------------- void VPGraphicsTransformationOrigin::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { - m_color = *defaultColor; + m_hoverMode = false; QGraphicsObject::hoverEnterEvent(event); } @@ -249,7 +240,7 @@ auto VPGraphicsTransformationOrigin::RotationCenter(QPainter *painter) const -> if (painter != nullptr) { painter->save(); - painter->setBrush(QBrush(m_color)); + painter->setBrush(QBrush(CurrentColor())); painter->drawPath(Center1()); painter->restore(); } @@ -304,6 +295,13 @@ auto VPGraphicsTransformationOrigin::Center2() const -> QPainterPath return center2; } +//--------------------------------------------------------------------------------------------------------------------- +auto VPGraphicsTransformationOrigin::CurrentColor() const -> QColor +{ + return m_hoverMode ? VSceneStylesheet::ManualLayoutStyle().PieceHandleHoverColor() + : VSceneStylesheet::ManualLayoutStyle().PieceHandleColor(); +} + // VPGraphicsPieceControls //--------------------------------------------------------------------------------------------------------------------- VPGraphicsPieceControls::VPGraphicsPieceControls(const VPLayoutPtr &layout, QGraphicsItem *parent) @@ -571,34 +569,30 @@ void VPGraphicsPieceControls::InitPixmaps() m_handleHoverPixmaps.clear(); m_handlePaths.clear(); - auto InitPixmap = [this](VPHandleCornerType type, const QString &fileName) + auto InitPixmap = [this](VPHandleCornerType type, const QString &imageName) { - const QFileInfo fileInfo(fileName); - const QString imageName = fileInfo.baseName(); + const QString fileName = QStringLiteral("32x32/%1.png").arg(imageName); + const QString fileNameHover = QStringLiteral("32x32/%1-hover.png").arg(imageName); - const QString fileNameHover = - QStringLiteral("%1/%2-hover.%3").arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); + const QString resource = QStringLiteral("icon"); #if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) if (QGuiApplication::primaryScreen()->devicePixelRatio() >= 2) { - const QString fileName2x = - QStringLiteral("%1/%2@2x.%3").arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); + const QString fileName2x = QStringLiteral("32x32/%1@2x.png").arg(imageName); + const QString fileName2xHover = QStringLiteral("32x32/%1-hover@2x.png").arg(imageName); - const QString fileName2xHover = - QStringLiteral("%1/%2-hover@2x.%3").arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); - - m_handlePixmaps.insert(type, QPixmap(fileName2x)); - m_handleHoverPixmaps.insert(type, QPixmap(fileName2xHover)); + m_handlePixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName2x)); + m_handleHoverPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName2xHover)); } else { - m_handlePixmaps.insert(type, QPixmap(fileName)); - m_handleHoverPixmaps.insert(type, QPixmap(fileNameHover)); + m_handlePixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName)); + m_handleHoverPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileNameHover)); } #else - m_handlePixmaps.insert(type, QPixmap(fileName)); - m_handleHoverPixmaps.insert(type, QPixmap(fileNameHover)); + m_handlePixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName)); + m_handleHoverPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileNameHover)); #endif QPainterPath p = PixmapToPainterPath(m_handlePixmaps.value(type)); p.setFillRule(Qt::WindingFill); @@ -606,10 +600,10 @@ void VPGraphicsPieceControls::InitPixmaps() m_handlePaths.insert(type, p); }; - InitPixmap(VPHandleCornerType::TopLeft, QStringLiteral("://icon/32x32/rotate-top-left.png")); - InitPixmap(VPHandleCornerType::TopRight, QStringLiteral("://icon/32x32/rotate-top-right.png")); - InitPixmap(VPHandleCornerType::BottomRight, QStringLiteral("://icon/32x32/rotate-bottom-right.png")); - InitPixmap(VPHandleCornerType::BottomLeft, QStringLiteral("://icon/32x32/rotate-bottom-left.png")); + InitPixmap(VPHandleCornerType::TopLeft, QStringLiteral("rotate-top-left")); + InitPixmap(VPHandleCornerType::TopRight, QStringLiteral("rotate-top-right")); + InitPixmap(VPHandleCornerType::BottomRight, QStringLiteral("rotate-bottom-right")); + InitPixmap(VPHandleCornerType::BottomLeft, QStringLiteral("rotate-bottom-left")); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/puzzle/scene/vpgraphicspiececontrols.h b/src/app/puzzle/scene/vpgraphicspiececontrols.h index a837b3b7b..2a4fd246d 100644 --- a/src/app/puzzle/scene/vpgraphicspiececontrols.h +++ b/src/app/puzzle/scene/vpgraphicspiececontrols.h @@ -31,8 +31,8 @@ #include #include -#include "scenedef.h" #include "../layout/layoutdef.h" +#include "scenedef.h" #if QT_VERSION < QT_VERSION_CHECK(5, 13, 0) #include "../vmisc/defglobal.h" @@ -62,12 +62,16 @@ enum class VPHandleCornerType class VPGraphicsTransformationOrigin : public QGraphicsObject { Q_OBJECT // NOLINT + public: - explicit VPGraphicsTransformationOrigin(const VPLayoutPtr &layout, QGraphicsItem * parent = nullptr); + explicit VPGraphicsTransformationOrigin(const VPLayoutPtr &layout, QGraphicsItem *parent = nullptr); ~VPGraphicsTransformationOrigin() override = default; - auto type() const -> int override {return Type;} - enum { Type = UserType + static_cast(PGraphicsItem::TransformationOrigin)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(PGraphicsItem::TransformationOrigin) + }; public slots: void SetTransformationOrigin(); @@ -79,8 +83,8 @@ protected: auto shape() const -> QPainterPath override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; - void mousePressEvent(QGraphicsSceneMouseEvent * event) override; - void mouseMoveEvent(QGraphicsSceneMouseEvent * event) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; @@ -90,25 +94,31 @@ private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(VPGraphicsTransformationOrigin) // NOLINT - bool m_originVisible{true}; + bool m_originVisible{true}; VPLayoutWeakPtr m_layout{}; - QColor m_color; - bool m_allowChangeMerge{false}; + bool m_hoverMode{false}; + bool m_allowChangeMerge{false}; auto RotationCenter(QPainter *painter = nullptr) const -> QPainterPath; auto Center1() const -> QPainterPath; auto Center2() const -> QPainterPath; + + auto CurrentColor() const -> QColor; }; class VPGraphicsPieceControls : public QGraphicsObject { Q_OBJECT // NOLINT + public: - explicit VPGraphicsPieceControls(const VPLayoutPtr &layout, QGraphicsItem * parent = nullptr); + explicit VPGraphicsPieceControls(const VPLayoutPtr &layout, QGraphicsItem *parent = nullptr); ~VPGraphicsPieceControls() override = default; - auto type() const -> int override {return Type;} - enum { Type = UserType + static_cast(PGraphicsItem::Handles)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(PGraphicsItem::Handles) + }; void SetIgnorePieceTransformation(bool newIgnorePieceTransformation); @@ -135,17 +145,17 @@ protected: private: Q_DISABLE_COPY_MOVE(VPGraphicsPieceControls) // NOLINT - QRectF m_pieceRect{}; - QPointF m_rotationStartPoint{}; - qreal m_rotationSum{0}; - bool m_controlsVisible{false}; + QRectF m_pieceRect{}; + QPointF m_rotationStartPoint{}; + qreal m_rotationSum{0}; + bool m_controlsVisible{false}; VPLayoutWeakPtr m_layout{}; - VPHandleCorner m_handleCorner{VPHandleCorner::Invalid}; + VPHandleCorner m_handleCorner{VPHandleCorner::Invalid}; VPTransformationOrigon m_savedOrigin{}; - bool m_originSaved{false}; - bool allowChangeMerge{false}; + bool m_originSaved{false}; + bool allowChangeMerge{false}; QList m_selectedPieces{}; - bool m_ignorePieceTransformation{false}; + bool m_ignorePieceTransformation{false}; QMap m_handlePixmaps{}; QMap m_handleHoverPixmaps{}; diff --git a/src/app/puzzle/scene/vpgraphicssheet.cpp b/src/app/puzzle/scene/vpgraphicssheet.cpp index 51519e7f2..08608089a 100644 --- a/src/app/puzzle/scene/vpgraphicssheet.cpp +++ b/src/app/puzzle/scene/vpgraphicssheet.cpp @@ -29,14 +29,17 @@ #include "vpgraphicssheet.h" #include "../layout/vplayout.h" #include "../layout/vpsheet.h" +#include "qnamespace.h" +#include "theme/vscenestylesheet.h" #include //--------------------------------------------------------------------------------------------------------------------- -VPGraphicsSheet::VPGraphicsSheet(const VPLayoutPtr &layout, QGraphicsItem *parent): - QGraphicsItem(parent), +VPGraphicsSheet::VPGraphicsSheet(const VPLayoutPtr &layout, QGraphicsItem *parent) + : QGraphicsItem(parent), m_layout(layout) -{} +{ +} //--------------------------------------------------------------------------------------------------------------------- void VPGraphicsSheet::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) @@ -44,36 +47,56 @@ void VPGraphicsSheet::paint(QPainter *painter, const QStyleOptionGraphicsItem *o Q_UNUSED(widget); Q_UNUSED(option); - QPen pen(QColor(0,179,255), 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); - pen.setCosmetic(true); - QBrush noBrush(Qt::NoBrush); - painter->setPen(pen); - painter->setBrush(noBrush); - - QRectF sheetRect = GetSheetRect(); - - if(m_showMargin) - { - painter->drawRect(GetMarginsRect()); - } - - if(m_showBorder) - { - pen.setColor(Qt::black); - - painter->setPen(pen); - painter->drawRect(sheetRect); - } + bool ignoreMargins = true; VPLayoutPtr layout = m_layout.toStrongRef(); - if(not layout.isNull() && layout->LayoutSettings().GetShowGrid()) + if (!layout.isNull()) { - pen.setColor(QColor(204,204,204)); + VPSheetPtr sheet = layout->GetFocusedSheet(); + if (!sheet.isNull()) + { + ignoreMargins = sheet->IgnoreMargins(); + } + } + + if (m_showMargin && !ignoreMargins) + { + QPen pen(VSceneStylesheet::ManualLayoutStyle().SheetMarginColor(), 1.5, Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin); + pen.setCosmetic(true); + + painter->save(); + painter->setPen(pen); + painter->drawRect(GetMarginsRect()); + painter->restore(); + } + + QRectF sheetRect = GetSheetRect(); + + if (m_showBorder) + { + QPen pen(VSceneStylesheet::ManualLayoutStyle().SheetBorderColor(), 1.5, Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin); + pen.setCosmetic(true); + + painter->save(); + painter->setPen(pen); + painter->drawRect(sheetRect); + painter->restore(); + } + + if (not layout.isNull() && layout->LayoutSettings().GetShowGrid()) + { + QPen pen(VSceneStylesheet::ManualLayoutStyle().SheetGridColor(), 1.5, Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin); + pen.setCosmetic(true); + + painter->save(); painter->setPen(pen); qreal colWidth = layout->LayoutSettings().GetGridColWidth(); - if(colWidth > 0) + if (colWidth > 0) { qreal colX = colWidth; while (colX < sheetRect.right()) @@ -85,7 +108,7 @@ void VPGraphicsSheet::paint(QPainter *painter, const QStyleOptionGraphicsItem *o } qreal rowHeight = layout->LayoutSettings().GetGridRowHeight(); - if(rowHeight > 0) + if (rowHeight > 0) { qreal rowY = rowHeight; @@ -96,6 +119,7 @@ void VPGraphicsSheet::paint(QPainter *painter, const QStyleOptionGraphicsItem *o rowY += rowHeight; } } + painter->restore(); } } diff --git a/src/app/puzzle/scene/vpgraphicstilegrid.cpp b/src/app/puzzle/scene/vpgraphicstilegrid.cpp index 1fd3b922f..6385d7dea 100644 --- a/src/app/puzzle/scene/vpgraphicstilegrid.cpp +++ b/src/app/puzzle/scene/vpgraphicstilegrid.cpp @@ -1,9 +1,9 @@ #include "vpgraphicstilegrid.h" -#include "../vptilefactory.h" #include "../layout/vplayout.h" #include "../layout/vpsheet.h" -#include "../vmisc/vmath.h" +#include "../vmisc/theme/vscenestylesheet.h" +#include "../vptilefactory.h" #include "../vwidgets/global.h" #include @@ -29,8 +29,8 @@ auto SheetMargins(const VPSheetPtr &sheet) -> QMarginsF //--------------------------------------------------------------------------------------------------------------------- auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect, const QString &text, - int flags = Qt::TextDontClip|Qt::TextWordWrap, double goalError = 0.01, - int maxIterationNumber=10) -> QFont + int flags = Qt::TextDontClip | Qt::TextWordWrap, double goalError = 0.01, + int maxIterationNumber = 10) -> QFont { QFont font; @@ -44,8 +44,8 @@ auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect, double minError = std::numeric_limits::max(); double error = std::numeric_limits::max(); - int iterationNumber=0; - while((error > goalError) && (iterationNumber goalError) && (iterationNumber < maxIterationNumber)) { iterationNumber++; QRect fontBoundRect = painter->fontMetrics().boundingRect(drawRect.toRect(), flags, text); @@ -58,15 +58,15 @@ auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect, double xFactor = drawRect.width() / fontBoundRect.width(); double yFactor = drawRect.height() / fontBoundRect.height(); double factor; - if (xFactor<1 && yFactor<1) + if (xFactor < 1 && yFactor < 1) { factor = std::min(xFactor, yFactor); } - else if (xFactor>1 && yFactor>1) + else if (xFactor > 1 && yFactor > 1) { factor = std::max(xFactor, yFactor); } - else if (xFactor<1 && yFactor>1) + else if (xFactor < 1 && yFactor > 1) { factor = xFactor; } @@ -75,8 +75,8 @@ auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect, factor = yFactor; } - error = qFabs(factor-1); - if (factor > 1 ) + error = qFabs(factor - 1); + if (factor > 1) { if (error < minError) { @@ -88,7 +88,7 @@ auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect, } } font = painter->font(); - qreal size = font.pointSizeF()*factor; + qreal size = font.pointSizeF() * factor; if (size <= 0) { size = 0.00000001; @@ -100,11 +100,11 @@ auto OptimizeFontSizeToFitTextInRect(QPainter *painter, const QRectF &drawRect, return font; } -} // namespace +} // namespace //--------------------------------------------------------------------------------------------------------------------- -VPGraphicsTileGrid::VPGraphicsTileGrid(const VPLayoutPtr &layout, const QUuid &sheetUuid, QGraphicsItem *parent): - QGraphicsItem(parent), +VPGraphicsTileGrid::VPGraphicsTileGrid(const VPLayoutPtr &layout, const QUuid &sheetUuid, QGraphicsItem *parent) + : QGraphicsItem(parent), m_layout(layout), m_sheetUuid(sheetUuid) { @@ -114,7 +114,7 @@ VPGraphicsTileGrid::VPGraphicsTileGrid(const VPLayoutPtr &layout, const QUuid &s auto VPGraphicsTileGrid::boundingRect() const -> QRectF { VPLayoutPtr layout = m_layout.toStrongRef(); - if(not layout.isNull() && layout->LayoutSettings().GetShowTiles()) + if (not layout.isNull() && layout->LayoutSettings().GetShowTiles()) { VPSheetPtr sheet = layout->GetSheet(m_sheetUuid); @@ -130,11 +130,10 @@ auto VPGraphicsTileGrid::boundingRect() const -> QRectF qreal width = layout->TileFactory()->DrawingAreaWidth() - VPTileFactory::tileStripeWidth; qreal height = layout->TileFactory()->DrawingAreaHeight() - VPTileFactory::tileStripeWidth; - QRectF rect(sheetMargins.left(), sheetMargins.top(), - layout->TileFactory()->ColNb(sheet) * (width / xScale), + QRectF rect(sheetMargins.left(), sheetMargins.top(), layout->TileFactory()->ColNb(sheet) * (width / xScale), layout->TileFactory()->RowNb(sheet) * (height / yScale)); - constexpr qreal halfPenWidth = penWidth/2.; + constexpr qreal halfPenWidth = penWidth / 2.; return rect.adjusted(-halfPenWidth, -halfPenWidth, halfPenWidth, halfPenWidth); } @@ -149,12 +148,13 @@ void VPGraphicsTileGrid::paint(QPainter *painter, const QStyleOptionGraphicsItem Q_UNUSED(option); VPLayoutPtr layout = m_layout.toStrongRef(); - if(layout.isNull() || not layout->LayoutSettings().GetShowTiles()) + if (layout.isNull() || not layout->LayoutSettings().GetShowTiles()) { return; } - QPen pen(QColor(255,0,0,127), penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + QPen pen(VSceneStylesheet::ManualLayoutStyle().SheetTileGridColor(), penWidth, Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin); pen.setCosmetic(true); pen.setStyle(Qt::DashLine); QBrush noBrush(Qt::NoBrush); @@ -166,17 +166,15 @@ void VPGraphicsTileGrid::paint(QPainter *painter, const QStyleOptionGraphicsItem VWatermarkData watermarkData = layout->TileFactory()->WatermarkData(); - auto PaintWatermark = [painter, layout, xScale, yScale, watermarkData] - (const QRectF &img) + auto PaintWatermark = [painter, layout, xScale, yScale, watermarkData](const QRectF &img) { - if (not layout->LayoutSettings().WatermarkPath().isEmpty() && - layout->LayoutSettings().GetShowWatermark() && watermarkData.opacity > 0) + if (not layout->LayoutSettings().WatermarkPath().isEmpty() && layout->LayoutSettings().GetShowWatermark() && + watermarkData.opacity > 0) { if (watermarkData.showImage && not watermarkData.path.isEmpty()) { VPTileFactory::PaintWatermarkImage(painter, img, watermarkData, - layout->LayoutSettings().WatermarkPath(), - xScale, yScale); + layout->LayoutSettings().WatermarkPath(), true, xScale, yScale); } if (watermarkData.showText && not watermarkData.text.isEmpty()) @@ -195,14 +193,13 @@ void VPGraphicsTileGrid::paint(QPainter *painter, const QStyleOptionGraphicsItem const int nbCol = layout->TileFactory()->ColNb(sheet); const int nbRow = layout->TileFactory()->RowNb(sheet); - QFont font = OptimizeFontSizeToFitTextInRect(painter, - QRectF(sheetMargins.left(), sheetMargins.top(), width/3., height/3.), - QString::number(nbRow * nbCol)); + QFont font = OptimizeFontSizeToFitTextInRect( + painter, QRectF(sheetMargins.left(), sheetMargins.top(), width / 3., height / 3.), + QString::number(nbRow * nbCol)); const qreal scale = SceneScale(scene()); - auto PaintTileNumber = [painter, layout, nbCol, font, scale] - (const QRectF &img, int i, int j) + auto PaintTileNumber = [painter, layout, nbCol, font, scale](const QRectF &img, int i, int j) { if (layout->LayoutSettings().GetShowTileNumber() && font.pointSizeF() * scale >= minTextFontSize) { @@ -211,30 +208,30 @@ void VPGraphicsTileGrid::paint(QPainter *painter, const QStyleOptionGraphicsItem painter->setFont(font); QPen pen = painter->pen(); - pen.setColor(Qt::black); + pen.setColor(VSceneStylesheet::ManualLayoutStyle().SheetTileNumberColor()); painter->setPen(pen); - painter->drawText(img, Qt::AlignCenter, QString::number(j*nbCol + i+1)); + painter->drawText(img, Qt::AlignCenter, QString::number(j * nbCol + i + 1)); painter->restore(); } }; - for(int j=0;j<=nbRow;++j) + for (int j = 0; j <= nbRow; ++j) { // horizontal lines - painter->drawLine(QPointF(sheetMargins.left(), sheetMargins.top()+j*height), - QPointF(sheetMargins.left()+nbCol*width, sheetMargins.top()+j*height)); + painter->drawLine(QPointF(sheetMargins.left(), sheetMargins.top() + j * height), + QPointF(sheetMargins.left() + nbCol * width, sheetMargins.top() + j * height)); - for(int i=0;i<=nbCol;++i) + for (int i = 0; i <= nbCol; ++i) { // vertical lines - painter->drawLine(QPointF(sheetMargins.left()+i*width, sheetMargins.top()), - QPointF(sheetMargins.left()+i*width, sheetMargins.top() + nbRow*height)); + painter->drawLine(QPointF(sheetMargins.left() + i * width, sheetMargins.top()), + QPointF(sheetMargins.left() + i * width, sheetMargins.top() + nbRow * height)); if (j < nbRow && i < nbCol) { - QRectF img(sheetMargins.left()+i*width, sheetMargins.top()+j*height, width, height); + QRectF img(sheetMargins.left() + i * width, sheetMargins.top() + j * height, width, height); PaintWatermark(img); PaintTileNumber(img, i, j); diff --git a/src/app/puzzle/share/resources/puzzleicon.qrc b/src/app/puzzle/share/resources/puzzleicon.qrc index ac9af2aac..95b18d4bf 100644 --- a/src/app/puzzle/share/resources/puzzleicon.qrc +++ b/src/app/puzzle/share/resources/puzzleicon.qrc @@ -2,25 +2,30 @@ puzzleicon/64x64/logo.png puzzleicon/64x64/iconLayout.png - puzzleicon/64x64/iconCurrentPiece.png puzzleicon/64x64/iconLayers.png - puzzleicon/64x64/iconTiles.png puzzleicon/64x64/iconProperties.png puzzleicon/svg/icon_scissors.svg puzzleicon/svg/icon_scissors_vertical.svg puzzleicon/svg/icon_scissors_horizontal.svg - puzzleicon/16x16/roll.png - puzzleicon/16x16/template.png - puzzleicon/svg/icon_rotate_90_anticlockwise.svg - puzzleicon/svg/icon_rotate_90_clockwise.svg - puzzleicon/svg/icon_rotate_grainline_horizontal.svg - puzzleicon/svg/icon_rotate_grainline_vertical.svg - puzzleicon/32X32/horizontal_grainline.png - puzzleicon/32X32/horizontal_grainline@2x.png - puzzleicon/32X32/vertical_grainline.png - puzzleicon/32X32/vertical_grainline@2x.png - puzzleicon/svg/no_watermark_image.svg puzzleicon/svg/watermark_placeholder.svg puzzleicon/svg/watermark_placeholder_grayscale.svg + puzzleicon/light/64x64/iconCurrentPiece@2x.png + puzzleicon/light/64x64/iconCurrentPiece.png + puzzleicon/dark/64x64/iconCurrentPiece@2x.png + puzzleicon/dark/64x64/iconCurrentPiece.png + puzzleicon/light/64x64/iconTiles@2x.png + puzzleicon/light/64x64/iconTiles.png + puzzleicon/dark/64x64/iconTiles@2x.png + puzzleicon/dark/64x64/iconTiles.png + puzzleicon/svg/light/no_watermark_image.svg + puzzleicon/svg/dark/no_watermark_image.svg + puzzleicon/light/32x32/horizontal_grainline@2x.png + puzzleicon/light/32x32/horizontal_grainline.png + puzzleicon/light/32x32/vertical_grainline@2x.png + puzzleicon/light/32x32/vertical_grainline.png + puzzleicon/dark/32x32/vertical_grainline@2x.png + puzzleicon/dark/32x32/vertical_grainline.png + puzzleicon/dark/32x32/horizontal_grainline.png + puzzleicon/dark/32x32/horizontal_grainline@2x.png diff --git a/src/app/puzzle/share/resources/puzzleicon/16x16/roll.png b/src/app/puzzle/share/resources/puzzleicon/16x16/roll.png deleted file mode 100644 index 49c30dff11916a06b3aa06d2404b94c0f255ceae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zg78t&m77ygF@N{tu z(FlHeW}}xABZJ#R{aBe+w&3Z~EQ-3i5AQvZvXcJ7WVV}=*RN04vDx`^>=hk$LDtl2Rt3;DTffo^8-boFyt=akR{03vf*A^-pY diff --git a/src/app/puzzle/share/resources/puzzleicon/16x16/template.png b/src/app/puzzle/share/resources/puzzleicon/16x16/template.png deleted file mode 100644 index c29755d29dd988896cbc17477f6adabc2d10b693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 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 diff --git a/src/app/puzzle/share/resources/puzzleicon/32X32/vertical_grainline.png b/src/app/puzzle/share/resources/puzzleicon/32X32/vertical_grainline.png deleted file mode 100644 index f332842f64384d035f4e3daf4578c6fdf39283de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2719 zcmeHJ=Q|sY7EY)jBDE_<8`Rbszt$=m616o5Vzfr>y+umxP}EFXwbgEoRw+X5RoWz$luM=#}ytD5#S1U#d*2`0J!-&YtQU`Dagr~^d<`*{9?M; ztEX)}LeWLfb49l*H{0-ou#xZ_Zw!fE-O&{O7V#UB;_(=J3(>b_ z7hA__2q!CUvVaJs?-Cj7oF$T({^6^dzYg2OSM=HkC$GtkCUW{|MIrvE9SN=_J(#>z zcJv2vO!=XgIrF}G)3cDufEuNm3Hp#P#ouSotU9sn5mAkDn$sI7O%fI+W|UoE*Q+w* ztgS^n2Ei`n*@b;UD-OY!lm?+sB8_wU1?~nFHC||XQl1CmPpcV%A?}#&*0XI#eO+qE zao*C-6<|%}ynQ?-)`34N6sw&Q7FDOE^U_jwX3%|)_hsE;Ic(4QcK|zu&z%g#pLSdJ z!2NT1LG$Ajae>Kv|B83Py&41!WO7`ZHxQBV8a9GvVALz^$9&4)E_oE(NOp1Uosg+s_%w zv;|1(rbw#gT(rTaBv)e;P4Y<1)zw~>&t6DuAnGd&r);0uKnM>Y-mp!<8@4_*)WNzd zp7UNWp@*N_g5__K59WRQvp^I5QbCQnm3e{zwP>F!t&9g zO*{4^ATs_c8Jn6fT`U*u4x@Bq-<}y9fW;v7w!Wc9)YOA1b7o?3abiT5 zEeS}_Ai}ALCt|#?U1hVg-_G%b%YXMYm(6ss*zs}(eGs>LaE~suqWbmO)<(2#=C0 z>vH7IXB$!5Y7a*0_Z3RszPDY;2mrAv7^P+AKt8Cb4kwHcidhr}OtFqyr6ZwLE!6LAC9jw_FS(~w*|aE#oejUHO*;c@ z(clrTuK)eDXJO2`jKmd`S_J+?yu+JIHQIicRo$-0w|lrRxeL3;U7ZmK(<&!la3hy= zjrtVJhlstQCQIckd~5CNd|{YWiYwszskMXv|4KrD9U8bBdf4bVB(L#Xa3%2+^*vvy zBX8vhK2mLI7&<`aZu+`nR+-#5PToO#h~cp1`10}c38o53smR?3;xuW=2NCTO^I;U* zxpX-5LaO2YNN-C5^EMPw2s2Z5)9U;E&^p_?m(#(8Rv?B4sD2wBwbL!O5};GL1t|GNZllHH{usT%^R9V z=e&l~s<|tAWa01S>LaW1j2vOiF}=N$;B%9h{!cu71`oJ?$(xj&<{z|7aFBBQj} zRoV1zsfkoj1^@sPJ&{PX0TTINHKJ=!K~$Eeejh?;z`>$I_bD`tgA;-+l;hzI{2;?q zs#C*j8>-MoLwZbPmba>c>zSCZ^F4!JrjXTJ!Er0h$@%#?Pg03TUFGjZ2jkc8b+jM0 z-eqR_sbujkoxjBEVU}tCfRCRpq(d}Wga#)#-GBVcM~0NJbwp0eXb3keqDJkEjn{3M zfR0dWuu4I`UG?1$l@-BDlF*mg)1@j_SNe<;XrLUM( zdD5B`-Mw2iES}@dm?pGejY!-$>N#BrZ*g;SUN8X<#8S?E{L2qyXh)Q}eOw-TwWtdG zGuBO--n0JFO_TiG{E$zL0pAjv`t_m2ci^LIh|`?QuxznoPjDi`k9#+kiHyJeV(Tqi zS~j&zFT_AXNgY5aG$RlN03ek0d0)YrMm@soSvR4 znp*xp|K|s+{y}4}nAu*nxTS1yOV!dz)ynyrjk}hex0bz+j$^QnQ^*ZhypdNt+CR-Q zglLN|w2v%xh^}-=Z17BJ_08xG%oz%O^bVIddAD#js$}6_>2gfjYHayhZ29``UrQ{V z24IM}sRaPBIZHQa0HCvx9tx1mB&<&#SOfHJg6URo=HCM9Naf?`OXd&*6J2I1%LS++ z6ZG$1J$)5yfYQdOj&A3?0C&S7sKh_D>Ygl8SB(C4@IKhLN zLbQ*2s{b>&T2w$d-c5A+6<@zHU|l#Xlp#+Av?$>i<*7}@_iOl-x}yArC65{TW6b*8 qd&1XyS4Mg!*5=n&yFVAAq8JaNRWxND$#Bxo0}OOcQS~~GasL5y_Q1UW diff --git a/src/app/puzzle/share/resources/puzzleicon/32X32/vertical_grainline@2x.png b/src/app/puzzle/share/resources/puzzleicon/32X32/vertical_grainline@2x.png deleted file mode 100644 index ccfd215a4de2d18d3276cbeb90f72388bfaf8ecd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4356 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 diff --git a/src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate@2x.png b/src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate@2x.png deleted file mode 100644 index 4cb07973bd0b4ac100d9d6dc3456abf7dac3e6b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2838 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 Ef;H-v^8f$< literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/dark/32x32/horizontal_grainline@2x.png b/src/app/puzzle/share/resources/puzzleicon/dark/32x32/horizontal_grainline@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7e143af8d63af6466a2458716d422a684e24d7a4 GIT binary patch literal 1725 zcmV;u215CXP)XjCvJFpPgNBtihAhD3QlAHW17 zs01Z~@yUdk7-Dz;iAI8o4;m2E2Lj15L!t?zySH7tU|HN)23@=Mp3eui(%#Q` z`d$FL(wcUws`_Cm1WH995LnO5M*+}e(_U3o-z(Nn(Mv$r_3g+E9ssr$>u085=Iyu@ zJOJ$0b$v&%eu@%6*Y(W+KC$R>7yIBcpwXi3fUfIXig8k~0Ks5zEr2hPsrnSG+HN5XS<6z^X!= z(PGA=gNP0TXr1~lm~rk}6pziTvoh}!LOkyC`L1U9F$>`L``wZxogt!SX5(lyif}j# zuh(l9z;*~`tm_Hj-Ogro)z?~?T$E*bMMp=+NP1(&5(tOGE?Jg;unK;Bd>r9$7_<2% zDankF`>*1!>oKeD2MxpcF%pSnOp%lTJv}{DiA3TX08f}l#^Z4e4i2V*Hw>e^%*%k7 zxXCRp1U|YP!N7RJ%4~Tw8vW|**|VwXn-ZX*q2UmKXUroKi3Gyoa7NH0BO_)r+wt?z zSnBgw(!l$DR}hI?itwz*<2f|-g_s$droBi+-IgRUj(o;-M}ymghC<2@33IA=2W@{Kscv1C@eEX$43;>C-{h)6SapslT~EPK5qNtSz3p`bl`B+TFt zCJ|wWuL-`|EDe)Hbjbk#LWoa^=wN!U)9FNedpkm*kmYQUWf|4g)p-dxoz8`trafH@ zX=YAsGv{C0=-lVOlGA=Lobt(OLk1 zm@R8+YS7x+3Zh#FzWMX#&zj%?pjMW!)w3X@ZQa89>4G1XB&oZzvvUYYON10fxdvc0 z0Ka)eU0oeoT3S*f%(im?0JKy)AWiaH-Q>pR_694naRASGJf7aEhK$WoRn>?P;wb)=%m4`9glbe~m25zrs{_tgo+!VHg?9 zVG<1Bi#|GPetF`4FFH)C7G#-!DY89zb>)_20ljMN#(TGRRvMRuts~5p6;4D(q~W5=T^3-ImX&pnCyD zQ4SN)J2U50K1h<3>jybGJUsj=Zod3-`ziE+ilXdi<^zS=+lX_uwYBTJy1Fc@A!ZbH zH|X_xcLF$M(Un~>xy@i^t7rByb9Zxd^Nm9N6ni_&s;a&Yz+62#S)`wG;Ed^epAcfT z*Xu2+)LzQoZ43_&Z)j*}*a=__fD49U>@LC2j8IiowJVWGIB_!}>LsGLtm^*xP|_bH z{!f_m{}HMPU^fA~Q4zpy0(PS!fZYV_MnwR-3D}K_0Cp3w8x;ZUCSW(_ya4|K*6AJH T5lL*z00000NkvXXu0mjf26Qfg literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/dark/32x32/vertical_grainline.png b/src/app/puzzle/share/resources/puzzleicon/dark/32x32/vertical_grainline.png new file mode 100644 index 0000000000000000000000000000000000000000..be1aab5c323f8220f25da572f73f1765c0e65d36 GIT binary patch literal 968 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 LNkvXXu0mjfgXf1g literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconCurrentPiece@2x.png b/src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconCurrentPiece@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2816c2e2ec6257ae6665ed46401e96922c6c1128 GIT binary patch literal 2891 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 literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconTiles@2x.png b/src/app/puzzle/share/resources/puzzleicon/dark/64x64/iconTiles@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4ff1286ce32883cdfc8f037fe24f5d3bd00cee GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=B+7o-U3d6?5L+vGsc#AmZ@w z^@QUMEUpt0m~$GX0)0;h34ZAi-M}g)pd#?dee!%y4S`l;;g+}Q)ke>2c)L31&p)E5 ze^qzd>C}+YD#LYklcTnqT6vkL8?G-pzhLdz3}Xp~I|j#vw3k1jV=Sn& zV=TIPyW3;s?DVz&j`zDgonI@-r~K{v?&_Fnp=JfAp2<&kl9&5+(_J|Hd++oQ91X?{ z7R)ptcI2_UUNfBQwrAhA?f;fPe*ATRb#?a)pIi42htHd*B-Z`Ol-(5=<=4OSRXr4B z_@2+(wMKbqKjY-kwbCMy$KT~0Ip_EHclDD6C;a)kL?+TGghfwFG0*eUKelxCr3De+ z!?tE@)A;{(o16Q~XFAV9ubnVb%_&vBB?AmqHiqwfoJT`Nbxxd?1SVMqPgg&ebxsLQ E0FCGy6#xJL literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/light/32x32/horizontal_grainline.png b/src/app/puzzle/share/resources/puzzleicon/light/32x32/horizontal_grainline.png new file mode 100644 index 0000000000000000000000000000000000000000..5eab49f929b0bf298e0dbf86e5671f254a76e265 GIT binary patch literal 765 zcmVdA2O2CIIYHkTw-Y|9<&_c)0GC!53G@r-P#6)Cby$FF5HfF@7% zl6z_`eFJhZ^;~?7etRqj91#(8rBoa68u0u5ev-)~?d|P^LLoAl4B2dUeLJRUu1!x* zPq=-CU56vxzPdWU-Peo&q3%=Y;U?Pd43T+w4_R9c0&kR35d|cG`?{`^NF?a&?5t=m zB0poXSc@A#WbEB6u)orLe)1!;PlmuW0S0}Piw+T?R4Tc71FUQ&0P5T(^2|kK z0j>@k{6aX;{LxzWkB_5A&T@hZrA%~v66n%Ht9$NvLXWI2@*{tIIxyCh*>E*Di4q(3;L&qA)c{G5Z6`$NGwhi~)aKM7@^4xr0Ry7f~J% zlycsN@y)K{fh`C4-R@TV7!5j-mOKFD96pb#dW;;&kFCTn9soXD9xtF=Z&d?W2B(32 v9smviJ%F#0X8jawSM1z>!Wuvg;D5z00pEZ@-&=eX00000NkvXXu0mjfx$8)c literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/light/32x32/horizontal_grainline@2x.png b/src/app/puzzle/share/resources/puzzleicon/light/32x32/horizontal_grainline@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..27faede822363b46139b25d0fa7f5a9ed882a5d6 GIT binary patch literal 1541 zcmV+g2KxDlP);L?$-A7$8P8Cd*8d=?M^;3?+str z_j#Vr^Lc;X-}^q_&*zz_D%Ua`rU{rvS^(1oOd~CTX#%E^7Qi$C(?|4L-K$D2fj~3vvGm6L} z;42{0>RYpB4ULVB^!4?Ho3lh@lTE5#hHJ-_z?ASCXQmhL9ZNXZa=;ol3pgMmcdKe= zL>8OkG7mU~O>tSie7QC^H>=z2j#hk(UCu18F5GiKvx}ETi}@9p8M6qA$V{LaxXvn6 zNl6J66%`QzP9%uK!JG|S$hu{*o%<$WzleCljUfRW#l=)sR)*gF+}zw$ z@=ghyS=j)H%f;Nv?YQSfECb+9;8PI^)inozh`50Lz#{92qM{;vJ|8aE<#JJ8UXH^t zu?~{cSF8^G?Qnaz;e{P!%${QxdOz@i1fQm;DkAb6@TxVkprC-7ni?`QBWfWX9UZi_ zwT;vbTLc1uGxhcLTPkQ2w60GPhwk*A#A?80b%5y7)yA)W`|islmxOFOILIHbzr=+fkJt@q1@2PSOAY{49RgMXN3D^^ zj~}P1s)|4$5VAEiG)$Pq1L#12(+#`A3`%ExU9`oY07_N$5`^spRrPOR8PH}O(c0Qd zb#*m^gM$F{^z@{Xe@YPkt^e!&w>kISLA$Wizyqp!DrB)a49y1Gu{ltbl$2;wQ*a8JwCLkQI&<|C(PGX4w^`R4aU53FQzG&p@IAvv$q)`7K1@zdj$J?CBEy9= zSxieHc0G_4x>Ke5>(B7-+ie$n5m=_GKSg+A^xSR*dWi1{bQ|aic8=m8GJHjH>j%mb z?g^^u&p;XQPrQ%BD26+{R_hS3R#ls$4U2iCQ`MuuN>a0>O*P_aiB+oV-dF)+o@rI} zAn+uyTU!&YV+^oGRdCs}-9x&Ib;OjYALWQ{;b|RkFK`5S zC(((Mg@{ZBHUUe4AAna>wJ-K4n>^zY;Qxe))!H?Hv;d|Fm_}Lv(*#T-Er4kPrjZuF rGy&5{3t*anX`}@(O~5p+c>(?dO+AmF(0mA100000NkvXXu0mjfFqg%a literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/light/32x32/vertical_grainline.png b/src/app/puzzle/share/resources/puzzleicon/light/32x32/vertical_grainline.png new file mode 100644 index 0000000000000000000000000000000000000000..8ddc7ee8633e270ce36b9bf502bcf360fed7347c GIT binary patch literal 831 zcmV-F1Hk-=P)cszndL16&8x91FmCK#JyaA?^hpSmI(BYBO>bFiK_s@B@!6 z!OG@VZMb|(D}o`riTi-}uNwerfftrgRmX1KdGnz*-+rP^H)87F)owTO6xiT|SDY+D z5vd0fKm$O{o-P8%Pa%epSxd9COkO(2^vh=!Gy)t@)i3$D%N&S@fMH9#d}|%PU=zP4 zKQ76e8GVPpxfM^%MhofyhD2mbUj9NA5Ro^eU$v$9y7e?(>BFe>^K;?@W2a9*cCNds z8p*|9umZr_Y@p8mW`5>70CV5I<`SPL-HM!1(15BQ1FA?b!dl?y%A_SvjjAf<@TlsA zeEgn5222wvYc3)`GV?Mk!JfY0gwqNqEm$6sF}9FQ%e&vs-Ry*i$h_}$Cbr*(?I?zC zRTUu9{cM<{SgnD4Sji07Bip}S(+d1=!9U)D-rnBlgM)*wdU|>;y5IpEZpFF6FpTX0 zKA+DHuU!R1vaY?N3>2(@h@1tE*o6IyO4&cb!y+*_BoYad$)xr3PrzPP z9m~b<(T`002ov JPDHLkV1j1SeAoa0 literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/light/32x32/vertical_grainline@2x.png b/src/app/puzzle/share/resources/puzzleicon/light/32x32/vertical_grainline@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..392da9a26786816a65051658da418187ce557a3d GIT binary patch literal 1566 zcmV+(2I2XMP)WW42n;t(g^#+RRaF*wS>fwOnJlT&<{7BvAT; z%%RO`tgX44^+#K-)v_(c+G=f7%bLY9DKo>;z({-nfy>K%`r|^oaDNBx%Q*)GzT4U0 zJm-1N_xbXB<9D8)s45c~p3!=-h^!HjZ$zX`ME(_#Ln5-obt0II|&2LLr(eLxi; zuJLg>`7EH$BKgScZ6IY_2>{Fi>SIWL;Mx!P#)SaD4ZulLqMj+~DqgRZ2(>`QRV@H; zGjPU~U`o~u&D*(G=a*Kgr24ExI09Vj6hG-F=?FyRHsBDDJ=Eq4%qFLz8sF^e0l0F! zp3^(F66)+Qg*pxts_I$WIXWePh%5y@0y2l%{Bv{2-BL};^ufAxo;tzl?Jv@M`I0GQ zBViGKvz4b40*J^%z^1?r-q~Ht8VdkpG@XwiR zjCc7+9p?`pAk=XMfKYdk;F;4_ukQn%Qq{c)^S42OEri$aF(Wm5CJXkwgQWTf-S7DI z7^hx(9^&H^0t!_1>v)_7V8?%h%j0$EIp0F(AJKig?Z@xpO&-EI6vpcm>6|PQnwPb= zC;DD@ccL7QC+cX20HwgUHpC&k@{J4az;59EMBf5$~5t)Xypu2&!gKxz= zBRm2ewy<4R)xKB*nUJ&q15j1t`V~M#qT9A1e~SURO;s->L2X#LwIvpvu4zqR?g5T& zT8^3kV(bFOT*rj~V-~iJ0V5#l&#irZ=YWBgPzsP~u?BE<-`=Gyv3*4E^yC|!d(H6N zeNJ+l@Lgc^W&v~4j(KFX3zGsk8T@L%WD9UIcmyWA0Am)DEx^g(5t#4-j9E;!04IY- zV8RP9W--|UoD3d;F)M&u8zNDtuCCrwTU&chL_z}_s*4saT2fzc+n4W{FlswOQ>RY7 z8wT$L&zd#MgK;2sP`QTFERlfvEerxw(mQ_$5(CI|O(Z_$StfGcz;Uuwes!L#<#@Q4s|N z1@X3o8dd!w9*0QSRVKFp_!O8w)aLj5*|>2dd3kwwJRY*MvyII^5?x(g^!D}=3Wcbt zsiCf}&g#*ZRds7J+-;c#RrLgLC-BoyTQC@8*REYOH#ZXq1V&6AAT2G8w6wJ0l2>3; zvdM$}m7>#uPY8=K2&t*5l$Di{pPxTsoUX1es;a6udi1Et+y^|Vs&6IB7o4dT&Hz5d zP`c*vcql0;p|H@ps;#}foyy8e8X6i*<{s(xS_Ux%v2eZafGDua!6>(;Si#fm7u z*49=kDk^AfY&3;!2Ue=;XSQ;6@VtN*cmsICWM92{HO0ln|Nq|H+)R0SIZaJXrpH@> z2UOLja=ZvQTo@t14lE8vEnmJ|4<0IXFwaqLZV1pX!g|6Zc&x|fz6WMH&dV(U`bAhncqAVw`Okq&S2(#TK)(q00&T-2 z|1mJdH9l?&&@VzB;ridm#4ixuSMa*Y#nE$vBSA#w5k6Si0{pD1LAN>l2mabXA(N3K Q1poj507*qoM6N<$f(o+Y&j0`b literal 0 HcmV?d00001 diff --git a/src/app/puzzle/share/resources/puzzleicon/64x64/iconCurrentPiece.png b/src/app/puzzle/share/resources/puzzleicon/light/64x64/iconCurrentPiece.png similarity index 100% rename from src/app/puzzle/share/resources/puzzleicon/64x64/iconCurrentPiece.png rename to src/app/puzzle/share/resources/puzzleicon/light/64x64/iconCurrentPiece.png diff --git a/src/app/puzzle/share/resources/puzzleicon/64x64/iconCurrentPiece@2x.png b/src/app/puzzle/share/resources/puzzleicon/light/64x64/iconCurrentPiece@2x.png similarity index 100% rename from src/app/puzzle/share/resources/puzzleicon/64x64/iconCurrentPiece@2x.png rename to src/app/puzzle/share/resources/puzzleicon/light/64x64/iconCurrentPiece@2x.png diff --git a/src/app/puzzle/share/resources/puzzleicon/64x64/iconTiles.png b/src/app/puzzle/share/resources/puzzleicon/light/64x64/iconTiles.png similarity index 100% rename from src/app/puzzle/share/resources/puzzleicon/64x64/iconTiles.png rename to src/app/puzzle/share/resources/puzzleicon/light/64x64/iconTiles.png diff --git a/src/app/puzzle/share/resources/puzzleicon/64x64/iconTiles@2x.png b/src/app/puzzle/share/resources/puzzleicon/light/64x64/iconTiles@2x.png similarity index 100% rename from src/app/puzzle/share/resources/puzzleicon/64x64/iconTiles@2x.png rename to src/app/puzzle/share/resources/puzzleicon/light/64x64/iconTiles@2x.png diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/dark/horizontal_grainline.svg b/src/app/puzzle/share/resources/puzzleicon/svg/dark/horizontal_grainline.svg new file mode 100644 index 000000000..d8c98d0ff --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/dark/horizontal_grainline.svg @@ -0,0 +1,56 @@ + + + + + + + up right down left sign + + + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_current_piece.svg b/src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_current_piece.svg new file mode 100644 index 000000000..48b548bd8 --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_current_piece.svg @@ -0,0 +1,78 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_tiles.svg b/src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_tiles.svg new file mode 100644 index 000000000..d3a5abedf --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/dark/icon_tiles.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/dark/no_watermark_image.svg b/src/app/puzzle/share/resources/puzzleicon/svg/dark/no_watermark_image.svg new file mode 100644 index 000000000..2ca63cea1 --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/dark/no_watermark_image.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/dark/vertical_grainline.svg b/src/app/puzzle/share/resources/puzzleicon/svg/dark/vertical_grainline.svg new file mode 100644 index 000000000..0fb0ba395 --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/dark/vertical_grainline.svg @@ -0,0 +1,56 @@ + + + + + + + up right down left sign + + + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_horizontal.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_horizontal.svg deleted file mode 100644 index d0609895f..000000000 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_horizontal.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_vertical.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_vertical.svg deleted file mode 100644 index 22c7e42f6..000000000 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_grainline_vertical.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_landscape.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_landscape.svg deleted file mode 100644 index 444a54033..000000000 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_landscape.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_anticlockwise.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_anticlockwise.svg deleted file mode 100644 index 47851199d..000000000 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_anticlockwise.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - 90 - - diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_clockwise.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_clockwise.svg deleted file mode 100644 index d2effc39a..000000000 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_90_clockwise.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - 90 - - diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_horizontal.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_horizontal.svg deleted file mode 100644 index 4509e66c8..000000000 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_horizontal.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_vertical.svg b/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_vertical.svg deleted file mode 100644 index 34e32c7a7..000000000 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_rotate_grainline_vertical.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/light/horizontal_grainline.svg b/src/app/puzzle/share/resources/puzzleicon/svg/light/horizontal_grainline.svg new file mode 100644 index 000000000..0bec521fc --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/light/horizontal_grainline.svg @@ -0,0 +1,56 @@ + + + + + + + up right down left sign + + + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_current_piece.svg b/src/app/puzzle/share/resources/puzzleicon/svg/light/icon_current_piece.svg similarity index 100% rename from src/app/puzzle/share/resources/puzzleicon/svg/icon_current_piece.svg rename to src/app/puzzle/share/resources/puzzleicon/svg/light/icon_current_piece.svg diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_portrait.svg b/src/app/puzzle/share/resources/puzzleicon/svg/light/icon_layers.svg similarity index 67% rename from src/app/puzzle/share/resources/puzzleicon/svg/icon_portrait.svg rename to src/app/puzzle/share/resources/puzzleicon/svg/light/icon_layers.svg index cf7971065..ab1385c2d 100644 --- a/src/app/puzzle/share/resources/puzzleicon/svg/icon_portrait.svg +++ b/src/app/puzzle/share/resources/puzzleicon/svg/light/icon_layers.svg @@ -14,7 +14,7 @@ viewBox="0 0 33.866666 33.866668" version="1.1" id="svg8" - sodipodi:docname="icon_portrait.svg" + sodipodi:docname="icon_layers.svg" inkscape:export-filename="/home/ronan/Desktop/icon_layout.png" inkscape:export-xdpi="48" inkscape:export-ydpi="48" @@ -28,9 +28,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="3.959798" - inkscape:cx="74.673459" - inkscape:cy="45.737629" + inkscape:zoom="0.7" + inkscape:cx="-330.80339" + inkscape:cy="-397.46436" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" @@ -48,7 +48,7 @@ image/svg+xml - + @@ -57,19 +57,26 @@ inkscape:groupmode="layer" id="layer1" transform="translate(0,-263.13332)"> - - + width="17.856504" + height="17.856504" + x="0.59674788" + y="263.73007" /> + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/icon_tiles.svg b/src/app/puzzle/share/resources/puzzleicon/svg/light/icon_tiles.svg similarity index 100% rename from src/app/puzzle/share/resources/puzzleicon/svg/icon_tiles.svg rename to src/app/puzzle/share/resources/puzzleicon/svg/light/icon_tiles.svg diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/no_watermark_image.svg b/src/app/puzzle/share/resources/puzzleicon/svg/light/no_watermark_image.svg similarity index 100% rename from src/app/puzzle/share/resources/puzzleicon/svg/no_watermark_image.svg rename to src/app/puzzle/share/resources/puzzleicon/svg/light/no_watermark_image.svg diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/light/vertical_grainline.svg b/src/app/puzzle/share/resources/puzzleicon/svg/light/vertical_grainline.svg new file mode 100644 index 000000000..dbfc6bc64 --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/light/vertical_grainline.svg @@ -0,0 +1,56 @@ + + + + + + + up right down left sign + + + + diff --git a/src/app/puzzle/share/resources/puzzleicon/svg/roll.svg b/src/app/puzzle/share/resources/puzzleicon/svg/roll.svg new file mode 100644 index 000000000..1055789f9 --- /dev/null +++ b/src/app/puzzle/share/resources/puzzleicon/svg/roll.svg @@ -0,0 +1,49 @@ + + + + diff --git a/src/app/puzzle/vpmainwindow.cpp b/src/app/puzzle/vpmainwindow.cpp index e3d034d5c..7de08866c 100644 --- a/src/app/puzzle/vpmainwindow.cpp +++ b/src/app/puzzle/vpmainwindow.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -39,10 +40,12 @@ #include #include #include +#include #include "../ifc/exception/vexception.h" #include "../ifc/xml/vlayoutconverter.h" #include "../vdxf/libdxfrw/drw_base.h" +#include "../vganalytics/vganalytics.h" #include "../vlayout/dialogs/watermarkwindow.h" #include "../vlayout/vlayoutexporter.h" #include "../vlayout/vprintlayout.h" @@ -51,11 +54,13 @@ #include "../vmisc/dialogs/dialogselectlanguage.h" #include "../vmisc/lambdaconstants.h" #include "../vmisc/projectversion.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vsysexits.h" #include "../vwidgets/vmaingraphicsscene.h" #include "dialogs/dialogpuzzlepreferences.h" #include "dialogs/dialogsavemanuallayout.h" #include "dialogs/vpdialogabout.h" +#include "layout/vppiece.h" #include "layout/vpsheet.h" #include "ui_vpmainwindow.h" #include "undocommands/vpundoaddsheet.h" @@ -63,14 +68,13 @@ #include "undocommands/vpundopiecerotate.h" #include "undocommands/vpundopiecezvaluemove.h" #include "vpapplication.h" +#include "vptilefactory.h" #include "xml/vplayoutfilereader.h" #include "xml/vplayoutfilewriter.h" + #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../vganalytics/vganalytics.h" -#include "layout/vppiece.h" -#include "vptilefactory.h" #if QT_VERSION < QT_VERSION_CHECK(5, 12, 0) #include "../vmisc/backport/qscopeguard.h" @@ -78,10 +82,6 @@ #include #endif -#include -#include -#include - QT_WARNING_PUSH QT_WARNING_DISABLE_CLANG("-Wmissing-prototypes") QT_WARNING_DISABLE_INTEL(1418) @@ -1715,11 +1715,9 @@ auto VPMainWindow::MaybeSave() -> bool // TODO: Implement maybe save check if (this->isWindowModified()) { - QScopedPointer messageBox(new QMessageBox(tr("Unsaved changes"), - tr("Layout has been modified.\n" - "Do you want to save your changes?"), - QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, - QMessageBox::Cancel, this, Qt::Sheet)); + QScopedPointer messageBox(new QMessageBox( + tr("Unsaved changes"), tr("Layout has been modified. Do you want to save your changes?"), + QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel, this, Qt::Sheet)); messageBox->setDefaultButton(QMessageBox::Yes); messageBox->setEscapeButton(QMessageBox::Cancel); @@ -2758,7 +2756,7 @@ auto VPMainWindow::DrawTilesScheme(QPrinter *printer, QPainter *painter, const V if (watermarkData.showImage && not watermarkData.path.isEmpty()) { VPTileFactory::PaintWatermarkImage(painter, target, watermarkData, - m_layout->LayoutSettings().WatermarkPath()); + m_layout->LayoutSettings().WatermarkPath(), false); } if (watermarkData.showText && not watermarkData.text.isEmpty()) @@ -3346,6 +3344,29 @@ void VPMainWindow::RotatePieces() } } +//--------------------------------------------------------------------------------------------------------------------- +void VPMainWindow::InitIcons() +{ + const QString resource = QStringLiteral("puzzleicon"); + + auto SetTabIcon = [resource, this](QWidget *tab, const QString &iconName) + { + const int index = ui->tabWidgetProperties->indexOf(tab); + if (index != -1) + { + ui->tabWidgetProperties->setTabIcon(index, VTheme::GetIconResource(resource, iconName)); + } + }; + + SetTabIcon(ui->tabCurrentPieceProperty, QStringLiteral("64x64/iconCurrentPiece.png")); + SetTabIcon(ui->tabTilesProperty, QStringLiteral("64x64/iconTiles.png")); + + ui->toolButtonGrainlineHorizontalOrientation->setIcon( + VTheme::GetIconResource(resource, QStringLiteral("32x32/horizontal_grainline.png"))); + ui->toolButtonGrainlineVerticalOrientation->setIcon( + VTheme::GetIconResource(resource, QStringLiteral("32x32/vertical_grainline.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void VPMainWindow::on_actionNew_triggered() // NOLINT(readability-convert-member-functions-to-static) { @@ -3396,6 +3417,11 @@ void VPMainWindow::changeEvent(QEvent *event) UpdateWindowTitle(); } + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + } + // remember to call base class implementation QMainWindow::changeEvent(event); } diff --git a/src/app/puzzle/vpmainwindow.h b/src/app/puzzle/vpmainwindow.h index 87dcde859..ff6b7943b 100644 --- a/src/app/puzzle/vpmainwindow.h +++ b/src/app/puzzle/vpmainwindow.h @@ -28,24 +28,24 @@ #ifndef VPMAINWINDOW_H #define VPMAINWINDOW_H +#include #include #include -#include #include -#include "../vmisc/def.h" -#include "carousel/vpcarrousel.h" -#include "scene/vpmaingraphicsview.h" -#include "layout/vplayout.h" -#include "../vlayout/vlayoutpiece.h" -#include "vpcommandline.h" -#include "../vwidgets/vabstractmainwindow.h" -#include "../vmisc/vlockguard.h" #include "../vlayout/dialogs/vabstractlayoutdialog.h" +#include "../vlayout/vlayoutpiece.h" +#include "../vmisc/def.h" +#include "../vmisc/vlockguard.h" +#include "../vwidgets/vabstractmainwindow.h" +#include "carousel/vpcarrousel.h" +#include "layout/vplayout.h" +#include "scene/vpmaingraphicsview.h" +#include "vpcommandline.h" namespace Ui { - class VPMainWindow; +class VPMainWindow; } class QFileSystemWatcher; @@ -70,7 +70,7 @@ public: * @param path path to layout * @return true if success */ - auto LoadFile(const QString& path) -> bool; + auto LoadFile(const QString &path) -> bool; void LayoutWasSaved(bool saved); void SetCurrentFile(const QString &fileName); @@ -106,7 +106,7 @@ public slots: protected: void closeEvent(QCloseEvent *event) override; - void changeEvent(QEvent* event) override; + void changeEvent(QEvent *event) override; auto RecentFileList() const -> QStringList override; private slots: @@ -122,14 +122,14 @@ private slots: * triggered. * The slot is automatically connected through name convention. */ - bool on_actionSave_triggered(); //NOLINT(modernize-use-trailing-return-type) + bool on_actionSave_triggered(); // NOLINT(modernize-use-trailing-return-type) /** * @brief on_actionSaveAs_triggered When the menu action File > Save As * is triggered. * The slot is automatically connected through name convention. */ - bool on_actionSaveAs_triggered(); //NOLINT(modernize-use-trailing-return-type) + bool on_actionSaveAs_triggered(); // NOLINT(modernize-use-trailing-return-type) /** * @brief on_actionImportRawLayout_triggered When the menu action @@ -284,8 +284,8 @@ private slots: #if defined(Q_OS_MAC) void AboutToShowDockMenu(); -#endif //defined(Q_OS_MAC) - +#endif // defined(Q_OS_MAC) + void AskDefaultSettings(); void HorizontalScaleChanged(double value); @@ -315,9 +315,9 @@ private: /** * @brief mouseCoordinate pointer to label who show mouse coordinate. */ - QLabel* m_mouseCoordinate{nullptr}; + QLabel *m_mouseCoordinate{nullptr}; - QLabel* m_statusLabel{nullptr}; + QLabel *m_statusLabel{nullptr}; QString curFile{}; @@ -342,9 +342,9 @@ private: struct VPLayoutPrinterPage { VPSheetPtr sheet{}; - bool tilesScheme{false}; - int tileRow{-1}; - int tileCol{-1}; + bool tilesScheme{false}; + int tileRow{-1}; + int tileCol{-1}; }; /** @@ -425,9 +425,9 @@ private: void SetPropertyTabTilesData(); /** - * @brief SetPropertyTabLayoutData Sets the values of UI elements - * in the Layout Tab to the values saved in m_layout - */ + * @brief SetPropertyTabLayoutData Sets the values of UI elements + * in the Layout Tab to the values saved in m_layout + */ void SetPropertyTabLayoutData(); void ReadSettings(); @@ -473,7 +473,7 @@ private: void ExportData(const VPExportData &data); static void ExportApparelLayout(const VPExportData &data, const QVector &details, const QString &name, - const QSize &size) ; + const QSize &size); void ExportFlatLayout(const VPExportData &data); void ExportScene(const VPExportData &data); static void ExportUnifiedPdfFile(const VPExportData &data); @@ -494,7 +494,7 @@ private: auto CheckSuperpositionOfPieces(const VPPiecePtr &piece, bool &pieceSuperpositionChecked) -> bool; void PrintLayoutSheets(QPrinter *printer, const QList &sheets); - static auto PrintLayoutSheetPage(QPrinter *printer, QPainter &painter, const VPSheetPtr& sheet) -> bool; + static auto PrintLayoutSheetPage(QPrinter *printer, QPainter &painter, const VPSheetPtr &sheet) -> bool; void PrintLayoutTiledSheets(QPrinter *printer, const QList &sheets); auto PrepareLayoutTilePages(const QList &sheets) -> QVector; auto PrintLayoutTiledSheetPage(QPrinter *printer, QPainter &painter, const VPLayoutPrinterPage &page, @@ -509,6 +509,8 @@ private: void TranslatePieceRelatively(const VPPiecePtr &piece, const QRectF &rect, vsizetype selectedPiecesCount, qreal dx, qreal dy); void RotatePieces(); + + void InitIcons(); }; #endif // VPMAINWINDOW_H diff --git a/src/app/puzzle/vpmainwindow.ui b/src/app/puzzle/vpmainwindow.ui index 6e110558c..f54e7f8ee 100644 --- a/src/app/puzzle/vpmainwindow.ui +++ b/src/app/puzzle/vpmainwindow.ui @@ -233,7 +233,7 @@ - :/puzzleicon/64x64/iconCurrentPiece.png:/puzzleicon/64x64/iconCurrentPiece.png + :/puzzleicon/light/64x64/iconCurrentPiece.png:/puzzleicon/light/64x64/iconCurrentPiece.png @@ -870,7 +870,7 @@ - ... + @@ -893,7 +893,7 @@ - ... + @@ -950,11 +950,11 @@ Force the grainline orientation to always be horizontal - ... + - :/puzzleicon/32X32/horizontal_grainline.png:/puzzleicon/32X32/horizontal_grainline.png + :/puzzleicon/light/32x32/horizontal_grainline.png:/puzzleicon/light/32x32/horizontal_grainline.png @@ -973,11 +973,11 @@ Force the grainline orientation to always be vertical - ... + - :/puzzleicon/32X32/vertical_grainline.png:/puzzleicon/32X32/vertical_grainline.png + :/puzzleicon/light/32x32/vertical_grainline.png:/puzzleicon/light/32x32/vertical_grainline.png @@ -1203,7 +1203,7 @@ - :/puzzleicon/64x64/iconTiles.png:/puzzleicon/64x64/iconTiles.png + :/puzzleicon/light/64x64/iconTiles.png:/puzzleicon/light/64x64/iconTiles.png @@ -1316,7 +1316,7 @@ - ... + @@ -1339,7 +1339,7 @@ - ... + @@ -1857,7 +1857,7 @@ - ... + @@ -2427,8 +2427,8 @@ + - diff --git a/src/app/puzzle/vptilefactory.cpp b/src/app/puzzle/vptilefactory.cpp index 2037bce6f..b426732e5 100644 --- a/src/app/puzzle/vptilefactory.cpp +++ b/src/app/puzzle/vptilefactory.cpp @@ -10,6 +10,7 @@ #include "../vwidgets/vmaingraphicsscene.h" #include "layout/vplayout.h" #include "layout/vpsheet.h" +#include "theme/vtheme.h" #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) #include "../vmisc/diagnostic.h" @@ -390,7 +391,7 @@ void VPTileFactory::DrawWatermark(QPainter *painter) const if (m_watermarkData.showImage && not m_watermarkData.path.isEmpty()) { - PaintWatermarkImage(painter, img, m_watermarkData, layout->LayoutSettings().WatermarkPath()); + PaintWatermarkImage(painter, img, m_watermarkData, layout->LayoutSettings().WatermarkPath(), false); } if (m_watermarkData.showText && not m_watermarkData.text.isEmpty()) @@ -690,16 +691,25 @@ void VPTileFactory::PaintWatermarkText(QPainter *painter, const QRectF &img, con //--------------------------------------------------------------------------------------------------------------------- void VPTileFactory::PaintWatermarkImage(QPainter *painter, const QRectF &img, const VWatermarkData &watermarkData, - const QString &watermarkPath, qreal xScale, qreal yScale) + const QString &watermarkPath, bool folowColorScheme, qreal xScale, qreal yScale) { SCASSERT(painter != nullptr) const qreal opacity = watermarkData.opacity / 100.; - auto BrokenImage = [img, watermarkData, watermarkPath, opacity]() + auto BrokenImage = [img, watermarkData, watermarkPath, opacity, folowColorScheme]() { + QString colorScheme = QStringLiteral("light"); + + if (folowColorScheme) + { + colorScheme = + (VTheme::ColorSheme() == VColorSheme::Light ? QStringLiteral("light") : QStringLiteral("dark")); + } + QPixmap watermark; - QString imagePath = QStringLiteral("puzzle=path%1+opacity%2_broken") - .arg(AbsoluteMPath(watermarkPath, watermarkData.path), QString::number(opacity)); + QString imagePath = + QStringLiteral("puzzle=colorScheme%1+path%2+opacity%3_broken") + .arg(colorScheme, AbsoluteMPath(watermarkPath, watermarkData.path), QString::number(opacity)); if (not QPixmapCache::find(imagePath, &watermark)) { @@ -712,7 +722,7 @@ void VPTileFactory::PaintWatermarkImage(QPainter *painter, const QRectF &img, co QPainter imagePainter(&watermark); imagePainter.setOpacity(opacity); - svgRenderer->load(QStringLiteral("://puzzleicon/svg/no_watermark_image.svg")); + svgRenderer->load(QStringLiteral("://puzzleicon/svg/%1/no_watermark_image.svg").arg(colorScheme)); svgRenderer->render(&imagePainter, imageRect); QPixmapCache::insert(imagePath, watermark); diff --git a/src/app/puzzle/vptilefactory.h b/src/app/puzzle/vptilefactory.h index 9afe528b4..d05d072dd 100644 --- a/src/app/puzzle/vptilefactory.h +++ b/src/app/puzzle/vptilefactory.h @@ -102,7 +102,8 @@ public: static void PaintWatermarkText(QPainter *painter, const QRectF &img, const VWatermarkData &watermarkData, qreal xScale = 1.0, qreal yScale = 1.0); static void PaintWatermarkImage(QPainter *painter, const QRectF &img, const VWatermarkData &watermarkData, - const QString &watermarkPath, qreal xScale = 1.0, qreal yScale = 1.0); + const QString &watermarkPath, bool folowColorScheme, qreal xScale = 1.0, + qreal yScale = 1.0); private: // cppcheck-suppress unknownMacro diff --git a/src/app/tape/dialogs/dialognewmeasurements.ui b/src/app/tape/dialogs/dialognewmeasurements.ui index 16835baee..312563fd5 100644 --- a/src/app/tape/dialogs/dialognewmeasurements.ui +++ b/src/app/tape/dialogs/dialognewmeasurements.ui @@ -9,8 +9,8 @@ 0 0 - 220 - 104 + 342 + 107 @@ -36,11 +36,14 @@ - + 0 0 + + QComboBox::AdjustToContents + @@ -53,11 +56,14 @@ - + 0 0 + + QComboBox::AdjustToContents + diff --git a/src/app/tape/dialogs/dialogrestrictdimension.cpp b/src/app/tape/dialogs/dialogrestrictdimension.cpp index c0b633976..3eaa0b69f 100644 --- a/src/app/tape/dialogs/dialogrestrictdimension.cpp +++ b/src/app/tape/dialogs/dialogrestrictdimension.cpp @@ -49,7 +49,7 @@ auto FilterByMinimum(const QVector &base, qreal restriction) -> QVector filtered; filtered.reserve(base.size()); - for(const auto &b : base) + for (const auto &b : base) { if (b > restriction || VFuzzyComparePossibleNulls(b, restriction)) { @@ -69,7 +69,7 @@ auto FilterByMaximum(const QVector &base, qreal restriction) -> QVector filtered; filtered.reserve(base.size()); - for(const auto &b : base) + for (const auto &b : base) { if (b < restriction || VFuzzyComparePossibleNulls(b, restriction)) { @@ -100,6 +100,8 @@ void InitMinMax(qreal &min, qreal &max, const MeasurementDimension_p &dimension, void SetCellIcon(QTableWidgetItem *item, const QVector &validRows, qreal rowValue, qreal columnValue, const VDimensionRestriction &restriction, qreal min, qreal max) { + const QIcon closeIcon = QIcon(QStringLiteral("://icon/24x24/close.png")); + if (VFuzzyContains(validRows, rowValue)) { const bool leftRestriction = columnValue > min || VFuzzyComparePossibleNulls(columnValue, min); @@ -107,32 +109,32 @@ void SetCellIcon(QTableWidgetItem *item, const QVector &validRows, qreal if (leftRestriction && rightRestriction) { - item->setIcon(QIcon(VFuzzyContains(restriction.GetExcludeValues(), columnValue) - ? QStringLiteral("://icon/24x24/close.png") - : QStringLiteral("://icon/24x24/star.png"))); + item->setIcon(VFuzzyContains(restriction.GetExcludeValues(), columnValue) + ? closeIcon + : QIcon(QStringLiteral("://icon/24x24/star.png"))); } else { - item->setIcon(QIcon(QStringLiteral("://icon/24x24/close.png"))); + item->setIcon(closeIcon); } } else { - item->setIcon(QIcon(QStringLiteral("://icon/24x24/close.png"))); + item->setIcon(closeIcon); Qt::ItemFlags flags = item->flags(); flags &= ~(Qt::ItemIsEnabled); item->setFlags(flags); } } -} // namespace +} // namespace //--------------------------------------------------------------------------------------------------------------------- DialogRestrictDimension::DialogRestrictDimension(const QList &dimensions, const QMap &restrictions, RestrictDimension restrictionType, bool fullCircumference, - QWidget *parent) : - QDialog(parent), + QWidget *parent) + : QDialog(parent), ui(new Ui::DialogRestrictDimension), m_restrictionType(restrictionType), m_fullCircumference(fullCircumference), @@ -185,7 +187,7 @@ void DialogRestrictDimension::changeEvent(QEvent *event) { MeasurementDimension_p dimension = m_dimensions.at(index); - name->setText(dimension->Name()+QChar(':')); + name->setText(dimension->Name() + QChar(':')); name->setToolTip(VAbstartMeasurementDimension::DimensionToolTip(dimension, m_fullCircumference)); InitDimensionGradation(dimension, control); @@ -449,7 +451,7 @@ void DialogRestrictDimension::InitDimensionsBaseValues() if (m_dimensions.size() > index) { MeasurementDimension_p dimension = m_dimensions.at(index); - name->setText(dimension->Name()+QChar(':')); + name->setText(dimension->Name() + QChar(':')); name->setToolTip(VAbstartMeasurementDimension::DimensionToolTip(dimension, m_fullCircumference)); InitDimensionGradation(dimension, control); @@ -614,16 +616,16 @@ void DialogRestrictDimension::RefreshTable() if (m_restrictionType == RestrictDimension::First) { - for(int column=0; column < basesColumn.size(); ++column) + for (int column = 0; column < basesColumn.size(); ++column) { AddCell(0, column, 0, basesColumn.at(column)); } } else { - for(int row=0; row < basesRow.size(); ++row) + for (int row = 0; row < basesRow.size(); ++row) { - for(int column=0; column < basesColumn.size(); ++column) + for (int column = 0; column < basesColumn.size(); ++column) { AddCell(row, column, basesRow.at(row), basesColumn.at(column)); } @@ -765,8 +767,8 @@ void DialogRestrictDimension::FillBase(double base, const MeasurementDimension_p } //--------------------------------------------------------------------------------------------------------------------- -auto DialogRestrictDimension::FillDimensionXBases(const QVector &bases, - const MeasurementDimension_p &dimension) -> QStringList +auto DialogRestrictDimension::FillDimensionXBases(const QVector &bases, const MeasurementDimension_p &dimension) + -> QStringList { const bool showUnits = dimension->IsBodyMeasurement() || dimension->Type() == MeasurementDimension::X; const QString units = showUnits ? UnitsToStr(dimension->Units(), true) : QString(); @@ -774,7 +776,7 @@ auto DialogRestrictDimension::FillDimensionXBases(const QVector &bases, QStringList labels; - for(auto base : bases) + for (auto base : bases) { if (VFuzzyContains(dimensionLabels, base) && not VFuzzyValue(dimensionLabels, base).isEmpty()) { @@ -799,7 +801,7 @@ auto DialogRestrictDimension::FillDimensionYBases(const QVector &bases, QStringList labels; - for(auto base : bases) + for (auto base : bases) { if (VFuzzyContains(dimensionLabels, base) && not VFuzzyValue(dimensionLabels, base).isEmpty()) { @@ -809,7 +811,7 @@ auto DialogRestrictDimension::FillDimensionYBases(const QVector &bases, { if (dimension->IsBodyMeasurement()) { - labels.append(QStringLiteral("%1 %2").arg(m_fullCircumference ? base*2 : base).arg(units)); + labels.append(QStringLiteral("%1 %2").arg(m_fullCircumference ? base * 2 : base).arg(units)); } else { @@ -831,7 +833,7 @@ auto DialogRestrictDimension::FillDimensionWZBases(const QVector &bases, QStringList labels; - for(auto base : bases) + for (auto base : bases) { if (VFuzzyContains(dimensionLabels, base) && not VFuzzyValue(dimensionLabels, base).isEmpty()) { @@ -839,7 +841,7 @@ auto DialogRestrictDimension::FillDimensionWZBases(const QVector &bases, } else { - labels.append(QStringLiteral("%1 %2").arg(m_fullCircumference ? base*2 : base).arg(units)); + labels.append(QStringLiteral("%1 %2").arg(m_fullCircumference ? base * 2 : base).arg(units)); } } @@ -918,7 +920,7 @@ auto DialogRestrictDimension::StartRow() const -> int QVector validRows = DimensionRestrictedValues(dimensionB); - for(int i=0; i < basesRow.size(); ++i) + for (int i = 0; i < basesRow.size(); ++i) { if (VFuzzyContains(validRows, basesRow.at(i))) { diff --git a/src/app/tape/dialogs/dialogtapepreferences.cpp b/src/app/tape/dialogs/dialogtapepreferences.cpp index dcbdc14ed..d80cd745b 100644 --- a/src/app/tape/dialogs/dialogtapepreferences.cpp +++ b/src/app/tape/dialogs/dialogtapepreferences.cpp @@ -28,6 +28,7 @@ #include "dialogtapepreferences.h" #include "../mapplication.h" +#include "../vtools/dialogs/dialogtoolbox.h" #include "configpages/tapepreferencesconfigurationpage.h" #include "configpages/tapepreferencespathpage.h" #include "ui_dialogtapepreferences.h" @@ -120,19 +121,7 @@ void DialogTapePreferences::changeEvent(QEvent *event) if (event->type() == QEvent::PaletteChange) { - QStyle *style = QApplication::style(); - - QPushButton *bOk = ui->buttonBox->button(QDialogButtonBox::Ok); - SCASSERT(bOk != nullptr) - bOk->setIcon(style->standardIcon(QStyle::SP_DialogOkButton)); - - QPushButton *bApply = ui->buttonBox->button(QDialogButtonBox::Apply); - SCASSERT(bApply != nullptr) - bApply->setIcon(style->standardIcon(QStyle::SP_DialogApplyButton)); - - QPushButton *bCancel = ui->buttonBox->button(QDialogButtonBox::Cancel); - SCASSERT(bCancel != nullptr) - bCancel->setIcon(style->standardIcon(QStyle::SP_DialogCancelButton)); + InitDialogButtonBoxIcons(ui->buttonBox); } // remember to call base class implementation diff --git a/src/app/tape/main.cpp b/src/app/tape/main.cpp index eac8ccb2a..1263fe1a0 100644 --- a/src/app/tape/main.cpp +++ b/src/app/tape/main.cpp @@ -52,11 +52,12 @@ auto main(int argc, char *argv[]) -> int auto FreeMemory = qScopeGuard([exe_dir] { free(exe_dir); }); #endif // defined(APPIMAGE) && defined(Q_OS_LINUX) - Q_INIT_RESOURCE(tapeicon); // NOLINT - Q_INIT_RESOURCE(icon); // NOLINT - Q_INIT_RESOURCE(schema); // NOLINT - Q_INIT_RESOURCE(flags); // NOLINT - Q_INIT_RESOURCE(breeze); // NOLINT + Q_INIT_RESOURCE(tapeicon); // NOLINT + Q_INIT_RESOURCE(icon); // NOLINT + Q_INIT_RESOURCE(schema); // NOLINT + Q_INIT_RESOURCE(flags); // NOLINT + Q_INIT_RESOURCE(breeze); // NOLINT + Q_INIT_RESOURCE(scenestyle); // NOLINT #if defined(Q_OS_MACX) Q_INIT_RESOURCE(mac_theme); // NOLINT #else diff --git a/src/app/tape/mapplication.cpp b/src/app/tape/mapplication.cpp index 7410c2143..a5b717077 100644 --- a/src/app/tape/mapplication.cpp +++ b/src/app/tape/mapplication.cpp @@ -38,6 +38,7 @@ #include "../vmisc/theme/vapplicationstyle.h" #include "../vmisc/theme/vtheme.h" #include "../vmisc/vsysexits.h" +#include "qtpreprocessorsupport.h" #include "tmainwindow.h" #include "version.h" @@ -611,6 +612,14 @@ auto MApplication::diagramsPath() -> QString return file.absoluteFilePath(); } +#ifdef QBS_BUILD + file = QFileInfo(QCoreApplication::applicationDirPath() + "/../../.." + PKGDATADIR + dPath); + if (file.exists()) + { + return file.absoluteFilePath(); + } +#endif // QBS_BUILD + #if defined(APPIMAGE) && defined(Q_OS_LINUX) /* Fix path to diagrams when run inside AppImage. */ return AppImageRoot() + PKGDATADIR + dPath; diff --git a/src/app/tape/share/resources/tapeicon.qrc b/src/app/tape/share/resources/tapeicon.qrc index e9236fdb2..07890d31d 100644 --- a/src/app/tape/share/resources/tapeicon.qrc +++ b/src/app/tape/share/resources/tapeicon.qrc @@ -3,13 +3,17 @@ tapeicon/64x64/logo.png tapeicon/16x16/info.png tapeicon/16x16/measurement.png - tapeicon/24x24/fx.png tapeicon/24x24/orange_plus.png tapeicon/24x24/red_plus.png tapeicon/24x24/padlock_locked.png tapeicon/24x24/padlock_opened.png - tapeicon/24x24/mannequin.png tapeicon/24x24/separator@2x.png tapeicon/24x24/separator.png + tapeicon/24x24/padlock_locked@2x.png + tapeicon/24x24/padlock_opened@2x.png + tapeicon/light/24x24/mannequin@2x.png + tapeicon/light/24x24/mannequin.png + tapeicon/dark/24x24/mannequin@2x.png + tapeicon/dark/24x24/mannequin.png diff --git a/src/app/tape/share/resources/tapeicon/24x24/fx.png b/src/app/tape/share/resources/tapeicon/24x24/fx.png deleted file mode 100644 index b6bbd46689713f050ce1ca01d1f44bdadf46c223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 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 bD*ggLy%KA~0_aw<00000NkvXXu0mjft^f0U delta 492 zcmVhCVs^qO96f&~`?56^RN|F^r`InI*L z4cxpJc$c6JhP3;h@Sf3EaMAhAhmk7ig0U;yvE&%uzzJiS^nb>McSN*9cxn($U)0w6 z1Ju$+zK*f(#AxJ1gqcXgil@5A_+}ahXGVk)BlHb?0QNC>4S$*0fQvK^nlrT)-W|qr z#>Qvqzl}M#Pij2FLSbe=#HW_iRhyJb2hj%EL=M1XY$NM)4uo4#W7CcApmRx1PnN|` zW{GImEP+&_41dE+I_R~e8Pq|8MGYLDql=3i7$tgH>Of9lVgb&xa7#jJ`sCkSPzcA1 za$n36fmiys7dnvxENbcNU;y_t`e2|j1n=_aV(#Zmi2`?oGdV5~$cD|qo}RcAhEc1A z%eG7HVD7Go{lzJC#jzZ_!&nqnog@QnRc#rRR#hUa17%Vxt*}IkGx#sj-<62L9rX?f z^%gXl7_q4pi;#cNyY_o1piI2Qu#YjH1-{b4J%%I9w1wv@1d8R_vV3xFCCY)8e#8}M i&uNTDZJP!Urh{)ZOo-(xK(a9a0000`!{{c}?S;d9DEP4<`6ch|1 zcvR2`qWA|WcoP&6qlc^@$_OIJg5qfEdv6c@W4dR?*y*lf2;_sNshY34-h1CyU0)Yd zlZ3@=1N{b2)s_hK+lG8TY-Z-f@W}fgCrIvvxJ9z{A|ddNjE_Lx)<@kMZ~XJs*PJz9 zi+J|_`3At#630YBB9c3jwg}N)68vk^?o&5?%v+tn^z`7%)y*@MO=dwW2bz#9*GKZ) ztb295(YRq%rmvhrv#Z~n5join+IkW}`~K%IwYmTtt1^G3MLc`|TtjA)qD6q|Ai9>! zorlvl8~ilNWuHf7+%DP$(Y}xd(t&g^b4MRuKeDe1hSDiCGks!s=%*DgWE{&V{o3eu z{krqy(_Uj9-#WUP&fS%`K8=R>@944*V(jYU4)|wAI0Bo5! z`^2c-qJ0q!q=9A||7)$>Qx->Q0(9Dwqz-8?+NJrxC-(av7oN!6nt#1UP)QflM#YlkW@;h`%>u&@Wa|%Ukz$z0c{1$q5 z@9(_?r$nvo{#6hNNSX5404XUK;=2Ke`qH)tNomPlgEavj-mw49?IO4e?*kMs_6DD+ z`Dp+hB$on=E|-EuuJDUfD2@i?K(TJrR8d@oQ%F+1qsN=-kU_|etM>#^g+Sh70LlPR zhK%xL@_u=OUEmq}_$ILS=N|xM0cKTax9Z<&vy=2-hu^@07IpCmbO7b|{kr7PIzNFde2r%+(kgQk#NaMjcH0;<#E zDMSmedgv4iu6oALKY_GB3#WRn?VSKExazraz6oHS6!NCJme&c;CqNfm z^`L7Yoj9cGA>Tr8-+w~#kfzYSEA3hM4;dHKi8-!65^zBNB{r;07*qoM6N<$g13d{&;S4c literal 0 HcmV?d00001 diff --git a/src/app/tape/share/resources/tapeicon/dark/24x24/mannequin.png b/src/app/tape/share/resources/tapeicon/dark/24x24/mannequin.png new file mode 100644 index 0000000000000000000000000000000000000000..6de01542ecfa24151d37c565936e94bfea47f89f GIT binary patch literal 948 zcmV;l155mgP)Zk zwXpOb(14(XEL;dmtb&V>h%ORqJ$GiVUW^O1f>f{f+%vBWPvqw2h8k;M7>4&_p68w6 znHf=4uBVxP$9sSDTEL2;xOHu9ZSS@Osyb(_J^5e2z4zl$6n)faG?Hxzj4=<2$Xo4p zdu*o!s``qE%uP;Cu5L?^B+1tzGGCVElRE*o)=mMZM@L6r9n6WU(rUGiBuTOk;G8=Q ze3E6^F(6oL9}$t+t8h#MW58FNz(sx&=iHeP!f_G#Jj=2d>yG9{zDH2txTcSL0OKtr!Jo6Y0h zZujwCulJ~P?u3Y(_1@o9mgNTkWm$d!(Cv2LYqeS#Kn#$k=|VqJ2q89RlfY2b*ccOw z$cU;MV@#~7aj(~lqbQ2&vR(BF#8p+rB0|g%GsfI5B1H{+MOEJc_5r6tJQiU&+~oT)M1Q~vMg7ssyf|hG=AyNjf{-^ ziK=cI-uolYxk6Q=!QA5FVmugARh)CLTWg;hmNSDLsp@kfgmXaEA1{hxB1w|V&bem> z*Mtz>1fE`BUmq04me=$yRlTp%>6{xZthc|Ss;h&!JkP%a-tTle&kp9K|37ffeFjv< zm=}^Hxd4R01;fmHKd!0|17}6#Xqu*e3xT!vq=-DPs^>-IA>dB_zR4>h@@)v=C*W6A zZA4MDA4pVn8n_3z1y~S~QdRe4S@zf#g8I!_NYnJ)+TR7-t*Xa>X%RW3s(XPha0O@s zmqcVKP1B12MN#aJqUakD$T%gZCfl(3Uwt$o{jKf6gqd7j?}{4g^! zQ~sMXzlwdSs&{NS1|Wpc0Dk`;z&CFGXnz1zHO*#o>ROMd{=9A|isHr%f0InFhy4W> W%``;}-PJMx0000){4jTL zcDgfrr|qu7Ke@U0obx=-{r~5ld(Lyt9Z^+Y%P{|I0vC$cuYfQNw})Z4bvenj!B}f| zSZm+b)u>a0i0l@T--cm$&Bf=oIIOk1fO~*XbhGOyKvj1DDG_-F8;Y�b<#N9S?giGT)9J5VREAv;MbUtB?mobX$j9>ee5IRx*OxezO6>$9 z;B#RZuD^IRJHt75JCFw+@O}Sxi`jP-FgiLq2Yeam2f9AWi-Ag|GAtsu0k72S^_@w4 z79B=|Ab40r_KV1krBW$>!7RI=R;zs$SPk5h&*!I;`1B>PQC0mO@C#$iEx;Gs+Ksh# zD{yH~Y|n)NI{+1tqt@CFCGeS))>I;jqEGq0e_y-R!Gi}=!^6W7FfcGMFg7wWGTUsk z)=mI>FOdBC;?%q+psHUB!*Dp4%YCD@e)Hzd)i4b27m+*X=H}iDJkruU6rZ0Fk*AlK za4Xl(10#Lb+Lv0%h{)H&Fr;0C=XsAh=k7GdypQ<;ngRC(LGaBb=KU(HwI2mW46vr< z5P(?3?X3>kZ1xZ^t*Y->E|N*mEtR<2TKm?PDh2)ojMAvy_gs`|+w2oASa zipXC8F~)3IdTPmFfUxDL6O+&7az9?c{-5#rjopG;YbTB$KfbbA4#RLm>l`vUIl0-a&mREJT*0yi=yaF&GNBh#|EP)dM9x=e^o#b1mn#Ec&Q6{RP_Xah^*;E zJ`BUFfxWY{vtMY|iO6q6Etkt1MdY~^D^~1k+SKdyM^yF6X8FvS zGoMk_J*86Vy4L%(52LrlN!)@^)jknHRb3|={yVG=wbqG9wTsOVfOBrB&8EG4&W|_m z9q2|rMmi2sUBqtL(9@DqM0^0}T-OwLIU&95N?2>31m5GETRT2J{;#<1M&L2P0wq-) z7LlufGH@hzouDxcKNpv;1jc|r0w-zYQP%(!;Dy*`3ym(mCobm!A2P3KO zt(^wW20<{=tSpzy8=Z3piM!V_<8YE}6o4p-uBI_tKiFEI&1U~vsZ=g=&JCO|i)yu+ zGRBmEGu3K!JO3xEf$O8>2%r}W2UUNk0-fLKA%4ed>{+`*4oFdwI8ljDoZuv8f)!D6h-$MW1gUq_g|4t zr*G}%wBQqnqG+3{J^}0%k^QQ=9mvGZXMqE%`g>!{9^jDg`zL#4TPPIzSFT+7=6H=g zp{iSG4AlUy(8#ZD0%ivX2XkxJuANCNz*@T>xXwAZWqf>mA7G*=nuvwG3kcd=rbXn4 zsve=S@ShQp84)=Jq*ZmLs$N24U67-Zm}LO3CB{h+c~(^)N~Kc29vvN>v(|naxDD7D z1i`lw35Y)^91@ZJzVE+%At!5XRz$8>)h!~jQB~IiZ&=8-17>Jss(%xa{lH$|_YVW} z7D~lpan$p?2(UpAY@m_RE-GL*uv0{C^?m<`Nf}K|O|4N?zh19jW{g>-s;fj~&^cEX zk<-9Q=iE$RU!Uz|K(N+64Qv&WYkl88(B8gKGIs;uQmNF#NpAv>$z)CdCwlQoh=+i! zs(J&B;dLJ7jY3fr4FPXa)fd*STleoJAk#C9G5g}n1vk{@32@G>r}1Uv`K2b76xnQc z5;zSk_Do)-7_JUw3T;5d^94!?U|?)Ti^dApIB zo+q_>g@|~0Ibad-VnnQZOqrQo#ud!;>K4lw#T+Id)7P9{DNaL62=E!+dqUsfcpUFM zBltGl!EoIcnJFSRWaizH$91?+uKFk<-oW0cr2i!h;rp6?z8w)qu{$CzX66T(`Ex|f zVJ9wO56p_2QAB)+ zk2CY@h-eq^g(z?tGx)7$`@5;~8_L)BHQ3qvQbw$emy2Cj69{4=ta*!>b*k6JP-M{|9iY^bK}|&JU-B piOjsYT=a+-Q>FTsZh+@W{{mr+b1qi4eANH|002ovPDHLkV1obDK?VQ- literal 0 HcmV?d00001 diff --git a/src/app/tape/share/resources/tapeicon/light/24x24/mannequin@2x.png b/src/app/tape/share/resources/tapeicon/light/24x24/mannequin@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..da969e4d885f76eeb3737cfe419cc27e7f75c697 GIT binary patch literal 1351 zcmV-N1-SZ&P)2lN3|2Hd}SecBh9kKlZoh{_efM-+J#|bYM7l&TnSU z%$zgl%sE_{8Rs%I4YUDg3+Jx`l9otX*hpid@tY*AkTjzrqnTwQa0vJZxUL*eJrQ^s zFyOU{d=(Vj3-kbcfe{Th{$}7m;3&}AF9%%F>mG%d8)*DRK)VO;wyOM9lnn*;`%;?R zAP1iFpl!;4T?CxivJcLI|njjFq4IiZ{bJ-{+E`yuMz zP1r4_)YYm2&;vlrN%qF->H=}u2|dR>ZVC-7^EUgbP< z<0MYQax?p=LU0rQo(eq8QJefeQ-PGa8gD#k-7?ud*TP$+t(ywcl)HMXPQ zP_-6{AlZF>&iJ-e(p*AC39v}gO#eL^FiFWteYLmiC3VnSN8Oo9_Hn?VluXjUM$)6e zM4);#no6Pz2&eVosDCPOih-$xzArKZa|j9ae!A1lew5TgxJmUF1_S$mE*natr2MK0|;bz~8{AIu&R45thZfh2(N7U+T)= zEMU+O;Iabz7ZMKAlfb1lbHEkvBdp75IgOb}xBwaO3DA^NZnew2RZ9m}y3&mWqPd2? zyTz=Wa-#_)`x#*BSvx?u@pJ&4g{HN4$(hUMdSP(cq~7|p77l#i%AU+?fXfMZ7scRC(5{q~zPwGWge%aWOEoPDVEoUO3+H z-6$D*RbdB!+g5j%ZDCrBr z)8+Mqyewggz1~GQbz2&_^HiAa2MM$GOxE{4H!?}hz%<||GdrFqN)3QEZ!;g%;w$B3 z@B6Nv78Qg&ge5pR>tpOdtG9>hX;Bd{v*bW)EqN27)PaP~dn0NT^ibyh9y^fSs=DfG zPH{K|bXmrs6??S + + + diff --git a/src/app/tape/share/resources/tapeicon/svg/light/mannequin.svg b/src/app/tape/share/resources/tapeicon/svg/light/mannequin.svg new file mode 100644 index 000000000..680e4d493 --- /dev/null +++ b/src/app/tape/share/resources/tapeicon/svg/light/mannequin.svg @@ -0,0 +1,41 @@ + + + + diff --git a/src/app/tape/share/resources/tapeicon/svg/padlock_locked.svg b/src/app/tape/share/resources/tapeicon/svg/padlock_locked.svg new file mode 100644 index 000000000..e81eafaa1 --- /dev/null +++ b/src/app/tape/share/resources/tapeicon/svg/padlock_locked.svg @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/tape/share/resources/tapeicon/svg/padlock_opened.svg b/src/app/tape/share/resources/tapeicon/svg/padlock_opened.svg new file mode 100644 index 000000000..af2f2f3cd --- /dev/null +++ b/src/app/tape/share/resources/tapeicon/svg/padlock_opened.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 4b7663cbe..b9158dff2 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -31,16 +31,21 @@ #include "../ifc/xml/vpatternconverter.h" #include "../ifc/xml/vvitconverter.h" #include "../ifc/xml/vvstconverter.h" +#include "../qmuparser/qmudef.h" +#include "../vganalytics/vganalytics.h" #include "../vmisc/compatibility.h" #include "../vmisc/dialogs/dialogaskcollectstatistic.h" #include "../vmisc/dialogs/dialogexporttocsv.h" +#include "../vmisc/dialogs/dialogselectlanguage.h" #include "../vmisc/qxtcsvmodel.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vsysexits.h" #include "../vpatterndb/calculator.h" #include "../vpatterndb/measurements.h" #include "../vpatterndb/pmsystems.h" #include "../vpatterndb/variables/vmeasurement.h" #include "../vpatterndb/vcontainer.h" +#include "../vtools/dialogs/support/dialogeditwrongformula.h" #include "def.h" #include "dialogs/dialogabouttape.h" #include "dialogs/dialogdimensioncustomnames.h" @@ -51,17 +56,15 @@ #include "dialogs/dialogrestrictdimension.h" #include "dialogs/dialogsetupmultisize.h" #include "dialogs/dialogtapepreferences.h" +#include "mapplication.h" // Should be last because of definning qApp +#include "qtpreprocessorsupport.h" #include "ui_tmainwindow.h" +#include "vlitepattern.h" #include "vtapesettings.h" + #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../qmuparser/qmudef.h" -#include "../vganalytics/vganalytics.h" -#include "../vmisc/dialogs/dialogselectlanguage.h" -#include "../vtools/dialogs/support/dialogeditwrongformula.h" -#include "mapplication.h" // Should be last because of definning qApp -#include "vlitepattern.h" #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #include "../vmisc/vtextcodec.h" @@ -267,6 +270,8 @@ TMainWindow::TMainWindow(QWidget *parent) { ui->setupUi(this); + InitIcons(); + VAbstractApplication::VApp()->Settings()->GetOsSeparator() ? setLocale(QLocale()) : setLocale(QLocale::c()); ui->lineEditName->setClearButtonEnabled(true); @@ -800,6 +805,11 @@ void TMainWindow::changeEvent(QEvent *event) } } + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + } + // remember to call base class implementation QMainWindow::changeEvent(event); } @@ -1927,11 +1937,6 @@ void TMainWindow::ShowMDiagram(const QString &name) "

%2. %3

") .arg(DialogMDataBase::ImgTag(number), number, trv->GuiText(name))); } - // This part is very ugly, can't find better way to resize dockWidget. - ui->labelDiagram->adjustSize(); - // And also those 50 px. DockWidget has some border. And i can't find how big it is. - // Can lead to problem in future. - ui->dockWidgetDiagram->setMaximumWidth(ui->labelDiagram->width() + 50); } //--------------------------------------------------------------------------------------------------------------------- @@ -3184,11 +3189,9 @@ auto TMainWindow::MaybeSave() -> bool return true; // Don't ask if file was created without modifications. } - QScopedPointer messageBox(new QMessageBox(tr("Unsaved changes"), - tr("Measurements have been modified.\n" - "Do you want to save your changes?"), - QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, - QMessageBox::Cancel, this, Qt::Sheet)); + QScopedPointer messageBox(new QMessageBox( + tr("Unsaved changes"), tr("Measurements have been modified. Do you want to save your changes?"), + QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel, this, Qt::Sheet)); messageBox->setDefaultButton(QMessageBox::Yes); messageBox->setEscapeButton(QMessageBox::Cancel); @@ -3310,12 +3313,13 @@ void TMainWindow::RefreshTable(bool freshCall) } } - if (freshCall) - { - ui->tableWidget->resizeColumnsToContents(); - ui->tableWidget->resizeRowsToContents(); - } - ui->tableWidget->horizontalHeader()->setStretchLastSection(true); + Q_UNUSED(freshCall) + // if (freshCall) + // { + // ui->tableWidget->resizeColumnsToContents(); + // ui->tableWidget->resizeRowsToContents(); + // } + // ui->tableWidget->horizontalHeader()->setStretchLastSection(true); ui->tableWidget->blockSignals(false); ui->actionExportToCSV->setEnabled(ui->tableWidget->rowCount() > 0); @@ -3656,15 +3660,8 @@ void TMainWindow::Open(const QString &pathTo, const QString &filter) void TMainWindow::UpdatePadlock(bool ro) { ui->actionReadOnly->setChecked(ro); - if (ro) - { - ui->actionReadOnly->setIcon(QIcon("://tapeicon/24x24/padlock_locked.png")); - } - else - { - ui->actionReadOnly->setIcon(QIcon("://tapeicon/24x24/padlock_opened.png")); - } - + ui->actionReadOnly->setIcon(ro ? QIcon("://tapeicon/24x24/padlock_locked.png") + : QIcon("://tapeicon/24x24/padlock_opened.png")); ui->actionReadOnly->setDisabled(m_mIsReadOnly); } @@ -4378,6 +4375,17 @@ auto TMainWindow::OrderedMeasurments() const -> QMaptoolButtonExpr->setIcon(VTheme::GetIconResource(iconResource, QStringLiteral("24x24/fx.png"))); + + QString tapeIconResource = QStringLiteral("tapeicon"); + ui->actionMeasurementDiagram->setIcon( + VTheme::GetIconResource(tapeIconResource, QStringLiteral("24x24/mannequin.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void TMainWindow::SetDecimals() { diff --git a/src/app/tape/tmainwindow.h b/src/app/tape/tmainwindow.h index d0b930362..30d4da33b 100644 --- a/src/app/tape/tmainwindow.h +++ b/src/app/tape/tmainwindow.h @@ -31,15 +31,15 @@ #include +#include "../vformat/vmeasurements.h" #include "../vmisc/def.h" #include "../vmisc/vlockguard.h" -#include "../vformat/vmeasurements.h" #include "../vmisc/vtablesearch.h" #include "../vwidgets/vabstractmainwindow.h" namespace Ui { - class TMainWindow; +class TMainWindow; } // namespace Ui class QLabel; @@ -69,7 +69,7 @@ public: protected: void closeEvent(QCloseEvent *event) override; - void changeEvent(QEvent* event) override; + void changeEvent(QEvent *event) override; auto eventFilter(QObject *object, QEvent *event) -> bool override; void ExportToCSVData(const QString &fileName, bool withHeader, int mib, const QChar &separator) final; auto RecentFileList() const -> QStringList override; @@ -83,7 +83,7 @@ private slots: void Preferences(); void ToolBarStyles(); - bool FileSave(); // NOLINT(modernize-use-trailing-return-type) + bool FileSave(); // NOLINT(modernize-use-trailing-return-type) bool FileSaveAs(); // NOLINT(modernize-use-trailing-return-type) void AboutToShowWindowMenu(); void ShowWindow() const; @@ -92,12 +92,12 @@ private slots: #if defined(Q_OS_MAC) void AboutToShowDockMenu(); void OpenAt(QAction *where); -#endif //defined(Q_OS_MAC) +#endif // defined(Q_OS_MAC) void SaveCustomerName(); void SaveEmail(); void SaveGender(int index); - void SaveBirthDate(const QDate & date); + void SaveBirthDate(const QDate &date); void SaveNotes(); void SavePMSystem(int index); @@ -145,27 +145,27 @@ private slots: void EditDimensionLabels(); void DimensionCustomNames(); - + void AskDefaultSettings(); private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(TMainWindow) // NOLINT Ui::TMainWindow *ui; - VMeasurements *m_m{nullptr}; - VContainer *m_data{nullptr}; - Unit m_mUnit{Unit::Cm}; - Unit m_pUnit{Unit::Cm}; + VMeasurements *m_m{nullptr}; + VContainer *m_data{nullptr}; + Unit m_mUnit{Unit::Cm}; + Unit m_pUnit{Unit::Cm}; MeasurementsType m_mType{MeasurementsType::Individual}; - qreal m_currentDimensionA{0}; - qreal m_currentDimensionB{0}; - qreal m_currentDimensionC{0}; - QString m_curFile{}; - QComboBox *m_gradationDimensionA{nullptr}; - QComboBox *m_gradationDimensionB{nullptr}; - QComboBox *m_gradationDimensionC{nullptr}; - QComboBox *m_comboBoxUnits{nullptr}; - int m_formulaBaseHeight; + qreal m_currentDimensionA{0}; + qreal m_currentDimensionB{0}; + qreal m_currentDimensionC{0}; + QString m_curFile{}; + QComboBox *m_gradationDimensionA{nullptr}; + QComboBox *m_gradationDimensionB{nullptr}; + QComboBox *m_gradationDimensionC{nullptr}; + QComboBox *m_comboBoxUnits{nullptr}; + int m_formulaBaseHeight; QSharedPointer> m_lock{nullptr}; QSharedPointer m_search{}; QLabel *m_labelGradationDimensionA{nullptr}; @@ -183,12 +183,12 @@ private: { MultisizeMeasurement() = default; - QString name{}; // NOLINT(misc-non-private-member-variables-in-classes) - qreal base{0}; // NOLINT(misc-non-private-member-variables-in-classes) - qreal shiftA{0}; // NOLINT(misc-non-private-member-variables-in-classes) - qreal shiftB{0}; // NOLINT(misc-non-private-member-variables-in-classes) - qreal shiftC{0}; // NOLINT(misc-non-private-member-variables-in-classes) - QString fullName{}; // NOLINT(misc-non-private-member-variables-in-classes) + QString name{}; // NOLINT(misc-non-private-member-variables-in-classes) + qreal base{0}; // NOLINT(misc-non-private-member-variables-in-classes) + qreal shiftA{0}; // NOLINT(misc-non-private-member-variables-in-classes) + qreal shiftB{0}; // NOLINT(misc-non-private-member-variables-in-classes) + qreal shiftC{0}; // NOLINT(misc-non-private-member-variables-in-classes) + QString fullName{}; // NOLINT(misc-non-private-member-variables-in-classes) QString description{}; // NOLINT(misc-non-private-member-variables-in-classes) }; @@ -225,7 +225,7 @@ private: auto MaybeSave() -> bool; auto AddCell(const QString &text, int row, int column, int aligment, bool ok = true) -> QTableWidgetItem *; - auto AddSeparatorCell(const QString &text, int row, int column, int aligment, bool ok = true) -> QTableWidgetItem*; + auto AddSeparatorCell(const QString &text, int row, int column, int aligment, bool ok = true) -> QTableWidgetItem *; void RefreshData(bool freshCall = false); void RefreshTable(bool freshCall = false); @@ -254,8 +254,7 @@ private: void CreateWindowMenu(QMenu *menu); - template - void HackWidget(T **widget); + template void HackWidget(T **widget); void HackDimensionBaseValue(); void HackDimensionShifts(); @@ -265,8 +264,8 @@ private: void ImportIndividualMeasurements(const QxtCsvModel &csv, const QVector &map, bool withHeader); void ImportMultisizeMeasurements(const QxtCsvModel &csv, const QVector &map, bool withHeader); - auto ImportMultisizeMeasurement(const QxtCsvModel &csv, int i, const QVector &map, - vsizetype dimensionsCount, QSet &importedNames) -> MultisizeMeasurement; + auto ImportMultisizeMeasurement(const QxtCsvModel &csv, int i, const QVector &map, vsizetype dimensionsCount, + QSet &importedNames) -> MultisizeMeasurement; void SetCurrentPatternUnit(); @@ -276,7 +275,9 @@ private: auto DimensionRestrictedValues(int index, const MeasurementDimension_p &dimension) -> QVector; - auto OrderedMeasurments() const -> QMap >; + auto OrderedMeasurments() const -> QMap>; + + void InitIcons(); }; #endif // TMAINWINDOW_H diff --git a/src/app/tape/tmainwindow.ui b/src/app/tape/tmainwindow.ui index 02f24edf7..34db69408 100644 --- a/src/app/tape/tmainwindow.ui +++ b/src/app/tape/tmainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 1188 - 836 + 1463 + 899
@@ -19,8 +19,8 @@ - - 15 + + 0 0 @@ -43,6 +43,12 @@
+ + + 0 + 0 + + @@ -258,7 +264,7 @@ <html><head/><body><p>Find Previous <span style=" color:#888a85;">%1</span></p></body></html>
- ... + @@ -278,7 +284,7 @@ <html><head/><body><p>Find Next %1</p></body></html> - ... + @@ -301,7 +307,7 @@ - + 0 2 @@ -392,7 +398,7 @@ Move measurement top - ... + @@ -409,7 +415,7 @@ Move measurement up - ... + @@ -426,7 +432,7 @@ Move measurement down - ... + @@ -443,7 +449,7 @@ Move measurement bottom - ... + @@ -473,7 +479,7 @@ Delete measurement - ... + @@ -623,11 +629,11 @@ Function Wizard - ... + - - :/tapeicon/24x24/fx.png:/tapeicon/24x24/fx.png + + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -1136,7 +1142,7 @@ 0 0 - 1188 + 1463 22 @@ -1247,7 +1253,7 @@ - + 1 0 @@ -1527,7 +1533,7 @@ - :/tapeicon/24x24/mannequin.png:/tapeicon/24x24/mannequin.png + :/tapeicon/light/24x24/mannequin.png:/tapeicon/light/24x24/mannequin.png Measurement diagram @@ -1654,6 +1660,7 @@ + diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp index 929a27bf1..04f413831 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp +++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp @@ -30,6 +30,7 @@ #include "../qmuparser/qmudef.h" #include "../vgeometry/vcubicbezier.h" #include "../vgeometry/vcubicbezierpath.h" +#include "../vgeometry/vsplinepath.h" #include "../vmisc/def.h" #include "../vpatterndb/vformula.h" #include "../vpropertyexplorer/plugins/vboolproperty.h" @@ -47,6 +48,7 @@ #include "../vwidgets/vgraphicssimpletextitem.h" #include "../vwidgets/vsimplecurve.h" #include "../vwidgets/vsimplepoint.h" +#include "qobject.h" #include "vformulaproperty.h" #include "../vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.h" @@ -88,9 +90,11 @@ #include "../vmisc/diagnostic.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) +#include #include #include #include +#include #include #include @@ -537,6 +541,14 @@ void VToolOptionsPropertyBrowser::userChangedData(VPE::VProperty *property) VAbstractValApplication::VApp()->getSceneView()->update(); } +//--------------------------------------------------------------------------------------------------------------------- +auto VToolOptionsPropertyBrowser::ComboBoxPalette() const -> QPalette +{ + QComboBox comboBox; + comboBox.setPalette(m_formView->palette()); + return comboBox.palette(); +} + //--------------------------------------------------------------------------------------------------------------------- void VToolOptionsPropertyBrowser::itemClicked(QGraphicsItem *item) { @@ -2727,9 +2739,12 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolEndLine(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Point at distance and angle")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->BasePointName(), tr("Base point:"), AttrBasePoint); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength); AddPropertyFormula(tr("Angle:"), i->GetFormulaAngle(), AttrAngle); @@ -2743,10 +2758,13 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolAlongLine(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Point at distance along line")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->BasePointName(), tr("First point:"), AttrBasePoint); AddPropertyParentPointName(i->SecondPointName(), tr("Second point:"), AttrSecondPoint); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -2759,13 +2777,17 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolArc(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Arc")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Name:"), true); AddPropertyParentPointName(i->CenterPointName(), tr("Center point:"), AttrCenter); AddPropertyFormula(tr("Radius:"), i->GetFormulaRadius(), AttrRadius); AddPropertyFormula(tr("First angle:"), i->GetFormulaF1(), AttrAngle1); AddPropertyFormula(tr("Second angle:"), i->GetFormulaF2(), AttrAngle2); AddPropertyAlias(i, tr("Alias:")); - AddPropertyCurvePenStyle(i, tr("Pen style:"), CurvePenStylesPics()); + AddPropertyCurvePenStyle( + i, tr("Pen style:"), + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Color:"), VAbstractTool::ColorsList(), AttrColor); AddPropertyApproximationScale(tr("Approximation scale:"), i->GetApproximationScale()); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -2778,13 +2800,17 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolArcWithLength(QGraphicsItem *it i->ShowVisualization(true); m_formView->setTitle(tr("Arc with given length")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Name:"), true); AddPropertyParentPointName(i->CenterPointName(), tr("Center point:"), AttrCenter); AddPropertyFormula(tr("Radius:"), i->GetFormulaRadius(), AttrRadius); AddPropertyFormula(tr("First angle:"), i->GetFormulaF1(), AttrAngle1); AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength); AddPropertyAlias(i, tr("Alias:")); - AddPropertyCurvePenStyle(i, tr("Pen style:"), CurvePenStylesPics()); + AddPropertyCurvePenStyle( + i, tr("Pen style:"), + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Color:"), VAbstractTool::ColorsList(), AttrColor); AddPropertyApproximationScale(tr("Approximation scale:"), i->GetApproximationScale()); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -2797,11 +2823,14 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolBisector(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Point along bisector")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->FirstPointName(), tr("First point:"), AttrFirstPoint); AddPropertyParentPointName(i->BasePointName(), tr("Second point:"), AttrBasePoint); AddPropertyParentPointName(i->ThirdPointName(), tr("Third point:"), AttrThirdPoint); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -2876,11 +2905,14 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolHeight(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Perpendicular point along line")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->BasePointName(), tr("Base point:"), AttrBasePoint); AddPropertyParentPointName(i->FirstLinePointName(), tr("First line point:"), AttrP1Line); AddPropertyParentPointName(i->SecondLinePointName(), tr("Second line point:"), AttrP2Line); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); } @@ -2892,9 +2924,12 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolLine(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Line between points")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyParentPointName(i->FirstPointName(), tr("First point:"), AttrFirstPoint); AddPropertyParentPointName(i->SecondPointName(), tr("Second point:"), AttrSecondPoint); - QMap styles = LineStylesPics(); + QMap styles = + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)); styles.remove(TypeLineNone); AddPropertyLineType(i, tr("Line type:"), styles); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); @@ -2923,11 +2958,14 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolNormal(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Point along perpendicular")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength); AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->BasePointName(), tr("First point:"), AttrBasePoint); AddPropertyParentPointName(i->SecondPointName(), tr("Second point:"), AttrSecondPoint); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); auto *itemAngle = new VPE::VDoubleProperty(tr("Additional angle degrees:")); @@ -3049,11 +3087,14 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolShoulderPoint(QGraphicsItem *it i->ShowVisualization(true); m_formView->setTitle(tr("Special point on shoulder")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->BasePointName(), tr("First point:"), AttrBasePoint); AddPropertyParentPointName(i->SecondPointName(), tr("Second point:"), AttrSecondPoint); AddPropertyParentPointName(i->ShoulderPointName(), tr("Third point:"), AttrThirdPoint); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -3098,8 +3139,12 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolSpline(QGraphicsItem *item) length2.Eval(); AddPropertyFormula(tr("C2: length:"), length2, AttrLength2); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyAlias(i, tr("Alias:")); - AddPropertyCurvePenStyle(i, tr("Pen style:"), CurvePenStylesPics()); + AddPropertyCurvePenStyle( + i, tr("Pen style:"), + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Color:"), VAbstractTool::ColorsList(), AttrColor); AddPropertyApproximationScale(tr("Approximation scale:"), spl.GetApproximationScale()); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -3112,13 +3157,17 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolCubicBezier(QGraphicsItem *item i->ShowVisualization(true); m_formView->setTitle(tr("Cubic bezier curve")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Name:"), true); AddPropertyParentPointName(i->FirstPointName(), tr("First point:"), AttrPoint1); AddPropertyParentPointName(i->SecondPointName(), tr("Second point:"), AttrPoint2); AddPropertyParentPointName(i->ThirdPointName(), tr("Third point:"), AttrPoint3); AddPropertyParentPointName(i->ForthPointName(), tr("Fourth point:"), AttrPoint4); AddPropertyAlias(i, tr("Alias:")); - AddPropertyCurvePenStyle(i, tr("Pen style:"), CurvePenStylesPics()); + AddPropertyCurvePenStyle( + i, tr("Pen style:"), + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Color:"), VAbstractTool::ColorsList(), AttrColor); AddPropertyApproximationScale(tr("Approximation scale:"), i->getSpline().GetApproximationScale()); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -3131,9 +3180,13 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolSplinePath(QGraphicsItem *item) i->ShowVisualization(true); m_formView->setTitle(tr("Tool for path curve")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Name:"), true); AddPropertyAlias(i, tr("Alias:")); - AddPropertyCurvePenStyle(i, tr("Pen style:"), CurvePenStylesPics()); + AddPropertyCurvePenStyle( + i, tr("Pen style:"), + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Color:"), VAbstractTool::ColorsList(), AttrColor); AddPropertyApproximationScale(tr("Approximation scale:"), i->getSplinePath().GetApproximationScale()); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -3146,9 +3199,13 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolCubicBezierPath(QGraphicsItem * i->ShowVisualization(true); m_formView->setTitle(tr("Tool cubic bezier curve")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Name:"), true); AddPropertyAlias(i, tr("Alias:")); - AddPropertyCurvePenStyle(i, tr("Pen style:"), CurvePenStylesPics()); + AddPropertyCurvePenStyle( + i, tr("Pen style:"), + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Color:"), VAbstractTool::ColorsList(), AttrColor); AddPropertyApproximationScale(tr("Approximation scale:"), i->getSplinePath().GetApproximationScale()); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -3176,11 +3233,14 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolLineIntersectAxis(QGraphicsItem i->ShowVisualization(true); m_formView->setTitle(tr("Point intersection line and axis")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->BasePointName(), tr("Axis point:"), AttrBasePoint); AddPropertyParentPointName(i->FirstLinePoint(), tr("First line point:"), AttrFirstPoint); AddPropertyParentPointName(i->SecondLinePoint(), tr("Second line point:"), AttrSecondPoint); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); AddPropertyFormula(tr("Angle:"), i->GetFormulaAngle(), AttrAngle); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -3193,10 +3253,13 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolCurveIntersectAxis(QGraphicsIte i->ShowVisualization(true); m_formView->setTitle(tr("Point intersection curve and axis")); + QPalette comboBoxPalette = ComboBoxPalette(); + AddPropertyObjectName(i, tr("Point label:")); AddPropertyParentPointName(i->BasePointName(), tr("Axis point:"), AttrBasePoint); AddPropertyParentPointName(i->CurveName(), tr("Curve:"), AttrCurve); - AddPropertyLineType(i, tr("Line type:"), LineStylesPics()); + AddPropertyLineType(i, tr("Line type:"), + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text))); AddPropertyLineColor(i, tr("Line color:"), VAbstractTool::ColorsList(), AttrLineColor); AddPropertyFormula(tr("Angle:"), i->GetFormulaAngle(), AttrAngle); AddPropertyText(tr("Notes:"), i->GetNotes(), AttrNotes); @@ -3316,7 +3379,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolEndLine() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -3347,7 +3413,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolAlongLine() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -3391,7 +3460,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolArc() m_idToProperty[AttrAngle2]->setValue(valueSecondAngle); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(CurvePenStylesPics(), i->GetPenStyle()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->GetPenStyle()); m_idToProperty[AttrPenStyle]->setValue(index); } @@ -3433,7 +3505,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolArcWithLength() m_idToProperty[AttrLength]->setValue(valueLength); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(CurvePenStylesPics(), i->GetPenStyle()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->GetPenStyle()); m_idToProperty[AttrPenStyle]->setValue(index); } @@ -3467,7 +3542,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolBisector() m_idToProperty[AttrLength]->setValue(valueFormula); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -3593,7 +3671,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolHeight() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -3623,7 +3704,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolLine() auto *i = qgraphicsitem_cast(m_currentItem); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -3683,7 +3767,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolNormal() m_idToProperty[AttrAngle]->setValue(i->GetAngle()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -3867,7 +3954,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolShoulderPoint() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -3936,7 +4026,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolSpline() m_idToProperty[AttrLength2]->setValue(length2); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(CurvePenStylesPics(), i->GetPenStyle()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->GetPenStyle()); m_idToProperty[AttrPenStyle]->setValue(index); } @@ -3960,7 +4053,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCubicBezier() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(CurvePenStylesPics(), i->GetPenStyle()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->GetPenStyle()); m_idToProperty[AttrPenStyle]->setValue(index); } @@ -4000,7 +4096,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolSplinePath() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(CurvePenStylesPics(), i->GetPenStyle()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->GetPenStyle()); m_idToProperty[AttrPenStyle]->setValue(index); } @@ -4024,7 +4123,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCubicBezierPath() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(CurvePenStylesPics(), i->GetPenStyle()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + CurvePenStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->GetPenStyle()); m_idToProperty[AttrPenStyle]->setValue(index); } @@ -4073,7 +4175,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolLineIntersectAxis() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } @@ -4108,7 +4213,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolCurveIntersectAxis() m_idToProperty[AttrName]->setValue(i->name()); { - const auto index = VPE::VLineTypeProperty::IndexOfStyle(LineStylesPics(), i->getLineType()); + QPalette comboBoxPalette = ComboBoxPalette(); + const auto index = VPE::VLineTypeProperty::IndexOfStyle( + LineStylesPics(comboBoxPalette.color(QPalette::Base), comboBoxPalette.color(QPalette::Text)), + i->getLineType()); m_idToProperty[AttrTypeLine]->setValue(index); } diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.h b/src/app/valentina/core/vtooloptionspropertybrowser.h index 2fb9e6c88..ae02f1fb5 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.h +++ b/src/app/valentina/core/vtooloptionspropertybrowser.h @@ -29,12 +29,12 @@ #ifndef VTOOLOPTIONSPROPERTYBROWSER_H #define VTOOLOPTIONSPROPERTYBROWSER_H -#include #include +#include #include "../vpropertyexplorer/vproperty.h" -#include "../vpropertyexplorer/vpropertymodel.h" #include "../vpropertyexplorer/vpropertyformview.h" +#include "../vpropertyexplorer/vpropertymodel.h" class QDockWidget; class QGraphicsItem; @@ -44,151 +44,120 @@ class VFormula; class VToolOptionsPropertyBrowser : public QObject { Q_OBJECT // NOLINT + public: explicit VToolOptionsPropertyBrowser(QDockWidget *parent); - ~VToolOptionsPropertyBrowser() override =default; + ~VToolOptionsPropertyBrowser() override = default; + void ClearPropertyBrowser(); + public slots: void itemClicked(QGraphicsItem *item); void UpdateOptions(); void RefreshOptions(); + private slots: - void userChangedData(VPE::VProperty* property); + void userChangedData(VPE::VProperty *property); + private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(VToolOptionsPropertyBrowser) // NOLINT - VPE::VPropertyModel* m_PropertyModel{nullptr}; - VPE::VPropertyFormView* m_formView{nullptr}; + VPE::VPropertyModel *m_PropertyModel{nullptr}; + VPE::VPropertyFormView *m_formView{nullptr}; QGraphicsItem *m_currentItem{nullptr}; QMap m_propertyToId{}; QMap m_idToProperty{}; + auto ComboBoxPalette() const -> QPalette; + void AddProperty(VPE::VProperty *property, const QString &id); void ShowItemOptions(QGraphicsItem *item); - template - void SetName(VPE::VProperty *property); + template void SetName(VPE::VProperty *property); - template - void SetHold(VPE::VProperty *property); + template void SetHold(VPE::VProperty *property); - template - void SetVisible(VPE::VProperty *property); + template void SetVisible(VPE::VProperty *property); - template - void SetOpacity(VPE::VProperty *property); + template void SetOpacity(VPE::VProperty *property); - template - void SetPointName(VPE::VProperty *property); + template void SetPointName(VPE::VProperty *property); - template - void SetPointName1(VPE::VProperty *property); + template void SetPointName1(VPE::VProperty *property); - template - void SetPointName2(VPE::VProperty *property); + template void SetPointName2(VPE::VProperty *property); - template - void SetOperationSuffix(VPE::VProperty *property); + template void SetOperationSuffix(VPE::VProperty *property); - template - auto GetCrossPoint(const QVariant &value) -> Type; + template auto GetCrossPoint(const QVariant &value) -> Type; - template - void SetCrossCirclesPoint(VPE::VProperty *property); + template void SetCrossCirclesPoint(VPE::VProperty *property); - template - void SetVCrossCurvesPoint(VPE::VProperty *property); + template void SetVCrossCurvesPoint(VPE::VProperty *property); - template - void SetHCrossCurvesPoint(VPE::VProperty *property); + template void SetHCrossCurvesPoint(VPE::VProperty *property); - template - void SetAxisType(VPE::VProperty *property); + template void SetAxisType(VPE::VProperty *property); - template - void SetNotes(VPE::VProperty *property); + template void SetNotes(VPE::VProperty *property); - template - void SetAlias(VPE::VProperty *property); + template void SetAlias(VPE::VProperty *property); - template - void SetAlias1(VPE::VProperty *property); + template void SetAlias1(VPE::VProperty *property); - template - void SetAlias2(VPE::VProperty *property); + template void SetAlias2(VPE::VProperty *property); - template - void SetLineType(VPE::VProperty *property); + template void SetLineType(VPE::VProperty *property); - template - void SetLineColor(VPE::VProperty *property); + template void SetLineColor(VPE::VProperty *property); - template - void SetFormulaLength(VPE::VProperty *property); + template void SetFormulaLength(VPE::VProperty *property); - template - void SetFormulaAngle(VPE::VProperty *property); + template void SetFormulaAngle(VPE::VProperty *property); - template - void SetFormulaRadius(VPE::VProperty *property); + template void SetFormulaRadius(VPE::VProperty *property); - template - void SetFormulaF1(VPE::VProperty *property); + template void SetFormulaF1(VPE::VProperty *property); - template - void SetFormulaF2(VPE::VProperty *property); + template void SetFormulaF2(VPE::VProperty *property); - template - void SetPenStyle(VPE::VProperty *property); + template void SetPenStyle(VPE::VProperty *property); - template - void SetFormulaRotationAngle(VPE::VProperty *property); + template void SetFormulaRotationAngle(VPE::VProperty *property); - template - void SetApproximationScale(VPE::VProperty *property); + template void SetApproximationScale(VPE::VProperty *property); - template - void AddPropertyObjectName(Tool *i, const QString &propertyName, bool readOnly = false); + template void AddPropertyObjectName(Tool *i, const QString &propertyName, bool readOnly = false); - template - void AddPropertyAlias(Tool *i, const QString &propertyName); + template void AddPropertyAlias(Tool *i, const QString &propertyName); - template - void AddPropertyAlias1(Tool *i, const QString &propertyName); + template void AddPropertyAlias1(Tool *i, const QString &propertyName); - template - void AddPropertyAlias2(Tool *i, const QString &propertyName); + template void AddPropertyAlias2(Tool *i, const QString &propertyName); - template - void AddPropertyPointName1(Tool *i, const QString &propertyName); + template void AddPropertyPointName1(Tool *i, const QString &propertyName); - template - void AddPropertyPointName2(Tool *i, const QString &propertyName); + template void AddPropertyPointName2(Tool *i, const QString &propertyName); - template - void AddPropertyOperationSuffix(Tool *i, const QString &propertyName, bool readOnly = false); + template void AddPropertyOperationSuffix(Tool *i, const QString &propertyName, bool readOnly = false); - template - void AddPropertyCrossPoint(Tool *i, const QString &propertyName); + template void AddPropertyCrossPoint(Tool *i, const QString &propertyName); - template - void AddPropertyVCrossPoint(Tool *i, const QString &propertyName); + template void AddPropertyVCrossPoint(Tool *i, const QString &propertyName); - template - void AddPropertyHCrossPoint(Tool *i, const QString &propertyName); + template void AddPropertyHCrossPoint(Tool *i, const QString &propertyName); - template - void AddPropertyAxisType(Tool *i, const QString &propertyName); + template void AddPropertyAxisType(Tool *i, const QString &propertyName); - template + template void AddPropertyLineType(Tool *i, const QString &propertyName, const QMap &styles); - template + template void AddPropertyCurvePenStyle(Tool *i, const QString &propertyName, const QMap &styles); - template + template void AddPropertyLineColor(Tool *i, const QString &propertyName, const QMap &colors, const QString &id); diff --git a/src/app/valentina/dialogs/dialogfinalmeasurements.cpp b/src/app/valentina/dialogs/dialogfinalmeasurements.cpp index a83dfbda9..4737b6f05 100644 --- a/src/app/valentina/dialogs/dialogfinalmeasurements.cpp +++ b/src/app/valentina/dialogs/dialogfinalmeasurements.cpp @@ -29,13 +29,15 @@ #include "dialogfinalmeasurements.h" #include "../qmuparser/qmudef.h" #include "../vmisc/compatibility.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vvalentinasettings.h" #include "../vpatterndb/calculator.h" +#include "../vtools/dialogs/dialogtoolbox.h" #include "../vtools/dialogs/support/dialogeditwrongformula.h" #include "ui_dialogfinalmeasurements.h" + #include -#include constexpr int DIALOG_MAX_FORMULA_HEIGHT = 64; @@ -54,6 +56,8 @@ DialogFinalMeasurements::DialogFinalMeasurements(VPattern *doc, QWidget *parent) setWindowFlags(Qt::Window); #endif + InitIcons(); + m_data.FillPiecesAreas(VAbstractValApplication::VApp()->patternUnits()); ui->lineEditName->setClearButtonEnabled(true); @@ -131,6 +135,13 @@ void DialogFinalMeasurements::changeEvent(QEvent *event) UpdateSearchControlsTooltips(); FullUpdateFromFile(); } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + // remember to call base class implementation QDialog::changeEvent(event); } @@ -906,3 +917,11 @@ void DialogFinalMeasurements::UpdateSearchControlsTooltips() UpdateToolTip(ui->toolButtonFindPrevious); UpdateToolTip(ui->toolButtonFindNext); } + +//--------------------------------------------------------------------------------------------------------------------- +void DialogFinalMeasurements::InitIcons() +{ + QString resource = QStringLiteral("icon"); + + ui->toolButtonExpr->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); +} diff --git a/src/app/valentina/dialogs/dialogfinalmeasurements.h b/src/app/valentina/dialogs/dialogfinalmeasurements.h index 602ce464e..0a2103a95 100644 --- a/src/app/valentina/dialogs/dialogfinalmeasurements.h +++ b/src/app/valentina/dialogs/dialogfinalmeasurements.h @@ -37,7 +37,7 @@ namespace Ui { - class DialogFinalMeasurements; +class DialogFinalMeasurements; } class DialogFinalMeasurements : public QDialog @@ -51,10 +51,10 @@ public: auto FinalMeasurements() const -> QVector; protected: - void closeEvent ( QCloseEvent * event ) override; - void changeEvent ( QEvent * event) override; + void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto eventFilter(QObject *object, QEvent *event) -> bool override; - void showEvent( QShowEvent *event ) override; + void showEvent(QShowEvent *event) override; void resizeEvent(QResizeEvent *event) override; private slots: void ShowFinalMeasurementDetails(); @@ -68,16 +68,17 @@ private slots: void DeployFormula(); void Fx(); void FullUpdateFromFile(); + private: Q_DISABLE_COPY_MOVE(DialogFinalMeasurements) // NOLINT Ui::DialogFinalMeasurements *ui; /** @brief doc dom document container */ - VPattern *m_doc; - VContainer m_data; - QVector m_measurements; + VPattern *m_doc; + VContainer m_data; + QVector m_measurements; QSharedPointer m_search{}; - int formulaBaseHeight{0}; - bool m_isInitialized{false}; + int formulaBaseHeight{0}; + bool m_isInitialized{false}; QMenu *m_searchHistory; @@ -98,6 +99,8 @@ private: void InitSearchHistory(); void SaveSearchRequest(); void UpdateSearchControlsTooltips(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/valentina/dialogs/dialogfinalmeasurements.ui b/src/app/valentina/dialogs/dialogfinalmeasurements.ui index 5cba8aa0c..5af2748a5 100644 --- a/src/app/valentina/dialogs/dialogfinalmeasurements.ui +++ b/src/app/valentina/dialogs/dialogfinalmeasurements.ui @@ -218,7 +218,7 @@ <html><head/><body><p>Find Previous <span style=" color:#888a85;">%1</span></p></body></html> - ... + @@ -238,7 +238,7 @@ <html><head/><body><p>Find Next %1</p></body></html> - ... + @@ -377,7 +377,7 @@ - ... + @@ -391,7 +391,7 @@ false - ... + @@ -522,11 +522,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -575,7 +575,7 @@ Move measurement up - ... + @@ -592,7 +592,7 @@ Move measurement down - ... + diff --git a/src/app/valentina/dialogs/dialoghistory.ui b/src/app/valentina/dialogs/dialoghistory.ui index 43bd2b5fd..d64a5998d 100644 --- a/src/app/valentina/dialogs/dialoghistory.ui +++ b/src/app/valentina/dialogs/dialoghistory.ui @@ -228,7 +228,7 @@ <html><head/><body><p>Find Previous <span style=" color:#888a85;">%1</span></p></body></html> - ... + @@ -248,7 +248,7 @@ <html><head/><body><p>Find Next %1</p></body></html> - ... + diff --git a/src/app/valentina/dialogs/dialogincrements.cpp b/src/app/valentina/dialogs/dialogincrements.cpp index d10988af6..7c89727ec 100644 --- a/src/app/valentina/dialogs/dialogincrements.cpp +++ b/src/app/valentina/dialogs/dialogincrements.cpp @@ -34,6 +34,7 @@ #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../qmuparser/qmudef.h" #include "../qmuparser/qmutokenparser.h" +#include "../vmisc/theme/vtheme.h" #include "../vpatterndb/calculator.h" #include "../vpatterndb/variables/varcradius.h" #include "../vpatterndb/variables/vcurveangle.h" @@ -88,6 +89,8 @@ DialogIncrements::DialogIncrements(VContainer *data, VPattern *doc, QWidget *par setWindowFlags(Qt::Window); #endif + InitIcons(); + ui->lineEditName->setClearButtonEnabled(true); ui->lineEditNamePC->setClearButtonEnabled(true); @@ -1254,6 +1257,16 @@ void DialogIncrements::InitIncrementUnits(QComboBox *combo) combo->blockSignals(false); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogIncrements::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + const QString fxIcon = QStringLiteral("24x24/fx.png"); + + ui->toolButtonExpr->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprPC->setIcon(VTheme::GetIconResource(resource, fxIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief FullUpdateFromFile update information in tables form file @@ -1941,6 +1954,12 @@ void DialogIncrements::changeEvent(QEvent *event) FullUpdateFromFile(); } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + } + // remember to call base class implementation QWidget::changeEvent(event); } diff --git a/src/app/valentina/dialogs/dialogincrements.h b/src/app/valentina/dialogs/dialogincrements.h index 11614e91b..24aac224b 100644 --- a/src/app/valentina/dialogs/dialogincrements.h +++ b/src/app/valentina/dialogs/dialogincrements.h @@ -29,9 +29,9 @@ #ifndef DIALOGINCREMENTS_H #define DIALOGINCREMENTS_H +#include "../vmisc/vtablesearch.h" #include "../vtools/dialogs/tools/dialogtool.h" #include "../xml/vpattern.h" -#include "../vmisc/vtablesearch.h" #include @@ -39,7 +39,7 @@ class VIndividualMeasurements; namespace Ui { - class DialogIncrements; +class DialogIncrements; } /** @@ -48,6 +48,7 @@ namespace Ui class DialogIncrements : public DialogTool { Q_OBJECT // NOLINT + public: DialogIncrements(VContainer *data, VPattern *doc, QWidget *parent = nullptr); ~DialogIncrements() override; @@ -61,12 +62,12 @@ public slots: void FullUpdateFromFile(); protected: - void closeEvent ( QCloseEvent * event ) override; - void changeEvent ( QEvent * event) override; + void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto eventFilter(QObject *object, QEvent *event) -> bool override; - void showEvent( QShowEvent *event ) override; + void showEvent(QShowEvent *event) override; void resizeEvent(QResizeEvent *event) override; - auto IsValid() const -> bool final {return true;} + auto IsValid() const -> bool final { return true; } private slots: void ShowIncrementDetails(); void AddIncrement(); @@ -111,11 +112,10 @@ private: QMenu *m_searchHistory; QMenu *m_searchHistoryPC; - template - void FillTable(const QMap &varTable, QTableWidget *table); + template void FillTable(const QMap &varTable, QTableWidget *table); - static void FillIncrementsTable(QTableWidget *table, const QMap > &increments, - bool takePreviewCalculations); + static void FillIncrementsTable(QTableWidget *table, const QMap> &increments, + bool takePreviewCalculations); void FillIncrements(); void FillPreviewCalculations(); @@ -129,16 +129,16 @@ private: void ShowUnits(); static void ShowHeaderUnits(QTableWidget *table, int column, const QString &unit); - static auto AddCell(QTableWidget *table, const QString &text, int row, int column, int aligment, - bool ok = true) -> QTableWidgetItem*; + static auto AddCell(QTableWidget *table, const QString &text, int row, int column, int aligment, bool ok = true) + -> QTableWidgetItem *; static auto AddSeparatorCell(QTableWidget *table, const QString &text, int row, int column, int aligment, - bool ok = true) -> QTableWidgetItem*; + bool ok = true) -> QTableWidgetItem *; auto GetCustomName() const -> QString; static auto ClearIncrementName(const QString &name) -> QString; static auto EvalIncrementFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label, - bool special) -> bool; + bool special) -> bool; void Controls(QTableWidget *table); void EnableDetails(QTableWidget *table, bool enabled); @@ -161,6 +161,8 @@ private: void SavePreviewCalculationsSearchRequest(); void UpdateSearchControlsTooltips(); static void InitIncrementUnits(QComboBox *combo); + + void InitIcons(); }; #endif // DIALOGINCREMENTS_H diff --git a/src/app/valentina/dialogs/dialogincrements.ui b/src/app/valentina/dialogs/dialogincrements.ui index 9808bd4ba..27de14d03 100644 --- a/src/app/valentina/dialogs/dialogincrements.ui +++ b/src/app/valentina/dialogs/dialogincrements.ui @@ -249,7 +249,7 @@ <html><head/><body><p>Find Previous <span style=" color:#888a85;">%1</span></p></body></html> - ... + @@ -269,7 +269,7 @@ <html><head/><body><p>Find Next %1</p></body></html> - ... + @@ -392,7 +392,7 @@ Move measurement up - ... + @@ -409,7 +409,7 @@ Move measurement down - ... + @@ -459,7 +459,7 @@ - ... + @@ -476,7 +476,7 @@ false - ... + @@ -611,11 +611,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -904,7 +904,7 @@ <html><head/><body><p>Find Previous <span style=" color:#888a85;">%1</span></p></body></html> - ... + @@ -924,7 +924,7 @@ <html><head/><body><p>Find Next %1</p></body></html> - ... + @@ -1047,7 +1047,7 @@ Move measurement up - ... + @@ -1064,7 +1064,7 @@ Move measurement down - ... + @@ -1114,7 +1114,7 @@ - ... + @@ -1131,7 +1131,7 @@ false - ... + @@ -1259,11 +1259,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png diff --git a/src/app/valentina/dialogs/dialogknownmaterials.ui b/src/app/valentina/dialogs/dialogknownmaterials.ui index 2c48784a3..8abb6f8d9 100644 --- a/src/app/valentina/dialogs/dialogknownmaterials.ui +++ b/src/app/valentina/dialogs/dialogknownmaterials.ui @@ -66,7 +66,7 @@ - ... + @@ -80,7 +80,7 @@ false - ... + diff --git a/src/app/valentina/dialogs/dialoglayoutprogress.cpp b/src/app/valentina/dialogs/dialoglayoutprogress.cpp index e80b33057..605e355dc 100644 --- a/src/app/valentina/dialogs/dialoglayoutprogress.cpp +++ b/src/app/valentina/dialogs/dialoglayoutprogress.cpp @@ -27,16 +27,17 @@ *************************************************************************/ #include "dialoglayoutprogress.h" -#include "ui_dialoglayoutprogress.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vvalentinasettings.h" +#include "ui_dialoglayoutprogress.h" #include -#include #include -#include -#include +#include #include +#include +#include #include #if (defined(Q_CC_GNU) && Q_CC_GNU < 409) && !defined(Q_CC_CLANG) @@ -52,46 +53,49 @@ using namespace bpstd::literals::chrono_literals; //--------------------------------------------------------------------------------------------------------------------- DialogLayoutProgress::DialogLayoutProgress(QElapsedTimer timer, qint64 timeout, QWidget *parent) - : QDialog(parent), - ui(new Ui::DialogLayoutProgress), - m_movie(new QMovie(QStringLiteral("://icon/16x16/progress.gif"))), - m_timer(timer), - m_timeout(timeout), - m_progressTimer(new QTimer(this)) + : QDialog(parent), + ui(new Ui::DialogLayoutProgress), + m_timer(timer), + m_timeout(timeout), + m_progressTimer(new QTimer(this)) { ui->setupUi(this); VAbstractValApplication::VApp()->ValentinaSettings()->GetOsSeparator() ? setLocale(QLocale()) : setLocale(QLocale::c()); - ui->progressBar->setMaximum(static_cast(timeout/1000)); + ui->progressBar->setMaximum(static_cast(timeout / 1000)); ui->progressBar->setValue(0); + const QString scheme = + (VTheme::ColorSheme() == VColorSheme::Light ? QStringLiteral("light") : QStringLiteral("dark")); + m_movie = new QMovie(QStringLiteral("://icon/%1/16x16/progress.gif").arg(scheme)); ui->labelProgress->setMovie(m_movie); m_movie->start(); QPushButton *bCancel = ui->buttonBox->button(QDialogButtonBox::Cancel); SCASSERT(bCancel != nullptr) - connect(bCancel, &QPushButton::clicked, this, [this](){emit Abort();}); + connect(bCancel, &QPushButton::clicked, this, [this]() { emit Abort(); }); setModal(true); this->setWindowFlags(Qt::Dialog | Qt::WindowTitleHint | Qt::CustomizeWindowHint); - connect(m_progressTimer, &QTimer::timeout, this, [this]() - { - const qint64 elapsed = m_timer.elapsed(); - const int timeout = static_cast(m_timeout - elapsed); - QTime t(0, 0); - t = t.addMSecs(timeout); - ui->labelTimeLeft->setText(tr("Time left: %1").arg(t.toString())); - ui->progressBar->setValue(static_cast(elapsed/1000)); + connect(m_progressTimer, &QTimer::timeout, this, + [this]() + { + const qint64 elapsed = m_timer.elapsed(); + const int timeout = static_cast(m_timeout - elapsed); + QTime t(0, 0); + t = t.addMSecs(timeout); + ui->labelTimeLeft->setText(tr("Time left: %1").arg(t.toString())); + ui->progressBar->setValue(static_cast(elapsed / 1000)); - if (timeout <= 1000) - { - emit Timeout(); - m_progressTimer->stop(); - } - }); + if (timeout <= 1000) + { + emit Timeout(); + m_progressTimer->stop(); + } + }); m_progressTimer->start(V_SECONDS(1)); } @@ -124,8 +128,8 @@ void DialogLayoutProgress::Efficiency(qreal value) //--------------------------------------------------------------------------------------------------------------------- void DialogLayoutProgress::showEvent(QShowEvent *event) { - QDialog::showEvent( event ); - if ( event->spontaneous() ) + QDialog::showEvent(event); + if (event->spontaneous()) { return; } @@ -139,5 +143,5 @@ void DialogLayoutProgress::showEvent(QShowEvent *event) setMaximumSize(size()); setMinimumSize(size()); - m_isInitialized = true;//first show windows are held + m_isInitialized = true; // first show windows are held } diff --git a/src/app/valentina/dialogs/dialoglayoutprogress.h b/src/app/valentina/dialogs/dialoglayoutprogress.h index d886cc5ae..6aad786f2 100644 --- a/src/app/valentina/dialogs/dialoglayoutprogress.h +++ b/src/app/valentina/dialogs/dialoglayoutprogress.h @@ -66,7 +66,7 @@ private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(DialogLayoutProgress) // NOLINT Ui::DialogLayoutProgress *ui; - QMovie *m_movie; + QMovie *m_movie{nullptr}; QElapsedTimer m_timer; qint64 m_timeout; bool m_isInitialized{false}; diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.ui b/src/app/valentina/dialogs/dialoglayoutsettings.ui index 2585c33b4..279bd3c74 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.ui +++ b/src/app/valentina/dialogs/dialoglayoutsettings.ui @@ -90,7 +90,7 @@ - ... + @@ -113,7 +113,7 @@ - ... + diff --git a/src/app/valentina/dialogs/dialogpreferences.cpp b/src/app/valentina/dialogs/dialogpreferences.cpp index 17c701962..caf664922 100644 --- a/src/app/valentina/dialogs/dialogpreferences.cpp +++ b/src/app/valentina/dialogs/dialogpreferences.cpp @@ -29,6 +29,7 @@ #include "dialogpreferences.h" #include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vvalentinasettings.h" +#include "../vtools/dialogs/dialogtoolbox.h" #include "configpages/preferencesconfigurationpage.h" #include "configpages/preferencespathpage.h" #include "configpages/preferencespatternpage.h" @@ -125,19 +126,7 @@ void DialogPreferences::changeEvent(QEvent *event) if (event->type() == QEvent::PaletteChange) { - QStyle *style = QApplication::style(); - - QPushButton *bOk = ui->buttonBox->button(QDialogButtonBox::Ok); - SCASSERT(bOk != nullptr) - bOk->setIcon(style->standardIcon(QStyle::SP_DialogOkButton)); - - QPushButton *bApply = ui->buttonBox->button(QDialogButtonBox::Apply); - SCASSERT(bApply != nullptr) - bApply->setIcon(style->standardIcon(QStyle::SP_DialogApplyButton)); - - QPushButton *bCancel = ui->buttonBox->button(QDialogButtonBox::Cancel); - SCASSERT(bCancel != nullptr) - bCancel->setIcon(style->standardIcon(QStyle::SP_DialogCancelButton)); + InitDialogButtonBoxIcons(ui->buttonBox); } // remember to call base class implementation diff --git a/src/app/valentina/dialogs/dialogsavelayout.ui b/src/app/valentina/dialogs/dialogsavelayout.ui index ae804646f..0e5ee90fe 100644 --- a/src/app/valentina/dialogs/dialogsavelayout.ui +++ b/src/app/valentina/dialogs/dialogsavelayout.ui @@ -275,7 +275,7 @@ - ... + @@ -482,7 +482,7 @@ - ... + @@ -502,7 +502,7 @@ - ... + diff --git a/src/app/valentina/dialogs/vwidgetbackgroundimages.cpp b/src/app/valentina/dialogs/vwidgetbackgroundimages.cpp index 7622c89bf..bd49f42b3 100644 --- a/src/app/valentina/dialogs/vwidgetbackgroundimages.cpp +++ b/src/app/valentina/dialogs/vwidgetbackgroundimages.cpp @@ -26,23 +26,25 @@ ** *************************************************************************/ #include "vwidgetbackgroundimages.h" +#include "qstringliteral.h" +#include "theme/vtheme.h" #include "ui_vwidgetbackgroundimages.h" -#include "../vmisc/def.h" #include "../ifc/xml/vabstractpattern.h" #include "../ifc/xml/vbackgroundpatternimage.h" -#include "../vtools/undocommands/image/holdbackgroundimage.h" -#include "../vtools/undocommands/image/renamebackgroundimage.h" -#include "../vtools/undocommands/image/hidebackgroundimage.h" +#include "../vmisc/def.h" +#include "../vmisc/lambdaconstants.h" +#include "../vmisc/vabstractapplication.h" #include "../vtools/undocommands/image/hideallbackgroundimages.h" +#include "../vtools/undocommands/image/hidebackgroundimage.h" #include "../vtools/undocommands/image/holdallbackgroundimages.h" -#include "../vtools/undocommands/image/zvaluemovebackgroundimage.h" +#include "../vtools/undocommands/image/holdbackgroundimage.h" #include "../vtools/undocommands/image/movebackgroundimage.h" +#include "../vtools/undocommands/image/renamebackgroundimage.h" +#include "../vtools/undocommands/image/resetbackgroundimage.h" #include "../vtools/undocommands/image/rotatebackgroundimage.h" #include "../vtools/undocommands/image/scalebackgroundimage.h" -#include "../vtools/undocommands/image/resetbackgroundimage.h" -#include "../vmisc/vabstractapplication.h" -#include "../vmisc/lambdaconstants.h" +#include "../vtools/undocommands/image/zvaluemovebackgroundimage.h" #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) @@ -64,8 +66,9 @@ void SetImageHold(QTableWidgetItem *item, const VBackgroundPatternImage &image) { if (item) { - (image.Hold()) ? item->setIcon(QIcon(QStringLiteral("://icon/16x16/hold_image.png"))) - : item->setIcon(QIcon(QStringLiteral("://icon/16x16/not_hold_image.png"))); + const QString resource = QStringLiteral("icon"); + (image.Hold()) ? item->setIcon(VTheme::GetIconResource(resource, QStringLiteral("16x16/hold_image.png"))) + : item->setIcon(VTheme::GetIconResource(resource, QStringLiteral("16x16/not_hold_image.png"))); } } @@ -74,8 +77,9 @@ void SetImageVisibility(QTableWidgetItem *item, const VBackgroundPatternImage &i { if (item) { - (image.Visible()) ? item->setIcon(QIcon(QStringLiteral("://icon/16x16/open_eye.png"))) - : item->setIcon(QIcon(QStringLiteral("://icon/16x16/closed_eye.png"))); + const QString resource = QStringLiteral("icon"); + item->setIcon(image.Visible() ? VTheme::GetIconResource(resource, QStringLiteral("16x16/open_eye.png")) + : VTheme::GetIconResource(resource, QStringLiteral("16x16/closed_eye.png"))); } } @@ -149,9 +153,9 @@ auto ScaleUnitConvertor(qreal base, qreal value, ScaleUnit from, ScaleUnit to) - //--------------------------------------------------------------------------------------------------------------------- VWidgetBackgroundImages::VWidgetBackgroundImages(VAbstractPattern *doc, QWidget *parent) - : QWidget(parent), - ui(new Ui::VWidgetBackgroundImages), - m_doc(doc) + : QWidget(parent), + ui(new Ui::VWidgetBackgroundImages), + m_doc(doc) { ui->setupUi(this); @@ -291,7 +295,7 @@ void VWidgetBackgroundImages::ImageNameChanged(int row, int column) void VWidgetBackgroundImages::ContextMenu(const QPoint &pos) { QTableWidgetItem *item = ui->tableWidget->itemAt(pos); - if(item == nullptr) + if (item == nullptr) { return; } @@ -401,7 +405,8 @@ void VWidgetBackgroundImages::ContextMenu(const QPoint &pos) } //--------------------------------------------------------------------------------------------------------------------- -void VWidgetBackgroundImages::CurrentImageChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) +void VWidgetBackgroundImages::CurrentImageChanged(int currentRow, int currentColumn, int previousRow, + int previousColumn) { Q_UNUSED(currentColumn) Q_UNUSED(previousColumn) @@ -528,10 +533,11 @@ void VWidgetBackgroundImages::ApplyImageTransformation() } else if (ui->tabWidgetImageTransformation->indexOf(ui->tabScale) == index) { // scale - qreal sx = WidthScaleUnitConvertor(ui->doubleSpinBoxScaleWidth->value(), CurrentScaleUnit(), - ScaleUnit::Percent) / 100; - qreal sy = HeightScaleUnitConvertor(ui->doubleSpinBoxScaleHeight->value(), CurrentScaleUnit(), - ScaleUnit::Percent) / 100; + qreal sx = + WidthScaleUnitConvertor(ui->doubleSpinBoxScaleWidth->value(), CurrentScaleUnit(), ScaleUnit::Percent) / 100; + qreal sy = + HeightScaleUnitConvertor(ui->doubleSpinBoxScaleHeight->value(), CurrentScaleUnit(), ScaleUnit::Percent) / + 100; QTransform imageMatrix = image.Matrix(); QPointF originPos = image.BoundingRect().center(); @@ -544,7 +550,6 @@ void VWidgetBackgroundImages::ApplyImageTransformation() auto *command = new ScaleBackgroundImage(id, imageMatrix, m_doc); VAbstractApplication::VApp()->getUndoStack()->push(command); - } else if (ui->tabWidgetImageTransformation->indexOf(ui->tabRotate) == index) { // rotate @@ -841,37 +846,37 @@ void VWidgetBackgroundImages::InitImageTranslation() const int maxTranslate = 10000; ui->doubleSpinBoxImageHorizontalTranslate->setMinimum( - UnitConvertor(minTranslate, Unit::Cm, m_oldImageTranslationUnit)); + UnitConvertor(minTranslate, Unit::Cm, m_oldImageTranslationUnit)); ui->doubleSpinBoxImageHorizontalTranslate->setMaximum( - UnitConvertor(maxTranslate, Unit::Cm, m_oldImageTranslationUnit)); + UnitConvertor(maxTranslate, Unit::Cm, m_oldImageTranslationUnit)); ui->doubleSpinBoxImageHorizontalTranslate->setValue(0); ui->doubleSpinBoxImageVerticalTranslate->setMinimum( - UnitConvertor(minTranslate, Unit::Cm, m_oldImageTranslationUnit)); + UnitConvertor(minTranslate, Unit::Cm, m_oldImageTranslationUnit)); ui->doubleSpinBoxImageVerticalTranslate->setMaximum( - UnitConvertor(maxTranslate, Unit::Cm, m_oldImageTranslationUnit)); + UnitConvertor(maxTranslate, Unit::Cm, m_oldImageTranslationUnit)); ui->doubleSpinBoxImageVerticalTranslate->setValue(0); connect(ui->comboBoxTranslateUnit, QOverload::of(&QComboBox::currentIndexChanged), this, [this V_LAMBDA_CONSTANTS(minTranslate, maxTranslate)]() - { - const Unit newUnit = CurrentTranslateUnit(); - const qreal oldTranslateX = ui->doubleSpinBoxImageHorizontalTranslate->value(); - const qreal oldTranslateY = ui->doubleSpinBoxImageVerticalTranslate->value(); + { + const Unit newUnit = CurrentTranslateUnit(); + const qreal oldTranslateX = ui->doubleSpinBoxImageHorizontalTranslate->value(); + const qreal oldTranslateY = ui->doubleSpinBoxImageVerticalTranslate->value(); - ui->doubleSpinBoxImageHorizontalTranslate->setMinimum(UnitConvertor(minTranslate, Unit::Cm, newUnit)); - ui->doubleSpinBoxImageHorizontalTranslate->setMaximum(UnitConvertor(maxTranslate, Unit::Cm, newUnit)); + ui->doubleSpinBoxImageHorizontalTranslate->setMinimum(UnitConvertor(minTranslate, Unit::Cm, newUnit)); + ui->doubleSpinBoxImageHorizontalTranslate->setMaximum(UnitConvertor(maxTranslate, Unit::Cm, newUnit)); - ui->doubleSpinBoxImageVerticalTranslate->setMinimum(UnitConvertor(minTranslate, Unit::Cm, newUnit)); - ui->doubleSpinBoxImageVerticalTranslate->setMaximum(UnitConvertor(maxTranslate, Unit::Cm, newUnit)); + ui->doubleSpinBoxImageVerticalTranslate->setMinimum(UnitConvertor(minTranslate, Unit::Cm, newUnit)); + ui->doubleSpinBoxImageVerticalTranslate->setMaximum(UnitConvertor(maxTranslate, Unit::Cm, newUnit)); - ui->doubleSpinBoxImageHorizontalTranslate->setValue( + ui->doubleSpinBoxImageHorizontalTranslate->setValue( UnitConvertor(oldTranslateX, m_oldImageTranslationUnit, newUnit)); - ui->doubleSpinBoxImageVerticalTranslate->setValue( + ui->doubleSpinBoxImageVerticalTranslate->setValue( UnitConvertor(oldTranslateY, m_oldImageTranslationUnit, newUnit)); - m_oldImageTranslationUnit = newUnit; - }); + m_oldImageTranslationUnit = newUnit; + }); SetCheckBoxValue(ui->checkBoxRelativeTranslation, true); connect(ui->checkBoxRelativeTranslation, &QCheckBox::toggled, this, @@ -899,40 +904,40 @@ void VWidgetBackgroundImages::InitImageTranslation() ui->doubleSpinBoxScaleHeight->setMaximum(maxScale); ui->doubleSpinBoxScaleHeight->setValue(100); - connect(ui->comboBoxScaleUnit, QOverload::of(&QComboBox::currentIndexChanged), this, - [this V_LAMBDA_CONSTANTS(minScale, maxScale)]() - { - const ScaleUnit newUnit = CurrentScaleUnit(); - const qreal oldScaleWidth = ui->doubleSpinBoxScaleWidth->value(); - const qreal oldScaleHeight = ui->doubleSpinBoxScaleHeight->value(); - - ui->doubleSpinBoxScaleWidth->blockSignals(true); - - ui->doubleSpinBoxScaleWidth->setMinimum(WidthScaleUnitConvertor(minScale, ScaleUnit::Percent, newUnit)); - ui->doubleSpinBoxScaleWidth->setMinimum(WidthScaleUnitConvertor(minScale, ScaleUnit::Percent, newUnit)); - - ui->doubleSpinBoxScaleWidth->setValue( - WidthScaleUnitConvertor(oldScaleWidth, m_oldImageScaleUnit, newUnit)); - ui->doubleSpinBoxScaleWidth->blockSignals(false); - - ui->doubleSpinBoxScaleHeight->blockSignals(true); - - ui->doubleSpinBoxScaleHeight->setMaximum(HeightScaleUnitConvertor(maxScale, ScaleUnit::Percent, newUnit)); - ui->doubleSpinBoxScaleHeight->setMaximum(HeightScaleUnitConvertor(maxScale, ScaleUnit::Percent, newUnit)); - - if (ui->checkBoxScaleProportionally->isChecked() && newUnit == ScaleUnit::Percent) + connect( + ui->comboBoxScaleUnit, QOverload::of(&QComboBox::currentIndexChanged), this, + [this V_LAMBDA_CONSTANTS(minScale, maxScale)]() { - ui->doubleSpinBoxScaleHeight->setValue(ui->doubleSpinBoxScaleWidth->value()); - } - else - { - ui->doubleSpinBoxScaleHeight->setValue( - HeightScaleUnitConvertor(oldScaleHeight, m_oldImageScaleUnit, newUnit)); - } - ui->doubleSpinBoxScaleHeight->blockSignals(false); + const ScaleUnit newUnit = CurrentScaleUnit(); + const qreal oldScaleWidth = ui->doubleSpinBoxScaleWidth->value(); + const qreal oldScaleHeight = ui->doubleSpinBoxScaleHeight->value(); - m_oldImageScaleUnit = newUnit; - }); + ui->doubleSpinBoxScaleWidth->blockSignals(true); + + ui->doubleSpinBoxScaleWidth->setMinimum(WidthScaleUnitConvertor(minScale, ScaleUnit::Percent, newUnit)); + ui->doubleSpinBoxScaleWidth->setMinimum(WidthScaleUnitConvertor(minScale, ScaleUnit::Percent, newUnit)); + + ui->doubleSpinBoxScaleWidth->setValue(WidthScaleUnitConvertor(oldScaleWidth, m_oldImageScaleUnit, newUnit)); + ui->doubleSpinBoxScaleWidth->blockSignals(false); + + ui->doubleSpinBoxScaleHeight->blockSignals(true); + + ui->doubleSpinBoxScaleHeight->setMaximum(HeightScaleUnitConvertor(maxScale, ScaleUnit::Percent, newUnit)); + ui->doubleSpinBoxScaleHeight->setMaximum(HeightScaleUnitConvertor(maxScale, ScaleUnit::Percent, newUnit)); + + if (ui->checkBoxScaleProportionally->isChecked() && newUnit == ScaleUnit::Percent) + { + ui->doubleSpinBoxScaleHeight->setValue(ui->doubleSpinBoxScaleWidth->value()); + } + else + { + ui->doubleSpinBoxScaleHeight->setValue( + HeightScaleUnitConvertor(oldScaleHeight, m_oldImageScaleUnit, newUnit)); + } + ui->doubleSpinBoxScaleHeight->blockSignals(false); + + m_oldImageScaleUnit = newUnit; + }); connect(ui->doubleSpinBoxScaleHeight, QOverload::of(&QDoubleSpinBox::valueChanged), this, &VWidgetBackgroundImages::ScaleHeightChanged); @@ -1016,7 +1021,7 @@ void VWidgetBackgroundImages::SetAbsolutePisition(const QUuid &id) QRectF rect = image.BoundingRect(); ui->doubleSpinBoxImageHorizontalTranslate->setValue( - UnitConvertor(rect.topLeft().x(), Unit::Px, CurrentTranslateUnit())); + UnitConvertor(rect.topLeft().x(), Unit::Px, CurrentTranslateUnit())); ui->doubleSpinBoxImageVerticalTranslate->setValue( - UnitConvertor(rect.topLeft().y(), Unit::Px, CurrentTranslateUnit())); + UnitConvertor(rect.topLeft().y(), Unit::Px, CurrentTranslateUnit())); } diff --git a/src/app/valentina/dialogs/vwidgetbackgroundimages.ui b/src/app/valentina/dialogs/vwidgetbackgroundimages.ui index bf531036a..ba43a4d01 100644 --- a/src/app/valentina/dialogs/vwidgetbackgroundimages.ui +++ b/src/app/valentina/dialogs/vwidgetbackgroundimages.ui @@ -306,7 +306,7 @@ - ... + @@ -322,7 +322,7 @@ - ... + @@ -338,7 +338,7 @@ - ... + @@ -354,7 +354,7 @@ - ... + diff --git a/src/app/valentina/dialogs/vwidgetgroups.cpp b/src/app/valentina/dialogs/vwidgetgroups.cpp index 7fcef6168..bcfc53168 100644 --- a/src/app/valentina/dialogs/vwidgetgroups.cpp +++ b/src/app/valentina/dialogs/vwidgetgroups.cpp @@ -27,11 +27,13 @@ *************************************************************************/ #include "vwidgetgroups.h" -#include "ui_vwidgetgroups.h" +#include "../vmisc/compatibility.h" +#include "../vmisc/theme/vtheme.h" +#include "../vpatterndb/vcontainer.h" #include "../vtools/dialogs/tools/dialoggroup.h" #include "../vtools/undocommands/undogroup.h" -#include "../vpatterndb/vcontainer.h" -#include "../vmisc/compatibility.h" +#include "qstringliteral.h" +#include "ui_vwidgetgroups.h" #include #include @@ -39,9 +41,9 @@ //--------------------------------------------------------------------------------------------------------------------- VWidgetGroups::VWidgetGroups(VAbstractPattern *doc, QWidget *parent) - : QWidget(parent), - ui(new Ui::VWidgetGroups), - m_doc(doc) + : QWidget(parent), + ui(new Ui::VWidgetGroups), + m_doc(doc) { ui->setupUi(this); @@ -66,21 +68,23 @@ VWidgetGroups::~VWidgetGroups() void VWidgetGroups::SetGroupVisibility(vidtype id, bool visible) const { auto *changeGroup = new ChangeGroupVisibility(m_doc, id, visible); - connect(changeGroup, &ChangeGroupVisibility::UpdateGroup, this, [this](vidtype id, bool visible) - { - int row = GroupRow(id); - if (row == -1) - { - return; - } + connect(changeGroup, &ChangeGroupVisibility::UpdateGroup, this, + [this](vidtype id, bool visible) + { + int row = GroupRow(id); + if (row == -1) + { + return; + } - QTableWidgetItem *item = ui->tableWidget->item(row, 0); - if (item) - { - (visible) ? item->setIcon(QIcon(QStringLiteral("://icon/16x16/open_eye.png"))) - : item->setIcon(QIcon(QStringLiteral("://icon/16x16/closed_eye.png"))); - } - }); + QTableWidgetItem *item = ui->tableWidget->item(row, 0); + if (item) + { + const QString resource = QStringLiteral("icon"); + item->setIcon(visible ? VTheme::GetIconResource(resource, QStringLiteral("16x16/open_eye.png")) + : VTheme::GetIconResource(resource, QStringLiteral("16x16/closed_eye.png"))); + } + }); VAbstractApplication::VApp()->getUndoStack()->push(changeGroup); } @@ -90,27 +94,28 @@ void VWidgetGroups::SetMultipleGroupsVisibility(const QVector &groups, auto *changeGroups = new ChangeMultipleGroupsVisibility(m_doc, groups, visible); connect(changeGroups, &ChangeMultipleGroupsVisibility::UpdateMultipleGroups, this, [this](const QMap &groups) - { - QMap::const_iterator i = groups.constBegin(); - while (i != groups.constEnd()) - { - int row = GroupRow(i.key()); - if (row == -1) { - ++i; - continue; - } + QMap::const_iterator i = groups.constBegin(); + while (i != groups.constEnd()) + { + int row = GroupRow(i.key()); + if (row == -1) + { + ++i; + continue; + } - QTableWidgetItem *item = ui->tableWidget->item(row, 0); - if (item) - { - (i.value()) ? item->setIcon(QIcon(QStringLiteral("://icon/16x16/open_eye.png"))) - : item->setIcon(QIcon(QStringLiteral("://icon/16x16/closed_eye.png"))); - } - ++i; - } - - }); + QTableWidgetItem *item = ui->tableWidget->item(row, 0); + if (item) + { + const QString resource = QStringLiteral("icon"); + item->setIcon(i.value() + ? VTheme::GetIconResource(resource, QStringLiteral("16x16/open_eye.png")) + : VTheme::GetIconResource(resource, QStringLiteral("16x16/closed_eye.png"))); + } + ++i; + } + }); VAbstractApplication::VApp()->getUndoStack()->push(changeGroups); } @@ -259,7 +264,7 @@ void VWidgetGroups::RenameGroup(int row, int column) void VWidgetGroups::CtxMenu(const QPoint &pos) { QTableWidgetItem *item = ui->tableWidget->itemAt(pos); - if(not item) + if (not item) { return; } @@ -283,9 +288,11 @@ void VWidgetGroups::CtxMenu(const QPoint &pos) }; QScopedPointer menu(new QMenu()); - QAction *triggerVisibilityMenu = m_doc->GetGroupVisibility(id) ? - menu->addAction(QIcon(QStringLiteral("://icon/16x16/closed_eye.png")), tr("Hide")) : - menu->addAction(QIcon(QStringLiteral("://icon/16x16/open_eye.png")), tr("Show")); + const QString resource = QStringLiteral("icon"); + QAction *triggerVisibilityMenu = + m_doc->GetGroupVisibility(id) + ? menu->addAction(VTheme::GetIconResource(resource, QStringLiteral("16x16/closed_eye.png")), tr("Hide")) + : menu->addAction(VTheme::GetIconResource(resource, QStringLiteral("16x16/open_eye.png")), tr("Show")); QAction *actionPreferences = menu->addAction(QIcon::fromTheme(preferencesOtherIcon), tr("Preferences")); QAction *actionDelete = menu->addAction(QIcon::fromTheme(editDeleteIcon), tr("Delete")); @@ -312,11 +319,11 @@ void VWidgetGroups::CtxMenu(const QPoint &pos) VAbstractApplication::VApp()->getUndoStack()->push(delGroup); } else if (selectedAction == actionHideAll) - {//all groups in "group" make unvisible + { // all groups in "group" make unvisible ActionHideAll(); } else if (selectedAction == actionShowAll) - {//all groups in "group" make visible + { // all groups in "group" make visible ActionShowAll(); } } @@ -346,10 +353,11 @@ void VWidgetGroups::FillTable(QMap groups) ++currentRow; const VGroupData data = i.value(); + const QString resource = QStringLiteral("icon"); auto *item = new QTableWidgetItem(); item->setTextAlignment(Qt::AlignHCenter); - (data.visible) ? item->setIcon(QIcon("://icon/16x16/open_eye.png")) - : item->setIcon(QIcon("://icon/16x16/closed_eye.png")); + (data.visible) ? item->setIcon(VTheme::GetIconResource(resource, QStringLiteral("16x16/open_eye.png"))) + : item->setIcon(VTheme::GetIconResource(resource, QStringLiteral("16x16/closed_eye.png"))); item->setData(Qt::UserRole, i.key()); @@ -367,7 +375,7 @@ void VWidgetGroups::FillTable(QMap groups) item->setToolTip(tr("Categories: %1.").arg(data.tags.join(QStringLiteral(", ")))); } - if(data.items.isEmpty()) + if (data.items.isEmpty()) { QFont font = item->font(); font.setStrikeOut(true); diff --git a/src/app/valentina/main.cpp b/src/app/valentina/main.cpp index cd91d97a5..0231e6ae8 100644 --- a/src/app/valentina/main.cpp +++ b/src/app/valentina/main.cpp @@ -58,13 +58,14 @@ auto main(int argc, char *argv[]) -> int auto FreeMemory = qScopeGuard([exe_dir] { free(exe_dir); }); #endif // defined(APPIMAGE) && defined(Q_OS_LINUX) - Q_INIT_RESOURCE(cursor); // NOLINT - Q_INIT_RESOURCE(icon); // NOLINT - Q_INIT_RESOURCE(schema); // NOLINT - Q_INIT_RESOURCE(flags); // NOLINT - Q_INIT_RESOURCE(icons); // NOLINT - Q_INIT_RESOURCE(toolicon); // NOLINT - Q_INIT_RESOURCE(breeze); // NOLINT + Q_INIT_RESOURCE(cursor); // NOLINT + Q_INIT_RESOURCE(icon); // NOLINT + Q_INIT_RESOURCE(schema); // NOLINT + Q_INIT_RESOURCE(flags); // NOLINT + Q_INIT_RESOURCE(icons); // NOLINT + Q_INIT_RESOURCE(toolicon); // NOLINT + Q_INIT_RESOURCE(breeze); // NOLINT + Q_INIT_RESOURCE(scenestyle); // NOLINT #if defined(Q_OS_MACX) Q_INIT_RESOURCE(mac_theme); // NOLINT #else diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 95aa81dcf..86eb81b4e 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -27,76 +27,63 @@ *************************************************************************/ #include "mainwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "../ifc/exception/vexceptionconversionerror.h" #include "../ifc/exception/vexceptionemptyparameter.h" #include "../ifc/exception/vexceptioninvalidhistory.h" #include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/exception/vexceptionundo.h" #include "../ifc/exception/vexceptionwrongid.h" +#include "../ifc/xml/utils.h" +#include "../ifc/xml/vbackgroundpatternimage.h" #include "../ifc/xml/vpatternconverter.h" #include "../ifc/xml/vvitconverter.h" #include "../ifc/xml/vvstconverter.h" #include "../vformat/vmeasurements.h" #include "../vformat/vpatternrecipe.h" #include "../vganalytics/vganalytics.h" +#include "../vlayout/dialogs/dialoglayoutscale.h" #include "../vlayout/dialogs/watermarkwindow.h" +#include "../vlayout/vlayoutexporter.h" #include "../vmisc/customevents.h" #include "../vmisc/def.h" #include "../vmisc/dialogs/dialogaskcollectstatistic.h" +#include "../vmisc/dialogs/dialogselectlanguage.h" #include "../vmisc/qxtcsvmodel.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vmodifierkey.h" #include "../vmisc/vsysexits.h" #include "../vmisc/vvalentinasettings.h" -#include "../vtools/undocommands/renamepp.h" -#include "../vtools/undocommands/undogroup.h" -#include "../vwidgets/vmaingraphicsscene.h" -#include "../vwidgets/vtoolbuttonpopup.h" -#include "../vwidgets/vwidgetpopup.h" -#include "core/vapplication.h" -#include "core/vtooloptionspropertybrowser.h" -#include "theme/vtheme.h" -#include "ui_mainwindow.h" -#include "vabstractapplication.h" -#include "vsinglelineoutlinechar.h" -#include - -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) -#include "../vmisc/vtextcodec.h" -#else -#include -#endif - -#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../vmisc/backport/qoverload.h" -#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) - -#include "../vlayout/dialogs/dialoglayoutscale.h" -#include "../vlayout/vlayoutexporter.h" -#include "../vmisc/dialogs/dialogselectlanguage.h" -#include "../vwidgets/vgraphicssimpletextitem.h" - #include "../vpatterndb/variables/vincrement.h" #include "../vpatterndb/variables/vmeasurement.h" - -#include "../ifc/xml/utils.h" -#include "../ifc/xml/vbackgroundpatternimage.h" -#include "../vtools/undocommands/image/addbackgroundimage.h" -#include "../vtools/undocommands/image/deletebackgroundimage.h" - -#include "dialogs/dialogaboutapp.h" -#include "dialogs/dialogaddbackgroundimage.h" -#include "dialogs/dialogfinalmeasurements.h" -#include "dialogs/dialoghistory.h" -#include "dialogs/dialogincrements.h" -#include "dialogs/dialognewpattern.h" -#include "dialogs/dialogpatternproperties.h" -#include "dialogs/dialogpreferences.h" -#include "dialogs/vwidgetbackgroundimages.h" -#include "dialogs/vwidgetdetails.h" -#include "dialogs/vwidgetgroups.h" - #include "../vtools/dialogs/support/dialogeditlabel.h" - #include "../vtools/dialogs/tools/dialogalongline.h" #include "../vtools/dialogs/tools/dialogarc.h" #include "../vtools/dialogs/tools/dialogarcwithlength.h" @@ -138,12 +125,10 @@ #include "../vtools/dialogs/tools/piece/dialogpin.h" #include "../vtools/dialogs/tools/piece/dialogplacelabel.h" #include "../vtools/dialogs/tools/piece/dialogseamallowance.h" - #include "../vtools/tools/backgroundimage/vbackgroundimagecontrols.h" #include "../vtools/tools/backgroundimage/vbackgroundimageitem.h" #include "../vtools/tools/backgroundimage/vbackgroundpixmapitem.h" #include "../vtools/tools/backgroundimage/vbackgroundsvgitem.h" - #include "../vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.h" #include "../vtools/tools/drawTools/operation/flipping/vtoolflippingbyline.h" #include "../vtools/tools/drawTools/operation/vtoolmove.h" @@ -178,12 +163,46 @@ #include "../vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h" #include "../vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.h" #include "../vtools/tools/drawTools/vtoolline.h" -#include "../vtools/tools/vtoolseamallowance.h" -#include "../vtools/tools/vtooluniondetails.h" - #include "../vtools/tools/nodeDetails/vtoolpiecepath.h" #include "../vtools/tools/nodeDetails/vtoolpin.h" #include "../vtools/tools/nodeDetails/vtoolplacelabel.h" +#include "../vtools/tools/vtoolseamallowance.h" +#include "../vtools/tools/vtooluniondetails.h" +#include "../vtools/undocommands/image/addbackgroundimage.h" +#include "../vtools/undocommands/image/deletebackgroundimage.h" +#include "../vtools/undocommands/renamepp.h" +#include "../vtools/undocommands/undogroup.h" +#include "../vwidgets/vgraphicssimpletextitem.h" +#include "../vwidgets/vmaingraphicsscene.h" +#include "../vwidgets/vtoolbuttonpopup.h" +#include "../vwidgets/vwidgetpopup.h" +#include "core/vapplication.h" +#include "core/vtooloptionspropertybrowser.h" +#include "dialogs/dialogaboutapp.h" +#include "dialogs/dialogaddbackgroundimage.h" +#include "dialogs/dialogfinalmeasurements.h" +#include "dialogs/dialoghistory.h" +#include "dialogs/dialogincrements.h" +#include "dialogs/dialognewpattern.h" +#include "dialogs/dialogpatternproperties.h" +#include "dialogs/dialogpreferences.h" +#include "dialogs/vwidgetbackgroundimages.h" +#include "dialogs/vwidgetdetails.h" +#include "dialogs/vwidgetgroups.h" +#include "qstringliteral.h" +#include "ui_mainwindow.h" +#include "vabstractapplication.h" +#include "vsinglelineoutlinechar.h" + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#include "../vmisc/vtextcodec.h" +#else +#include +#endif + +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) +#include "../vmisc/backport/qoverload.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) #include "../vmisc/diagnostic.h" @@ -195,38 +214,10 @@ #include #endif -#include -#include -#include -#include -#include -#include - #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include #endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #if defined(Q_OS_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) #include #include @@ -2490,7 +2481,7 @@ void MainWindow::ExportDraw(const QString &fileName) if (item->type() == VGraphicsSimpleTextItem::Type) { auto *text = dynamic_cast(item); - text->setBrush(text->BaseColor()); // Regular update doesn't work on labels + text->RefreshColor(); // Regular update doesn't work on labels } } @@ -2835,12 +2826,14 @@ void MainWindow::ToolBarOption() //--------------------------------------------------------------------------------------------------------------------- void MainWindow::ToolBarStages() { + const QString resource = QStringLiteral("icon"); + m_leftGoToStage = new QLabel(this); - m_leftGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/fast_forward_left_to_right_arrow.png"))); + m_leftGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-next-skip.png"))); ui->toolBarStages->insertWidget(ui->actionDetails, m_leftGoToStage); m_rightGoToStage = new QLabel(this); - m_rightGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/left_to_right_arrow.png"))); + m_rightGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-next.png"))); ui->toolBarStages->insertWidget(ui->actionLayout, m_rightGoToStage); } @@ -3687,8 +3680,10 @@ void MainWindow::ActionDraw(bool checked) qCDebug(vMainWindow, "Show draw scene"); ArrowTool(true); - m_leftGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/fast_forward_left_to_right_arrow.png"))); - m_rightGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/left_to_right_arrow.png"))); + const QString resource = QStringLiteral("icon"); + + m_leftGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-next-skip.png"))); + m_rightGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-next.png"))); ui->actionDraw->setChecked(true); ui->actionDetails->setChecked(false); @@ -3745,8 +3740,9 @@ void MainWindow::ActionDetails(bool checked) } m_comboBoxDraws->setCurrentIndex(m_comboBoxDraws->count() - 1); // Need to get data about all details - m_leftGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/right_to_left_arrow.png"))); - m_rightGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/left_to_right_arrow.png"))); + const QString resource = QStringLiteral("icon"); + m_leftGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-previous.png"))); + m_rightGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-next.png"))); ui->actionDraw->setChecked(false); ui->actionDetails->setChecked(true); @@ -3826,8 +3822,9 @@ void MainWindow::ActionLayout(bool checked) } m_comboBoxDraws->setCurrentIndex(m_comboBoxDraws->count() - 1); // Need to get data about all details - m_leftGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/right_to_left_arrow.png"))); - m_rightGoToStage->setPixmap(QPixmap(QStringLiteral("://icon/24x24/fast_forward_right_to_left_arrow.png"))); + const QString resource = QStringLiteral("icon"); + m_leftGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-previous.png"))); + m_rightGoToStage->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/go-previous-skip.png"))); ui->actionDraw->setChecked(false); ui->actionDetails->setChecked(false); @@ -5554,11 +5551,9 @@ auto MainWindow::MaybeSave() -> bool { if (this->isWindowModified() && m_guiEnabled) { - QScopedPointer messageBox(new QMessageBox(tr("Unsaved changes"), - tr("The pattern has been modified.\n" - "Do you want to save your changes?"), - QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, - QMessageBox::Cancel, this, Qt::Sheet)); + QScopedPointer messageBox(new QMessageBox( + tr("Unsaved changes"), tr("The pattern has been modified. Do you want to save your changes?"), + QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel, this, Qt::Sheet)); messageBox->setDefaultButton(QMessageBox::Yes); messageBox->setEscapeButton(QMessageBox::Cancel); diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index 5d0176860..6c992d5e8 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -193,7 +193,7 @@ auto MainWindowsNoGUI::GenerateLayout(VLayoutGenerator &lGenerator) -> bool #if defined(Q_OS_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) QTimer *progressTimer = nullptr; #endif - + QSharedPointer progress; if (VApplication::IsGUIMode()) { @@ -206,10 +206,10 @@ auto MainWindowsNoGUI::GenerateLayout(VLayoutGenerator &lGenerator) -> bool [this, timer]() { m_taskbarProgress->setValue(static_cast(timer.elapsed() / 1000)); }); progressTimer->start(1000); #endif - + progress = QSharedPointer( new DialogLayoutProgress(timer, lGenerator.GetNestingTimeMSecs(), this)); - + connect(progress.data(), &DialogLayoutProgress::Abort, &lGenerator, &VLayoutGenerator::Abort); connect(progress.data(), &DialogLayoutProgress::Timeout, &lGenerator, &VLayoutGenerator::Timeout); @@ -906,7 +906,7 @@ auto MainWindowsNoGUI::RecentFileList() const -> QStringList auto MainWindowsNoGUI::ScenePreview(int i, QSize iconSize, PreviewQuatilty quality) const -> QIcon { QImage image; - QGraphicsRectItem *paper = qgraphicsitem_cast(m_layoutSettings->LayoutPapers().at(i)); + auto *paper = qgraphicsitem_cast(m_layoutSettings->LayoutPapers().at(i)); if (paper) { if (quality == PreviewQuatilty::Fast) @@ -947,21 +947,22 @@ auto MainWindowsNoGUI::ScenePreview(int i, QSize iconSize, PreviewQuatilty quali image = QImage(iconSize, QImage::Format_RGB32); image.fill(Qt::white); } - return QIcon(QBitmap::fromImage(image)); + return {QBitmap::fromImage(image)}; } //--------------------------------------------------------------------------------------------------------------------- auto MainWindowsNoGUI::CreateShadows(const QList &papers) -> QList { QList shadows; + shadows.reserve(papers.size()); for (auto *paper : papers) { qreal x1 = 0, y1 = 0, x2 = 0, y2 = 0; - if (QGraphicsRectItem *item = qgraphicsitem_cast(paper)) + if (auto *item = qgraphicsitem_cast(paper)) { item->rect().getCoords(&x1, &y1, &x2, &y2); - QGraphicsRectItem *shadowPaper = new QGraphicsRectItem(QRectF(x1 + 4, y1 + 4, x2 + 4, y2 + 4)); + auto *shadowPaper = new QGraphicsRectItem(QRectF(x1 + 4, y1 + 4, x2 + 4, y2 + 4)); shadowPaper->setBrush(QBrush(Qt::black)); shadows.append(shadowPaper); } diff --git a/src/libs/fervor/fvupdatewindow.cpp b/src/libs/fervor/fvupdatewindow.cpp index ef0fc0380..dea67b7ac 100644 --- a/src/libs/fervor/fvupdatewindow.cpp +++ b/src/libs/fervor/fvupdatewindow.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include "fvavailableupdate.h" #include "fvupdater.h" @@ -33,8 +32,8 @@ //--------------------------------------------------------------------------------------------------------------------- FvUpdateWindow::FvUpdateWindow(QWidget *parent) - : QDialog(parent), - m_ui(new Ui::FvUpdateWindow) + : QDialog(parent), + m_ui(new Ui::FvUpdateWindow) { m_ui->setupUi(this); @@ -42,8 +41,8 @@ FvUpdateWindow::FvUpdateWindow(QWidget *parent) setAttribute(Qt::WA_DeleteOnClose, true); // Set the "new version is available" string - const QString newVersString = m_ui->newVersionIsAvailableLabel->text() - .arg(QGuiApplication::applicationDisplayName()); + const QString newVersString = + m_ui->newVersionIsAvailableLabel->text().arg(QGuiApplication::applicationDisplayName()); m_ui->newVersionIsAvailableLabel->setText(newVersString); // Connect buttons @@ -71,13 +70,13 @@ auto FvUpdateWindow::UpdateWindowWithCurrentProposedUpdate() -> bool if (FvUpdater::IsTestBuild()) { downloadString = tr("New %1 test version is now available. Would you like to download it now?") - .arg(QGuiApplication::applicationDisplayName()); + .arg(QGuiApplication::applicationDisplayName()); } else { - downloadString = m_ui->wouldYouLikeToDownloadLabel->text() - .arg(QGuiApplication::applicationDisplayName(), proposedUpdate->GetEnclosureVersion(), - QCoreApplication::applicationVersion()); + downloadString = m_ui->wouldYouLikeToDownloadLabel->text().arg(QGuiApplication::applicationDisplayName(), + proposedUpdate->GetEnclosureVersion(), + QCoreApplication::applicationVersion()); } m_ui->wouldYouLikeToDownloadLabel->setText(downloadString); diff --git a/src/libs/ifc/ifcdef.cpp b/src/libs/ifc/ifcdef.cpp index 7355a8743..6c3ccf217 100644 --- a/src/libs/ifc/ifcdef.cpp +++ b/src/libs/ifc/ifcdef.cpp @@ -218,38 +218,40 @@ auto PenStyleToLineStyle(Qt::PenStyle penStyle) -> QString } //--------------------------------------------------------------------------------------------------------------------- -auto PenStylePic(Qt::PenStyle style) -> QIcon +auto PenStylePic(QColor backgroundColor, QColor textColor, Qt::PenStyle style) -> QIcon { QPixmap pix(80, 14); - pix.fill(Qt::white); + pix.fill(backgroundColor); - QBrush brush(Qt::black); - QPen pen(brush, 2.5, style); + QPen pen(textColor, 2.5, style); QPainter painter(&pix); painter.setPen(pen); painter.drawLine(2, 7, 78, 7); - return QIcon(pix); + painter.setPen(QPen(textColor, 0.25)); + painter.drawRect(0, 0, pix.width() - 1, pix.height() - 1); + + return {pix}; } //--------------------------------------------------------------------------------------------------------------------- -auto LineStylesPics() -> QMap +auto LineStylesPics(QColor backgroundColor, QColor textColor) -> QMap { QMap map; const QStringList styles = StylesList(); for (const auto &s : styles) { - map.insert(s, PenStylePic(LineStyleToPenStyle(s))); + map.insert(s, PenStylePic(backgroundColor, textColor, LineStyleToPenStyle(s))); } return map; } //--------------------------------------------------------------------------------------------------------------------- -auto CurvePenStylesPics() -> QMap +auto CurvePenStylesPics(QColor backgroundColor, QColor textColor) -> QMap { - QMap map = LineStylesPics(); + QMap map = LineStylesPics(backgroundColor, textColor); map.remove(TypeLineNone); return map; } diff --git a/src/libs/ifc/ifcdef.h b/src/libs/ifc/ifcdef.h index 71e311816..ff200bc3f 100644 --- a/src/libs/ifc/ifcdef.h +++ b/src/libs/ifc/ifcdef.h @@ -179,9 +179,9 @@ extern const QString TypeLineDashDotDotLine; auto StylesList() -> QStringList; auto LineStyleToPenStyle(const QString &typeLine) -> Qt::PenStyle; auto PenStyleToLineStyle(Qt::PenStyle penStyle) -> QString; -auto PenStylePic(Qt::PenStyle style) -> QIcon; -auto LineStylesPics() -> QMap; -auto CurvePenStylesPics() -> QMap; +auto PenStylePic(QColor backgroundColor, QColor textColor, Qt::PenStyle style) -> QIcon; +auto LineStylesPics(QColor backgroundColor, QColor textColor) -> QMap; +auto CurvePenStylesPics(QColor backgroundColor, QColor textColor) -> QMap; extern const QString ColorDefault; extern const QString ColorBlack; diff --git a/src/libs/vdxf/vdxfengine.cpp b/src/libs/vdxf/vdxfengine.cpp index 8ac2e8451..9c28c0908 100644 --- a/src/libs/vdxf/vdxfengine.cpp +++ b/src/libs/vdxf/vdxfengine.cpp @@ -43,7 +43,6 @@ #include #include #include -#include #include #include #include diff --git a/src/libs/vgeometry/vspline_p.h b/src/libs/vgeometry/vspline_p.h index c8ac8b46b..7b04ff247 100644 --- a/src/libs/vgeometry/vspline_p.h +++ b/src/libs/vgeometry/vspline_p.h @@ -108,12 +108,18 @@ inline VSplineData::VSplineData(const VPointF &p1, const VPointF &p4, qreal angl QLineF p1p2(p1.x(), p1.y(), p1.x() + L * kAsm1, p1.y()); p1p2.setAngle(angle1); c1Length = p1p2.length(); - c1LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c1Length)); + if (VAbstractValApplication::VApp()) + { + c1LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c1Length)); + } QLineF p4p3(p4.x(), p4.y(), p4.x() + L * kAsm2, p4.y()); p4p3.setAngle(angle2); c2Length = p4p3.length(); - c2LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c2Length)); + if (VAbstractValApplication::VApp()) + { + c2LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c2Length)); + } } //--------------------------------------------------------------------------------------------------------------------- @@ -127,7 +133,10 @@ inline VSplineData::VSplineData(const VPointF &p1, QPointF p2, QPointF p3, const angle1F = QString::number(angle1); c1Length = p1p2.length(); - c1LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c1Length)); + if (VAbstractValApplication::VApp()) + { + c1LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c1Length)); + } QLineF p4p3(static_cast(p4), static_cast(p3)); @@ -135,7 +144,10 @@ inline VSplineData::VSplineData(const VPointF &p1, QPointF p2, QPointF p3, const angle2F = QString::number(angle2); c2Length = p4p3.length(); - c2LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c2Length)); + if (VAbstractValApplication::VApp()) + { + c2LengthF = QString::number(VAbstractValApplication::VApp()->fromPixel(c2Length)); + } } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vlayout/dialogs/dialoglayoutscale.ui b/src/libs/vlayout/dialogs/dialoglayoutscale.ui index 0cc38f3c5..4f878c0ce 100644 --- a/src/libs/vlayout/dialogs/dialoglayoutscale.ui +++ b/src/libs/vlayout/dialogs/dialoglayoutscale.ui @@ -236,7 +236,7 @@ - ... + diff --git a/src/libs/vlayout/dialogs/watermarkwindow.cpp b/src/libs/vlayout/dialogs/watermarkwindow.cpp index 852d5db43..d00e9bad1 100644 --- a/src/libs/vlayout/dialogs/watermarkwindow.cpp +++ b/src/libs/vlayout/dialogs/watermarkwindow.cpp @@ -42,12 +42,12 @@ #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../vmisc/def.h" -#include "../vmisc/vabstractapplication.h" -#include "../vpropertyexplorer/checkablemessagebox.h" #include "../ifc/exception/vexception.h" #include "../ifc/xml/vwatermarkconverter.h" #include "../vformat/vwatermark.h" +#include "../vmisc/def.h" +#include "../vmisc/vabstractapplication.h" +#include "../vpropertyexplorer/checkablemessagebox.h" //--------------------------------------------------------------------------------------------------------------------- WatermarkWindow::WatermarkWindow(const QString &patternPath, QWidget *parent) @@ -66,54 +66,54 @@ WatermarkWindow::WatermarkWindow(const QString &patternPath, QWidget *parent) ToolBarStyle(ui->toolBar); - connect(ui->spinBoxOpacity, QOverload::of(&QSpinBox::valueChanged),this, - [this](){WatermarkChangesWereSaved(false);}); + connect(ui->spinBoxOpacity, QOverload::of(&QSpinBox::valueChanged), this, + [this]() { WatermarkChangesWereSaved(false); }); - connect(ui->lineEditText, &QLineEdit::textChanged, this, [this]() - { - WatermarkChangesWereSaved(false); - }); + connect(ui->lineEditText, &QLineEdit::textChanged, this, [this]() { WatermarkChangesWereSaved(false); }); connect(ui->spinBoxTextRotation, QOverload::of(&QSpinBox::valueChanged), this, - [this](){WatermarkChangesWereSaved(false);}); + [this]() { WatermarkChangesWereSaved(false); }); - connect(ui->toolButtonFont, &QToolButton::clicked, this, [this]() - { - bool ok; - QFont font = QFontDialog::getFont(&ok, m_data.font, this); - if (ok) - { - WatermarkChangesWereSaved(false); - m_data.font = font; - ui->lineEditFontSample->setFont(font); - } - }); + connect(ui->toolButtonFont, &QToolButton::clicked, this, + [this]() + { + bool ok; + QFont font = QFontDialog::getFont(&ok, m_data.font, this); + if (ok) + { + WatermarkChangesWereSaved(false); + m_data.font = font; + ui->lineEditFontSample->setFont(font); + } + }); - connect(ui->lineEditPath, &QLineEdit::textChanged, this, [this]() - { - WatermarkChangesWereSaved(false); - ValidatePath(); - }); + connect(ui->lineEditPath, &QLineEdit::textChanged, this, + [this]() + { + WatermarkChangesWereSaved(false); + ValidatePath(); + }); - connect(ui->pushButtonBrowse, &QPushButton::clicked, this, [this]() - { - const QString filter = tr("Images") + QLatin1String(" (*.png *.jpg *.jpeg *.bmp)"); - const QString fileName = QFileDialog::getOpenFileName(this, tr("Watermark image"), QString(), filter, - nullptr, - VAbstractApplication::VApp()->NativeFileDialog()); - if (not fileName.isEmpty()) - { - ui->lineEditPath->setText(fileName); - } - }); + connect(ui->pushButtonBrowse, &QPushButton::clicked, this, + [this]() + { + const QString filter = tr("Images") + QLatin1String(" (*.png *.jpg *.jpeg *.bmp)"); + const QString fileName = + QFileDialog::getOpenFileName(this, tr("Watermark image"), QString(), filter, nullptr, + VAbstractApplication::VApp()->NativeFileDialog()); + if (not fileName.isEmpty()) + { + ui->lineEditPath->setText(fileName); + } + }); - connect(ui->spinBoxImageRotation, QOverload::of(&QSpinBox::valueChanged),this, - [this](){WatermarkChangesWereSaved(false);}); + connect(ui->spinBoxImageRotation, QOverload::of(&QSpinBox::valueChanged), this, + [this]() { WatermarkChangesWereSaved(false); }); - connect(ui->checkBoxGrayColor, &QCheckBox::stateChanged, this, [this](){WatermarkChangesWereSaved(false);}); + connect(ui->checkBoxGrayColor, &QCheckBox::stateChanged, this, [this]() { WatermarkChangesWereSaved(false); }); - connect(ui->groupBoxWatermarkText, &QGroupBox::toggled, this, [this](){WatermarkChangesWereSaved(false);}); - connect(ui->groupBoxWatermarkImage, &QGroupBox::toggled, this, [this](){WatermarkChangesWereSaved(false);}); + connect(ui->groupBoxWatermarkText, &QGroupBox::toggled, this, [this]() { WatermarkChangesWereSaved(false); }); + connect(ui->groupBoxWatermarkImage, &QGroupBox::toggled, this, [this]() { WatermarkChangesWereSaved(false); }); ui->pushButtonColorPicker->insertColor(Qt::black, tr("Black", "color")); ui->pushButtonColorPicker->insertColor(Qt::red, tr("Red", "color")); @@ -133,12 +133,13 @@ WatermarkWindow::WatermarkWindow(const QString &patternPath, QWidget *parent) ui->pushButtonColorPicker->insertColor(Qt::lightGray, tr("Light gray", "color")); QVector colors = VAbstractApplication::VApp()->Settings()->GetWatermarkCustomColors(); - for (const auto& color : colors) + for (const auto &color : colors) { ui->pushButtonColorPicker->insertColor(color); } - connect(ui->pushButtonColorPicker, &QtColorPicker::colorChanged, this, [this](){WatermarkChangesWereSaved(false);}); + connect(ui->pushButtonColorPicker, &QtColorPicker::colorChanged, this, + [this]() { WatermarkChangesWereSaved(false); }); } //--------------------------------------------------------------------------------------------------------------------- @@ -168,13 +169,14 @@ auto WatermarkWindow::Open(QString path) -> bool // Convert to absolute path if need path = AbsoluteMPath(m_patternPath, path); - QFuture futureConverter = QtConcurrent::run([path]() - { - std::unique_ptr converter(new VWatermarkConverter(path)); - return converter.release(); - }); + QFuture futureConverter = QtConcurrent::run( + [path]() + { + std::unique_ptr converter(new VWatermarkConverter(path)); + return converter.release(); + }); - //We have unsaved changes or load more then one file per time + // We have unsaved changes or load more then one file per time if (OpenNewEditor(path)) { return false; @@ -206,8 +208,8 @@ auto WatermarkWindow::Open(QString path) -> bool } catch (VException &e) { - qCritical("%s\n\n%s\n\n%s", qUtf8Printable(tr("File error.")), - qUtf8Printable(e.ErrorMessage()), qUtf8Printable(e.DetailedInformation())); + qCritical("%s\n\n%s\n\n%s", qUtf8Printable(tr("File error.")), qUtf8Printable(e.ErrorMessage()), + qUtf8Printable(e.DetailedInformation())); Clear(); return false; } @@ -260,8 +262,8 @@ void WatermarkWindow::changeEvent(QEvent *event) //--------------------------------------------------------------------------------------------------------------------- void WatermarkWindow::showEvent(QShowEvent *event) { - QMainWindow::showEvent( event ); - if ( event->spontaneous() ) + QMainWindow::showEvent(event); + if (event->spontaneous()) { return; } @@ -278,7 +280,7 @@ void WatermarkWindow::showEvent(QShowEvent *event) resize(sz); } - m_isInitialized = true;//first show windows are held + m_isInitialized = true; // first show windows are held } //--------------------------------------------------------------------------------------------------------------------- @@ -323,7 +325,7 @@ auto WatermarkWindow::on_actionSaveAs_triggered() -> bool return false; } - QFileInfo f( fileName ); + QFileInfo f(fileName); if (f.suffix().isEmpty() && f.suffix() != QLatin1String("vwm")) { fileName += QLatin1String(".vwm"); @@ -489,11 +491,9 @@ auto WatermarkWindow::MaybeSave() -> bool { if (this->isWindowModified()) { - QScopedPointer messageBox(new QMessageBox(tr("Unsaved changes"), - tr("The watermark has been modified.\n" - "Do you want to save your changes?"), - QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, - QMessageBox::Cancel, this, Qt::Sheet)); + QScopedPointer messageBox(new QMessageBox( + tr("Unsaved changes"), tr("The watermark has been modified. Do you want to save your changes?"), + QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel, this, Qt::Sheet)); messageBox->setDefaultButton(QMessageBox::Yes); messageBox->setEscapeButton(QMessageBox::Cancel); @@ -525,13 +525,13 @@ void WatermarkWindow::UpdateWindowTitle() bool isFileWritable = true; if (not m_curFile.isEmpty()) { -//#ifdef Q_OS_WIN32 -// qt_ntfs_permission_lookup++; // turn checking on -//#endif /*Q_OS_WIN32*/ + // #ifdef Q_OS_WIN32 + // qt_ntfs_permission_lookup++; // turn checking on + // #endif /*Q_OS_WIN32*/ isFileWritable = QFileInfo(m_curFile).isWritable(); -//#ifdef Q_OS_WIN32 -// qt_ntfs_permission_lookup--; // turn it off again -//#endif /*Q_OS_WIN32*/ + // #ifdef Q_OS_WIN32 + // qt_ntfs_permission_lookup--; // turn it off again + // #endif /*Q_OS_WIN32*/ } if (isFileWritable) @@ -545,8 +545,8 @@ void WatermarkWindow::UpdateWindowTitle() setWindowFilePath(m_curFile); #if defined(Q_OS_MAC) - static QIcon fileIcon = QIcon(QCoreApplication::applicationDirPath() + - QLatin1String("/../Resources/Valentina.icns")); + static QIcon fileIcon = + QIcon(QCoreApplication::applicationDirPath() + QLatin1String("/../Resources/Valentina.icns")); QIcon icon; if (not m_curFile.isEmpty()) { @@ -566,14 +566,14 @@ void WatermarkWindow::UpdateWindowTitle() } } setWindowIcon(icon); -#endif //defined(Q_OS_MAC) +#endif // defined(Q_OS_MAC) } //--------------------------------------------------------------------------------------------------------------------- auto WatermarkWindow::GetWatermarkFileName() -> QString { QString shownName = tr("untitled.vwm"); - if(not m_curFile.isEmpty()) + if (not m_curFile.isEmpty()) { shownName = StrippedName(m_curFile); } @@ -592,7 +592,8 @@ auto WatermarkWindow::ContinueFormatRewrite(const QString ¤tFormatVersion, msgBox.setText(tr("This file is using previous format version v%1. The current is v%2. " "Saving the file with this app version will update the format version for this " "file. This may prevent you from be able to open the file with older app versions. " - "Do you really want to continue?").arg(currentFormatVersion, maxFormatVersion)); + "Do you really want to continue?") + .arg(currentFormatVersion, maxFormatVersion)); msgBox.setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No); msgBox.setDefaultButton(QDialogButtonBox::No); msgBox.setIconPixmap(QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion).pixmap(32, 32)); @@ -670,27 +671,27 @@ void WatermarkWindow::Clear() auto WatermarkWindow::IgnoreLocking(int error, const QString &path) -> bool { QMessageBox::StandardButton answer = QMessageBox::Abort; - switch(error) + switch (error) { case QLockFile::LockFailedError: answer = QMessageBox::warning(this, tr("Locking file"), - tr("This file already opened in another window. Ignore if you want " - "to continue (not recommended, can cause a data corruption)."), - QMessageBox::Abort|QMessageBox::Ignore, QMessageBox::Abort); + tr("This file already opened in another window. Ignore if you want " + "to continue (not recommended, can cause a data corruption)."), + QMessageBox::Abort | QMessageBox::Ignore, QMessageBox::Abort); break; case QLockFile::PermissionError: answer = QMessageBox::question(this, tr("Locking file"), tr("The lock file could not be created, for lack of permissions. " "Ignore if you want to continue (not recommended, can cause " "a data corruption)."), - QMessageBox::Abort|QMessageBox::Ignore, QMessageBox::Abort); + QMessageBox::Abort | QMessageBox::Ignore, QMessageBox::Abort); break; case QLockFile::UnknownError: answer = QMessageBox::question(this, tr("Locking file"), tr("Unknown error happened, for instance a full partition prevented " "writing out the lock file. Ignore if you want to continue (not " "recommended, can cause a data corruption)."), - QMessageBox::Abort|QMessageBox::Ignore, QMessageBox::Abort); + QMessageBox::Abort | QMessageBox::Ignore, QMessageBox::Abort); break; default: answer = QMessageBox::Abort; diff --git a/src/libs/vlayout/dialogs/watermarkwindow.ui b/src/libs/vlayout/dialogs/watermarkwindow.ui index 191077f8b..b0e68553a 100644 --- a/src/libs/vlayout/dialogs/watermarkwindow.ui +++ b/src/libs/vlayout/dialogs/watermarkwindow.ui @@ -171,7 +171,7 @@ Edit font - ... + diff --git a/src/libs/vlayout/vgraphicsfillitem.cpp b/src/libs/vlayout/vgraphicsfillitem.cpp index af66f2ec3..4f354b459 100644 --- a/src/libs/vlayout/vgraphicsfillitem.cpp +++ b/src/libs/vlayout/vgraphicsfillitem.cpp @@ -30,20 +30,18 @@ //--------------------------------------------------------------------------------------------------------------------- VGraphicsFillItem::VGraphicsFillItem(QGraphicsItem *parent) - :QGraphicsPathItem(parent) -{} + : QGraphicsPathItem(parent) +{ +} //--------------------------------------------------------------------------------------------------------------------- VGraphicsFillItem::VGraphicsFillItem(const QPainterPath &path, QGraphicsItem *parent) - :QGraphicsPathItem(path, parent) -{} + : QGraphicsPathItem(path, parent) +{ +} //--------------------------------------------------------------------------------------------------------------------- -VGraphicsFillItem::~VGraphicsFillItem() -{} - -//--------------------------------------------------------------------------------------------------------------------- -void VGraphicsFillItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +void VGraphicsFillItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option) Q_UNUSED(widget) diff --git a/src/libs/vlayout/vgraphicsfillitem.h b/src/libs/vlayout/vgraphicsfillitem.h index 2ceb66a2d..542e65ed9 100644 --- a/src/libs/vlayout/vgraphicsfillitem.h +++ b/src/libs/vlayout/vgraphicsfillitem.h @@ -34,6 +34,10 @@ #include "../vmisc/def.h" +#if QT_VERSION < QT_VERSION_CHECK(5, 13, 0) +#include "../vmisc/defglobal.h" +#endif + class VGraphicsFillItem : public QGraphicsPathItem { public: @@ -41,12 +45,9 @@ public: * @brief VGraphicsFillItem Constructor */ explicit VGraphicsFillItem(QGraphicsItem *parent = nullptr); + explicit VGraphicsFillItem(const QPainterPath &path, QGraphicsItem *parent = nullptr); + ~VGraphicsFillItem() override = default; - VGraphicsFillItem(const QPainterPath &path, QGraphicsItem *parent = nullptr); - /** - * @brief ~VGraphicsFillItem Destructor - */ - ~VGraphicsFillItem(); /** * @brief paint Paints the item, filling the inside surface * @param painter pointer to the painter object @@ -56,7 +57,10 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Layout::GrainlineItem)}; + enum + { + Type = UserType + static_cast(Layout::GrainlineItem) + }; auto GetWidth() const -> qreal; void SetWidth(const qreal &value); @@ -65,6 +69,7 @@ public: void SetCustomPen(bool newCustomPen); private: + Q_DISABLE_COPY_MOVE(VGraphicsFillItem) // NOLINT qreal width{1}; bool m_customPen{false}; }; diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index d14a447f0..da6d10851 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -40,7 +40,6 @@ #include #include #include -#include #include #ifdef LAYOUT_DEBUG diff --git a/src/libs/vlayout/vlayoutpiece.cpp b/src/libs/vlayout/vlayoutpiece.cpp index cb96b69b9..57e580436 100644 --- a/src/libs/vlayout/vlayoutpiece.cpp +++ b/src/libs/vlayout/vlayoutpiece.cpp @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include @@ -1798,7 +1797,12 @@ void VLayoutPiece::CreateGrainlineItem(QGraphicsItem *parent) const } auto *item = new VGraphicsFillItem(VLayoutPiece::GrainlinePath(GetMappedGrainlineShape()), parent); - item->SetWidth(VAbstractApplication::VApp()->Settings()->WidthHairLine()); + item->SetCustomPen(true); + QPen pen = item->pen(); + pen.setWidthF(VAbstractApplication::VApp()->Settings()->WidthHairLine()); + pen.setCapStyle(Qt::RoundCap); + pen.setJoinStyle(Qt::RoundJoin); + item->setPen(pen); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index 505637f5d..1cbefb6d4 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -29,7 +29,6 @@ #include "vposition.h" #include -#include #include #include #include @@ -44,7 +43,7 @@ #include #include #include -#include +#include #include #include "../ifc/exception/vexception.h" @@ -61,24 +60,24 @@ QPainterPath ShowDirection(const QLineF &edge) { const int arrowLength = 14; QPainterPath path; - if (edge.length()/arrowLength < 5) + if (edge.length() / arrowLength < 5) { - return path; + return path; } QLineF arrow = edge; - arrow.setLength(edge.length()/2.0); + arrow.setLength(edge.length() / 2.0); - //Reverse line because we want start arrow from this point + // Reverse line because we want start arrow from this point arrow = QLineF(arrow.p2(), arrow.p1()); - const qreal angle = arrow.angle();//we each time change line angle, better save original angle value - arrow.setLength(arrowLength);//arrow length in pixels + const qreal angle = arrow.angle(); // we each time change line angle, better save original angle value + arrow.setLength(arrowLength); // arrow length in pixels - arrow.setAngle(angle-35); + arrow.setAngle(angle - 35); path.moveTo(arrow.p1()); path.lineTo(arrow.p2()); - arrow.setAngle(angle+35); + arrow.setAngle(angle + 35); path.moveTo(arrow.p1()); path.lineTo(arrow.p2()); return path; @@ -91,24 +90,24 @@ QPainterPath DumpContour(const QVector &points) path.setFillRule(Qt::WindingFill); if (points.count() >= 2) { - for (qint32 i = 0; i < points.count()-1; ++i) + for (qint32 i = 0; i < points.count() - 1; ++i) { path.moveTo(points.at(i)); - path.lineTo(points.at(i+1)); + path.lineTo(points.at(i + 1)); } path.lineTo(points.at(0)); #ifdef SHOW_DIRECTION - for (qint32 i = 0; i < points.count()-1; ++i) + for (qint32 i = 0; i < points.count() - 1; ++i) { - path.addPath(ShowDirection(QLineF(points.at(i), points.at(i+1)))); + path.addPath(ShowDirection(QLineF(points.at(i), points.at(i + 1)))); } #endif #ifdef SHOW_VERTICES for (qint32 i = 0; i < points.count(); ++i) { - path.addRect(points.at(i).x()-3, points.at(i).y()-3, 6, 6); + path.addRect(points.at(i).x() - 3, points.at(i).y() - 3, 6, 6); } #endif } @@ -130,14 +129,14 @@ QPainterPath DumpDetails(const QVector &details) return path; } #endif -} //anonymous namespace +} // anonymous namespace //--------------------------------------------------------------------------------------------------------------------- VPosition::VPosition(const VPositionData &data, std::atomic_bool *stop, bool saveLength) - : m_isValid(true), - m_bestResult(VBestSquare(data.gContour.GetSize(), saveLength, data.isOriginPaperOrientationPortrait)), - m_data(data), - stop(stop) + : m_isValid(true), + m_bestResult(VBestSquare(data.gContour.GetSize(), saveLength, data.isOriginPaperOrientationPortrait)), + m_data(data), + stop(stop) { if (m_data.rotationNumber > 360 || m_data.rotationNumber < 1) { @@ -160,7 +159,7 @@ void VPosition::run() try { - for (int i=1; i<= m_data.detail.LayoutEdgesCount(); ++i) + for (int i = 1; i <= m_data.detail.LayoutEdgesCount(); ++i) { if (stop->load()) { @@ -181,7 +180,7 @@ void VPosition::run() m_bestResult.TerminatedByException(QStringLiteral("%1\n\n%2").arg(e.ErrorMessage(), e.DetailedInformation())); return; } - catch (std::exception& e) + catch (std::exception &e) { m_bestResult.TerminatedByException(QString::fromLatin1(e.what())); return; @@ -214,14 +213,14 @@ auto VPosition::ArrangeDetail(const VPositionData &data, std::atomic_bool *stop, const auto detailEdgesCount = detail.LayoutEdgesCount(); if (detailEdgesCount < 3 || detail.DetailEdgesCount() < 3) { - return bestResult;//Not enough edges + return bestResult; // Not enough edges } QFutureWatcher watcher; QVector jobs; jobs.reserve(data.gContour.GlobalEdgesCount()); - for (int j=1; j <= data.gContour.GlobalEdgesCount(); ++j) + for (int j = 1; j <= data.gContour.GlobalEdgesCount(); ++j) { VPositionData linkedData = data; linkedData.j = j; @@ -231,7 +230,7 @@ auto VPosition::ArrangeDetail(const VPositionData &data, std::atomic_bool *stop, Q_ASSERT(not jobs.isEmpty()); - std::function Nest = [](VPosition position) + std::function Nest = [](VPosition position) { position.run(); return position.getBestResult(); @@ -239,7 +238,7 @@ auto VPosition::ArrangeDetail(const VPositionData &data, std::atomic_bool *stop, watcher.setFuture(QtConcurrent::mapped(jobs, Nest)); - while(not watcher.isStarted()) + while (not watcher.isStarted()) { QCoreApplication::processEvents(); QThread::msleep(250); @@ -250,8 +249,7 @@ auto VPosition::ArrangeDetail(const VPositionData &data, std::atomic_bool *stop, { QCoreApplication::processEvents(); QThread::msleep(250); - } - while(watcher.isRunning() && not stop->load()); + } while (watcher.isRunning() && not stop->load()); if (stop->load()) { @@ -259,8 +257,7 @@ auto VPosition::ArrangeDetail(const VPositionData &data, std::atomic_bool *stop, { QCoreApplication::processEvents(); QThread::msleep(250); - } - while(watcher.isRunning()); + } while (watcher.isRunning()); return bestResult; } @@ -275,8 +272,7 @@ auto VPosition::ArrangeDetail(const VPositionData &data, std::atomic_bool *stop, } //--------------------------------------------------------------------------------------------------------------------- -void VPosition::SaveCandidate(VBestSquare &bestResult, const VLayoutPiece &detail, int globalI, int detJ, - BestFrom type) +void VPosition::SaveCandidate(VBestSquare &bestResult, const VLayoutPiece &detail, int globalI, int detJ, BestFrom type) { if (bestResult.IsSaveLength()) { @@ -298,8 +294,8 @@ void VPosition::SaveCandidate(VBestSquare &bestResult, const VLayoutPiece &detai QT_WARNING_POP data.bestSize = size; - data.globalI = globalI; // Edge of global contour - data.detJ = detJ; // Edge of detail + data.globalI = globalI; // Edge of global contour + data.detJ = detJ; // Edge of detail data.resMatrix = detail.GetMatrix(); // Matrix for rotation and translation detail data.resMirror = detail.IsMirror(); data.type = type; @@ -319,9 +315,9 @@ auto VPosition::CheckCombineEdges(VLayoutPiece &detail, int j, int &dEdge) -> bo CombineEdges(detail, globalEdge, dEdge); #ifdef LAYOUT_DEBUG -# ifdef SHOW_COMBINE +#ifdef SHOW_COMBINE DumpFrame(m_data.gContour, detail, m_data.mutex, m_data.details); -# endif +#endif #endif CrossingType type = CrossingType::Intersection; @@ -355,9 +351,9 @@ auto VPosition::CheckCombineEdges(VLayoutPiece &detail, int j, int &dEdge) -> bo if (flagMirror && not detail.IsForbidFlipping()) { #ifdef LAYOUT_DEBUG -# ifdef SHOW_MIRROR +#ifdef SHOW_MIRROR DumpFrame(m_data.gContour, detail, m_data.mutex, m_data.details); -# endif +#endif #endif EdgeIndex layoutEdge = detail.LayoutEdgeByPoint(globalEdge.p2()); @@ -404,9 +400,9 @@ auto VPosition::CheckRotationEdges(VLayoutPiece &detail, int j, int dEdge, qreal RotateEdges(detail, globalEdge, dEdge, angle); #ifdef LAYOUT_DEBUG -# ifdef SHOW_ROTATION +#ifdef SHOW_ROTATION DumpFrame(m_data.gContour, detail, m_data.mutex, m_data.details); -# endif +#endif #endif CrossingType type = CrossingType::Intersection; @@ -445,9 +441,9 @@ void VPosition::RotateOnAngle(qreal angle) } #ifdef LAYOUT_DEBUG -# ifdef SHOW_CANDIDATE_BEST +#ifdef SHOW_CANDIDATE_BEST DumpFrame(m_data.gContour, workDetail, m_data.mutex, m_data.details); -# endif +#endif #endif SaveCandidate(m_bestResult, workDetail, m_data.j, m_data.i, BestFrom::Rotation); @@ -467,18 +463,20 @@ auto VPosition::Crossing(const VLayoutPiece &detail) const -> VPosition::Crossin const QPainterPath layoutAllowancePath = VGObject::PainterPath(layoutPoints); QVector contourPoints; - CastTo(detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn() ? - detail.GetMappedSeamAllowancePoints() : detail.GetMappedContourPoints(), contourPoints); + CastTo(detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn() ? detail.GetMappedSeamAllowancePoints() + : detail.GetMappedContourPoints(), + contourPoints); const QRectF detailBoundingRect = VLayoutPiece::BoundingRect(contourPoints); const QPainterPath contourPath = VGObject::PainterPath(contourPoints); - for(const auto &position : m_data.positionsCache) + for (const auto &position : m_data.positionsCache) { - if (position.boundingRect.intersects(layoutBoundingRect) || position.boundingRect.contains(detailBoundingRect) - || detailBoundingRect.contains(position.boundingRect)) + if (position.boundingRect.intersects(layoutBoundingRect) || + position.boundingRect.contains(detailBoundingRect) || detailBoundingRect.contains(position.boundingRect)) { - if (position.layoutAllowancePath.contains(contourPath) || contourPath.contains(position.layoutAllowancePath) - || position.layoutAllowancePath.intersects(layoutAllowancePath)) + if (position.layoutAllowancePath.contains(contourPath) || + contourPath.contains(position.layoutAllowancePath) || + position.layoutAllowancePath.intersects(layoutAllowancePath)) { return CrossingType::Intersection; } @@ -491,8 +489,8 @@ auto VPosition::Crossing(const VLayoutPiece &detail) const -> VPosition::Crossin //--------------------------------------------------------------------------------------------------------------------- auto VPosition::SheetContains(const QRectF &rect) const -> bool { - const QRectF bRect(-accuracyPointOnLine, -accuracyPointOnLine, m_data.gContour.GetWidth()+accuracyPointOnLine, - m_data.gContour.GetHeight()+accuracyPointOnLine); + const QRectF bRect(-accuracyPointOnLine, -accuracyPointOnLine, m_data.gContour.GetWidth() + accuracyPointOnLine, + m_data.gContour.GetHeight() + accuracyPointOnLine); return bRect.contains(rect); } @@ -529,7 +527,7 @@ void VPosition::RotateEdges(VLayoutPiece &detail, const QLineF &globalEdge, int //--------------------------------------------------------------------------------------------------------------------- void VPosition::Rotate(int number) { - const qreal step = 360.0/number; + const qreal step = 360.0 / number; qreal startAngle = 0; if (VFuzzyComparePossibleNulls(angle_between, 360)) { @@ -537,7 +535,7 @@ void VPosition::Rotate(int number) } qreal angle = startAngle; - while(angle < 360) + while (angle < 360) { if (stop->load()) { @@ -546,7 +544,7 @@ void VPosition::Rotate(int number) RotateOnAngle(angle); - angle = angle+step; + angle = angle + step; } } @@ -625,7 +623,7 @@ void VPosition::FindBestPosition() // We should use copy of the detail. VLayoutPiece workDetail = m_data.detail; - int dEdge = m_data.i;// For mirror detail edge will be different + int dEdge = m_data.i; // For mirror detail edge will be different if (CheckCombineEdges(workDetail, m_data.j, dEdge)) { if (stop->load()) @@ -634,9 +632,9 @@ void VPosition::FindBestPosition() } #ifdef LAYOUT_DEBUG -# ifdef SHOW_CANDIDATE_BEST +#ifdef SHOW_CANDIDATE_BEST DumpFrame(m_data.gContour, workDetail, m_data.mutex, m_data.details); -# endif +#endif #endif SaveCandidate(m_bestResult, workDetail, m_data.j, dEdge, BestFrom::Combine); @@ -664,9 +662,7 @@ void VPosition::DumpFrame(const VContour &contour, const VLayoutPiece &detail, Q const QVector &details = QVector()) { auto Bias = [](int length, int maxLength) - { - return length < maxLength && length*2 < maxLength ? length : maxLength-length; - }; + { return length < maxLength && length * 2 < maxLength ? length : maxLength - length; }; const int biasWidth = Bias(contour.GetWidth(), QIMAGE_MAX); const int biasHeight = Bias(contour.GetHeight(), QIMAGE_MAX); @@ -680,20 +676,20 @@ void VPosition::DumpFrame(const VContour &contour, const VLayoutPiece &detail, Q if (contour.GetContour().isEmpty()) { p = DumpContour(contour.CutEmptySheetEdge()); - p.translate(biasWidth/2, biasHeight/2); + p.translate(biasWidth / 2, biasHeight / 2); paint.drawPath(p); } else { p = DumpContour(contour.GetContour()); - p.translate(biasWidth/2, biasHeight/2); + p.translate(biasWidth / 2, biasHeight / 2); paint.drawPath(p); } #ifdef SHOW_CANDIDATE paint.setPen(QPen(Qt::darkGreen, 6, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); p = DumpContour(detail.GetLayoutAllowancePoints()); - p.translate(biasWidth/2, biasHeight/2); + p.translate(biasWidth / 2, biasHeight / 2); paint.drawPath(p); #else Q_UNUSED(detail) @@ -703,7 +699,7 @@ void VPosition::DumpFrame(const VContour &contour, const VLayoutPiece &detail, Q #ifdef ARRANGED_DETAILS paint.setPen(QPen(Qt::blue, 2, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); p = DumpDetails(details); - p.translate(biasWidth/2, biasHeight/2); + p.translate(biasWidth / 2, biasHeight / 2); paint.drawPath(p); #else Q_UNUSED(details) @@ -715,7 +711,7 @@ void VPosition::DumpFrame(const VContour &contour, const VLayoutPiece &detail, Q // Sheet #ifdef SHOW_SHEET paint.setPen(QPen(Qt::darkRed, 15, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); - paint.drawRect(QRectF(biasWidth/2, biasHeight/2, contour.GetWidth(), contour.GetHeight())); + paint.drawRect(QRectF(biasWidth / 2, biasHeight / 2, contour.GetWidth(), contour.GetHeight())); #endif paint.end(); @@ -723,7 +719,7 @@ void VPosition::DumpFrame(const VContour &contour, const VLayoutPiece &detail, Q // Dump frame to image // Note. If program was build with Address Sanitizer possible crashes. Address Sanitizer doesn't support big // allocations. See page https://bitbucket.org/dismine/valentina/wiki/developers/Address_Sanitizer - QImage frameImage(pictureRect.width()+biasWidth, pictureRect.height()+biasHeight, QImage::Format_RGB32); + QImage frameImage(pictureRect.width() + biasWidth, pictureRect.height() + biasHeight, QImage::Format_RGB32); if (frameImage.isNull()) { @@ -742,7 +738,7 @@ void VPosition::DumpFrame(const VContour &contour, const VLayoutPiece &detail, Q static int frame = 0; ++frame; - const QString path = QDir::homePath()+QStringLiteral("/LayoutDebug/%1.png").arg(frame); - frameImage.save (path); + const QString path = QDir::homePath() + QStringLiteral("/LayoutDebug/%1.png").arg(frame); + frameImage.save(path); } #endif diff --git a/src/libs/vlayout/vposter.cpp b/src/libs/vlayout/vposter.cpp index abf2c40a2..80f2a690a 100644 --- a/src/libs/vlayout/vposter.cpp +++ b/src/libs/vlayout/vposter.cpp @@ -28,28 +28,27 @@ #include "vposter.h" +#include +#include +#include +#include #include #include +#include +#include #include #include +#include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../vmisc/vmath.h" +#include "../ifc/exception/vexception.h" +#include "../vmisc/compatibility.h" #include "../vmisc/def.h" #include "../vmisc/vabstractvalapplication.h" -#include "../vmisc/compatibility.h" -#include "../ifc/exception/vexception.h" +#include "../vmisc/vmath.h" namespace { @@ -64,11 +63,11 @@ auto Grayscale(QImage image) -> QImage { for (int ii = 0; ii < image.height(); ii++) { - uchar* scan = image.scanLine(ii); + uchar *scan = image.scanLine(ii); int depth = 4; for (int jj = 0; jj < image.width(); jj++) { - QRgb* rgbpixel = reinterpret_cast(scan + jj * depth); + QRgb *rgbpixel = reinterpret_cast(scan + jj * depth); int gray = qGray(*rgbpixel); *rgbpixel = QColor(gray, gray, gray, qAlpha(*rgbpixel)).rgba(); } @@ -107,7 +106,7 @@ auto WatermarkImageFromCache(const VWatermarkData &watermarkData, const QString tmp.fill(Qt::transparent); QPainter p; p.begin(&tmp); - p.setOpacity(watermarkData.opacity/100.); + p.setOpacity(watermarkData.opacity / 100.); p.drawImage(QPointF(), watermark); p.end(); @@ -117,11 +116,12 @@ auto WatermarkImageFromCache(const VWatermarkData &watermarkData, const QString } return pixmap; } -} +} // namespace //--------------------------------------------------------------------------------------------------------------------- VPoster::VPoster(const QPrinter *printer) - :printer(printer), allowance(static_cast(qRound(CmToPixel(1.)))) + : printer(printer), + allowance(static_cast(qRound(CmToPixel(1.)))) { } @@ -138,9 +138,9 @@ auto VPoster::Calc(const QSize &imageRect, int page, PageOrientation orientation const int rows = CountRows(imageRect.height(), orientation); const int columns = CountColumns(imageRect.width(), orientation); - for (int i=0; i < rows; i++) + for (int i = 0; i < rows; i++) { - for (int j=0; j< columns; j++) + for (int j = 0; j < columns; j++) { PosterData data = Cut(i, j, imageRect, orientation); data.index = static_cast(page); @@ -196,43 +196,43 @@ auto VPoster::Borders(QGraphicsItem *parent, const PosterData &img, vsizetype sh const QRect rec = img.rect; if (img.column != 0) - {// Left border + { // Left border auto *line = new QGraphicsLineItem(parent); line->setPen(pen); line->setLine(rec.x(), rec.y(), rec.x(), rec.y() + rec.height()); data.append(line); auto *scissors = new QGraphicsPixmapItem(QPixmap(QStringLiteral("://scissors_vertical.png")), parent); - scissors->setPos(rec.x(), rec.y() + rec.height()-static_cast(allowance)); + scissors->setPos(rec.x(), rec.y() + rec.height() - static_cast(allowance)); data.append(scissors); } - if (img.column != img.columns-1) - {// Right border + if (img.column != img.columns - 1) + { // Right border auto *line = new QGraphicsLineItem(parent); line->setPen(pen); - line->setLine(rec.x() + rec.width()-static_cast(allowance), rec.y(), - rec.x() + rec.width()-static_cast(allowance), rec.y() + rec.height()); + line->setLine(rec.x() + rec.width() - static_cast(allowance), rec.y(), + rec.x() + rec.width() - static_cast(allowance), rec.y() + rec.height()); data.append(line); } if (img.row != 0) - {// Top border + { // Top border auto *line = new QGraphicsLineItem(parent); line->setPen(pen); line->setLine(rec.x(), rec.y(), rec.x() + rec.width(), rec.y()); data.append(line); auto *scissors = new QGraphicsPixmapItem(QPixmap(QStringLiteral("://scissors_horizontal.png")), parent); - scissors->setPos(rec.x() + rec.width()-static_cast(allowance), rec.y()); + scissors->setPos(rec.x() + rec.width() - static_cast(allowance), rec.y()); data.append(scissors); } // Bottom border (mandatory) auto *line = new QGraphicsLineItem(parent); line->setPen(pen); - line->setLine(rec.x(), rec.y() + rec.height()-static_cast(allowance), - rec.x() + rec.width(), rec.y() + rec.height()-static_cast(allowance)); + line->setLine(rec.x(), rec.y() + rec.height() - static_cast(allowance), rec.x() + rec.width(), + rec.y() + rec.height() - static_cast(allowance)); data.append(line); // Ruler @@ -243,8 +243,8 @@ auto VPoster::Borders(QGraphicsItem *parent, const PosterData &img, vsizetype sh const int layoutX = 15; const int layoutY = 5; - labels->setPos(rec.x() + layoutX, rec.y() + rec.height()-static_cast(allowance)+layoutY); - labels->setTextWidth(rec.width()-(static_cast(allowance)+layoutX)); + labels->setPos(rec.x() + layoutX, rec.y() + rec.height() - static_cast(allowance) + layoutY); + labels->setTextWidth(rec.width() - (static_cast(allowance) + layoutX)); const QString grid = QCoreApplication::translate("VPoster", "Grid ( %1 , %2 )").arg(img.row + 1).arg(img.column + 1); @@ -263,7 +263,7 @@ auto VPoster::Borders(QGraphicsItem *parent, const PosterData &img, vsizetype sh "%1%2%3" "" "") - .arg(grid, page, sheet)); + .arg(grid, page, sheet)); data.append(labels); @@ -285,7 +285,7 @@ auto VPoster::TextWatermark(QGraphicsItem *parent, const PosterData &img, const pen.setColor(watermarkData.textColor); text->setPen(pen); - text->setOpacity(watermarkData.opacity/100.); + text->setOpacity(watermarkData.opacity / 100.); text->setTransformOriginPoint(text->boundingRect().center()); text->setRotation(-watermarkData.textRotation); @@ -322,8 +322,9 @@ auto VPoster::ImageWatermark(QGraphicsItem *parent, const PosterData &img, const { const QString errorMsg = QCoreApplication::translate("VPoster", "Cannot open the watermark image.") + QChar(' ') + error; - VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : - qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; + VAbstractApplication::VApp()->IsPedantic() + ? throw VException(errorMsg) + : qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; return data; } @@ -333,8 +334,9 @@ auto VPoster::ImageWatermark(QGraphicsItem *parent, const PosterData &img, const { const QString errorMsg = QCoreApplication::translate("VPoster", "Not supported file suffix '%1'").arg(f.suffix()); - VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) : - qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; + VAbstractApplication::VApp()->IsPedantic() + ? throw VException(errorMsg) + : qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; return data; } @@ -360,7 +362,7 @@ auto VPoster::CountRows(int height, PageOrientation orientation) const -> int const qreal imgLength = height; qreal pageLength = 0; - if(orientation == PageOrientation::Landscape) + if (orientation == PageOrientation::Landscape) { pageLength = PageRect().width(); } @@ -375,7 +377,7 @@ auto VPoster::CountRows(int height, PageOrientation orientation) const -> int } else { - return qCeil(imgLength/(pageLength - static_cast(allowance))); + return qCeil(imgLength / (pageLength - static_cast(allowance))); } } @@ -385,7 +387,7 @@ auto VPoster::CountColumns(int width, PageOrientation orientation) const -> int const qreal imgLength = width; qreal pageLength = 0; - if(orientation == PageOrientation::Landscape) + if (orientation == PageOrientation::Landscape) { pageLength = PageRect().height(); } @@ -400,7 +402,7 @@ auto VPoster::CountColumns(int width, PageOrientation orientation) const -> int } else { - return qCeil(imgLength/(pageLength-static_cast(allowance))); + return qCeil(imgLength / (pageLength - static_cast(allowance))); } } @@ -411,7 +413,7 @@ auto VPoster::Cut(int i, int j, const QSize &imageRect, PageOrientation orientat int pageLengthX, pageLengthY; - if(orientation == PageOrientation::Landscape) + if (orientation == PageOrientation::Landscape) { pageLengthX = PageRect().height(); pageLengthY = PageRect().width(); @@ -422,8 +424,8 @@ auto VPoster::Cut(int i, int j, const QSize &imageRect, PageOrientation orientat pageLengthY = PageRect().height(); } - const int x = j*pageLengthX - j*static_cast(allowance); - const int y = i*pageLengthY - i*static_cast(allowance); + const int x = j * pageLengthX - j * static_cast(allowance); + const int y = i * pageLengthY - i * static_cast(allowance); SCASSERT(x <= imageRect.width()) SCASSERT(y <= imageRect.height()) @@ -444,7 +446,7 @@ auto VPoster::PageRect() const -> QRect // We convert value yourself to pixels. const QRectF rect = printer->pageRect(QPrinter::Millimeter); - if(printer->fullPage()) + if (printer->fullPage()) { QPageLayout layout = printer->pageLayout(); layout.setUnits(QPageLayout::Millimeter); @@ -468,7 +470,7 @@ void VPoster::Ruler(QVector &data, QGraphicsItem *parent, QRect QPen rulePen(Qt::NoBrush, 1, Qt::SolidLine); rulePen.setColor(Qt::black); - const qreal notchHeight = ToPixel(3); // mm + const qreal notchHeight = ToPixel(3); // mm const qreal shortNotchHeight = ToPixel(1.1); // mm Unit patternUnits = VAbstractValApplication::VApp()->patternUnits(); const qreal step = UnitConvertor(1, patternUnits, Unit::Px); @@ -481,32 +483,30 @@ void VPoster::Ruler(QVector &data, QGraphicsItem *parent, QRect auto *middleRuleLine = new QGraphicsLineItem(parent); middleRuleLine->setPen(rulePen); middleRuleLine->setLine(rec.x() + step * i - step / 2., - rec.y() + rec.height()-static_cast(allowance), - rec.x() + step * i - step / 2., - rec.y() + rec.height()-static_cast(allowance) + shortNotchHeight); + rec.y() + rec.height() - static_cast(allowance), + rec.x() + step * i - step / 2., + rec.y() + rec.height() - static_cast(allowance) + shortNotchHeight); data.append(middleRuleLine); auto *ruleLine = new QGraphicsLineItem(parent); ruleLine->setPen(rulePen); - ruleLine->setLine(rec.x() + step * i, - rec.y() + rec.height()-static_cast(allowance), - rec.x() + step * i, - rec.y() + rec.height()-static_cast(allowance) + notchHeight); + ruleLine->setLine(rec.x() + step * i, rec.y() + rec.height() - static_cast(allowance), + rec.x() + step * i, rec.y() + rec.height() - static_cast(allowance) + notchHeight); data.append(ruleLine); } else { auto *units = new QGraphicsTextItem(parent); - units->setPlainText(patternUnits == Unit::Cm || patternUnits == Unit::Mm ? tr("cm", "unit") : - tr("in", "unit")); + units->setPlainText(patternUnits == Unit::Cm || patternUnits == Unit::Mm ? tr("cm", "unit") + : tr("in", "unit")); QFont fnt = units->font(); fnt.setPointSize(10); qreal unitsWidth = 0; QFontMetrics fm(fnt); unitsWidth = TextWidth(fm, units->toPlainText()); - units->setPos(rec.x() + step*0.5-unitsWidth*0.7, - rec.y() + rec.height()-static_cast(allowance)-shortNotchHeight); + units->setPos(rec.x() + step * 0.5 - unitsWidth * 0.7, + rec.y() + rec.height() - static_cast(allowance) - shortNotchHeight); units->setFont(fnt); data.append(units); } diff --git a/src/libs/vlayout/vtextmanager.h b/src/libs/vlayout/vtextmanager.h index c8c22a647..2c98681f0 100644 --- a/src/libs/vlayout/vtextmanager.h +++ b/src/libs/vlayout/vtextmanager.h @@ -36,7 +36,6 @@ #include #include #include -#include #include #include "../vmisc/def.h" diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index 2c439ecbd..bd68ed367 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -39,7 +39,6 @@ #include #include #include -#include #include #include "debugbreak.h" diff --git a/src/libs/vmisc/qxtcsvmodel.cpp b/src/libs/vmisc/qxtcsvmodel.cpp index 01c3d21e5..9ef111473 100644 --- a/src/libs/vmisc/qxtcsvmodel.cpp +++ b/src/libs/vmisc/qxtcsvmodel.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #include "../vmisc/vtextcodec.h" @@ -58,8 +57,13 @@ class QxtCsvModelPrivate : public QxtPrivate { public: - QxtCsvModelPrivate() : csvData(), header(), maxColumn(0), quoteMode(QxtCsvModel::DefaultQuoteMode) - {} + QxtCsvModelPrivate() + : csvData(), + header(), + maxColumn(0), + quoteMode(QxtCsvModel::DefaultQuoteMode) + { + } QXT_DECLARE_PUBLIC(QxtCsvModel) virtual ~QxtCsvModelPrivate() = default; @@ -78,21 +82,19 @@ QT_WARNING_DISABLE_GCC("-Weffc++") /*! Creates an empty QxtCsvModel with parent \a parent. */ -QxtCsvModel::QxtCsvModel(QObject *parent) : QAbstractTableModel(parent) -{ - QXT_INIT_PRIVATE(QxtCsvModel) -} +QxtCsvModel::QxtCsvModel(QObject *parent) + : QAbstractTableModel(parent){QXT_INIT_PRIVATE(QxtCsvModel)} -/*! - Creates a QxtCsvModel with the parent \a parent and content loaded from \a file. + /*! + Creates a QxtCsvModel with the parent \a parent and content loaded from \a file. - See \a setSource for information on the \a withHeader and \a separator properties, or - if you need control over the quoting method or codec used to parse the file. + See \a setSource for information on the \a withHeader and \a separator properties, or + if you need control over the quoting method or codec used to parse the file. - \sa setSource - */ -QxtCsvModel::QxtCsvModel(QIODevice *file, QObject *parent, bool withHeader, QChar separator, VTextCodec* codec) - : QAbstractTableModel(parent) + \sa setSource + */ + QxtCsvModel::QxtCsvModel(QIODevice * file, QObject * parent, bool withHeader, QChar separator, VTextCodec *codec) + : QAbstractTableModel(parent) { QXT_INIT_PRIVATE(QxtCsvModel) setSource(file, withHeader, separator, codec); @@ -108,8 +110,8 @@ QxtCsvModel::QxtCsvModel(QIODevice *file, QObject *parent, bool withHeader, QCha \sa setSource */ -QxtCsvModel::QxtCsvModel(const QString &filename, QObject *parent, bool withHeader, QChar separator, VTextCodec* codec) - : QAbstractTableModel(parent) +QxtCsvModel::QxtCsvModel(const QString &filename, QObject *parent, bool withHeader, QChar separator, VTextCodec *codec) + : QAbstractTableModel(parent) { QXT_INIT_PRIVATE(QxtCsvModel) QFile src(filename); @@ -157,7 +159,7 @@ auto QxtCsvModel::data(const QModelIndex &index, int role) const -> QVariant { return QVariant(); } - const QStringList& row = qxt_d().csvData[index.row()]; + const QStringList &row = qxt_d().csvData[index.row()]; if (index.column() >= row.length()) { return QVariant(); @@ -172,9 +174,8 @@ auto QxtCsvModel::data(const QModelIndex &index, int role) const -> QVariant */ auto QxtCsvModel::headerData(int section, Qt::Orientation orientation, int role) const -> QVariant { - if (section < qxt_d().header.count() && orientation == Qt::Horizontal && (role == Qt::DisplayRole - || role == Qt::EditRole - || role == Qt::UserRole)) + if (section < qxt_d().header.count() && orientation == Qt::Horizontal && + (role == Qt::DisplayRole || role == Qt::EditRole || role == Qt::UserRole)) { return qxt_d().header[section]; } @@ -187,7 +188,7 @@ auto QxtCsvModel::headerData(int section, Qt::Orientation orientation, int role) Reads in a CSV file from the provided \a file using \a codec. */ -void QxtCsvModel::setSource(const QString &filename, bool withHeader, QChar separator, VTextCodec* codec) +void QxtCsvModel::setSource(const QString &filename, bool withHeader, QChar separator, VTextCodec *codec) { QFile src(filename); setSource(&src, withHeader, separator, codec); @@ -202,9 +203,9 @@ void QxtCsvModel::setSource(const QString &filename, bool withHeader, QChar sepa \sa quoteMode */ -void QxtCsvModel::setSource(QIODevice *file, bool withHeader, QChar separator, VTextCodec* codec) +void QxtCsvModel::setSource(QIODevice *file, bool withHeader, QChar separator, VTextCodec *codec) { - QxtCsvModelPrivate* d_ptr = &qxt_d(); + QxtCsvModelPrivate *d_ptr = &qxt_d(); bool headerSet = !withHeader; if (not file->isOpen()) { @@ -334,7 +335,7 @@ void QxtCsvModel::setSource(QIODevice *file, bool withHeader, QChar separator, V /*! Sets the horizontal headers of the model to the values provided in \a data. */ -void QxtCsvModel::setHeaderData(const QStringList& data) +void QxtCsvModel::setHeaderData(const QStringList &data) { qxt_d().header = data; emit headerDataChanged(Qt::Horizontal, 0, static_cast(data.count())); @@ -385,7 +386,7 @@ auto QxtCsvModel::setData(const QModelIndex &index, const QVariant &data, int ro { return false; } - QStringList& row = qxt_d().csvData[index.row()]; + QStringList &row = qxt_d().csvData[index.row()]; while (row.length() <= index.column()) { row << QString(); @@ -415,17 +416,17 @@ auto QxtCsvModel::insertRows(int row, int count, const QModelIndex &parent) -> b return false; } beginInsertRows(parent, row, row + count); - QxtCsvModelPrivate& d_ptr = qxt_d(); + QxtCsvModelPrivate &d_ptr = qxt_d(); if (row >= rowCount()) { - for(int i = 0; i < count; i++) + for (int i = 0; i < count; i++) { d_ptr.csvData << QStringList(); } } else { - for(int i = 0; i < count; i++) + for (int i = 0; i < count; i++) { d_ptr.csvData.insert(row, QStringList()); } @@ -460,8 +461,8 @@ auto QxtCsvModel::removeRows(int row, int count, const QModelIndex &parent) -> b count = rowCount() - row; } beginRemoveRows(parent, row, row + count); - QxtCsvModelPrivate& d_ptr = qxt_d(); - for (int i = 0;i < count;i++) + QxtCsvModelPrivate &d_ptr = qxt_d(); + for (int i = 0; i < count; i++) { d_ptr.csvData.removeAt(row); } @@ -487,10 +488,10 @@ auto QxtCsvModel::insertColumns(int col, int count, const QModelIndex &parent) - return false; } beginInsertColumns(parent, col, col + count - 1); - QxtCsvModelPrivate& d_ptr = qxt_d(); + QxtCsvModelPrivate &d_ptr = qxt_d(); for (int i = 0; i < rowCount(); i++) { - QStringList& row = d_ptr.csvData[i]; + QStringList &row = d_ptr.csvData[i]; while (col >= row.length()) { row.append(QString()); @@ -500,7 +501,7 @@ auto QxtCsvModel::insertColumns(int col, int count, const QModelIndex &parent) - row.insert(col, QString()); } } - for (int i = 0; i < count ;i++) + for (int i = 0; i < count; i++) { d_ptr.header.insert(col, QString()); } @@ -535,7 +536,7 @@ auto QxtCsvModel::removeColumns(int col, int count, const QModelIndex &parent) - count = columnCount() - col; } beginRemoveColumns(parent, col, col + count); - QxtCsvModelPrivate& d_ptr = qxt_d(); + QxtCsvModelPrivate &d_ptr = qxt_d(); for (int i = 0; i < rowCount(); i++) { for (int j = 0; j < count; j++) @@ -562,7 +563,7 @@ static auto qxt_addCsvQuotes(QxtCsvModel::QuoteMode mode, QString field) -> QStr { addDoubleQuotes = true; } - else if(mode & QxtCsvModel::SingleQuote) + else if (mode & QxtCsvModel::SingleQuote) { addSingleQuotes = true; } @@ -601,14 +602,14 @@ static auto qxt_addCsvQuotes(QxtCsvModel::QuoteMode mode, QString field) -> QStr auto QxtCsvModel::toCSV(QIODevice *dest, QString &error, bool withHeader, QChar separator, VTextCodec *codec) const -> bool { - const QxtCsvModelPrivate& d_ptr = qxt_d(); + const QxtCsvModelPrivate &d_ptr = qxt_d(); int row, col, rows, cols; rows = rowCount(); cols = columnCount(); QString data; if (not dest->isOpen()) { - if ( not dest->open(QIODevice::WriteOnly | QIODevice::Truncate)) + if (not dest->open(QIODevice::WriteOnly | QIODevice::Truncate)) { error = dest->errorString(); return false; @@ -640,7 +641,7 @@ auto QxtCsvModel::toCSV(QIODevice *dest, QString &error, bool withHeader, QChar } for (row = 0; row < rows; ++row) { - const QStringList& rowData = d_ptr.csvData[row]; + const QStringList &rowData = d_ptr.csvData[row]; data = QString(); for (col = 0; col < cols; ++col) { @@ -713,7 +714,7 @@ void QxtCsvModel::setQuoteMode(QuoteMode mode) \sa text */ -void QxtCsvModel::setText(int row, int column, const QString& value) +void QxtCsvModel::setText(int row, int column, const QString &value) { setData(index(row, column), value); } @@ -733,7 +734,7 @@ auto QxtCsvModel::text(int row, int column) const -> QString \sa headerText */ -void QxtCsvModel::setHeaderText(int column, const QString& value) +void QxtCsvModel::setHeaderText(int column, const QString &value) { setHeaderData(column, Qt::Horizontal, value); } diff --git a/src/libs/vmisc/qxtcsvmodel.h b/src/libs/vmisc/qxtcsvmodel.h index da8ffef46..b8526e919 100644 --- a/src/libs/vmisc/qxtcsvmodel.h +++ b/src/libs/vmisc/qxtcsvmodel.h @@ -42,7 +42,6 @@ #include #include #include -#include #include #include "def.h" diff --git a/src/libs/vmisc/share/resources/breezethemes/dark/stylesheet.qss b/src/libs/vmisc/share/resources/breezethemes/dark/stylesheet.qss index aa0589cbf..dc1fa863d 100644 --- a/src/libs/vmisc/share/resources/breezethemes/dark/stylesheet.qss +++ b/src/libs/vmisc/share/resources/breezethemes/dark/stylesheet.qss @@ -52,6 +52,18 @@ QToolTip opacity: 200; } +QListWidget { + background-color: #333333; +} + +QListWidget::item { + color: #ffffff; +} + +QListWidget::item:selected { + background-color: #555555; +} + QWidget { color: #eff0f1; @@ -157,7 +169,7 @@ QCheckBox:disabled QGroupBox { /* Need to make sure the groupbox doesn't compress below the title. */ - min-height: 1.2em; + /*min-height: 1.2em;*/ border: 0.04em solid #76797c; border-radius: 0.09em; /** @@ -1076,6 +1088,11 @@ QAbstractSpinBox:hover border: 0.09em solid #3daee9; } +QAbstractSpinBox:disabled +{ + color: #888888; +} + QAbstractSpinBox:up-button, QAbstractSpinBox:up-button:hover { @@ -1281,6 +1298,11 @@ QLabel border: 0em solid black; } +QLabel:disabled +{ + color: #888888; +} + /* BORDERS */ QTabWidget::pane { @@ -1994,6 +2016,16 @@ QDialog QToolBar QToolButton[hasMenu="false"][popupMode="2"] padding: 0em; } +QToolButton[text]:disabled +{ + color: #8C8C8C; +} + +QToolButton[text]:enabled +{ + color: #eff0f1; +} + QToolButton[autoRaise="false"] { background-color: #31363b; @@ -2008,8 +2040,8 @@ QToolButton[autoRaise="true"] } /* Add selectors for the QDialog if a menu is explicitly requested. */ -QToolButton[hasMenu="true"], -QToolButton[autoRaise="false"][text], +QDialog QToolButton[hasMenu="true"], +QDialog QToolButton[autoRaise="false"][text], QDialog QToolBar QToolButton[hasMenu="true"][popupMode="0"], QDialog QToolBar QToolButton[hasMenu="true"][popupMode="1"], QDialog QToolBar QToolButton[hasMenu="true"][popupMode="2"] diff --git a/src/libs/vmisc/share/resources/icon.qrc b/src/libs/vmisc/share/resources/icon.qrc index 6d9764ced..c7a6d3e20 100644 --- a/src/libs/vmisc/share/resources/icon.qrc +++ b/src/libs/vmisc/share/resources/icon.qrc @@ -9,9 +9,7 @@ icon/32x32/option_draw.png icon/32x32/table.png icon/24x24/putHere.png - icon/24x24/equal.png icon/32x32/history.png - icon/32x32/put_after.png icon/32x32/layout.png icon/16x16/mirror.png icon/config.png @@ -32,23 +30,12 @@ icon/16x16/portrait.png icon/16x16/template.png icon/32x32/pdf.png - icon/24x24/fx.png - icon/16x16/fx.png icon/16x16/roll.png - icon/16x16/progress.gif + icon/16x16/roll@2x.png icon/32x32/export_to_picture_document.png - icon/24x24/fast_forward_left_to_right_arrow.png - icon/24x24/fast_forward_right_to_left_arrow.png - icon/24x24/left_to_right_arrow.png - icon/24x24/right_to_left_arrow.png - icon/32x32/clockwise.png icon/32x32/syncM.png icon/16x16/operations.png icon/16x16/operations@2x.png - icon/16x16/closed_eye.png - icon/16x16/closed_eye@2x.png - icon/16x16/open_eye.png - icon/16x16/open_eye@2x.png icon/16x16/allow_detail.png icon/16x16/allow_detail@2x.png icon/16x16/forbid_detail.png @@ -82,58 +69,144 @@ icon/24x24/close.png icon/24x24/close@2x.png icon/layout.png - icon/32x32/rotate-top-left-hover@2x.png - icon/32x32/rotate-top-left-hover.png - icon/32x32/rotate-top-left@2x.png - icon/32x32/rotate-top-left.png - icon/32x32/rotate-top-right-hover@2x.png - icon/32x32/rotate-top-right-hover.png - icon/32x32/rotate-top-right@2x.png - icon/32x32/rotate-top-right.png - icon/32x32/rotate-bottom-right-hover@2x.png - icon/32x32/rotate-bottom-right-hover.png - icon/32x32/rotate-bottom-right@2x.png - icon/32x32/rotate-bottom-right.png - icon/32x32/rotate-bottom-left-hover@2x.png - icon/32x32/rotate-bottom-left-hover.png - icon/32x32/rotate-bottom-left@2x.png - icon/32x32/rotate-bottom-left.png - icon/32x32/expand2-hover@2x.png - icon/32x32/expand2-hover.png - icon/32x32/expand2@2x.png - icon/32x32/expand2.png - icon/32x32/expand1-hover@2x.png - icon/32x32/expand1-hover.png - icon/32x32/expand1@2x.png - icon/32x32/expand1.png - icon/32x32/double-arrow-vertical-hover@2x.png - icon/32x32/double-arrow-vertical-hover.png - icon/32x32/double-arrow-vertical@2x.png - icon/32x32/double-arrow-vertical.png - icon/32x32/double-arrow-horizontal-hover@2x.png - icon/32x32/double-arrow-horizontal@2x.png - icon/32x32/double-arrow-horizontal-hover.png - icon/32x32/double-arrow-horizontal.png icon/svg/broken_path.svg - icon/16x16/not_hold_image@2x.png - icon/16x16/not_hold_image.png - icon/16x16/hold_image@2x.png - icon/16x16/hold_image.png - icon/32x32/rotate-top-right-disabled@2x.png - icon/32x32/rotate-top-right-disabled.png - icon/32x32/rotate-top-left-disabled@2x.png - icon/32x32/rotate-top-left-disabled.png - icon/32x32/rotate-bottom-right-disabled@2x.png - icon/32x32/rotate-bottom-right-disabled.png - icon/32x32/rotate-bottom-left-disabled@2x.png - icon/32x32/rotate-bottom-left-disabled.png - icon/32x32/expand2-disabled@2x.png - icon/32x32/expand2-disabled.png - icon/32x32/expand1-disabled@2x.png - icon/32x32/expand1-disabled.png - icon/32x32/double-arrow-vertical-disabled@2x.png - icon/32x32/double-arrow-vertical-disabled.png - icon/32x32/double-arrow-horizontal-disabled@2x.png - icon/32x32/double-arrow-horizontal-disabled.png + icon/light/16x16/fx@2x.png + icon/light/16x16/fx.png + icon/light/24x24/fx@2x.png + icon/light/24x24/fx.png + icon/dark/16x16/fx@2x.png + icon/dark/16x16/fx.png + icon/dark/24x24/fx@2x.png + icon/dark/24x24/fx.png + icon/light/24x24/equal@2x.png + icon/light/24x24/equal.png + icon/dark/24x24/equal@2x.png + icon/dark/24x24/equal.png + icon/light/16x16/progress.gif + icon/dark/16x16/progress.gif + icon/light/24x24/go-previous-skip@2x.png + icon/light/24x24/go-previous-skip.png + icon/light/24x24/go-previous@2x.png + icon/light/24x24/go-previous.png + icon/light/24x24/go-next-skip@2x.png + icon/light/24x24/go-next-skip.png + icon/light/24x24/go-next@2x.png + icon/light/24x24/go-next.png + icon/dark/24x24/go-previous-skip@2x.png + icon/dark/24x24/go-previous-skip.png + icon/dark/24x24/go-previous@2x.png + icon/dark/24x24/go-previous.png + icon/dark/24x24/go-next-skip@2x.png + icon/dark/24x24/go-next-skip.png + icon/dark/24x24/go-next@2x.png + icon/dark/24x24/go-next.png + icon/light/16x16/closed_eye@2x.png + icon/light/16x16/closed_eye.png + icon/light/16x16/open_eye@2x.png + icon/light/16x16/open_eye.png + icon/dark/16x16/open_eye@2x.png + icon/dark/16x16/open_eye.png + icon/dark/16x16/closed_eye@2x.png + icon/dark/16x16/closed_eye.png + icon/light/16x16/not_hold_image@2x.png + icon/light/16x16/not_hold_image.png + icon/light/16x16/hold_image@2x.png + icon/light/16x16/hold_image.png + icon/dark/16x16/not_hold_image@2x.png + icon/dark/16x16/not_hold_image.png + icon/dark/16x16/hold_image@2x.png + icon/dark/16x16/hold_image.png + icon/light/32x32/clockwise@2x.png + icon/light/32x32/clockwise.png + icon/dark/32x32/clockwise@2x.png + icon/dark/32x32/clockwise.png + icon/light/32x32/double-arrow-vertical-hover@2x.png + icon/light/32x32/double-arrow-vertical-hover.png + icon/light/32x32/double-arrow-vertical-disabled@2x.png + icon/light/32x32/double-arrow-vertical-disabled.png + icon/light/32x32/double-arrow-vertical@2x.png + icon/light/32x32/double-arrow-vertical.png + icon/light/32x32/double-arrow-horizontal-hover@2x.png + icon/light/32x32/double-arrow-horizontal-hover.png + icon/light/32x32/double-arrow-horizontal-disabled@2x.png + icon/light/32x32/double-arrow-horizontal-disabled.png + icon/light/32x32/double-arrow-horizontal@2x.png + icon/light/32x32/double-arrow-horizontal.png + icon/light/32x32/expand1@2x.png + icon/light/32x32/expand1.png + icon/light/32x32/expand1-disabled@2x.png + icon/light/32x32/expand1-disabled.png + icon/light/32x32/expand1-hover@2x.png + icon/light/32x32/expand1-hover.png + icon/light/32x32/expand2.png + icon/light/32x32/expand2@2x.png + icon/light/32x32/expand2-disabled@2x.png + icon/light/32x32/expand2-disabled.png + icon/light/32x32/expand2-hover@2x.png + icon/light/32x32/expand2-hover.png + icon/light/32x32/rotate-top-right-hover@2x.png + icon/light/32x32/rotate-top-right-hover.png + icon/light/32x32/rotate-top-right-disabled@2x.png + icon/light/32x32/rotate-top-right-disabled.png + icon/light/32x32/rotate-top-right@2x.png + icon/light/32x32/rotate-top-right.png + icon/light/32x32/rotate-top-left-hover@2x.png + icon/light/32x32/rotate-top-left-hover.png + icon/light/32x32/rotate-top-left-disabled@2x.png + icon/light/32x32/rotate-top-left-disabled.png + icon/light/32x32/rotate-top-left@2x.png + icon/light/32x32/rotate-top-left.png + icon/light/32x32/rotate-bottom-right-hover@2x.png + icon/light/32x32/rotate-bottom-right-hover.png + icon/light/32x32/rotate-bottom-right-disabled@2x.png + icon/light/32x32/rotate-bottom-right-disabled.png + icon/light/32x32/rotate-bottom-right@2x.png + icon/light/32x32/rotate-bottom-right.png + icon/light/32x32/rotate-bottom-left-hover@2x.png + icon/light/32x32/rotate-bottom-left-hover.png + icon/light/32x32/rotate-bottom-left-disabled@2x.png + icon/light/32x32/rotate-bottom-left-disabled.png + icon/light/32x32/rotate-bottom-left@2x.png + icon/light/32x32/rotate-bottom-left.png + icon/dark/32x32/double-arrow-vertical-hover@2x.png + icon/dark/32x32/double-arrow-vertical-hover.png + icon/dark/32x32/double-arrow-vertical-disabled@2x.png + icon/dark/32x32/double-arrow-vertical-disabled.png + icon/dark/32x32/double-arrow-vertical@2x.png + icon/dark/32x32/double-arrow-vertical.png + icon/dark/32x32/double-arrow-horizontal-hover@2x.png + icon/dark/32x32/double-arrow-horizontal-hover.png + icon/dark/32x32/double-arrow-horizontal-disabled@2x.png + icon/dark/32x32/double-arrow-horizontal-disabled.png + icon/dark/32x32/double-arrow-horizontal@2x.png + icon/dark/32x32/double-arrow-horizontal.png + icon/dark/32x32/rotate-top-right-hover@2x.png + icon/dark/32x32/rotate-top-right-hover.png + icon/dark/32x32/rotate-top-right-disabled@2x.png + icon/dark/32x32/rotate-top-right-disabled.png + icon/dark/32x32/rotate-top-right@2x.png + icon/dark/32x32/rotate-top-right.png + icon/dark/32x32/rotate-top-left-hover@2x.png + icon/dark/32x32/rotate-top-left-hover.png + icon/dark/32x32/rotate-top-left-disabled@2x.png + icon/dark/32x32/rotate-top-left-disabled.png + icon/dark/32x32/rotate-top-left@2x.png + icon/dark/32x32/rotate-top-left.png + icon/dark/32x32/rotate-bottom-right-hover@2x.png + icon/dark/32x32/rotate-bottom-right-hover.png + icon/dark/32x32/rotate-bottom-right-disabled@2x.png + icon/dark/32x32/rotate-bottom-right-disabled.png + icon/dark/32x32/rotate-bottom-right@2x.png + icon/dark/32x32/rotate-bottom-right.png + icon/dark/32x32/rotate-bottom-left-hover@2x.png + icon/dark/32x32/rotate-bottom-left-hover.png + icon/dark/32x32/rotate-bottom-left-disabled@2x.png + icon/dark/32x32/rotate-bottom-left-disabled.png + icon/dark/32x32/rotate-bottom-left@2x.png + icon/dark/32x32/rotate-bottom-left.png + icon/light/32x32/put_after@2x.png + icon/light/32x32/put_after.png + icon/dark/32x32/put_after@2x.png + icon/dark/32x32/put_after.png diff --git a/src/libs/vmisc/share/resources/icon/16x16/closed_eye.png b/src/libs/vmisc/share/resources/icon/16x16/closed_eye.png deleted file mode 100644 index 918d90e9de98352f395732ef0427a6781fa4f75a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmVIS6jW+)U*l zXmaFZD!(hhfwzhLYX5U&WZTm(ezYlqq?Wv_y6!i2oS9S8fTBAItc&d^DcQ1M4J-PV zNLmIDHc+&OUH4#h_^d_GW^k^GlozqFq`|4fk?SuR03Gjbkm{-W*8l(j07*qoM6N<$ Eg4_~t2mk;8 diff --git a/src/libs/vmisc/share/resources/icon/16x16/closed_eye@2x.png b/src/libs/vmisc/share/resources/icon/16x16/closed_eye@2x.png deleted file mode 100644 index ed3d73c0e725d888629ce6bc2c06420a53ad53fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)kdg0004|Nkle*T++;GpVSu@5B z>1-VyaL0mB5sEj{L5CEk5W|%XkpH zw=0Ps@uMv~2);QO;YTgCjhCx&82U53J@T*mc$pawg2(K$m>Hip0H-Wx!j}w1WgN{= z#s$Zc2f3%s|KLM8`J`?4re*wvQ&QlpIm4A!E;Pgo`qAZ~ zXF4K0?~C9{EH~m&N+u=u9k1-zU`}v80wx7-<*Ghvi%X`xP*n8Xl#A6V8xwrj4LL=@ zNa8$h8%%BZ1E%7c)TyZCWI5RAdScr(!L4{Q9Qx>8ZnFOlIZJBxyDCAWVPB3iD@%zL&HR+_r z>#5=aQ>DV@wq4D+_>Lj=<;6_rdWKSNiBlcdXLttBUUaVEXVS^6wfQ}7^YY~$R9GEe p%Ccak;R7vmyH>_`{m-xeuV&V$7D&pP?Ck;y3Qt!*mvv4FO#rvKq>TUo diff --git a/src/libs/vmisc/share/resources/icon/16x16/hold_image.png b/src/libs/vmisc/share/resources/icon/16x16/hold_image.png deleted file mode 100644 index 5b90c5fb9be234846824ea9c090d111dd6a8d455..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1681 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 YJ0{2gWx*Ws0000007*qoM6N<$g6llBTL1t6 diff --git a/src/libs/vmisc/share/resources/icon/16x16/not_hold_image.png b/src/libs/vmisc/share/resources/icon/16x16/not_hold_image.png deleted file mode 100644 index 3782e02cd153110852aadaa99ad4d97233add8eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1682 zcmV;D25tF?P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+Pzn8vYRjr{I65=2uQO0aU5gtOmEQRcWn$wUeYFc zq{Ra=!bs~~*(9|7`dR4*4w*#AS%^M)KjCo6CCTW-X**KC^5pt;+)R7t#!trsflFa^ zyA64a&+yyjg*^w)w|? zy=^X=$GfHkyTlzevKOfZKr64Wn4wQw4S1mkp$y(pDPHtnchL*bWP9= z$$O8!vVZixkS}@o^$VANaD>jo2W*eY?-XAp)&r5;KFDW|y4@qkdFW zC!6;$7zo;(_SZaGz-j1*-V$1z@>C%CGL>mYE1X!sbtQJZaOTQuw}lHJI$0&O!j~f2 zeNlrXDP1ww8dnLLbkPX?imU|roXUZPd*0OZ6^_WfFop^v7+Z9Z$tj+s(w(aP|!Nf5fjYQyoH#JFSVszXT>;!-Ifqj zSVjO)gxm%&tWaR`tj3YABnUGc#|&B3ZKR)jMzA`{3IqmxBfuEcg&Y3@PNO(M5|s zh8SatIZ0CNftGvYOQK@)vB+d#+qtAR2!<^wKr7bp_+81+PHA2 z1}}xMhv2rISknxOiDM`pngS?jX_`%uos*_q(`-tDMPUMv*0iC8n_`gAtt?jg(C(t# zOS+N8mvob7%2AW<6Uq^!yVvc3YD@dhm9E&f3LB@BV)bE6mPk0UElRw$y56~-S*5ks zH{W?|>09|9SQ>MA8`szLbb3w$2A#ukv2+f{#q~`7tKoka*eZUu;O{g22Dc)`yJFH^o&W#=g=s@W zP)S2WAaHVTW@&6?004NLeUUv#!%!53Pg|u@D;?}0#UVp=vLGtrs8uLJg-|QB>R|HH zKWNgBq_{W=t_25w7OM^}&bm6d3WDGdh@+E}qKlMxUs7lhYcSI&0sPzc5_TR+hO=YZxgkVhJJy$f%=&Dl8;u*GMsuq4T7NKj!#F za>?YXfRSSXHK>prKlmT~o~>D&oN$xENuc+|wm(LI;4aW=*!K6aZMRNYT&7<$qrLvo}5Eq}2Hyr0oG<$=LlAhhPrt$mKu2Ovwc zO5Xqnhrnowve!M{-Pb+0e|y^V`vDBpa(?{*JBI)O00v@9M??Vs0RI60puMM)00009 za7bBm0001Q0001Q0r8^TLjV8(2XskIMF-{q8Vd?7y=a$e0003MNklvgc z@BLnvJoVP;d7t-r&-#SFC%k4f~5p@QftGnq)-9L{hAgPGvGq{~j0UrgK@mSc>n2)+?@ zVlUgvMdEHy4Bk$4GdrjGwl(kOFF)%(TXG1 zFqQbj5W=aFE+0K^QBRAkVzyG!{lza3V{FD4FUt&S{(y>qqJq~hxz8?q$B5gB?Dd2# c>=%FP7qG1ACg_-E3jhEB07*qoM6N<$g10avcK`qY diff --git a/src/libs/vmisc/share/resources/icon/16x16/not_hold_image@2x.png b/src/libs/vmisc/share/resources/icon/16x16/not_hold_image@2x.png deleted file mode 100644 index 8ac0d649f8fb0dbfa32757935fdf6ae3b8aa034d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1981 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 NU@-+OMky%+tpV8YSq=aI diff --git a/src/libs/vmisc/share/resources/icon/16x16/roll.png b/src/libs/vmisc/share/resources/icon/16x16/roll.png index 49c30dff11916a06b3aa06d2404b94c0f255ceae..91c5f3c5604e2ef7203cdb1eef6d84a2956070f1 100644 GIT binary patch delta 276 zcmey!xP)nfWIY=L1B3kM|A|0~v%n*=7)X1AFyox^s-r-LWQl7;NpOBzNqJ&XDnogB zxn5>oc5!lIL8@MUQTpt6Hc~)E8$DedLo9mVp0np;bd+fOn0{=&Zbt#9qT^vfnUj)7 zBu)Gt2^~?~7T|H?Zlv+&S0bCVSJZy}Zue8tv;NMUc&ROpK1n<$O|?BP8{4tG^4k!9 zrp=pMVDEjUXYG$QHH+NW-%h;n{%Rki4#xt{g0n@}^R`O#w|PuRwQMcUXBIqT+#qsl z(~=tNm0~ya&89ZZXRbdOAE3Hpzn#Y~j|(gvmrhA-W?QyEz{%#vgK~-3S4_M)Tpt*= YJPhaD^7TEh9?zopr0PL1-JOBUy delta 224 zcmV<603ZLP0`UQm8Gi%-006c6H|hWY00d`2O+f$whM+O%mR|q>0H{esK~yMH<;<~4 zLID6q;V)erg$7fX8w4ROE#cne8af;F0yet|4Ni_NL4!l{UDPZG5e2&lg0CSI4&rD_ zUMzY8&)I$sKOCuQo0;3#TA9Xv3ZUV^rF%^kMI%>sgaUFR)LAWkSUXkF{~ZLryeliY zajj-y_%{fhse94&=uY;(V4w7X26=Ds0LR8oe(VXLqvb*ZDMg`y*Vqgs-Fh++i99>s azvCP0$U#q`4+?z%0000bup_7x5;@)4ES>=P@m@WOHZoRS3aor)0pO=n_^A}x%mmX@Ii8+hsJ*@=?7(~OL~)=r zXLQWlDjgkjdw1ViE2Ws9ola=p*Ge3OVL01=cvw1Md1>*>o;G#}ws!7&1FcrM-VD&j zbkf#V3#8NOc8L{&_mCh6hR{G)e(%C)O+#yxQh1(+=PASrRxH-aPj~!7T?YI?$0C9; zhMvb5nY`aqMxg-=j7wu`V8A~xE;$Aq1C9a5fMdWh;23ZWI0m|-nNa^rft6v*2Lt8; z@#P$&wt>RWg<>0x<~68?Wd2f)L)AN;S1Ogs$jF|E+6C5uJWvJoh}bK9E*55HZW5XI Z=>uq`l5a1o38DZ1002ovPDHLkV1gDF&Yb`N literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/24x24/close.png b/src/libs/vmisc/share/resources/icon/24x24/close.png index 6847dbcada2de3f319e5b1425593d7c828842c21..71656d540be1d8665da3f3f9a179341630f6ce46 100644 GIT binary patch delta 289 zcmV++0p9+k1m6OXBoYa5NLh0L01m?d01m?e$8V@)kwzzf0PIObK~zYI?bX2v0x=K; z(3!Cm5sOd+!PNpHfi1y{y?C+&VQ~vk1VOL}U93d>MS9`J*&1#Jh;B6`$gPF~ z-&*B6%f0Vd^1bIs!EiA<2?Ea#8oQHPpsFn~NF@-eq7``wSbJ_kNlg` zNneQv9u!1N0&oBqnswMuzx4?@8xTT=T3S;V3~5c&FqJU<-Iq^3NW`+|b~& zBHnL4E4QFN*T2uRqQ3A|VkKJS*%RQC4{o9u%&Ku)t+4D@X|EL2(Y#{IE|v{8FPq@)Gx*^Am+!W7_l&~v#_^5 z**!7MEAEDt}ZVR}ePlp<)@8hOjjcHTr-QgoJsh*~n}mq|AdwC$0-2X&x-2 zL{$iB^B|Cg%0jp>4?aOh~rK!G)a;AKyc>0Hj)sP0i=SN6htKe=~O8JQ5wKiB({Yp1>iEzgB^qsz_t0M zE`TWY8PmK2iC2D)WAjU`?F~+K7CvVl05`IZ9+>7B0dn+?(rWD5{8HPx# delta 727 zcmV;|0x12l1@Q$&iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=1am@3 zR0s$N2z&@+hyVZp32;bRa{vGU`2YX_`2ih<1c8w@D1UBAL_t(og{_vcPg6k{z<=K( zz8d-z3;%&}VJQjo59h+#h5^diA!w)P7D^UadDH~ zg%YHe_R;b=NQuCEz3Y4L+wR@n_xt7E-F+wQM?Igtg)$@H?V)eI;l^`W{Na;8XmQl7 z*Ssg7w|@n;QD(hQYwrMLA3lvTcX*nV((c9$DgA84ho=_=t{=*dK25KDc_#H-b_#eC zI9c?AmuVEEu7nmx-TLO>qNq#;4iKhfJC|J-I2)QIqJ$9+2&_9IWO^kMmC5?%;Gz~s z-6Y`v3K>V0B~!wFBy8aTs0If#62iPFNF#TCUXlApI<4xtDZ);N!fWs1+CABCNF$eh ztS}9n1QuGZJQyiee#e1#W1}#BI<>2>P;LS{Aam)J$_oMg3yYbxDh$8?4*&oF00>D% JPDHLkV1fZfM{)oF diff --git a/src/libs/vmisc/share/resources/icon/24x24/equal.png b/src/libs/vmisc/share/resources/icon/24x24/equal.png deleted file mode 100644 index 44ffe8df5188fc3d6818257e49c00e23fc9c4569..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1mUKs7M+U~W1%@xC#RK`0o-U3d t7N?UFBw8NWcNU~%Nw6-?%)GHom7&c{?gP)^H|{`144$rjF6*2UngAxd8ZQ6< diff --git a/src/libs/vmisc/share/resources/icon/24x24/fast_forward_left_to_right_arrow.png b/src/libs/vmisc/share/resources/icon/24x24/fast_forward_left_to_right_arrow.png deleted file mode 100644 index 1d767796fd75776356f37d187170dc758e932190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfl)cYC&U%Vbf$%(FHXM zXfi}G+%zx)C<{^matx3JBUBp^Rzn>RatzpoU@agAgLDB62O+o#Aoqg>K_U+yoL;>a z7)((mL4LtNnqj6L(^9MbU)%XEe{AGZQc*d1T5tD$jn7}pIC{T-%wzfdcfT5w%k97G zl|H{rVv<<;IOu(b(BHV@dYAud{A}gnsQX-FU|@9is>R0BCi|y~eC_93?8UU+P2-rQ z3()X~o-U3d8lqZ6Otn#sx5US?!davz1Mf1Oa8W>%X!}c(E`3( zP0dr9>#dCDa&@j-(=E1Y_ww!h4*w4%@U2ul|GDP;_jXfvw?-RFv%a>@c;}$*Ym3yE zbM1V&z|Pp3eSycNAP+^${Tp^{*>mX9D=C3V)2=K@bFSRGX=CK`Yi3T9oVYYaPMuqK z>+~D%pA4?2TTG8h9ln&fb<*088uf1!wp_X5Gk4Csx$!Yx1)&T9y^k!q7QdE0^>%J| zwKji$#-e#m&&3(GUf*7BQfzOxf5MM{g%`XOmtNre$B^b`?D92VuM-rMp00i_>zopr E0HMi3TmS$7 diff --git a/src/libs/vmisc/share/resources/icon/24x24/fast_forward_right_to_left_arrow.png b/src/libs/vmisc/share/resources/icon/24x24/fast_forward_right_to_left_arrow.png deleted file mode 100644 index e113a5957976cf4116a68ff2cabcf7e21463de4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfl)cYC&U%Vbs<*g%yqV<85DNw7+w zy+A8qvIsYTL_iuHG9Q2u!X}GN`e!R@r{&l~`{@r?~PpYUWvE+UH-pf(;^|R9YzqehO)b{`V9Q1gp z1XI$>&vAc+GTv+ay{vb<=5rkfPwP*U(;F?Wo;5Ns;OqY?GIhV(dM2;M!4<9TK*Jw; zx;Tbth@L$d?sUjOg!RJg4&@u7rW;*yA~q^)Y~GullwV%)_)WcNTTP?(1DP$X?3(Or z@A#+-tFM2eW95mwGXJ;o9IZ}Vnkvo~ z?LU>njGx{roOmoESx0yq%Yp)-6EAQ6Jo;2Lc-Aa4m&0FsZ$$4X|9+_bxJKV2i&ctW zzx)Ye{qRd{kM@=VJG+TLe*G)_*ze@EQ1%bw^;Bbjji&UCprG`0^>bP0l+XkKza~ME diff --git a/src/libs/vmisc/share/resources/icon/24x24/fx.png b/src/libs/vmisc/share/resources/icon/24x24/fx.png deleted file mode 100644 index 6cc6192cc24531bc737ac6c3b7a92895464897ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|PfpJEFPlzj!OF1wy&4xo}xuPlrHX z7qBi@h~c)@#t_q_B*lOtaFq~7NPwG*g9Q&a7mxw81*j6pFf-9bHd9+uCCJak)793~ z%@*0IK+`xl*n#SSii7=K+1OZtq=%~w#AKkLl7dV~08q+JMOhBwWuSIPJ9D5GZf;Jv zGH-V~ARFi%pkgC^Er>YK7eFqM4Kydf*I8Bu6eCyx&>6*Ti(dfc+Dd}_f*BZ%&;8uM z#-#9W;-wq>E3L&uf4`9s;1X=O!us}MLi7$vZl#;IELloV@xJ;Xbnb_#ki-X$%hEZE z#n*nlD7oc2?{B_8|FlI8MDraz_U4G@J1K`d2JI!02RSQN|B*ZN_Kf7>{PkrYwQucK zzVdU6{yEuaf@kW4ZEhH-pGtYeezi@O=gP6ZU)~`Z@wsNeRAcAq;uxZFJ~`z8qeP}6 zW6Iy-N(YZ{FxeZbSSUQ&|9`RfhtLuuqklhtN+(GvPiXSsFgkP~dO_x;o}T*o&MHrg z(wvU`-*E5W`4!VPO!%lD;iTQxn5Y@?NZI3%LeAG()eS9ELN4$W9y`Em@Y$x!?g!hn z0+wP~{y9eJTda9fB4yKU_@;3fSpRKlzy9eD6|#hPMemAv<@U>ka=YccshuThHmpgF=;$=5}7*bTrQRU1~+vg7ZHD zAMClnwtyvB^8fPJ+yAi{#|6fUo5o+7Jn^IU`A^Y3JiH2b_j-l5T#eLQ^7T*B@AyiO zH#Qf{dDfK9oqBgteZH}WT3K_`^w=2>-|7cMY}~k6C3iPBSGZe-fD`kizx&r6e|7u+ g#v=+*R|LC?87_C{c&%zmJPe9=Pgg&ebxsLQ0HPf#l>h($ diff --git a/src/libs/vmisc/share/resources/icon/24x24/left_to_right_arrow.png b/src/libs/vmisc/share/resources/icon/24x24/left_to_right_arrow.png deleted file mode 100644 index bda96192ee3a18646d70f21358e353c04b0942bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAJq+*(aRt(jnGYQ^9so&)jE5k0 zCWs9Y0W*N&4?tX)8V8Wd2OvR^Vgv$;gSkK{uyzOuR16Y_DTY`9)D9Ad2|^hNd!aUh z4Fp?+suJo>pe+d7fmVZcfvg6b47MWUVUFR4DxfEwOM?7@85oQtN^biwmHeE}RdU^- zsG_Q>re^2oR<6&7wLX6?VEMaI>2b*On7=#KzE-fEG-zyYZf$Sh|FxIruG?I`lKUYn zW>O3`53_;B9rko_4AD5hHR!rflYsz>b(nx^()+#Ld#f2c|NnPXnjaoJ=RM%`>?zdJtqOLVCaSu6m1XEz=GHc@bqknhFidk6KRQWy z%6v0fout4d@u^w8Tv8iEnR@JA^{VN2Exel6^j!T-<(m@LvnhO+w`tbaueTRqy}Lv) zj;B%lae+zM`M({reC8HUy;-x-g<~yG^4V=>x9^sRo21tZSjGyztavoFVqZ-Dom=nw c|JO8_f4pzDHoU$r66hTUPgg&ebxsLQ031L4Pyhe` diff --git a/src/libs/vmisc/share/resources/icon/24x24/star.png b/src/libs/vmisc/share/resources/icon/24x24/star.png index cfe5694276e745c831b662aa915caadcabbe91fc..c4fde3efaa413564f6d9588369b730fe31e98dca 100644 GIT binary patch delta 538 zcmV+#0_FXa1=j?SBoYa5NLh0L01m?d01m?e$8V@)kwzzf0pv+UK~zYIwU#|-R6!8O zf3ue(c&J4XiAgYb7I%uGi3WlO;Seos4s0y!Ei44FPze^6f{lfsU?J9tg^eEwLO?B) zGy(ODCq&H=FkoTj$J-ejF_+7}WZ%IJZ1es*^PBnad%P7hqnqKnT0JvhZrdbteGjvw zNVG+7w)c~N*H0h?j4GqcGcjrL6F4SOS3m_!uEeIrO)xvS6HDfS-W8yZad3Hd$z6&`-FSjmLnAo<8pyXP9`Sn^|MoEs@M1@m9Al^}B342uVw8YQ>*W6g z>R@${x4?TG@5nDTIAnj?0E0_F|N7%ZhOodyvjnYwXOPG#)csiHbEhle_F9VoW`+)9 z@)X$8VebZZk?P{jFaY3r@d(%xu&fXdoaNY;d#w+{Z_%^i353VQPx2e&496E9vMrozm#H;wQEQxoo_&~1;l=*#+00aVAXF-B zkx2ogiOF>edY6;)zgFqB`Ul`N)0Lx$-2lePF#t5z)-nq$#IE7OT43*VWq+C;|I6$! cx_+zp3s(FJzS~d)C;$Ke07*qoM6N<$f@}H%3;+NC delta 599 zcmV-d0;v7h1d|1jBq9WJLP=Bz2nYy#2xN!=000SaNLh0L004ym004yn;_Uyykv1oP z0uV_=K~zYIwUfJR6j2z(f8WfqJ0yY+h$JFfNx)d7QGDdFYokRh1hEkVmWC8+@();9 zq!esY7_k(r6tU3Fn%D_8Dp+VE#7GDVW@Tr0Gsj}rFwD$mXEYudn0xL$=X~FNKn7^B za6wCji7XmRZT`v|M=G~eR)q!4khso&^;I^p%$Bx)& z?Q=J6x(;%h4w<)ffv%^KcI`lK=%MO;0qu)S{h;O_v~yIq(|7NnTDY2E4zLH$yV6ab z*nyVVOOWperw{2K#!#YKyvJ+`f;F7_s*UnJ7NEuaMa-^&^@9e0KA_O8vJUWnfi-L^ z8O_1C6E#l^XhA132S~@0=nesYb~)Tbo z(f*R*Hcm#Vc!2CoqF6k^b%t==K}-)xdYD0cn{o+Ory}DI$fm7WD~GsARlEhzUEt^z zYs3N)4%xi+&re{MUVk`Z-dZ(Ydr7Z949vFIhP9#02((-nWRvr_?jsv2`Lz-+APz0} l9H6;*i5$;u#Qzwc`wb>op(gGM+UNiP002ovPDHLkV1n=w5TgJ9 diff --git a/src/libs/vmisc/share/resources/icon/24x24/star@2x.png b/src/libs/vmisc/share/resources/icon/24x24/star@2x.png index 608044078206fe7aa72ece992ccb3c1477a0426d..7072d50211ddc6cd2fd8bca0f2977f8fde2a479a 100644 GIT binary patch delta 1141 zcmV-*1d98+28#(ciBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hX4Qo32;bR za{vGxhX4Q_hXIe}@nw-lCw~MONklf-19w^OIp_Y*=bd|JL{<4elUZp4Du1O_2UeOwbU+Lv z4afPZ;S8zz9igFw*2F(HJcGzb^C*1F_Nxzu0TWIJPKblZQ4~ndE@JiYmw&41oY=e1N&kill)k3U~PrMWQjx&MNRz7iy4a2Yt$Tua1F15JzO z3zwfGpkRZ^KyuTqtTPiR8*_8ZFZ(xhawm_> z%vK6rSq734VYsP<8s`|EY%CG^g<~BN4p(YC_{qSRE%ij_Vt;rVLx~|80}}&n0=5FR zi{z~mYGzO!MVLTHAu@`W9bxyC-^+L4tJ|N%$YGRLpaod#+n&I7WW5ZM0v!WM;prGz zGs>RntND^e9B7&a8tpMl35fNQMG)TQ;prC_P8RlnC&MM`x6DDMLr|X0H@DCM;~qj8 zwp!fFp9>=Z0)L)4mTzwHCLY{!3pLKCAYFybJgUw+0Y&5pT~o*N8B6a%-!#OlJVCOvyYw&!+)g&{hx)BTQ`vLhJXhuG_Dl= zhMFhX`|A&WgzXM<11hJbG!|uZI0;^z-IB$T*j5P4ht)AkxKS z=_wnfh&9Zdv)Nk57s(Wl+Zhk#IH2qdY46`wj*|U-K-m$%xu)3I#AnU7RlxzXGrY4- zq&;K@M1N4Whm-;E?90fm2R@0l0d=+@{z*c1KsBrezPUbk*{ax;kZ10*sOf)DKERWU zzIDpTfNc}+@=?n!@IJ~sNlprsyn&1)E5MyXj6!)TlX>9k*y{5$Y*Y=1LZ=SmTdi%LJ}TO`hvK4P3|YbI;n zK(v=!1uW<*Wj~4W0e?o>lu$Mr&#PG%Pu|058;S8gU&aGGm7XFo-iPOOqUMXj3%^|- z_^-E2G=*``Gym$mAIZGU!HM!;&>sBdJD`V??fX!92e@aRA=hn|vFm|kcZAtl!_z;z zHZ~w7>4Z4QwggHYsk0w)R6W0{;eDm760LsdUTIo&V5R9l7RJIk00000NkvXX Hu0mjf_mU9Q delta 802 zcmV+-1Ks?K3A+YHiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=1am@3 zR0s$N2z&@+hyVZp32;bRa{vGUvH$=8vH@$9XyB1HCw~ICNklf+Slx(*tJ^%^d=T^q^r$qh zFI1QLAb%;^GtYn}<*8TraGCm;PO4R32Nndoe=-MHOe)w_k5qjCreihD)ewod!0rTV zaT<+WD_gH@aWsiu@(xJHBh5?6qlx8`6x&_q<1=r7*)b(kd<_<9+r+0@HIsF~2S=)y z1I!{F9!?@za|g;t?K1YtY4R=n>(YC~$n`wpCzVD#2R zEAn`IiF0F^eZcGk&W(ZpNHO#N=Pi=ugWaIBh^0VKlR@KA#CUMz-!CmWuSupc~8RhDl)gzPfVG(*PU5J!~_FI6UDZ$isw zwj-_q^BOdtMC?^IydIT|eGAkZ-UMB2&>YZ(IP6lK~fkS8wX&M z4U$R>Kzmacjqg9eTw0sfB?rLu%z$|*6o0Q(1;94X7(f-Rbo?Uy3BW*C%ENtB`?!&k zb--@TX$Ly1SUYE&otp5dMa$MPBKi*|AM#|G3bN3_bkdg00004XF*Lt00D-e zG3b_G0003sNkl+c&`=_zgjivTV5rDQP{hP2 z5;7_b!t(Fn0F6Odjs9IB7&O8C+%?6W;2TLnJzj^RC1)|&;)0wOHO$_!#ujVZeiZ>V zIdhOxceT(I7RC1)DbTm_&4hI0a+*sUg5ZL4T)5`fyq2h{JW29$gIO zL=dp+ia*EFA`S#>`Rd!dy{SeV*|HnnDO+2Q_~ytb8#cVpKP&*xyq>?8d8f@1zmKaE cy61fYKf3r~PPM7+fB*mh07*qoM6N<$f@qYaVgLXD diff --git a/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-disabled.png b/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-disabled.png deleted file mode 100644 index c960cf06ffd5a92453538a88901c7361be68fbd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2930 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±TJ5#8uvQBT4-iE>8^yu{Vqpv- zNmd~mBpy2!T8RgXM^fwu4<7Hm8HSmE<^dWS8X9Sa|LW4yXRpr6=C(?k3vhXOyQ{{r z+h+~v1%9T&E3IDaC!(q&bM+Scb41+}0IKwg>uT-aY{-zG_3ZK$jehoyy+3FUf{X2n zD@RLm3n>Hu$aiF?OojTGng9}4Dd{GBuLl6eF;upjS0#76Z7m4p%amJd1Q`G^4kS7a z1mH(YbQ*|puX}5aAba}k)gNY{zNaW~yd0lM%8$I!tV7pW851me#6n5OPedk_8pC(7 z2h0whP*Q$?(X3NyJ1ryI(~)i& zv&|cT0p+dc9loKkf!XRz(a1qUVjR%eUxKCq2V*?@la`}r!un*GHm1%&3Sg@5i10R=!raj5ha$|JHq3}Yl#Wr1?>-}^CokmcE%vLmb^ELVrzbD;KIIx3 c8X6hL3wYS|X>jFXhyVZp07*qoM6N<$f@kJ~<^TWy diff --git a/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-disabled@2x.png b/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-disabled@2x.png deleted file mode 100644 index 3195fbcf0c0ecf7663dd8c0d739f79a518fca7d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5115 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 Utng|4l>h($07*qoM6N<$g0E5?ga7~l diff --git a/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-hover@2x.png b/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal-hover@2x.png deleted file mode 100644 index c19c800318aec902bf8fc0ffed25f9568747a264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1054 zcmV+(1mXLMP)0Rrln`~*TEX`FQyOIEj_N=_Rlt2_gs~0xhD4g5K1~u%7y$F9IJlBP5-pvSeCIi`v$7J3W+f z_o1@fSML9V^K$<8-v2p=bI#k$kJ?uFHw2_<(*>oUV75Cir1~xRWQBV(WJ&>)5cWwXxu!y=H8l%!3+6YME0002V z%w@e6QC}VH^QdSpHrx2N*Y`dh^tt^J?=#o(mnfj7qisYq2oR>X-FYNZOsFsbHj%m`_rhKXvqo5uZ4&`ZM()rQ`os}~vJ<0A=w1qP$J*5pg>w-FOw()Hm;MJY+uo!1h{#;X`se5*Hq)S>K zGyt=$@{EFp@<0$9F!N!%MAOP?KXXg@Xp<3m5fVn#vjSW(1To?jjwr!1mw$KZX} zE!W%dDPL5z9IU7EQ+CSF$LIFL-DW%Vca4R`ID^t_D(7}nY8~sF{NT-y1~XV1b~fch zaSfla#>P`$rxWg-wZoJ*5LB<$vpzaWZAuw3^B%s(Gci@`nVe>3Dg)C5-aK%@#E2JG z3Yj3w_&>+V=k~*$lSA;h?L7phNl=V4D7|YcG}X8WN(1TmGZ?hII|sgZZ{C~J?s2|t11rxWnyy$AA2Q}>ndx&6@9GzgDdBTo6B#WlRG=jP~nX?@y%3eRcQ%@9kI z%4So_Y=$bEO@xWC8Ir4HWMdtFEvin3O6%?LjKzE)f=6P}O7@}XpB!Pi|MgJxpCt2G zJkkIp^jKUfZT}dN5=4DjVU@PiBIcGSDyK!vEibInb_$}tEKxZTLI@#*5JCtcgwSH~ Y3tuLt{A3vF6951J07*qoM6N<$f~CjtJ^%m! diff --git a/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal.png b/src/libs/vmisc/share/resources/icon/32x32/double-arrow-horizontal.png deleted file mode 100644 index 579f38c221c9f92f5312b761af66d84a389e7c39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3a z8xUr!)F|8wWJs2{MwA5SrERJ7UC#W5tJ z_3hQOoQE6)+8(M$xl~@7Sox8Tp_MoqQE zT5jIlfGeFrPvquq7u+f3y~_Pw+MdWs37y&ON9PA7Xh+n%*zh6yjeFunaaHCG4?Ody yZ}574zM!Cah1b4nJ zFx~)R#$PeZihzQWC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC8zBdAc}; zRLpsM)6wg&gUGRu^;er#Oy>w$^dL88C9B|_9iMd8-4Q>yc*j*SmZQ7M7j}r22Z{R? zwD6ofV&Q9apZ}g#>OJon<}ZC5T%h35rkKMLoCPd4%=)H1;m6bpIBXc#Hx@m!Vn{n6 zGlT8S?~I~zKD-ClGNmu$u>QqZ^u72~U&B_0os1rhujeR<{bYD{KzGAq>lMl&C6vDKfqZKSRQnJN`6*P!`EGTb=(r>50=#==Vbk#tZ2WwM*156V!IE7q iUC3a02NaYX5`VX)zoX)~(sp1JF?hQAxvX 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-disabled@2x.png b/src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-disabled@2x.png deleted file mode 100644 index fc75c19e2432b7447542e0cbbfbca0f883e598c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5605 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-hover.png b/src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-hover.png deleted file mode 100644 index 903e8179c5d4a1b0c94ce6c49c9091cac1e23645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 758 zcmVj#3cSNn8bhuQ#E4hP$G89R@x#6 zc5)CEGIUTfxVTAib?hn*MX*p%DHg{PHH(TUmY6@Ln3@nZo(@KrK)neyQ$Bcb;r;l| z$K{^)?g5IFBj6A%UHUWYbA8wmaEQhF6s?X|@(%z6fO6~7sc+Qc2LmzT?g0b!javLA zDefM#c1p6C1wfwhCi09o5de~8G3y?)c0OtG!2l}EPF)-Twe=flCOAMd!2xRPHxK|a zJ9Y8F04fUc6bgZ(+sfK$Fj*(bB7E~5U>XLdVerj&K$1nA29tHsZDp+xPYo~VdT;vp zb0zwLG2qRj1NG0Ohj(JN21c8N;Fk!Z2k92qJJZ##;Gge2zFa%t9X_<#&hj}(Wdj&C}I`>lvXX&b}5fh+a)NiS^z+e zB4&*?osY+xE5O#$$&PJUnPvh*{3wNFB>!5FjARf$N`VOswqa#@Yw2W%$GadohLvx) zyMoiydN0lHd1!XeLsRR$B*`KHpd7=kg1SKMi4B>Zy7SBU6_))WP?kVh!m>Yv%lH+{ zPTjfM6B{bTvtZo~CY3kH8%!#1o_sL5SNB`fBoo-fXvPFa-EU2kB`JO{$7^*Jx#2Xo oF0ld-EM5ADrAvQ?K=EJHzb*dg+`b{dZ~y=R07*qoM6N<$f;t&k?f?J) diff --git a/src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-hover@2x.png b/src/libs/vmisc/share/resources/icon/32x32/double-arrow-vertical-hover@2x.png deleted file mode 100644 index 17755c2c36784b19febfff06d099ccb57f38b5c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1504 zcmV<61t0o}P)UCg)<3ywvNT!azfhHGZO3dPik7xh!E|k; z>}8vfRfHl8*~13Imz6zq;M|I9CpbFBpbyGmqZ6v4>w`s#v#!&mS&L3xs%A-})%-Kb z-Gll6XVvyx&nEdmUVb_EcfaSG^EgcUS5Yw2NpD~`8l*w z+a%x)hb8ze0HF7l>k0H?c;42W@`y4$d{T5<6AAAMg+q+a=RA_kuZoGL8Wsj&AXwH4!w!ZDA-2gV_5Kikg-td0O4$^2%1upTv`X+Kdxt~xWWEtScK zbg2N0!`4vDY4`GYB%`x0xV~gdBWoj|TqnIYJ7&*|j2&srfzq>*q}P<5mB5k4=ns5$ z%$`@SlU`#-B}*eftyjD`^~3UKzDBpsBM6c*3wWkHg0?4q9&3 zw8*kh>qR~SI0E9qli%a(KCd#q?vt^PCSgBKf@vf?AGlV%JdS{9LOmZKHK1H4{mO9r z?=!J+(=Rr#Ja$0wne9E`^?zW1v2PZE@kht)3$Dy^om8@9SigltFd!@ejb2ebJz!}~ z^q$|#0OQ+!F2=WYO(LcTEUg;7qWXnICIFcM&sN;+k#)}&9*2+f%;J6@RX$_}P_(c+ zT_)Ike#@65T_)JvpDpZ0m5+xi(fEz|K>#3Ynw3HTfYo)^mC3%PHWazbo1|B{V(y0k z024iC$KBp}6lnnfp#ecgZ_K#>0FE`i;zgB{103%}kJ*7LUnH#l7WhAqG61&#+@uV^ zEdVzu18@t#P09e=0&tTu0Ji|#qzu3<05>TEa0|dq$^hH~aFa3sw*cIv48Sb_Hz@;f z3&0KXb%En8G712|Z}TI|%>cs-=0&|efJ|gX^Q)(gx0i2C^qBdmas~;kFtq_}EsYh| zOX~0T&JUx=jjRM5R@bFfvm1HmV_7x3`Rf+fB~= z%7@H=vEGF{CH2|Y6W)Z!0nQG#VsMD9YZ6gXpM8C-cj3+piA;1aREdJ9YQ^_WBet^0 z*c%_^L&e(%ca&$cZwY?tFvaGcGL6`dzP!pX$iD_V5_yca@VA!5ltC>)5FKT_>>Fc}E8(*xVqEg}f6P)3D7WGl8~y3$V!IBOzrt+)m5vz@)6){dn_KsiCYL}5UU zk&k5Yx5X_#9ZKO3#&U4igUY(Qc&`W5b$5~U3?#nAq1$jSbVu~X+$1l$9hVW2AVd8C O0000J%=P)Tp2nVu} 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/expand1-disabled@2x.png b/src/libs/vmisc/share/resources/icon/32x32/expand1-disabled@2x.png deleted file mode 100644 index fdf3a1babc831b1ae468d1ab8a1bdf33620f30ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7292 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/expand1.png b/src/libs/vmisc/share/resources/icon/32x32/expand1.png deleted file mode 100644 index 3af13762975cc7177c9644880f36cfe641354a0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1680 zcmV;B25 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=HGlH@21MgLhvFTs)!63f9nB4!7({Jvl^E3>Nl z6;mG_F=-+V7Fd$+k#UCp?>{4a!$CQ5h-#j4N(YXZW9EW^AJ>uBnU1*5>)<_w>nD4- zPcTe^Uam_kdwqdj-)^|Yp!3-te9y3NM|X={YRrxT=~i@zj(2rT!E_<6$O&DBSd$7nuAzn-qd z1Vz)Xs3kVt++ZQ}kFst{XojC+Y^!B7Kgv;oydCv8(JEzPP#J+DH7Ycyuf9@6ijg~m z2{TugWpgmfTowL)Gz>l$fHa`TK;077GP(HYD*Sp!8%2M zy+RbMZ3mDDu@%Xn>?0kCL@Ci>%tizq9e@flXNi1*0I70Ak{m^_9~nE(*to}Nt!3rJ z(~P|dAXJhV*kmby6{DhlEIMkasAyExq^2G;Ye|w~(v*^=xycn1i>8*$%q?4S@#yNw z&E2z?%vrDpYEId*=bTI7P!OoVSHb!M%gLvl@zgV&cKVsmQc*rNR;{U8^_pvG+@xWf zXsKEAmRso*I(CX4yY|$rd(XWL)Y^~{hmJIC_{gK&scots+8!3TkH*&wlEvWw% zH~tm5FwuPlxd3z@xqU*d&F@@Y#ICn+YI+FXKFoJ7fxXO+TKTX2%hAix|J_ke`11XD zK`398(%YciDr?@8zc7^3R+hO=YX}J}VhJJy$f%-(GAzVs*GMsuqVu?if6(!Zxx8^xcAAmH?DtQAO90DT+ z%3k+)cUSw|{_Sbb?*~-}a+`&U$ov2R00v@9M??Vs0RI60puMM)00009a7bBm0002& z0002&0eL8Ky#N3J2XskIMF-{q5eY91x^Ofq0004lNklEhzx(xsD=5y44J1_x6Ik#?zrh;_L_2-Wu9yOM(= z3E|!M-Fx5nxHHUutN<}kw=*t06XOXaDuIjvVqoc?xPcGwGhif~N#KFNf+9BcL7)ZP zND257S_pInC1?ho2&`G*Rg!@^@G2BxxHn~I%}fI9%G2KIqlU{zy5DS=(! z3RqTVFa@YN2JP6LFM1Gf<{GdLJWQ&mF;nZEPv{d3SGD(mZ-Lly8y^B4i3K%Q%S#O^ z1lqvqB%pKqGn@hZX9n<|OLvS4fgMZY&z&1%rh$I~+b%V3loseJ(mn)^Tov9_bhKhQ z2Eefk@VF7h3O^g*3wQ)hfNRMj7m5swfHz=6)0Gk>_?EUU_C5Jrd~UC7=Ku#)f(Jqe zJOMAh2uNypXzdpIAaSX1K)b38jK@$*z*q}TyFh042$ccPh3^k7ff{fR?3F;$!u$I? a@9w{ZhC@;g6W)^m0000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KJlI$i7h2L34mVhLL#Bwk{RoOw7p98jgx@RWI zy>;(Xs!bWNz(Sl)rf0(V>(3efz(plwwAa>Z{0ecAs;cyQ?Wf z(R^jp7MpH2n0P>P*{@|3!>#DsE(OJ7jSa|qZ1F&8RER-k21?Ya(xkE5Mhzh*9t*`!Dp2g$}Gh``K`SZJ?X_IiyRD|fDx51w&Va~QB zqUaB;5Erk!Mi`6Ssxb>dXkOfO3w)Oge|*Xxq$&vNmf5kv8jsV(q4bekvN;RpDcbWB zqG0`U0Ew`+A{eB7qL@jPGDTxHBIxJOqUvEIDP(Ia^+bTs5&|YT3-(id7d+uAbf8 zy?8BL1ZSX@T&#F0rB)6V3sv~4m|tNz_>dzVdgQ|nKgv-X(x;`SEjMf4N~@i_bQ}{s zckA9uuYmWn=;eXnWs&kW!49^i|Uv16V&LU#+%fdXAf$y2D94* zt>Z)&GZ5oMAa08Q5}FsY=#&yKa*J6kjE_PYLF!@?IxS*Am=U2Eije@TaEX>4Tx0C=2zkv&MmP!xqv zTcs)$k#-Pq$WWcEh>AFB6^c+H)C#RSn7s54nlvOSE{=k0!NH%!s)LKOt`4q(Aov5~ z=;Wm6A|>9J6k5c1;qgAsyXWxUeSp7SW~$jS4yc-Cq!Mu`u_ypovrW+RV2J!T!rE}gVjecQmrbxV`?fXf|V;7OMZ z$&muI{P{faen#Jv1;V#L&zd{8<~dFufHci2c>^3A0wV>=UiWx+SNq)l?P<>M2UQ1h zn}v$V`~Uy|24YJ`L;(K){{a7>y{D4^000SaNLh0L00Gzl00Gzm`dp@R00007bV*G` z2j&402`~kD@v?>h00O^BL_t(|+U1+QixXiGho46%o(#?L~c%w%`qB~>!} z{N9gwXJ+G3Y^wrwH}P=Nnl=9!Oyr82|EKr49=UkUyWaK4O5kO$mTocUzTX~Ew#03QQKrQv4uMVJtP{eNJr|hy)l^Z%oV^iR{-IS7BtxJ%5q2qrKvN>jqH_Zb zN9a3e*h?WxZt411J(cl N002ovPDHLkV1jWss4oBj diff --git a/src/libs/vmisc/share/resources/icon/32x32/expand2-disabled.png b/src/libs/vmisc/share/resources/icon/32x32/expand2-disabled.png deleted file mode 100644 index 2f44074d25be0485abcdf6f8065e904d7971e5bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3743 zcmV;Q4q)+#P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3yqcH}q?g#Ysta|Ce#m*arjdvk+1{(N96v%OZA ztJ|`ZGNt4a5eR^8{qMiq{fD1WVsc4J%`NAPpVU$d%1yl9)Aigd zfV|t@v%Rjj0KEhGdFMW&|GN7Ce$cx=e!w!{7;*FE11}%?<7=AmcH;P2QF#BLlov6d zK;C=Sz1L%RnlgyyTTusW{~U%FJCMiowaiuc6Yk5o8dtsa8c;s3adocYn-8$Eolkyx z_1mx04nJ683M&-a5Jrfnuf`Hu7>BWBm)`_NixbvD9AUW_=?<^8_%m-i^9^5_d3s(A zp27T~|C`JG>fui=xA!oJ{8e9Av94gcW*NqueexEB_=A{A=@p4S zp0BDdRJEk0MWQwtQpgiQr=afz)X@v8oR?|?Xc>mQ@_L~6IyX3{weETIPus^p#?67x z$GFtnZBJ~dY6jaN08e}-(rW0d4BcQ_b&Wx^;^VSYcXLd(lvnDjmciTGURy16fawx< zZ@`3UMcFz_^E(znWPEo@*4$&-3vgZB;FY_VmC6_>c$QvfsZENK#YZY|w;FFuNs2D! zPQEAclrcgjVKOeII#&v=X?*ElRa5HI7`S5Il4CxhApVw9dQ<&KY)z3#u%3 zE|G;jtZgCrXzyoW_DhLF}AUOOutxU^1Gjb~(nr?)xy zO}D9iM&A7{Dl!H4BstJxCV@n`E9TV43i3W`)9O+X2<4jBvhhvJ4~SpeiHDm zUY{uZ+_>F$570!;+9s|gY9!JT=R3A`?IW;cwlku_3}<^bK_*^F#p z2ZNk8(T~`-j?2XE z>5-8UejR%JkJ+g2Td`wSjvkPDx6IulQ4nu83P9h!77?>K)CI{EL~Q**?0u|NSrVMBHN1yaqi;yMpu=D zVV`c?m@=suX51{)R}e2126P}>{2C{!cYf?7&3n7<&r=8`4blh`#8|mA-?BP@WMw&V z;M~6hRQm|j+hUYVNU$6i#`%a6?C9FrO8G~OY5P~BADXf9G>8EXnN%LEGjxp2Tg`)f zF*IEFncd=OXIG7VJ(k>CI!WqX#blw}Ge=WL>SU0Ci=b!@gY{8pW|jJ**mb{pK^lI& zOXrj^NL8I^vPF(zM*|9KPB<-_2&fiaub-gRsiztT2#Y!*;NDXm28I zs6{4S{;mMkPmUqk&OOu(W~BX@sa(x}8f)*{Uj{AFZilPOV)M&_c5||9q@w==(&s(% z5zFa90004nX+uL$Nkc;*aB^>EX>4Tx0C=2zl08VnP!xqvQ>7vm1v^M_$WWauh>AFB z6^c+H)C#RSn7s54nlvOSE{=k0!NH%!s)LKOt`4q(Aov5~=;Wm6A|>9J6k5c1;gOH? z?m4`7UjU&|VVc!74rsbAQI0q!?cMvh^IGggY!Odgq38K_?&pmqyrK^a$WKGjdRgufoDd{OnRO;LM#?L zSm|I^GBx5U;+U%GlrLmGRyl8R)+#mDIw!wjIIpiPbDh>Ol32tNB#2N@Lm3s=h|^am z#X_3)6F&Z^>zBx-kgE(vjs;YqL3aJ%Z}5AzR$+3&OA04|?ia`T7y&}NK(p>R-^Y&A zJOP5wz?I(iR~x|0C+YRJ7CQp^w}Ff6wx;X>mpj1FlOdb3D+Or@g#z$?M$eQ325;$i zSo7xA+Q;bwkfB+nZh(VBV6;ft>pu7H>73iYJ+1lu0Q2K=bfy{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2j&495C<7K0Z{`000e7E zL_t(o!?l-NY*bYghQGDXnOkStGHq>v0u59eGXjxIQn|Dm6Ok9x#6(TBBt8gU2*gVW z8f?s%2+xF2C5FfYiDFDJ1biVt1_c@sFlq~>RSGm|0~I>cI-See+lQW-YH()Cj4PR( zlQnx~e|w#^{=K&VCxGR^4d8d+H~04|&4FSKu9bQ3#@=(G}r+lJz~%)lW;+L zU9f)OXP_GxE(O39<)vwR=Nhp*0wOqRO=>jDXKm-x*|hN}8$=12q$YJoqtk!K?*-m0 z2EYdTfF@-LqGZD9Q`kN)TaT^s8UscfjDhr6mfkbN9NyMri~~Sfu^F&|YZx%bxC!}J ziUh=(@cYYcj_vHtx|7F>T|IyTdX0u#ePekC?_Bv^Dl?)j;0NFt;LlP3Ts97T{oXI5 z`3CC@7!5!J&{T>pP;Lz{KC1os2Jg7g;@fawv4}@%fp39Tr2x1BBy`qTnEU|^%feWG zZiz(|@C~q}SO9?QVo}Ka0KDJXQX8mKX`lu;3A|V=K)(o}O~HZh9$(`N)TtCu1snw4 z24>tZK(}QJS{s~<=F=C>r8=HJH~_$2j(;f`r<>G zS@CPxGJqM4p5&GzD|3oXG!hE}yAfW&kOd9_TML!xNq|Rzvs3)1frY?KZ?$B%$67r1 z(5R^pVPF@+Mhphn??Q|f`U$R1@f`)80-gYdG9%c#T2AL&O?y}C9bh|#11JP&1J+I_ z0{|UB0N4biT;C$#q}Wp9tCHllQ)}{ljYa0;ji&bE^8 z9ABLe!e24Z>WN=><^Z>WS6#iB+`RU>aGMJS0Ehr*#3Pj=CcfiRYh}KGz0aK;y4{_r zb&K(J;4-iqc-$Q_3mBAXbj)&~LwRIHaJEV&`kl)5uGVa>fPF7@_77f6&2u5H152m; z{WNeyO#|RZ;5D5wgNYkX8PFDu#6r0OHXdwlSnycrDo_n9ozZ9~eAQ~QGn%G$L7{d5 zcneJ$VLz}l8j0oH#9r=L)>OB|7q4#)jNk3chPNDT4tc`@u;6|G0KNp?z>pMSbD&P$ zj7DOBlcrRNG92QGzjAK3mK5p-79nTjOjl`s) z!P4=5XAqdDiU9Z?SZf?}7vY0oy)_Vx#0puEcCeRgnHG zTQuMW>WT#b=mgdQ!-*SCc+azEZ|0R>MaF%dUkU&wZ&jXhAzbed=Q~=8BH_L-v`a8~ z2>8lVAuHPUEs^>~6?tnQHL52Ctg#dTdw>@0KzwMN+6P0}J~eTl5CMT`B<6KH&Hy@_ zWY9gh%$E`XeB$n)SV18WRybLM2zbjBmMxAk^#0M4IRuO-zpU5e<|kkaa7jv31J%Go zz+&JLpwYcM%m#vD37CnK3i=;$@lpZgvL{`bneKBgQ13p^{{`qMcUNkrsZ;;}002ov JPDHLkV1j7Z_Q(JL diff --git a/src/libs/vmisc/share/resources/icon/32x32/expand2-disabled@2x.png b/src/libs/vmisc/share/resources/icon/32x32/expand2-disabled@2x.png deleted file mode 100644 index 8ea6152e14ac489e96189254e7b5d01eb1aa9bf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7417 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/expand2-hover.png b/src/libs/vmisc/share/resources/icon/32x32/expand2-hover.png deleted file mode 100644 index 632180b8b96079e8bc1ea3c5065cba23c53d172b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1495 zcmV;|1t|K7P)IiUAkm?#H+0CoWJc>$Oh$k6ijEdxl|?>&HN&(!qCs_4-R1waF^Xs*f~ zfG&XOaH59ni6qv^1)$pyYV+QzHP7x}d9$cWt;DiI{d@q701+dV@gqsv?^9TAkoKxz z#f4Jc6kN3Jm71$sp_ms4#a_F#JQWE=SZ3E;GR-wJfM?y#P~D~%7G3}tWaykCG&q%XZ| zxF>S;@)rZu9Ven?y%(bkrzR6O>K|R;xFrGPxd05nQ?sE&EN=3D-ga_im6>7%5CqP` zbUe)nARl;Xv^yD^7%~d5f=eH4om`$sBwFhpUf@CC#mWd_|Kqqs4OIG8FR1msee>tB zM~o@?kPUjqhMW;V9C+P+J__sv4gkA`JEvCoO4R~_!xK`IF<|WPh$)?3_RE08ub-b=u|8#GHsFa5fE*aDdVTN##cTf7dm-9jLp%v= zckOuqxHVG%fMMVlGsV;4o3WDWb;TY22fU>&OPJ)uM0HcJ94*t*cPY9Is0lTDhXPf4 zd-S#u0)7Op-VcBS(QU-!j=pPSrDaPC;=z#5DciY0382($2o|T)sVk)o-n_m0*Nm>% zUS87EGEy81XWD?%_X_~f0kp?Q&8NFB-z`>keqFSxcp;WM+%Yi?v2;_Zf7zBYpHRd? z-J|+%w~dQ%TYM1sCYN}o;{dQ_a?l(+^&L_GSlQ#;rkpMcmQ@PuLM9MkT9SH4 zINNa@*k;7!;NdqrS6=w6uNA9}JH^VqciNUo07Vr5b#ny(>uSEuh{?f|`}&&Bf6{x6 zzh{JkmH&==gz6DdAOMuj6<`_y82tX7{`KcS?YmC42RIe;FBzhF6sJVj%?AL$EubS< zrx6V&D#`laxmPC1-mvf%=>xXBUd!ES7Q+V|3f5`co_TBKRH)JKT xP`v^@Ul8keH(SQ%3*g_z0vpPi4rDFx%b!ov8zSwf0!jb?002ovPDHLkV1mD}zIgxu diff --git a/src/libs/vmisc/share/resources/icon/32x32/expand2-hover@2x.png b/src/libs/vmisc/share/resources/icon/32x32/expand2-hover@2x.png deleted file mode 100644 index 43299180b831c781733b3ca3e1bc3642bb18ff78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3241 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 aKAr*CW>e1i8;SV<0000%yK59t6on|tTZ zy)zpC2Y~xP7f=JHfXTY;BrpR+bRYpR4eZL;?>o(=#Ghv*3zQ}Rz5!bb9AlnlQ{wIC zq6JD50Iz}FLdTzDwK-G3yQS?Hp`2~=9M`|KV+`1)pf8mWcXlk;3!F8|y-bK}j#g|i z%)QJ$Y`VZlpkF~>CcW5*AJ7n&mwEKW*YHd{zyx|{eut8#T!c$ojSJxda1i*QkSjN_ z0UAT$M&JzY=F2-q(7OhV;-Lvc=#B!n@yvuCbPe#*ggO3m6UNauz$+7;Vq<`*31Qu5 z%Sq8m;15XS>npA=OFa}=l%k1;Z#dkw`(#2?@kM%`hy&0?iu5jclIOL$eV z@Ur6~uufEQ1ET^WipCQJO=xUl?=$vakSZjFqrg3sy2BBY&qNKV05?v*N#C!=peDml}7iMw^(-|)Tk(6v6} z_fNRDVpIr$yV$gZqtH6ie54aG{tps?0N z0^H(;wE@F%LE4Ls5pV)`VYH-boZoa78Q~rSnqz6gxPrc1SeY=VAucagCiG~C%Zr5x zLn_MJKzlu51PmWVw;%#e2s3_%Wn+n-e+A`vqmY{aXTFfXjCX_VgW&l0$5$*+X zZ_pMWN3VvsEc&q#9|8M(7zNH__s@~44+i`)%w17^{Um{L;4si@Rh5wlkrS{I~!B002ovPDHLkV1h@_loS8} diff --git a/src/libs/vmisc/share/resources/icon/32x32/put_after.png b/src/libs/vmisc/share/resources/icon/32x32/put_after.png deleted file mode 100644 index 95d26d45508faa60816da071d7fcbf2959086918..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-hover.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-hover.png deleted file mode 100644 index 3bc050adc671fcf7d3ae6ea4bc325b10bc74d839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1233 zcmV;?1TOoDP)?I<#l%_^)QngKK ze6elXwCYoBqA^X>hhEYLn^Y4YdV4W_vFYW3+L+jf)?S2E8<8Sd0=61Kfdv*=mAyg1aYdy6WO8P{Gw1vNXU;eC&A{|11U|k+pSuGggcneDIre{OIFlkk0bAyh{Jk+^ zbAjx(>oH*2T#!ErC@ov4n(YOb-)X8=oCY_9J$fhyoAaPdwBNc*`FcxBC=B9_+`sC050V)06U&VzOS z7}l@*RS03shJZ!D*X0{>d8DpjeA=gikV356RW_)*1b|dZHG4dsoA%EHI&cD@{g**5 zwM634ftW)GaQm_%3ram+A)xK29yEs>6XB1Ks4GAaC>a_W+6QdE6A@~vQoEzDZFkEP zYESE`Dc`4+;7rMNpdCo2*h&GELbuyVCSs)@=t=W&UDLGwL?SU`0gKaY3cz8?g;q;R z;5=5W90uM@cQR9Qm>Ah47%p9n)yp@|zhqaRzJKRL zuk@<@ejD&y1|k5C0H2tqdDFdOsvU0tSU(z3c}WoyB~|`W6ne1OC5QT=viq;70P27~ zti+Uxy#QP4E1O&a&HqnBL;{uZc>E>cTVN;?0oab;xOi$<1eZ8R0{6L0A%rYm;R{E4 zhn<&Ot_ol+unBN8u{`$z)V@{ZE2;A9zGCCz*`s}4z>l?AwE@kU2s>{Bvg^(LQV8h z2{n3cBp&VQ7#X(hB2?}TY7XhR!IuTRLXht`L( za`H{ZG&4A9Fj8>l`>xh+-ac2BVtza$2SNy^QtA-!Jb=4Eqx_iw#Z|sYc8(*GlV=(Z zr|uMjI0B(Lq+5uI_)5f*;re&aW}W`3&uyF9fek?O?dI|qfse3`Wj7%20b_hVHh)?f zH(XW>g#V4k4)17ESDHq%?5l9U|(+M98JJ(!!T}o&`HOClo*03U()=p00000NkvXXu0mjf+_gVs diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-hover@2x.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-left-hover@2x.png deleted file mode 100644 index 41f4161c4ee79ac32b4191c0b1f478c026952cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2555 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 z 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 XjUIyA^>6f200000NkvXXu0mjfeV0a@ diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-hover.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-hover.png deleted file mode 100644 index 31e49da46d8e1500642169ef79e2d84ba2a213c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1206 zcmV;n1WEgeP)1uSGiA5kUfk_&ODPDYP;Q$7A<`y*(BLH`8bbq? zL`f7#ltwgO5+WM#hZui|Mhyi0;Uy6g2r54sjiT|Ef+iv$mm>EBT3RUB?Y4B6ote)c zvs;I<-O`lyP0nQZeD8POcjuh*owG1}m;+P|jrSnW#F_@$~%%C zcDck;?Te8TUy%}B`FXgdc1uN*%f#cuEnb=ut6noYvgzbP*>rND%v@d=P4-*BxV}l+ z-B9*=y$bjdAT(oCV)44k-C_%33y-`$?PgKssGCWxy~#Dw3;k{wFirDg;30q~KB|o8 z7kdJ!n5L`jiE{(?!LKgslAuIH{J^(&)4&qoU4Yv6DlU~*7Z&yu<(Vk)}poLy4aGIs5HgySB}J+8ah0Hsgx=dkU8ZRz>;!-aR=nFZW1R`JroOzzTciOPBC^Zl@eE1-EpFfMz3r(Tm6tZ2 zxL-CLp5HNgmZv}7#-TWvJ3w5L&-8QRV40C2I1nDlD4bkfA{Z_U6~JjXd9ZJwNZ0kO z4DlHN{z(R*iN0KbM333idL*8TU+tT4M+Wlp@)XWiYqKotUjVBWK1qJeQa07Ndw)Uoe-r+wRC z4EzDC2h^;(U}Amay!IzQ4Hxyp{Sf#XP&1bWsHrbE0Z?#gZ}ZKrixxn0Fc|zNU2@+w zP>EBgvjJ9YpVl#Xey~7kD(EV)Az(YsHXNTCV|HDTC9h7st{Ex-(0nw~{oB@NUoz*V z_V)I)^}ualEzWB+0M_i8)j4K*egU_i7k=OwcgNB#6+PjHi$^KV5%0Jhvv#gK>JuA) zFM-|Z#N7sd02Tw}-K(4Rd#bK_a*Yx<(Ms6vuNT6#ftCfU%1ZsE*<%f_=0zN%ovpFN zXRH4*dfIG&E~V5;k^YOJ0^SFn2k;haZ7=VeSF9ViACgL?9@vOz0Pb;>rs5~|wZ$4X zpDO5S?KN8pwDhZvb00VXya-@+ORkYES0>Ey`_i(VBjgr$ny%>SG_9Yuo-w|A^Mcpx z5&%mnRYc~U;}~~-oyr%HMj))`D3-l5)t*ul0{MTJw4I7}p4oq`RRkl;tBv>g3<1=I zgV(il2O_HLl9i%1XqvX%w(ZzJ;=Kl3*bHm{sM|J;DT_iD$y?Le1J~HG`go?X4g;%z zLw6#aLf<;@8c+kUtG&EU9;`T|KMQ^aN`S_1-Z(!|1a)8C zILWyu%LKB3Q#gOUMg*S#5?<;TZ%9ksV$xQ$;Y2OBUZY0b0Kf#GHEG~b%707*qoM6N<$g51D2MgRZ+ diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-hover@2x.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right-hover@2x.png deleted file mode 100644 index 0db7fd538ab2ff995bcb25b0c450ae58137ba4f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2440 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right@2x.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-bottom-right@2x.png deleted file mode 100644 index 671a38f998d92718506c0e037c1777a2bc735c5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 zcmV<11SI>3P)%OQ=;<7{`BqHM`a+38R;JD{rPn+GB8QA{0Rx+La&*8i_P% z5~d*+DhJghlNvM#8U+ge?_5Z&0+Uwg#X2$;+GwSYuFC-01dS22il12;L8>A5+sRg_StV$m31IEnk zK&Z`u83B@J0^>}I2e=w|M$%BI-GOlcuo76;<@p$}QIdkJnpxusECId;tOtJsRs`9u zTU-wD=K$~Y5#Qmrz=*H?L6`#LxM7}!#lU7sbG)qA9pQ}VkKu-QR`k={^q-glz#{t3 z`+n=e9RuwEpar}gAil%zfGhH})zmd$Be1$a{YAL*!C9Fl>yCDp=&uHj5+40D9~-DC z0E_?!B8ks+KB!%EN_-1=H=_6s_XC#?!WyuFf1mSX;VNK@q_eyJT6g4==#K%v6F>TC zjyG}&01I*3R+-{E>%pCkasY1LzgL0y4)+0wS17*2w}4jd4oK$xu^Jp;z$3Lf z0Jq;)G4FfvD9QPt4)H_4wi?BE__di;e<>GAb0o^W3CxG{10P+HoLOZzJ%ywiIYSO#FG)S6Pp!$hC zg-UgRq@|J;6fkjbfx5ruDO8FBB%LYgGhh#JP|`zzrXC2aH-S6*XCnF5c^K++6J&oW&+z!?E1mlx>HHzeC!7NTr}NiyOq+~q?o zyi}m>>t=R3PrGrfQ($$9qnu)8#`%^v&#n3cD^ zpec~tx9g?6lu&AGr+ z5riAC)jOa$h0n&_rv-Oz%Gxm#xCD3@I2lR2;m-eF4#->sB&`JA0Q~aq)9u`b+bKqY zn}A`U`(1q)wwc+d-nB9!|1|NUQzlOV!@kk)IRYfj1wIC@_x5N#*lcD8gKBn(`Y6t$ zbw@QXKO%Xj3E@=nFEl`q503yBhl>Bl0k~E9^9Bg=;h(^@MZ~8au%!WleAouAD=OY> zGCdyp-dzU_xY^8h$FVj!|I7F|AvO;I%VI>n*CMzc_^SazyKxsV6jS^(2P96o5cs13 zg40|ZTX;_gBu;1nTN@z!Mc{(6#P@VS$`Oy&Ao>LGCV@xWs18V+FrRqe?e$_Cx4=DE zh3GVMU5h9G$aopJC$n%qv~f9u4}e#JAIJgL|Fo#=!wVg-NdQ>qA=LRL+i2LSe ze!p@}odQvkqsd>^zM#(yQd1oeB{`Z*i5q}5G3-@|GScJAaG$@Xvqs0wEanYxG(`VE z!p!!V*#g{FX}Gt`HL=@?h0;EfO4fxrz-co(SxO@j@HZ}5r@YyKK!^YU002ovPDHLk FV1mL%OR@j} diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-disabled.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-disabled.png deleted file mode 100644 index 95b5c2c1ab3198e02cf7590a59ebdfbae82bf000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3565 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 Hu0mjfI%ZW_ diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-hover@2x.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-top-left-hover@2x.png deleted file mode 100644 index b14635d5d15ae773151af7fa7e68d216e7eccf37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2402 zcmV-o37z(dP)3gwgZV#)T__%=KvY#0EUO76H_=Ei2@0L75H_u6^SH)Mu75qA4rOljuA!U zfa#B?%TK;HN&foM47C&5fMKC@Vh)qCk>H2Gn6AR~$J4q0mt$I!hQ`HZPZ>;7hJ~ub zH@m81ffWcx95>QQe_R6+fixgqDU69TW3ottB$MPanI(DB{7fEPouhvC&xk1zudeWi z)LU)Cz*E3uh(KqcLax#6h4ZuT{4M)rS(cH?imdGU{U!CS9$++38?5tajDT+g9{>%A z`MVyNf%xSm#T5|ABuOT-Bu{>5IFG*hWp%X$s76eSfb^9E5`o2tUuF-m05Qyai)4y1 zxpHTu$WLyaL~^c0S!V&(0{;L8_-mjq9Pk8UaoR`(7F|gq)*NG!hK)_~egD;oY9|2v z6llcHE)mH!pa6ISF&A~oD@-CGIhG;W3A8u4FvpnaY<1IA=b-MGqXuYK=$Z7w`Pm}_ zbtwB}x9wbO%z<@P)Rs8Z)gE9a@TyW6ZU;z+dA%H1r*}hgu7#=J%f#!E89y)GHE?jO z%MxccOW;MqEtw>zB#{}a0SbesV27Vrze*`;u}sQ||6Rm@m2jEN6s z$f=_S`Yf@gh{hnFY_7BId-1YAM_vbVfc9`Zzy@UKRXp(9QA}Pq++mI}nFz2bg_Bdo zwoN-%RxkEb?EtdE<$%G!4ZVt-ZzeKlX^u5(VsfG+ksPM}ddy!J9xrXGa8K2#l7W29 zk{Ke6dcwlzvzf9et3EctJR+o4W$Z`{CdA!i^YYK?{TL782fG*!2b@Ffx!qXwmobdL ze^>_+0gZRIxNBWbugiA6wQ<|i6`jBkAQMQj6y|_V8=tocRT5@pKPu?;!hVw%2xC|M;J^dCj)Y>{}fkY^9xf z>ieqx-D+4N`{j<~yVsP@^s@s1{QS1wfX**xfLVw*z8eeH=DBYhuS?6dPJ7ulYwFSU zwy>`UW!tUwyI0lB^iyp|#3U_BVQ(C8R4tgdY9y1sli>tn)OB9BuljQ7&CJ~|T}bU3 z(&57Am2aGQw{F1xmumeD`Axtw#LC}|P#v&AEtvLL8q*#bVMiiWUFW{#yL4{vwb8qt zuMXC39dHJ*PZvPo^#j1s?5;Vv!E^4mhYRB9de5l4s(RhNnp6L}njRq1+lpA_JA<`r)B$P0 zH2zc0FzxZy!n#o7bCT5tIv|Q3% zL|woHpwdXYM)Lt%m4zYM@r<07(xAS{=an0)O6+>ZA0-6iyYP0(_xdsZ03v`gWIPyi zKrS#yDHuB^4NI&^li8^{Voy6=)T9>Ipqf5mVkJ<>-Q0m8j7)(?m4&>*L5!O_)Qc)k z_jzP{#o0u$*$;xiCNM!+~_K{7#XqUEakrfZdLt+iz>YH=}e$hdlb z*$ZUROXIurOfN{wYeN#^*LQLB2gk6)J>gVXal~2SWCi2$XVfWbJH|$dd@aa$IUBFwfH2) zjR%pp>k4G{0O^F;cAwD@q^X$3(4OUy3Ci?s!MBTdRiseHYMM3GQ1Jad+p*ab}3@~fn=RaC^B{nQt z^&uui7WX27KSFp%^PpMMdj(UE|DJr{&~;Tp=;r~UVnUqWXy$k@WS^`zdg4@NBl9*7 zSZY*{-eN**QO1!XvMAXj&}KkPh#*CCz#fbUSbrUHY}Kc9ZDsQjsVEI8V`8j%_obLm zY;15R4mV2x9+x*(hFdzfHz3kl-I%a2#XK}8(Q@#WIyWMqQv1)1NLXruh)APUWC5xz zD>>If;WMKT}e1?=_o_@ovP{7d7KS|Io1k5q{2B3hh;$S?S{w-cKDlFyBZA zO|_2Wn--tZAMl7;Sh>G7uKYm5ovBb=Vy`*+H=8;sDkB`&5we#3h@YX8 z%=q!&#}_?wXnJY(tOUJ8$8*tAHWEmPg;8y!+mG>44|F0$6Twqlof!DXg)bVj32eL% zac=iN%?kWG;5Sj!t4}FMYy9D8D%96Vh%-E;1H$$B?H7iri1WWvbiNb%KmDBl0wa7d U=)6yLSpWb407*qoM6N<$g04uWu>b%7 diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-top-left.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-top-left.png deleted file mode 100644 index 561c8817a2868c166159481f8aa2a81d94d9ebe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 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 diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-disabled@2x.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-disabled@2x.png deleted file mode 100644 index 3f4fd1861e9ee6ec4ce69d92e4e1c8ef39408334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6309 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 be_!xF(mwjE7dlOAT!(wo6ecMiNl52&st?NQ|Pq zs85OsBs_>QL@_2j7@`pqjhGOLXhJYG3To5_gV6{WL8t-^loFt%UD~q!V7uGyY#p+5kj>g}{wF1-bw;-H@y26l5Y=2|E#N8N3Nd1e7eu&C_ySKB0;nKopc~tln~O zPEEZ&ba3nW+*psD2Ly!>x|Fgnn*iq*EF@WIssJ8(dG27t)|w&JEy^8YJZhTnF8{;j zycbow(5rk@ttcJ{)aymX6~5aaz13w{pTE?s47QsBuoOkfvu)eRBtT8w`&3okBc-eb z?(b}ldRmWlYxC*~;(p!Z2CznK`^2Xmw^xnPZ_|G@&XwP9c~2d4+yBih8S8>ivo;yq-LlT0Bn+Uuf#pfB^74(4AF48d`vTz&b#`c%&~M)w1%- zvLj%`eegNHQH%Ga*nm92W6^+02qcLfmeXF z**N3y9k2)B@M~>e)39v-U!hxF@Nj{%rfbIsWfhQyCX#jk_$0VnNiFMvV5}3swj}eH z727HQ8`BX05C-ajUBE9BaIXU#`|Mg!jQ%KR1XfK~fP*)I$0y(%1!y_ce~)8`51Co# znk$=QBB-kBwk+!m;2GyCN!{logpHI+!mzIc3sUw=Xo z-!CGONE=Y?$`x!sv9edqQS=GI7}YMpNE5KTL;0qh43LFQgC9drU- z;L(;JdbOH0MG=3AXLNN4>`T9e)NfzE3~&`_7W%ai9S7Xn&;4cU!b zE;^%KPKK^HlNbi1zfw)?I9D&%Y^&%|eZtw!ul_F+JE$XdlG4hQZbr`%@61MW2b&pt tlsiA0$sHVZ1f&kP{|i1Oxn;|We*u~C%w2;wLRkO+002ovPDHLkV1lD3KmPy# diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-hover@2x.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right-hover@2x.png deleted file mode 100644 index 754361260dcb1ca1dfc103d065794c3e9b9505f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2605 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 P00000NkvXXu0mjf{Akvc diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right.png deleted file mode 100644 index aa5fb25decbf11973560b7a29dcb52d94f84fb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP){UqKL2A(&VwC?X;@{;kA-#@txEeQ}?GIoXLc|t$qaN%mC5(@1C5GbQ8F21vm-(=ow&CBUh{`I1aqn1&BYuX;Tr3$P{n~ z_}8%M-opXCkzhR8Ve5~lyhU?C`0dN6WF#;`{0V2c<@H_=DW_#3-zAvo+VoLS_ zw`x+dp0HhOfS7LuP&wfx;Aak?Qpj5wfZLq_;^xOHDOt_f-Om8L=?qW_^EKdn24FD* zP}c4{>PCHth@4<}Tc*D6FUxXc+e>Q%YEHYvu-kQQQd_`6b|Pw!LrgXuIpA>T2n+@T z2fQ+#woae6D#A>|vJ5Zd`U^NXF+ha4*a6^N>))^e;$92qH#+r!oQ4p*u^yfkMbWJh z8KQ86{ABeFD0Zyt3&2nhXKUB=2@oMxYMkFp+V>6My$`@@#rYHOy-(TqdKZjDL}r1P s3}?bqs`@!;yBh!zVg}e$)lWIQ|BJd=aD1F`y8r+H07*qoM6N<$f-8Fe5&!@I diff --git a/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right@2x.png b/src/libs/vmisc/share/resources/icon/32x32/rotate-top-right@2x.png deleted file mode 100644 index 58458f5111e6775c318a897c81945a1d81db293f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmV$TZmOv7{`DA8Pge?ED$Q8G0W^iWjCl7g(%1gX`(`cdPscp zp`gfzAPUqT$|xd&=)tF63d2hlzDW;4SXOk=!Ae3ZD-)ZXi%vTK9`-(RI-E1JFKb^8 z{o#W-v)BHA>-+EZt-bd8mTdEXMo$r>l7=LGE6I|^B|Th(pAZNtfTRIQ&jRlQH^%>- z4-AF$6B2Vm5lOldcnxUxw1fExjUXdH(*3|5+6P~2%0w;j)h}I1IfDzkg1Mw$^?T!ZY11}IgF&Ai4 zz!Bgr;JTUm6xwDAekt%l!GU+O?ZC=P1OP;|bRDTE_-5M)EG|s|ps%DMpT^Drn~3MD z!UO=WiHF{~8U)?W_5zCv5dgRoI9P)qXR{N)O+^UsZViGNz%cM*4T4K*p9T}4Nr>x- z79mv!m(PvF`nw@{!{{xs5%@cV04>}b0|~ILFaer6`ylW`NC9Hrn}PA10!*fjCv{!G z_D*0GusiL&v+#ZcEC){Ipy`veKCR+BisU(Do7FQKH?X@c?|IMCG=u zcsyytVC8Y!W41Q|j{)DeT+TAFy+?L2?@in??;Ow}hnE7ohzcP;0e5BK=q39u)l^bH zi3%fGAgK>n0-UgYJj4A0wgPLj__wVj?Fu;}6L;XW?U5|O$M+l9pVhylOOmuJOn^W* zoa5ekiCPsg2PDYvr-(K;L#+R^*f_AJ&^e$JBn<*bOLf{F=YWAKQXo-omVh3hr*r`v zee`@*w%<0`2TYcp0sxZc5gm}I3P0N(go@q*w$A|fRN*_u>c$_Hy#{UX1zxYf^;+9s zH-1!-0_UAeJ-{K#J8kxr?c4s-hbjdCkkk+SNpz;TC>Zz^7<5a(m9GSCPg4A0O98{J z!9xuM0IXcwp`th4<^y9<@4Km+mD-%;R-z|^1EzPqE}x(ER0Pon-tRF(^Ylfc4u zL%)Gqq(B34 zz+9q()%_`NJw;R(Nc62yyA)`^_7srlDYoE-q`^at1pu)95%5ZiTb{T5OBx@wO@U@e z`VzQxmS#I_Ka`rgO9Z$W_yd^Rp~(brneDN(+_g@D2I5lL$_|&Ofvd9w4_zVvfbIRj z+ifmwu>E^h-mXZ2W=J{!+#dhjZTo>-d|fC&FYq!j8W&^p@pYR3q46)9EC0jk*-I_} O0000 z0000>0i1Vw#Q*>R8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10kBC# zK~y-6rIWvE6j2n$f9JX^WE&Ag6BfKPvyE1QmDprsY_t)CG@|^tWkd+*o(6G+qafth^;MnEr)Z+^n+YX0{SV(O#Y3 z5W=FQKG2bLH%XFB3n46(W%&y@G_zY#6ooqS36V(BHqda+T|b_Jq*78jk9;Z&zLI}$>rFYA++ySlv!&a-c z4b>uz$K$s^0=x&-B=xf_+mf^i;GDZ7X$9D;Fi$6w$vfc5Q4fZ|>o|^|k4B?c)9Lgj z@Ti(Uk`90m&1UmOyWReqrs>4Y_Mv7Ik76(wG`#meEAKbD-R@y+C+A&bmSufON|NOE lEX=%Pq9}^{MN!PX_kX9s&RCzzeO3Sf002ovPDHLkV1j%v^YH)x literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/16x16/closed_eye@2x.png b/src/libs/vmisc/share/resources/icon/dark/16x16/closed_eye@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b78063f9aa38ac88bcc9c6b88abef512df9d9ed4 GIT binary patch literal 1090 zcmV-I1ikx-P)x1X% z-fzyF@0&B{%#4u4&9uZ#W&dBme?dU9l}Wi=Zd)>$yocm%03ag2udJ+OhlYm!xZYT@ z(JokCUhasZXac|?0QWX=y8vLey}f;=udnaQmI*M%>=%(Y0Q7E1Esz(H=X~G)WK#ly zAlOdw9RQCt7%q?u0YF4{0O)Msa}K~!rBuEdN7EuS#_S?FS4UnFkTdYGsf&{#?vqZ*4hVR^<55p0l*QZ)KATV#dGflFpaf!av8vw zQtG>U|8*G%g5W*?=j+H{R!WUriyQ!yQVU@ij)=%B4%`LcytQ^uz5kjFEG;eVESJmQ z1GqJYN+NR9_x;n?B5q{Hm~jy~g{$rUr{{V1_xJZ-S|?y}aq*T^D)obi?2O0CBoAt> z&$L2bHEZoY03SOdej&MAYyCHHbqgewO3gat5Rqp#OAY`^sk0*TtOMO4BGUk*CLm7L z6OPlQ@B61VOI|hK_um3A=|KC8G2=A>H^`(R7}tPUYd;0>RCR#li(2awTfuCMIW8ho zPV6tV)=vUpH3KXbi%$cnwV8;#WQ>{E0`mPL@}>jj+S=L<16WS~1 z$zxjUnHI?>MC5HaZAfxNYyET8XH5EyZlE+1441njX`Zp2jt}cq? zrOwXIJ-xlXg*5_;|BJjv-qB5_736}f}OV)0lyo&J?% zDT<=ktN4cBgs$asxh~K1-Usk_41HNHmk$mO4qm?ASS=mJF_HVs%C|z^vH$>}lRCDN z#?1;yBoY^^-y-s3t8rSYf$H2K2=)S?@B7~%KHG1kfGx3q03;!+Uc2JUcmMzZ07*qo IM6N<$f;GYV$p8QV literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/16x16/fx.png b/src/libs/vmisc/share/resources/icon/dark/16x16/fx.png new file mode 100644 index 0000000000000000000000000000000000000000..1058f49604e995665ffbb61b91e7322849735e74 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X#yh2s3WX6WN&PEET=#!_5V~9oX(n-30ERF)L`)4Uw zF}6ND?z3zA`G%NwXTbs)2G1RgLWc##8k2Xj^EFBsD&Dn~6cTDW@=b(o(#cINbLXnB z{uHbax2O(Z^_*)pKK!| z5-{y)b)bm5=F;vtpJT6=ZrmUL%Y*yWsw!5S&J$l#j4CBvCIsCQofvuUr$gx9^ArE8 zoUpXlW2uSAKELOC{(;Ka>$m^@T`$$1Rni-O`C1&;yt#Xx0e#Ql>FVdQ&MBb@0J@ls Ah5!Hn literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/16x16/fx@2x.png b/src/libs/vmisc/share/resources/icon/dark/16x16/fx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..556582c9bba2f630c8f4af1df582d9c2448f8798 GIT binary patch literal 566 zcmV-60?GY}P)&iZU~!;W+_q;S!Xa233f2b}q8?ZXHkK-! zjS5y4V&$ROT_quJ7FPTVl(k4ci@R;axLGf8MfPiknY_pMW9Ge?P!blYLko3Z0{jaA zhvx}4vy&v(B*l_;(lp&VC_v*KFte)wK1f<2=?-c<6`QnS2;r2Z_W(A%_qPDF*1L^% zpsK1h0M@p7V*rvzN$$37-WULTM^(0MJ`X@=sx3k@TLrLPlQ;CC{6g?sNv8t-qA%rsk5JI>@@&U=maU6f{6ksqIeCzdk=dt%(zcjP^ zk{$xMmn6x??{ZtKfquXLHHxAY0AB!HBl*;Oe`8i&t6eaeOx6J$2M{D(m>$Pp0Wh=c z0Paeg2zd^` zrD^(Tx{xHvB+v7U&bf10mW}HY8$Cu{>i@ZlmjHjNA70e6g4%P) z0000>0i1Vw#Q*>R8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10V+vE zK~y-6rIWErqd^pfzw@(6qy1`^4A=z3EesYmsf3gwR@(R&<^|NJ*ur|-Ekw7n(?+pT zbTa9D06SsM7D+(5XDDmh3gZP~t- zbeD6Mq;=cdA%vScw<@XHKCpe?YPGr{giYW<(&1MktVntRruLqJ)e^Dj;4AoaiME$h zO1)_<>1|;FNlQTAc7Jk5(%%wyCPIvHZ#r0W)E|vTyK@DA0U+Sr_Oa~&@D3>FJeV6n zQfE?Lg%C~whQnbG*a13qerX4%}OFUb}J@+5?{F-ANUH&djUKd3E%fOU3i^mKq+-FHC+Ew902O|`Y$3{Px;fa;}JkaQ>o#{te=^? zsrP+j7qDCQU%vBaGnSwQO6^Vf*zR{G2j!*GL{Z(Gt2jVu5_ z#e&(cUmXiJWx)yy_>={hxsk<)=%h<-)^ZyW5j|z*a~b%8l=6MKT)qncN~wzgmM!Vc zJbst2;NF0|n@XuIrPLOH8#XS_^X}*IyEGzCO4$UkkQbP-XF`bM0L+f$4nzjP3V`hb z#XmFiN?vhS0T4pG18^FEbO?`)F{gqc_~63rd>9EKUiNyud1k&2plb=~64A9vr7|Ce z;f5=3;Xk9kdF^(4mWXNqV2s&}qUa5P!eqk=7@JM}O72s};z literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/16x16/not_hold_image.png b/src/libs/vmisc/share/resources/icon/dark/16x16/not_hold_image.png new file mode 100644 index 0000000000000000000000000000000000000000..12772b4ca192c18251fbe2f5fc3516e8dc933be7 GIT binary patch literal 434 zcmV;j0ZsmiP) z0000>0i1Vw#Q*>R8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Y6DZ zK~y-6rBb0vL{Shu=dPMG8QdW3?tpPo(8XY}D1u3)Iu3kJca#h{=?EEdtC z2%_M9uWhw$SbWE@H@&^jx8Rf+W)5f0oO>w=|A~>Jf%m@UoZD4DPR;B&hGR@Ynx>1A z9!S1qSw@mgNlRw-l*hUltE4SSul0JpWo8Qi-bil8uu%d4Rgzx-1VAL;0Zhh#g&yP- zwN>EuUj!50`*r8ssB`YIR;zVlpdt^(0j!a{mUNkAnNN~rFNPg>g(OLK0Gt)5+GsQy zS7i$JL+(jBl+*^$0|1f-d2rr?3V>#)@67Bds9FZFDrvrq;0Hhlz%+n4@BK`FF=xa4 zJ5Mlh0?Ct5R!M%6`~WZ&dKaYx0FEWy01oZo z@=a?!IWjWx#ul@$8gLxvULyHAGtV>gH2|-=y2FJ+VW}TX>lKKi$kSSX>`vFhFq~{O z8VUe5Ha1G-a(NZNX#gN1;kxc88(ixZP)dy^rpvwL08p>jV~IAWQ+C)=e`>3F45`MR4^?iR#xe07K9KLEVw zem^tpN8>o2%fq*+feRVBZLRf$5MoLQF=dRI0Fd>k7l%RML|Q>acamqm@B2+=zMBy{ zHVgv$Gjv(kuP{TmZx{r&(h6p7q;*7eJ|lKJ4?MRM645#{A4{ocrIee+V(~rzD5d5A z%w&YW%)`%Jfz(AK8MmmEYAdDM0B-Go^&l7Dq7jjlauvXtJjax*2_eoR=WMX40XD{5 zK}Id?B3sNno0r^{0DRy7V2qgt@ZQ3G(-<@Dd7h20{bA($ezVi*j00Ez&`R5xxeZ{U z)9KWG-*4LD_Wd&I#f4!w3cxkSXd;SS*L^n-(0~6r{sn9j{rTlXLnHtI002ovPDHLk FV1j+(PKp2k literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/16x16/open_eye.png b/src/libs/vmisc/share/resources/icon/dark/16x16/open_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..706700adada00c3a32323915d9284c5dcd20b93d GIT binary patch literal 537 zcmV+!0_OdRP) z0000>0i1Vw#Q*>R8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10j5br zK~y-6rIRsl6G0G#zjwZ?TtE~F6pGx+=N@QK(h-~jQ-A~=2=hOnCHxKu1xg7NP$W(p zQ9zZ_cejy{5Fju@NS5W>p}9nfF#*XVZ8J0P?Y?^;1SRR&eZ82z_Sp-MwVrt|4NYO`3*_WfdydO%=!S5IzR{b7DdthG)>*#fKN^izo6Y882%!(OLI~X~%lbzy z(x|yxj z+I!Bqw=@3%z+f;qC+VT22f*1nJv6hYA%rLGcKgeTL7cKoQCXJD0M5AsV0ys+B>1nG bdmDcPs0PI86uLS_00000NkvXXu0mjf%z@_8 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/16x16/open_eye@2x.png b/src/libs/vmisc/share/resources/icon/dark/16x16/open_eye@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d9fdc1c48a1573574306e7bb33ac9f9428d39c GIT binary patch literal 1112 zcmV-e1gHCnP)d@yAcaD0Yz)AlM`#cZ zzX9k~N`0}S0N?j_iO44aHfZh_l~T_Eh=9x0A^9kP?aBW6IF1XsT<%){C>D#RZQIX_ z$kSSm834PLQX_Q*jE|4s6h+aO0Io}1^CbIi+a9W5T-WU*Spbl#I!rC>{sdbY_e-f% z>W)k%^Zh>rl*{FfsZ?qNKt9=vNbc1;IT3gcz&g~n5Wse&)Tkz656O2l!J}aq?#$=& zGr(dK(lCr6jT|H&s~)2$iUu_DSpY8p7);gxV38cqV;skMm*gSMmA5SGH~=mPNJ@3T z20CWjcA>@zcWCREl~PBPQqKZ7T5*amCH~xR&Qs!nxRlqobo6 zEXx`JaN{CQ4mgf;yb>4$!L~S#&jGONoboRb>2w_DM~!?*6OtS=P4o72I(=!O0sxTD z=VuJVcmTk~#6^;?SN5?{ zTae^SzV9FD?(UukfO5IqVHid~$sI|lzBWy>P?_&yv1n#8nL(0IX{mpY}JC-J_eB0+>wZ! zCi!X*1fNwZQYw|!H8(fkB_an&_G0NR=|@r2)7IAZT`itvAIF~OZ2?dKaBq$6SpY$@ z&H`9p4G@u2A~KN6cECc4ws}e literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/16x16/progress.gif b/src/libs/vmisc/share/resources/icon/dark/16x16/progress.gif new file mode 100644 index 0000000000000000000000000000000000000000..32910e728f3bc6d60f2b64fe0a2df3f919d6b3c7 GIT binary patch literal 15703 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 A?*IS* literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/equal.png b/src/libs/vmisc/share/resources/icon/dark/24x24/equal.png new file mode 100644 index 0000000000000000000000000000000000000000..158499733d99bb427c9a7e4b406bb4875c1d576f GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt)qLT^vI^I^RxFGu+yFq?^v*3y(#va4xb2jH{&Rh19IpJ97l?@Dr$7XlDk=`AD z?{})~&qb?j*CpNj$EF-`lxa%PI;Bn7nq}wqK9pbgi2Lj|jb91DtKS3N$KdJe=d#Wz Gp$P!@a$#ox literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/equal@2x.png b/src/libs/vmisc/share/resources/icon/dark/24x24/equal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..51ba8b0752bca4e346f5c8739f6891e9c2477252 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3TAX~PbvH$7ERG^?_ ziEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0vdJY5_^G8*6BFyw185IOeo z`X`^B2ZtV9F(?qye1ihtot9?)DmrKDlEzp$@4c%^*V>lv^P)TFA7n6rn>kyqcvaPxd-EqAu6bZ4w__^A al6=em1}DBdu>S@6m%-E3&t;ucLK6VDkce~u literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/fx.png b/src/libs/vmisc/share/resources/icon/dark/24x24/fx.png new file mode 100644 index 0000000000000000000000000000000000000000..207fd83440f3666cc795333e96d832c8f703294d GIT binary patch literal 378 zcmV-=0fqjFP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10S8G$ zK~zYI-ITFP#6S>+|5=ReD`*pjq_Y+a!CEX7!A`D7VdG=yJ6t1JTO5e@2!gMWE}1N7 z=_6#u%F1=`j5&z@Fvac;|Htq%OJ;^m%5BvBUjVjJk9A#dd+%?FXa-=1ndzs1#7n&wbM?qa>kMN4RIW{)CLsp`9P?#VfKH5!1KpF;>2s=9E_ z0YH`K`7+i!*$j?UbpfDK)l&fXA%yeM006Fu=#rV2MNzz{>Y1vZ#2TYt#h99A29pAO Y0GUUcJ5o184*&oF07*qoM6N<$f<#K7tN;K2 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/fx@2x.png b/src/libs/vmisc/share/resources/icon/dark/24x24/fx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9fbe460f1920828c9e7f97686e33dd728c291296 GIT binary patch literal 725 zcmV;`0xJE9P)78|arjK-S~| zvL+9ZHHCf!q9__I6bkoL^%gJ(oB*g)D$=iZ68Z|zXf)0lW1gz&;-Cz5i}X5)qbM3R z#=Hg=fjw1SYc`wfGcz+k2kP)I^jv|~wOIuAipAokQmOQ9fW8vb^CMQ(+pX_fR_39< zE;I|!Y&O>iF^8`GM=ZT_DMbkeR!+9%%0&{rT2 zkTrRLtjPmpO=joC`bG>-G96 zRei3icaDyZo+Q>CpvONVA~#j_0}!g}t0;=9?KS7znD_n}a2fcbs%wdL)BKgN){cwF zrm9{9_To6cQY;p~dhgdcHvd^wSEr_?wv%e6`iLu)$|11Ys>Jyq2)4ZUHIB_61VOOe zjd{qR3x#2LpsFjtHc$c#<;yAAD?Ci{UqnTO&=iG#? zI4dHX*4l-nx~T<-Ex936juaLLVtjPmpO&%a?hCaYAJ8$sAmanMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt)qMT^vI^I^Rw`$a`3U$Mx~5 z*&E#WL#MqElT?e|5}YEy6JvbzG?QS2V%Vxx@t>YH|4G^4*l;k|{Q8^y+$SvSy)@5H zE0ED4wLXnLUZ=i^G|Q#RA_QfA=XD z?M=CERw`?9efgs`PYx8^f2|`p)8&b%Q$*H0SEm2=Ka&oyO_S--s*1nq0dydPr>mdK II;Vst0PzH6uK)l5 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/go-next-skip@2x.png b/src/libs/vmisc/share/resources/icon/dark/24x24/go-next-skip@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f3fd9e486df0565bcf7cf7922003632cd9e6d291 GIT binary patch literal 459 zcmV;+0W|)JP)gf5Aj%=Q1;^nITmcCp&Hx34qu3pSGh~(mN+Rug z$2*I(ub$$4mh2tdjrX4a9A{l1H5Fi;3b0NESSJ`Tj^p}pIP9iry3m-@N-#h~?tvQ- zdED>!=c#jAi2>XKufU~q?&Z`K4xQ6VFre@IujBE!<)_?QM4taD7doevsGGP%MD$ar zG{mgOXi13K=Rhflq=T#kMDj^&jZj%7ED>tEkQG98nX^EsZ=<;pi>%W*5sSSKpteroysDBT;*W_K+f`@49Hy`6ag0HK?z`0 z9uxqUK4^9@SxJO`LJ`m+E4002ovPDHLkV1myX BztI2y literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/go-next.png b/src/libs/vmisc/share/resources/icon/dark/24x24/go-next.png new file mode 100644 index 0000000000000000000000000000000000000000..9261ea1e3cea3ca32bb4ad424f4559a7e15e6506 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&5ZT^vI^I^SO1%gbcQ)0S8- zIQd9+z=G&Trj0CzH?S~uiu#GHnK<9`(?$lNjr}jUJY@I!3q~_~N>(1a@GGBT>6GZT zrRF>em1>o~n!e5r5|1Z8v1=*#s1TdKf#qdgihj~8CH^G2VC_e@n7KFoTeR2O^0{t9 zb@tm8t3HP_df(xRc&v6n_&wX6k9rB7F)k^eUotfaH#D!ZTT>_~_~-wVtBvCBe=0%* T8?{w|j%Dz4^>bP0l+XkK5*uWl literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/go-next@2x.png b/src/libs/vmisc/share/resources/icon/dark/24x24/go-next@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ce813b40aa2f672e21d6dc41d9090d8b3fa3977f GIT binary patch literal 437 zcmV;m0ZRUfP)u^8I3@w-v_)A zCO0xqgxQ_g3t@Vc@IaWKg{%=ShdE1x+iBDa;d-35K)62-Xe0i_15MuWa>^ah_x(j( z*U!KW@KIIOebY3bzx_N{fOb4M0xaUe31Afu4gkw|Fa}u1gCW2p9*h89@n8V(j0a_a zcRVNpBH}>_5ETy!fXH}I0Hl;2Imf??$gO8QC;)QK$DH#?MD}glerZIlSylcg4qgF7 fuK=P~0MYvaz&If=WReU100000NkvXXu0mjfz;Utt literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/go-previous-skip.png b/src/libs/vmisc/share/resources/icon/dark/24x24/go-previous-skip.png new file mode 100644 index 0000000000000000000000000000000000000000..a40cc957fbfd381887b077f639f0fb0695c77c8e GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt(e>T^vI^I+OqW|8LK%%P8#Y zD?d}rrsBhahyVWmUd_>YkbzsX?f&la^KBC+7Czly|6l22=fZ~n|NjfOzQ4COyBJ7J zFMoHZ@Q`|2UuKp?pjbeXg(J6ysmyxTD+V&lS+5uYP5!^-di literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/go-previous-skip@2x.png b/src/libs/vmisc/share/resources/icon/dark/24x24/go-previous-skip@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b59a3da22bd2577fff64b5594ef417c00bf19599 GIT binary patch literal 464 zcmV;>0WbcEP)S zk^Ic>@cfimir*;jJ^wjcx`w48uCb+|OhO91e#YW6aKb z{{Xzi&Rr%ez*^gBt>1t_DiArc^69wGoWl!rh-E#)BqP*ZuB38<|+%mCC_9wH90 zQc9(q3(cPaeczv_Y1#lEz{)wdJ06d>p>wG+>j~6|nEeXXh6p+XH6elzaV?0bZ=o6x z(O;v|h$Qy`Nkp<6nG_=Fomc{qd@E5Jk!3Gb5|M2)R|=7JH`@38**W(Jd;+U!nqFh( zt|j|+dbwPFIp;Rs`*-jCbL`w@RQpdXoCc6i14yRanMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&5YT^vI^I^SMB&3njzry((? zR4AR7FEso?!!E|zidv&B{!cp2Vx{J4gTe~DWM4fsd;FV literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/24x24/go-previous@2x.png b/src/libs/vmisc/share/resources/icon/dark/24x24/go-previous@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..63fcea7bb52e373279de4919d95545867b714d36 GIT binary patch literal 450 zcmV;z0X_bSP)Am93tEPNLk~{W+$uVQZB_v6_g<0w z4e<2+lvs*iT+W&Q9B*BqG!0;#2Cz;8SjPkqLg-JY(|%c&ZRsp^z&y`4UDq9Q&JVy# z={!|H2%-1hzX5l^(R=??I#Uf0Lg>4$+XGwR=$yMBhT&W~R|Ozd9uxqQi_j>TYzJrb|lc5%>f)F~--@nd;l=aU8!=O1qr% sd(Qc}be?PfiH*|$)@cCiG=O!!0nS<)FhXrJT>t<807*qoM6N<$g2~#puK)l5 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/clockwise.png b/src/libs/vmisc/share/resources/icon/dark/32x32/clockwise.png new file mode 100644 index 0000000000000000000000000000000000000000..1795ba632e47a40775ea9067f6c941361ceb5ed5 GIT binary patch literal 1041 zcmV+s1n&EZP)7gQ4@SqsM zLO}#U>_MqsyalS(QfLvq6qM8y@nBbDXPMn(?GkLPTG}Dm-S>HLHrZ@>a)lPCYo4u#6uWzrl_7R{TxDS|D)uJ)xJJ)rm0o%?! z<#yhILZPs;TCGlq$P+-%8mT2!{j{sA>z$#Yp=%ok2!h~V$8nAW&(hv<{UIW+yRQ3D z#{fYP3>#xki^xb__XXgjG3FapmwzIPqQfI2BTH=o z6pO_j<#PFZU?A?AF~+=-N~O-OHJehY)Eh<7%OWzt%2G{wo;MCOo#`zA#bR+wxm-RE z>;_QPv%t9T`+u!vUax#UKdP!TCE;Tr_+n=nAem_rG6HXLviRhj&p2X01%cE@m}&_CJWy+>YH1^;K@e;Y z!|+T#pZ^4KRP{Diu4CU15M5r*NLz}pSomw_$7AYesg*Qz?8s$a&<-YAL=u>q;-WRva(WAkOL z0{daGNpavurk-=oCUk z-sj)vWRnNA?qQp+RR?Ch*>tvy}$2?0!t$Vn0T+FJXY z=XvvY4FF(fW@c+5k@x_3p5}+r8zS$;~p1z7W>o5^IZd!F}#i0l%P&w<7rvQJg_ zb!rZ``Cm{|sZ{D+TwL56FH2HH`b6YtDwPWV6M(y+P5(FCbbx;V5q5L&mchf700000 LNkvXXu0mjfdn@au literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/clockwise@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/clockwise@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cff6d2400ce371675c889bba7c847003f1d6ed GIT binary patch literal 1960 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 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-disabled@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7ec8f5a77332c6e218b4cba735c8079ff2c031 GIT binary patch literal 1611 zcma)7`#TeQ9R6;rkrYE&E|r}qWUk3E_ogvz)^cPbL!u!@HH$InIHS;IlH15JCB`b5 zIJ(W<3Q3F(J&%Lca_R9*DVMYUf^&X&-}iYw&*yo6cz<}`ED{m7MNLl)0I9g91CjuDy=0T>Jh`pntr#PHDg z2y|RRWbvGn9snChys_?nNhPyIX&jvhWaqQKmX=XZNQGgA-$@4!fnJ({lB?H0mnug=+X@$ci8&w zt+*ONnFkA>Ol#G;=q0~PoV1@8kbClIG_rV+%^}nD*&Ew|t!vp4li|0ha(^zl2Gm*% z2we(~pfyJK%1qtx)j9j5Ot8Dc)BRwO%1*_Zq?e7e2i%J{*tnT0Y}mLJ`e~PgvP}8& zfwgelpukHbz^jn$(SBC5jjd}{v z92sn^alX2$yBywBhbb$Z5C~rg@7X2eI8l$tv}r2AOi$@W2$Tx|%6%vYS_D4F2Qz5= ziigVoWM>2mPOUYXWu(28KwLV`2pG~vmgf`bB#Rw8c8nu42a_r>`A_mWJnTB<+Xh4{ zRW`B3?YNPhm1MZngGRxGZKS!jum}2+U%rK=g|Q(|g3uqCOy=NRzX^1mvN!_{uiVeeeiL+RkMV@*b+5lv7GKvy*g(f@O>SmE0U|iiSD|2Yh#~TPay=}mpS096!xV9O=+)N~NlxS2 zvar)oQsxVWiB{Iv)$qgmxs$cz`(naoqa|2VTUq$D0^5Le zOZ5JxgLu4^;8^~6r*H+Wg0MKWKDFQt`aqJHl!}jb9zG`uSZZaHKheMrpzD9%`H%Yp_F%x_yZZlC~{A$WJS}=byP3b_bP;%A3>3;nBS)z z_BFYAB9uotl)*7Ggw%VR)?CaxsxT(tmrW3Yx<(hQy|?Lc{}TqXqO%l#bM}@@KNqhu zM{8=aWTjf(tnp_vZW_>ZN}HbU)V| literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-hover.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..709040e7f6611970fe264ce2c18961b045533973 GIT binary patch literal 807 zcmV+?1K9kDP)Rth;0Q~O&;`{#kFbwC$oxG=~XSTI=Wh?+|?RgQolg(!D#04v(0R}~6 zgX1_4z5@h7(5$MrfSMuw%B{>P=9wilC0l=Y#pCKp_A2l66)ma#R51ylFN&hIjg5^@ z#q+#+5qSno%P~Y}<_sSqk80{zk=#nH%q+`%Nc(x5yG&X?F~=-seQGZWssP?cQM6P% z&pR$6M>uUBHx#rn#Lx%^b6crm8=)2_I*#@;d5fL+TJUG8G^rBAXn?>HK~SgCJ;8)tf+S zKtB^k-6O{^0`A51UIQdv=I=4zETdLt!SJ!(?z--E7?lGBh;6ERh2nr3a9wwD9CvGN zA5f<#GMr~BBD);Nxj0f&l!T7sToaMDIA*0(Fh^AnjyC@Rpa9VU94;CkU!$YAy`iDu z^w@%NZ$sC0Pm0L7LN_b};4OfNTykA^-}s2CKW(1ptqa3&Ua6W=&06bNYd5Q^`B_cT lCY%WU*Z+hSfC|7r(Kp4kSQkQM@7DkT002ovPDHLkV1lBKYS91y literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-hover@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33648dca1adbe585590cf44cecc134aafdf5b2e4 GIT binary patch literal 1676 zcmai#`8(T*7RJBdL?fwalN1fErKv5pO9eMnMKFyZC3spf47D^Es^SV#EgJjM(P3_p zOi3?Yv`hybGNftK=8{^9+TvDQV~=fWMoY|?^dGqQhxhY7&v~D7emUoPPH_P3wB|v* zg8%?%`cS;+Dkpsw9H!#^_)9Y?L!?kbSpWdqeiq2Nr01_H>ZW<0OAERfm&T4tjRn|j zwrzZJA}cy7CD!(0>V>-XlX?IE)AjN42+rWG)rOTF3Bmqn|7}f;?L6)sOlu@=v0Y=> z)FQ%;{GIQd<#RP;ZIM}qM7@}d!pxq^QA2PeA?Rw9KhokPR@<~x4eCpVOV!8k7V9th zg{egi9S4xxtt1vX(A_skaf3daT##uaPPBw&{9mqT zL0@B(_+e&RepRX^+HqMZQYQ&{&q{Ix!%JIq*)mYU8hm1TkAhePOX6$Q0qZ^j1^-qf zpR7+s2Us@6I{}kbjZvp9v>5Y`E2gglHBDXmq1V&_9Ajl$8XMW=FQH28oH}i0Wxy!m zCrHM?jBVrJRzF8Kdvc4$^$Q-!{VN5UcF1UhoDP~j4(IG_bEM){I8Gjim6pEH!OL=( z1Yuc`)6uZ@TfG-tjthn~B^i%z;@tF5s@NCrZj<8KYC+&wd9@D_2A18l@ywhkY#SG) z1TB)sG=V)pbp6Ho>pE0fBFS2(j_jol22VwwnAigy)F(Sn!-ttzY3F4`g%Xh1nPG+z z!11+53$H!=0v0_a^{WdCuir$Tf20EfctcAiJz3q3z{>WWd7gO*)f{LP&r46@@m)mAu=h7&ZJt`{mA@=*O3~<`9VagEJ|Cd+S<;Ls-|>BO@b8 z`>$e2Ck>7Iuu8NzgEQpr?LcF2j4!$mAa>4VR{smsFaUsDt%@)sf&Ul$5i{jwQR@)j zb;7aL9$+RU(DPA+fM5H^PHV=im~6Gm-&;m`F7RPzqqQ45Hrbtu4HL{ivJze8^Iy^K zwP|}#l};aV_Q6NhF6aT%t2Ifug5%>l=O}Z*x=*F&3FXkPFM%Q~;ZykU__F8ozlFBT z+K83Mg3AwxV8{jzi{rCHx6sZ>$!EmIdL>!vrRir zb>EQQso9QViz`1o#?^FSxK-wXtv#R~_+_^!YDsq|B8HqZfIk=Bqdoy?QV<&^a3!RbglY&W*p zYvF{H2I>5}s}8-XJ}82nh2Ah0l=sjNk>HhEu-d~oM(%@&D9C${SSPc4rMwYWE=q&A zcp-IVP8lI43>1O{5F5z--io(%CEUS(v>S;0dckE&u&~Kxls)oxbaX6S1M9`bsKvdb zxGX*KKt%JJI=nxAGq32odHs{GBsKLdiaVe+ET#D)=4Gk%td$Lp@ldgwOD4JvGI?9K z>9Vr{pO}gDd@Pi7twrIQMYT+z9?mB#!R|MSKC#@QgKnTv%3$fP;q4{Ia+avHX#8m1 z#xV|YF|ouyz2mMzC_;;Ag#qiuK5xHeox#ul^yu7bh!#8MP(9a(k}`M}oJ>sob0mp> zVl#aE0NNnBtjCVE(9fGtlB+&I5q-p~M7{FwG30(@L6E95dN32wNHwpdbSpk8r$ImH zX50Pyb&y=rooScGJ<{ye7vh=8k5FxBx6V7q|4nuexDVOBz0v_{B-^My3E<;R^J*bS G=KTfO_4c3u literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..5d79de635a026cf8f041a4ca90f4a45840cb60b9 GIT binary patch literal 590 zcmV-U0>#xoHuh<+uDkM3I!#gg&)U+`3ko(uAS8HXp3Pm@+a$-i3AZWk2Lrp0xAT3)&f66;qt3Wm=~IEJ zzD5B%rDn&9kaLz3Q-&FO2$tJk|d`^ z~* z{}quNtyW7nk71T&m(A=GaIn-IfiD$7=h=D;H-K9qgbz@d1AU2`X7-NZ0ksxFI8ueK zsw=?JLditruJ``cpfEHEz4z}$WUdNqoS50eB7BQLUt$rMFO>Fb6fd;f?PukNZNG*g zgr_3%ynmbTLf{vGh`b3QJlI~*Y{!)($;CX+PmSsswN%xs>WrDWoqC2|!aB0A{|To8 cQ-O)(AJCTZZlyd}P5=M^07*qoM6N<$f&^j%R{#J2 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-horizontal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cfba603b2f7c54beb9648f3808a61851479e4934 GIT binary patch literal 1186 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9FLdLYbLT`1)X6qGD+ zjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw{mw>;fq_Ne)5S5QV$R!Hz8x~I5^eX_ zr=_L39F+)&VOzE;{j6(~LWO}!p{w9t$2-%CPG zC6f)#8C+*tcaph4_rWY12AoXE-wa*Ob?YDe{%4nb#!P8d@i}`If#sTMj6e7NpJJG% z-Y~yKU_O6nO2^lRrl40U4R>Gj9-CoqbKcsf=fDPyrF={lmmU?I`MhW5lF~_WOiQNx zV$fCRXK>k~{_=q4hosquy@O62_Uu;Sa?mUlIl%q)?XelsllkT_nQu22xTvW4v{A)% z4fBMceQXb=<{j_on8Y(nD0Y3UQdP9q&z@Yt)eJTF?|ZxC-xNFB5x3A->6eSw&lcZ_ zjf^ag8%|4nE}YL8d-46dScOIYQ-iG8MPEucO!=g^_A4ht>yk2M2gw8GjskaXuMa-Y z(4??qe#bthg65+M%EkN{kHyx0-5zvmcU9?&Uor|y?|8Y`Gv7$j{LC-7_vX@C(S~hn zCUPX7v1Z8I^yb}kucdFNdZjM?>)_6iC{a}?bDnue@#9&_N8_Vj%WjQ&8~ z@U?31imi6639F5_zNy#|pmFBmrQX?$4qKz<8Xn6jUNu$M-%Im5L%3dJxa=v5#*Q?` zhC>E(dKRsC{60}eW2)Eeo40O7J&8J^m>RbF>N&~eV;{u}_64n6W5AHmb9UFZlTu1n zd@;K?i_Y0IeV7}(IOnJEfxri+_BZ62&ECy8r*zpA*;NrbcBd@&b8I=wI&J#&{O(0B z#FNk5J@;juZvFAXJ+)a`t2W-dU?>?C6*a48QHET@iCgcaHlLEH-Vn9+-@RKmO0Di> zm@Jb>{><=hgHB!I--AiY8EbQw-&a^vyJ0?G{Dmm{pw(CF-mbWu9S@9r{syatXk9i7 z{gxX!nv=P_R*EuA7K^~61ZttxwLk5{AbL6G3oXm

QEJ0N}XKDX8$9mGGf0;>AQfKVN{ zE}!2rKs*zXpNH{J4GRK9QS?Hq)p{)q!zq9?O`i~vkIOkCQm*8@wYD{icWeUyb8~YS zi+PeHmkTlPy)QfzaaHwH7?s`wSBmWbBK^w0Zw7XT_Bp}*usth=1r)z)gY{jC81Jn=dN+aCk{PW)AS3cUCK{Zqiz-U9xA5tUY3Is+4L z!N`x1bM8$MIi{+G$bljj1i`M-2SKpxoJ;e|6gXk6{cK_bz>BJSYacxAcDt7Wy!RJN zg*kLZ-m}0!1LJJLD?qQf5RqS1bwNa)Ycv{{0HP>53mjL~w}H*ly&doUiDBd;4OnYW zipb-@1prmOTSU$qW4%A3*;Ue&8p0<=_ z*^xMoFO0)kxixdn%>bu?+jD4>yzCU1qTU%SlfqCE?W6Y;i?2G~a22@#K{HRT;qyPW_07*qoM6N<$g1F_P A_W%F@ literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-disabled@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cabe53eca1e75789388fd0ba95882ac4e5476a87 GIT binary patch literal 1643 zcmV-x29)`UP)vAG$^1^h>`FEA2BM?L@>rz ze1^ym5`hpSA^b3?_`nB2nivEV4H|=*up!lXEs?Skt3utjbmty_P>Ai`ZFgp8rfcc< zulwC|=ewu(oO|!gxx~!4kfDv$gI(8M&dh57TmzsV!1n-NFbw0nBy~{IGoY)h>*Bt? zzMTN>kkA6aYldMw4sY{8o^K-~%vnDft4f)_t0g(Nt?@6cApXPG8NpWh6-2vHbwzW_w z9AxGu34H><901Dz^hx+z^ZES#&d$y&;?fsu2-voLBN6QdaJhtbgb?jbO-;W7fa|(# z%=`&}ONTdP=1eM;YOk-a|1D~bu{pr9ta*x}>;`a2(L;%jsH)oD(9m#vn9U7}qU;55 zrKC%jncGd%{3S}Au{gkW-6hQYE`W<9^r2KLb^G+`)Bh-8do?q60BDfVCjcxo4CAM$ zv__r-T-SY=nLmVl@Ox@&Yv+|3JOJpreiUc(LZ^hj3cy#EWsSCsmW@aq;JWTQX5J#} zmxy+DcXuzXtEy?|PWAPNVlwr#&nM5{{hJ`w#00L**_fX&P=nWib5 z;_y6gDKkF`UTA<{(DIzr!%=(_$^Sn(A*z;T>s0lXa0>=+Tv)OCHx+HYCbY(-HH zB3Nh&A;g@frlxNKY5)R0s1z25uxTKo>x#rE$|3~Uq!3Yi2n}bA!y5hvq1I()maP)C zVfrGXOc*;L0taZCwidvlO8XfE1#I8L%o`2E*cJAH6~7P}+|Au&+x8Sq)1(gdeSaf> zmBW56EBO%73Pn-&$+#IaW}E`x2hlqmk-ZTzP4n+koZ~n}M_QI-Um_|>%0h_Kx~~5j ziAV_&ISxZUwTm1egea?Blt{z@L{u~|*$jZhQL3u`{~b`x7_$&4l>^FY7bOyLK!DgD zpE;nKF=k0n)3mZ?z_Ce8xGe=Bz2AoUQ~S&92X&giL*fUqN--VxLpM>aTuyzR8HyFvq4UhVQq#1;rJEgzjPHC8lY9S#E!WtIIn8?v~IDV69;o8$!xGk4S5Uv)SxrzVGh=aI=K& zR}^JMV`JmTqxF-^U`fn0Qum104$Dj@Ibs5CRE39 zwgOl!Bbj-nnH+<5;se_iRd<6*P|-OJC8We0={7w4+3~YMiS9F$8k0R zP(07O-uL})OAP+F5Mpi|g9j42HRd?ZGXP$dam>7zh;G4Par7`89lTa^EG}({U7H)c zNU<4Z&N?Fcp-?C+YHn^m8K&oQ_*l;#X&F+n!HE zy8%ot(d4t5nwop->+5@y(37|W0Kl@WW<^mpW9VMtFCuzT*Y!=Pu>Lm)#>4^VU|Cj! ps;aF-baG%|;7D_GbAQqr{sm;VuqF$?Q91ws002ovPDHLkV1lFa`1b$+ literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-hover.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..299702e34e1711965b623b1af6e8b1e0d726a9e6 GIT binary patch literal 934 zcmV;X16lluP) z2PP0b7!QDWkO;At*4P*mgoLPtg43BLjY}-XNF%t;{C>}ao$b&qJ3A{Sn)q(>es8|t z@4WZs%{)<6dbKEup10O+2WD!u+DtDP(u;uU>FH9nT0H^0yzEjDdCzs-cY#8Hg#|=W zG@z;{fqejqMR3yNX$UVow!er^WBFuVk8U+p)-#++ADK&bB6~92TK4+lDsG) zA7^7$kxzJ@HWzRE_JM#{&f?OvGxYmf}^#t z01;_DZmSd-%5@iDjQRJJK-S=`R4VJ60WwXf?XHL01MT$1?Z5XHa8C)+LG%zy!2g3N zJBU`iJqyVF7=>YYOhgW$C(MkFj>A#fTN!0o$grx@T#f~t#&GwSepRE zdN+GCvMTf?;2#M%1e^i}0DjSkpUe*|YCyu@0&d!?d=r1fMtO{FrCkj0NP2JGT6?q; zcy14Po_AJ6UI1AERcr08(b3T#JK=ZzTOI_#4##oM z16vj4Vse`AlXJ^YQDS%b4cxw+Y52Fsn7zL5FXrJE+Ki$ono!kAU>M-Lq@sc(m5_*!2BSMWU4c@n6lm$Tot=C90Tt-pZTB&=-Ijho z@44s9cfYyMnRAJmaVf(yQV%vwa~U(&0hkS-55Rr^&*-}TQ#N@}wtGNZTib-*-rf%Z z+%7Q-059sg{xpEB5X-6nrfE)P=C1+F8>Z^k*4EaQ)z#H8w>f1^fY#R5nL>!20Olm= z@<}ureW0qUs^3jsikra)5Q#(r%)AGZ##@MjA!Kg%`2GGb+uPd<+~nqZ4~Rq}Rk2vC zk%+DwY>V8VHk6X=o z3Wvil0jQT5582DwQgIr96Fb4BsX7$UH0jtb zR_CPJcmPm{s5Vun|DDryyZ~vf%ZlVAu99>oI4p>$B`rrdAb`i?Sqq>!(>P}lw|ESP zZf4%7>-wkZJ~87DA|)jyM*&=K7{(Nj$0HTgw(X4omZuY+i0)GqWtYrWT3UJf4p0II4!2H<$I_4~LRd#x?fT){u=CYbjARI|xmD=RD8or=SSa3oF6FpLT!Y6K9M z_!Hwk?6Ka)364O(Mh|xm+dwbnolT)(!i~NaC{wOWRP}jX*PqISyJLxx=k5dS0&vY> zTMT_@>VFk&BKcGv1s=@zu0okQS7v4aYjs_3NSp9EIGQOMi9{~5ZF>iR8wT5K#PEal zCR*(S!^ZJa9&YwNiYt`aGP4a}m9FdWWK0+?LRJ{1e%Il zed`l7z8k<&CmRpAdtpKihr@3HSSd698ry*bvGdt&lc)%_zIsfe%VpJ15YZA%(;Q02 zI}f+7%nXx6-GpZA158s&vCz93`7~Kp?Who9Q7{<%%@u;#xHT3Iho1oOg3NZ<{sl$q zEchf>WdIx!LevI>!N1+&mbGhhLtUhhfrt*oVzI^L<>ei2^2+wb$z{yE6@YK3dd$4r zvaCBQD=WL)=9KlTvxZ^R5Ycu36BAVV%Io#sTU=Zm%?6*W3jhG2P^er{lufvJuW*ux zp4Bw%b!3?Tn+irmfB}R;p%PV9tB9z>vaH|B%gcwpP2~dq1Fs{4KsYeDi2wiq07*qo IM6N<$g0fd1CIA2c literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical.png b/src/libs/vmisc/share/resources/icon/dark/32x32/double-arrow-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..54cbc2a4ca8431a346850fddaaf34abe3f72ac73 GIT binary patch literal 677 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 XS7ncrRLVv600000NkvXXu0mjf1yl(P literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-disabled.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f7024e317183622089537e75167c000083cd29 GIT binary patch literal 1098 zcmV-Q1hxB#P)#C<=n8wCYAgL{N9G1a&2dVr^|J z)TJQeMih0UbR!Cai;9Avh_tm7iDuq=Nfv?_lKDuJ%*?yTMc)gVX415D#y{N6x#zy~ zyXRi+IS*B(->B7UFYYxr$YJQC#l^+DMCAP-2p;S=KS=cj2*dC#z^Ll!VFQS&_82_R zn-!5i01M!pd$?Myo*Ndxt_&DsP5?HYP6J@AJvFT0y8wLOpHtOmthG!`Opr>YP}TcA z&wJ#50RY|xY@tvq7-Qa4 zRg=%>5s__&VzCH-s=hNcfLg6~5O~g7%lP^*m2K&wF*~#Yk2E1?YCW z+qPsf34n+k8tBd=^#F*-Wq_@%tsa2r7!D5|0Qmh{01+XbP9q|Rf*_b4Du8qD2f%G? zZ1gx~vsnOC^@X7VRIAm0MC5#@)9J}VCX9;3&}ZY^v&O zVHhs?zW-hj1Z8eOyE>w1C&z%3qobotPEPjBHJeRVR#u4C{UsvbIOi^@>Yv7#FM;@o z)`5?VF=r~3%HKByu&}T&Zmqox++HXYwrfGGZnsOlUZ>S+Z9maFmCNN=Uth;LhpKjr zF&~J?yZu1=0z_GO05}IEN~IF{e14aYsjF_5#?QY;q9X0v_E_I@C7WsTGUp5GTBf|xbNe5k4q0a$Ap8yh2&$uKf9vTs)U zWZ^pzIX*o-{qqe0#0rAosH(mMJVx~201)>Pi9`Zp4EcN>Yi+;4KN(|=RVtP5 Q-~a#s07*qoM6N<$f*IZTz5oCK literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-disabled@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e74d1504964231ada719d0fd3cc798ed1e124af1 GIT binary patch literal 2298 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 UO%Da%CIA2c07*qoM6N<$f&)uQDF6Tf literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-hover.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..e26c88a73cc4d03d474a5a53fb3cf68f78124cde GIT binary patch literal 1183 zcmV;Q1YrA#P)*Z=W3{{lN<=RAKXBdW0R?F8?RRQ8SejhNZx~<*-qN>vZ z*=)8|M9u>afVFnD@B2sV1u&xn#+Xfj^IO~tfa5q@>t#LzAP9nGs`}!%j&dy8$%xIP zsw=bE?9=}X0I(Tw`r_}1^eWxa{&IYK-2pP0%u*3~VO&SK5FH0#(4J<*<`I!cgCOXr zD}XWPJykV*(P1JA04PdNJlO?R{h)3DnM`IW@bZLSrr#c$R*;V?U3e@E!)NLO;5g2^ zfZG=xBG$sR0!8V*)`d;A29R7X_dp!S{eU~Jml)L{juduO3LbISv)oxtQW__Tjai#Y zr4H8$z>VX0orv@RG|Bunqi*BWf+7Q2!3ebu2l{$ zF%bY`Is$;Ie&%`JC$%yzYuY)Ws(%SWvsqY)jo3i|L?m5n^BDjlat>e~iz~6qI!uuX zthMcR2LR3jEO1&Y0mU+Ge?dgjVHmd56~J119I%VcL(_@|;uDiFs;|`*!1w(>MdVDg z+{4|*tHg)mZbt3z0B;Qr4&GNcfRc6tEO%B{0v1bGvu$N3-#J`KZg(X9Z? zcoCIWvH{pKY|nF~@G*+5oPO zZ2=4n49syH=Nz#3Y;=Ir(YMp`jm%?3;yHY0B?)HFn13NYj_0(KU>2%cG{$@`A|F)) zsR~f)!Ybe>;GT;1(iFKXYUuv!t2t3m+0`fi`yyX{V!nj}(Bf zt+m^H-yggw06;dIeMv;V0i1#OM@|-ZQ{>8Z>#M0jnrL%6NIPq$g6y%@Zt;D8;D!Jt zi1i}!70^7Pe{(9@OE&JpmhOsMRg&2}?5-p2RvuPG;FX&KlptD-F<+?aQvefsnQYv} zknLeab6nN28_sW#CeltPX?IO|&m0kvjV&!LUAF{KRv3nzs`>`-ET#VjfN{OVB^}~l zy+~2V>5C3?g?~sgo3z_W+U+DcX?(&MvmupARi0h91yEKdlUZPl=>Xb+R$v*hgwnZk zu&|kXO_~RtwKPZ*B63nh-kEBAM*!6nhT$w#?FN>`6mduZoB=j^o_FAS^J)eF5ClOF xumb1>wtAko54fR$TQm1bb(c2R{+k(>^&gNrGlMTN0c8LH002ovPDHLkV1jh|4;cUe literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-hover@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f328e91a5c9780b2f7964cd1538dcfd2e913efba GIT binary patch literal 2558 zcmVBf6v(sDG=l(ycmP9n?#0!LIABg9qq_CI_;E#TKld2)TvHiv@fG| zoVJR#j$=n@>$FwJwstI|?bO=(R%@YxA{1Xn0Rau!oV$=z6e1u2ve~`o>4#*)-DK}( zH`!g||Ir`iCNNF0ir! ze5wv9B?3IpJ5yCVfQceId=;%5kOUcS`kK7M$r*4(EABsQZ~&P zvvU6Y`7c(ATs2Ti1l&xZ@c_=bJIhO_`Y0*_thIB14u%K-psJTQH8pLl0Jo~3*a*0Z zJdFo1#@tapI@QOB5zyAwHnXOt#sYN!J{kJ-BopO~pxYJkc>Ld$qggqO7y&gkH8(TR zcz}KWW_J2d4Ru>vW?of8K>@nDy6S=Jv$n(M?aXtuWj1kAj|5#W_B`*(3URC`3JQ=) zrEUVIWbL-hW_q+6pA0)QPv`im>g^R_SYd<;(ACvdFCyQ}+76%H{yzuv+x*S+=;2_I zi;~IY=PSapf(R8LolgINK<~HvTR5(V2J;<0yZmQ!%Bbp{fRvwR<&al^&d$yms`{O* z?eN)^d3KoJzRXKGqNwVMj*gBmRDx)wkXL|oI{keDBY(o*%5nW*m|wpz&kRkzgHKQt z3=?4g{{7Q|!QNNgumLZK{=dd)aYSUfwf2i;=2Z(bh4uf-F?}zX)S65t*OY~21u-aqG3G{K zde*l7s~mOzE4m_wV@D=;jo_TSjd30YqN=pFx1SM-L@Y2Pn{iwZ(Z>k@I{lrznfY7Z z3hHDgmreNgKxKv*W?oLds(!htsp*Ld@gFmy0Fg-K1_F%-m?E=)Spb}rBf|=2kJe*48co za^hQ6Pl?DHU_KNUKv7QWG3ul~o0L@5$3-L~BF6{nEA8~9iii%J@C-ZUvDVfzD8N(< z1{V^=r#M0#{Q`(cPdpyKrE-+Zi$ePW@11rs)XJ1l$7AmFTtQV^Hf`Ee@`=;Og-`)h zb6@IHWOisJAG!lUvo;oswTzirl@KaGBocWiXxGd9&`Lhk{W-R(o;y}z)k2{SkzGN1 zx;Zu95b^jAyj~tmX=Q7!>m0+=7qVE(i3z$FPLtF23JNf1&YTm# zwyZrxW-;4@zvA2dS4hz_XshZyjPvDiF{i^h`{CzA!aFt1Dc(xw>D}Za@ONA zlz726%kzDAbI|qg(KMJvERSBpEYlq3o)nRFz=N?^thW${k_7-rBoZygm^TQVA}h+P z>GkaOHxwvY7?Y)*>86o7W--OgW|B-}f=;4VCbK=gooxwq^b};=ou=oMjfXG`gBOWJMrP0-#Wfq6I99Gr)oO8b(vj70? z?d{FcX!OsjI&9IC(jNBu8)@@jo%N%s?7CcWJE9RP3mPOZ4Z(>8U6nMh-{o7kwT6RMj{sKeM z(a~{%i2NJ~-8ksu6rKJKy4+3b%7 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-left.png new file mode 100644 index 0000000000000000000000000000000000000000..786aff588c3cc41ada5dd58c78b6a3f7c884b9f4 GIT binary patch literal 824 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 uv%sx%d zm3~AGNvJ^l4Mp&P5JCc}Pe_3V@qj8(6_lo^m0Hhu?A;X+E41sZy}SOHIXu{7?D5Qa zykGT%-;?j1bIzUfyXW4y=ggRx8FvE;g~B}mMvopn`j0{M5_@z%`wrW-F9R3>@XbN= z=x&IBVzGFyZQCCLAjfgeWV6}7N7WU3cwhSl+qQp%rY|Ifcx@2f*hfGvm-~X0@)rI# znGE2RrfIjL=*K<+q?GRLyC49UqUy&w0(@rQg~QCJbY1_jpN&{YfRyqo{CyBn_k!3) zfMFOXgb*K~MSu`Z9vsJUMI6U*PG+;&e}>tKZ3Ga}HFVs6I-Q29s+}T22=PikJFz6d zFpLvK^t9U+LO@kjq|@nkB((6Yd_I3H%vLN3Afg|`Gy6ga2qBP8r#nR@fY-xp#g2eN zp>W!7_Fbr|>WzZuP1F2*kiFOu;5g0|G@tbVdL8zQg0Q_HRs<9Zh0_4eyKNt50rZmM zIL^0=#iH(KGgbsRj&l_uv+u%73=t)4+kVy0W^4#B4C6ik=iGMC?7Q%JB77&G&mZ;5 z#fAVOM5NhwA*ICRw#t%ul*)AE!d$jRFAQ&E;|#w=whtv`&4I*S;4% zdqGM{`NOvTVa^6k)4ZRE-a`ig$z-xUqX!NgKr)&1)h(4us8lKdni*ofUhllTr6|fm zCX-nn>IfjBH__od0Mu$VRI61~tJP55dcEG3^EeLxBaKGm2fz?7fkL716#$Qi$s`iN zRejsGL+vy3ON)z(hllpPfNk4{0sPFL`#UWBnYn8TF!R5HWMf0X z($dllfWvM(l}ZK5c7{Iy2qA6<$;O6&dcA(4vmNyK1Da2YPB8PwL9($S0Kl2f#vlX; zAp$GIaU$R`_eUa;fTAdYf}S&iEv1Zi1mtqL6o7}__UPznsJw@OPcxa!W{_+w2#`{q z2QcQg$HvA2WvkU{=gScQct6Z`EC>MbJ@OrRWFyzWu=sV?$kMW@L*{6S1y;k&i_R8?%dqmNBzdy69V%2{7C?p zi0D}~3mU6YbxqTJMoRe>fN8gHdU_foBO`%2%#5|QwXQzLaef|Uyj>;0vaD0g{5k;F z@%H`n(=`m^t3rq?M0B>ZUsY91O-+UBmP#dW0(5(Hbo94T?s-=TFbw0N)+Z_F0z~`> zphBT=+P3Y-iRd{Y#0js!%*;&ax(Aw>U#V2;>SN|>hYlU;IS}|^M+BIr`86VXMFQnY zV`F1jTwIK7S5XwC(`ighOhm5vS1Oer=ZWYynx;i|9*9VQX_{wSCF%!!jU*D7nwrAI z!~}?_@9Ya9kV>U6GBSek@$t~q)(@3R1uH8n-tJtZ(fIyAhR}zAmg7GmqBDNiy^ePx znM^`T2_Xcelu#6C|`3WbJNlZ;mVSIdiJ7aAdjYb12 zD=XOA+VWniGxJ4F)3)V2(2M|Sn&w3!x&+`JKcUacab`xTRKnWYnm6PDU<<$tnx_43 zCu1b?`TPMQdIZ3NpTPL|IA&*OBR!UO3y$MpeSIBw?%e4qakuaZfD4+YeX!H9+Iv8u zP|%q94Q74;p3QN;*8JAi7Ru!^%H^`(jJx=CtyX*K*s){lK>~xIXA`t6Yo3{31Mnhz zh?t(9-nFIBXf#l*R1&h>+kH!;4K861TD)t-b!qqL-UigUB0KCo2Z|S;z1I@p|>-VQIxLFQi$kd+qN$#in2U6Hy61&v>({<2NJDf$Ta|uhKT)5 z)3gV7G|(Pl$5r8MHv6uoX=j=FVE}Zm?Ld$+J_WpQ2C|Eg))*O~b-0PlG&-~9x* z&~^PCP17D|5#hd={Qn`qMT>|pGxIY5`u>6Ov%-G?ata!@%pY^a00000NkvXXu0mjf D)te9e literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-hover.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..cfca1c2a75c7a8a0a02ef66ad01e74c98effee8c GIT binary patch literal 1185 zcmV;S1YY}zP){=oiszt;d$ON;3I48im~+A0gN$w01=U0W9g!*v6)+Imy5{H zfB>lK6V1)dXDa|>a|c9Z4rAT+=*W*am+4fHsH2f;sRvM1UF=MlJ7A1i4;%$% zBxTBCpPLnWJ#(2NwSkDVkEAwFD1hs_tpL{AS48BK8+xUz35Ln?0IJ&Ky6*B)enJ7t zW+Dp!uIj~du12O~NPuwh-?edlh*ky^xf=DA6SbzHH0+EOAd|^F2rSEo-Gun%{7iYc zH2gJI09AbnFzN7QMgF10qLO|rHh^?GJwrrx4(b58=v+BpD|4uoIRNLIo0~8EXMlV@ zU!BQhwvVOt_4QR5WA-arf5zWOL{Qe|CDxUOUySa%FMzJDu9|E%yJKi*s2A8fTF>Qj zYklAUNkrDR2M6en{&~z(Wd<$IGXO=$aXug2d)L>nySsa8DwTS*s;cU3RjmUMksH}; zcBQI53M^99jUuujpvXD@D}D=)miq-^rLz??Z1ZVDL&NX)1<>E$UtcU1-%KWxJ5_aZ zKoKu&V_sqns#*=4Db)rPvEgYtfbVtYN3=VTsuZ`7r$8bopeA0`|AD(y$yzIK}XLqU>YwfeZ z0iX&X9iHNsU_ZCUX>3R^*R0_2Nn5Cq=>S8(HrI9c-K|eXb}kEncSU4#patoUexxHf za!-g!R8eOdX)sH06RW6}+LCl4kw|Q7Y;5eh7kI^bz*@U-WCO9q*Mgi6zo#=eLV@cf zNV3G)L{h4$kvgWy?9!cPWi&R$@3pamRBAtIMjsnjF0X3ZKJui3Z(N@1;C zEh4SJ8sLKKx=j;d4lu55w&!`zS!=(Z$gTU|QeS>qOt_oz00000NkvXXu0mjfGGHO~ literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-hover@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-bottom-right-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c94a54325ee56654fc3a19bd17ed93cc4401fe GIT binary patch literal 2426 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 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-disabled@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a33e0c9c91b9056a0ab81811f549428d201a4b4b GIT binary patch literal 2250 zcmV;*2sQVKP)5D!p^NW4&xkP7V!YG0`68xK5_ zHh(1vP*t>|NU5Mw5r~2W6`&MI35C)$6(s^5FpaQh);PkJL%MdnKgrJAIXrlGm|gGu zti7|@^pjSapF8({=ezfwbLY%mVrC2@=H}+cM@B}b3x&dblI@5jE8ht;P1`4gxN2F} zPZt&zib=IIv;qhr1UC6SD1?}^Eb9mJ^Yewix6|(m`vu#!{oGOj9#$0PpO$5vo1dT0 z_N$$t6@ZAkaZ3SsR8f=#%d*ZbEiE0~X*)wJKywNNAr0VB$8k){vd%3oE*{u!J2VVY z;M%oo87bxarIhy&(F}lTA}TWT=UQdP#>P;q)eyk9Mnun~QmH3rW@c{m()OJYK(Q?A zFf)IOh&~SB0|0bHjK*v>3n2v7*Vl3L=FK1>HUK=WD9Tf_v$N$mWCkL@+}zx_rfFYb z=KBGB62N*`P9tqF{7%6q!s0 znx^$+XcSsPR4SFABL5|#CskE_CY#OHf&K|VrBdlD%=|5EhNvyjGz}9I6UbyTAfkS> z8HgA{ECVnyjKYEJi7Ec5n*Ct0+W-IP*rtD?eq#MC2riffoioHR_uE_ z5};Hn-NVcm0c=^3jg5_A_wL=E=N=TKl%8XBUAJ2i25=t0DZ?=SyzOo=P4j(3bO9a4 zw>)+xli6<7+d|9mkTn7WIM2){^ZEQ+t&7_dV19o7gNma34#2ekx~6HEnwmoRDz^y*iOjr~eMX@L%7xYZvzJ-P==L9z$l> zwv9%k0o%4=+cu<>a2y9xN-#5KXJ^|YMvOIp3*coT#N)YK?yo^@_dEj9>GZScFn)4! z5_|US>8T#aaZsz(P_Nffuh)Z&==xlQ;SPWw1NgdO7+0g}>q!99G`~tj5Bsn6VmvdW zTCJi|si0o3_tG>R$B7#1HWB?$N_o1MG+OK_V4CJE5xot-^KO|;2Gi5iAy54u)oK;x zav8R5$0>dtKoy%WNl~x?yvWR_^7;I~Vv+G7_6Q)N)9@Lusw$?YrXrtn90%90U&pOm zw}Of+G4n+s#AVlY=hEr)TsE71r&KC^nwftcQgs8sPo$J5ipAnWTst}uO90EVJ_g{6 z{%ia8?TcK-*6VewuC8{A#}*O2z|1cO%~RKPMS$nO4d4YS<*8z^cr6b9FvJ}JUjyK= z(KIbG&ev)+tgfzh&eyk@`Di|$|2a0pQy4m9X%)ctRaO1Qp+krM6O(r&A_Zv9eQ%jd zM3LdH)$=~%C4ke5i;E|Z9692|A?C{oRscLNggBea<(A_-+Y2HEAfhh=@W%T1_;~2L zzBT84#@}M*2lDy+dBZRQpX-F{x)mYB6X|sN+r6f_dO=ha5SC?K1K=ecXJ%%QPIrCb z0|2b7toTEm3*dgkFn-wwu8AOY&1#zFVfc*CWHO<~SF6>w_)bLM9A@Kz2myo;_xaDq z$HTK)<#Jmda!FOyliOxCAcP9Q%%5o;6A?5`3oKi!)!G(0MD#=}>oUv;6kvIISp)FV z*7@k@Xy{ws#>R&KbUl;F{HPxUlSZILjYi|c@Ol5RxbM1d+uUd7m-g@9ADW6876c05 zy6$2B`N+sfU?rVjY>4RPevlgk!hFC-S_ecFDnQ3NpHr#S#hp_d48jEPHYKFf>CjBB zUjQO9v)SxBePK5Mgb6U)ItWW_x~|*i{h2v1`!b9O5$110|ziVI@+~@a=DDPwYCqi z%K+LIKthOza=F~)zOn8jR4L`tilRIM-)Law-Tp#hi4Q4d=cTsY8bov@m&?7mbE?Te z6pO`w0C*|1P{<0fivXQCisDdjP2zPffr*a!&t{M5o`L1#H;KE88mgTa;w?z(Q}pwVccR;#t$uT(0XasN^-mwPn{ zl1U;^fTl0-ma%?c(5?50=x74`5=ZDVkBCmRj{T#cOYgs~>-ry(Aeb~l1<-Z^-f`b%7tR-0i&&^dLZ?P`CuZ z@9a+XpU&XX)2?PAM9bk_Fbv~Q3Gf*>dJ>?y)P0Sa-xa+NY-6*u>$(pW3WcR4$lMA1 Y54)DZD#_MD{Qv*}07*qoM6N<$g6-r*0RR91 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-hover.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7b56688eac1884f5bbf8070b3c5ea06ce91b56 GIT binary patch literal 1219 zcmV;!1U&nRP)}2ph&<5BHoaM#DoVDeK7Ia@L&`* zF)E41luIH;jWLpFOe_Js5EG*HMZrK3?_kDSr7#G8Dn}9iNx`V#+b6HkJw7*TvreThkAQ^Z}~p}^7+;}=Z*zI z@LmuEOU4V3f7*g{I$bRyt5mf~L>2-!0gHf{UD*!i+ci|lOaKMman5Z`CX?O&3Lp%_ z8eo&EZU&YE-k;YavJC1)4h%m|PP5GORiJs$eSLjX2L=YV zsOlDA2Eb+Q=V$jVeeMVP^$Zuak72!15^IUmXxnJ=?qZ5m17v~MqbPbhl}i2imjLN> zxZH$|LYa8=tW?nAZKBb(_qKe=yc@YNzp;jJ5Way1Kf7qFiHDAP9o}z=q!F zD4%3^7xj9UNwLgs=6d57ilwSYfK$ep+f}u-kX+ABL?ZEhfg}tYfL7qNh_nMQ`@TOomhd$Jj4=-ZoQU=@ z$nOQe@3qhxdjLVc5Rr|(?}uaL3xNkSnarN%=H~2p!g(ud!PV34*CD+W?-<@fR)+wn zWI7uwo+B<*z43Uwxwf|U{6vyZ#75r*Yk_#L>nex?G}$|eOBKeLhs!Bm0$_|;3UJ1q zDEI`!Ji7|uOd^puP)_j@0OwpIK*ogy-z<}&f@!GgK}OE=$pa9Pg+pB8vi28zH<+9A z(=W>{UIftH-CY4BM<2B{QU`$Nc_$|YAPmF3K@em-&-(@NF6p^q05cl^=iI&^2r^+9 zK2lbID2lcLHCG2&iVv)qPRUQJ0nb|dYFPo2$z+$Re(1=te|Rg$b9;+69Lzq;$=t{J z$6a-Gb(yjP02pJQGFTeCRpfMd)CP}~cPqdJ&-2>LDP92ZegAV2>1;5!mE3HL?LAnj z0N7PuU*BJvq6`36?J+AAGmVrlv}(A!1w(ls@mD;t)Y_X04(zE z#u7(WpD%asO8@{=^@*5Nu)waPN@|#AR|8xy#%!Mq@e+V!GWjX+(R{mxrLj%{+P)ZMnzU8g zUuYU_`RIUcs9LMF64lzN)27l*E804`4hHRLfvS|1wU9Mi;^)+XtaN-P0i5{VvpNRqtO{-ZD+y~Ff;|6;03TQ9*>7j)7;tB)m1mz zc4#6*f$r|^Qp>XDT9!43i0T1MC!!EDuS&>tSx4cM&5-b9QgNAxp7nSD}&*szi z^&mi+rrE;GONnR^fO!CP+V?RI){g^M8VV?G7Cn9vo2fxyK~ z0!1Mp91brgqU`|g$tBy%XK-G1;{u<;d5+>D{|8t2BCc{T7|K<9l{5`a+G+&lB2ea; zbe5Tau9SK@6bfCkKPV^x;c$2%5p4tT6(^Y(`f$oRfz#>)delkuv#Y7<3X`c8P1iKxb#?%|eKmkfGNZ3hmZg_-OD?xQxQ}v>TM50*k!ggkRjA zP3#wAA|Mip%wgvJ08(~j3h zct7LP=?39&_!c7Ci!|r2@Fl!6_ySI=6Qfm~89AIUqiQVBR$!KBg+|VfGxO#^AaFEM zIVu7=Iy&Y{DgO#!y1hPXeTYNx7jc#QMx)jd9x6ec2f!FPTFYq)7RZ&jMOy-GSYi(_OKWvDqY#4Svyr*;*@V#T<~ERc#0rRD(u&U$$M}AQAoAvaGH7q|sbYfp9q7 zKt!JaC{5J$s5a~y*a4Lzt`i7;c{^IPwWy?<-8A<(fPP#%BmuY04Zx1}5)A@3miZ6P;jao6=NhHe5`-Koklu~V8ueZ(T^PP)C zBFmZi&&l>jIzIs5Rm-wAg+ifDw|=C<6#=Gc-U;9v_PWD^zeEh#S9_mq#22)6D4`MO zAd`q*X69W^^HeD%h%!!*7=V{8%i0nOg}U9?pABwDzz<=I#9h|0oN<1pXhy5&yXo`w z6K38J2n1dOa)yiaF7F5MqNZs-o;h>oX_t2AL{0*R=6-UUYhe%{#CK(Vr%uenz23*{ z!`1?@wX3UZb8BmB+>K$joM0b-mxK`8{eFLsn|Jd;P6CMNTL5ID+-V&~FMsYRUrsex z;{A@@`K!$QU?33KV;F|xd+AV0^$8)K@_M~L%QwxH4{{M806dx~Fc@v|y;)zl$MXm# zp)yfa0KOgw1oq@>STGno0N_Br@8yfEdAM*m+yWq(aqUqjae+@c$~TA>%nL}~CCkjbySBF0nXL%~M*@^mE%x#m%lUj!FB&0i0fmU(D1>q2foy9) zbK-|W9A`P=C^$pTw-?#t@$4V7W#fcw1SCI7IM3a%Fz6^ajfSu7i74#z`OX!@x^X}@ z0vZxOE-L38sF%u6C5A6&nb|S>G7;fKfCP~I2q9Z$w~Ff0kE%JdFcS$G35Z6cwZL$` zDH{QksWzodM4uMOwsC=Gn&t}t9<)~yQOX9UpPi?4Wf}p@ywNnx_4Ya;#6y0+-+3E( z9ids4^^BDAQP@TUGf%M##n9`hpq!?pSEYQdK}5&=e*b%8H?=qrp-|`~fZf@IuBc0n z&q{LNdT&7P+}r1Mq>a>wg)GfyG8LD;$YLe$UKb z1Au-$i`Qct!K45%V(d&n8Ky$gwO!zH?|PI|&9HK!6}qm!Sw#EC40{yVf}x>WPBo~P z3lZb~tj+_#Wt>AVpTSLJq&N@Y$V7J@uo0l^`f+CdL!#WM-S6~~K?WrP&7L*s)f)?8 zV6l91uyHG{Li$4(^HVh+s?ree}g@B<;#Mcw$Ms1bTZH!HU zK$EsArH+|57S6=tVuW`}spKfA7BisBJF+SW$h$F_Qf|rLH4I~4A&o31Mi4M`hn_so zH%aGFARy4F-Jeo-BlSMua28NXJ&EKfs7Hfr$s~q=T$JAXhXR4X4U-E190&*ogU6UT z8NzPW){Gbh0&>LM7eYK<3?qvP#}$s5A4g&oP(2#tttrn#a&h`q_aVRE|5h=KEG8TY z7+MRG+t?<#I{86^fW$)Wz7%;P+E64Li;AozoS9kHmrc? zfUfIHGroKSAm?U(D3g;6ZFc7YfSEU?zjGtO)oDj5^@PKt{f1#2ETBE(4p#&OgTceh zoGHXj_}kxHaQ&~bp?!fJ`)>5!2l5~w7z`c)@Hbo4mcpAe{>bZpgF=YJg16T&jCYD) z&$uHm0*1D_2buZ*qW6JOd@QY$dMFqSMvGz0^}zoCN^l>w5ndbS00000NkvXXu0mjf DezmvU literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b22effe789c969a28acbf8db3ddf1300c6ffd64a GIT binary patch literal 803 zcmV+;1Kj+HP)1QLrL{Q0z$rLGa*F@GL#4D2P(1NZJNe zR7CLLMSD;|1QAb41zYi?Lb9__FSRxr52g@yo`I9hiR15e!B08#+3L2~h08SQ*#e3;=y3(Q#fSMVo zo^IdJeDDfAJw56E{{H!PnzvK6cfnu;9L#(=PI#RFGw+VbesLVgK;5G|dmi4h40;IK`6p@1f2tZ#%wgkWs(Wp{tG%f)S z!*HYuj)DU~F96H7?b~s|0f1fCofeU2ZRWGdWU?5m001!a#Wu1f%d#?Y!j}bjYfa zeFfk}jnueO>gPWZ003jmg%z(Q+qNgV1#c+ey6)?xSs8^gz>+d+- z^?m>PS5;T_H%-ipEK;dd=FgiqZ-Hf5)g<$XB!fqxSS;Qkgcx>R_nlg;W+#;=vjzwu z1g7<^6hc&7*L}TOty;0?i929iOioVD)RqUZTGO5w+ z(`v5k?rJm|H%HBrSp%9&z>fleHB(blj_bO+Mn^|)Qq4nI*agPM#=1PuyVdi&MMTsC zU;z=?%=~D;5PuQTj(k49t*58wOqkr)!T`;6-6hQY01@2_;5Gm{;+c)-0lcJX+VUWnBI$8l~aqAdU( zi7jZn{6<9Ea=F}&QmJ$ah|d73*XvI)^9z{XqO#67fGwWq?T&0ftya5H2(bs*9rbp+ z8p(iqy}pQ8RyfR<`Pa+;a@Ow)W9)7w)!uB;DS1n^oemwRsE!iB%Ypannx1Db0;>M_>? zuz7TJw13&MWm7>K%%}-o0I)|0v9(+-k4MyT6&(#Aq9*}p5pw*^%qvXO95jsJyQh@$ zf)HX;p-^}+Y?&(zopu4?y6zYN)uN*Wu-q_=4;0%cPTM-1<2Xy8-gyww^I7gZ(7^y9 z#6uBcH*&dLe}wj_(AEHEepody5pB9$b;&Zm28@r77XjR*824OPSJ#`0ZBxb9fQgBT zJD~XVXXgFg-Q5?JRi%ip0aD5(szHh9fNI;cY4;4cQ!ysz^Z6mgwyD$30Hu!-h{!3G zN@o@Iq)s~ndQ}24vv2h!i})F!0Z{!2p<@*$OSCkg(P(sI`eTI95Yf+(6r~I~j?endiFixAOCUDxkM=lB0>g0OA- z6oCB+=IBF4I}bER-SfQln0|GQn{Rbp|0IF9u^|A!w(V0y^j_S-iD)e{Jo>=wbw7Z3 z#U9sn{o@$pCBlCO=(_$rGru2W>nl5PJ5*`Ha3W&h*qmb5ClX~)Sasdd;y%b*8a37fTg9S z`+yUw`n-skOeRA%o9zs|n_`e!twyz4?EtCjH&GNFo0*x(-w`06&p#?6UjxGc>2#Wr zkr5J!M8A`W2c=S}P%4!O!w_IoL|*nh@5|c)s47>kT)EqEoYzI<4InEb3=a>J&1Uxu z5=9Xk8yi$A6@XAgUi3Wg+-(736^q5uMx$}88zhs-kjv#T#;~@whA{@$bx9_ZB$G)} zsT3k|OX705OsP}?Xo<*C&+~q~BS1Gu5Cm@mZvm+oI)#&;^N}4<2bLX>Tw{qT^*_F|Zfg;SV*>*Ka2)3|AlkkMIy!LR002P{JT_2(@$vB@aH(Fe)4jZ@R4V>?WS{^5 zs`{I%5(GD2>|`&wM~Os&Fbs!)R{%uh^L@Ps04Wp-7lDTl9XiC& z&`?if6h&04RjysT2JpSL_UL}^0R>J0@k`hvV+@;{n=#Bu7{Dg9)?NVqYBU->S294Q zQi(U_x6{+pzYGKbP!Tx^x4KX+x4&6c^;BFpkYnh1-gyyO=yoBVy{i5&H8u6~Kmh=a zqUZ$NbRnL-h#c<@-0xG+let$nIHXiyG7`$U`p;=y~?zC$@c z2cYf3pR^yK^VZsDcLog70cgAM0iddS=D#EM@vrtS#rVE|dbjp}0n>?ofGZwGl>h($ M07*qoM6N<$f>s9*p#T5? literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-disabled@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..90c1277df5fb3b30e1bdb261a3b0cd935e6eba05 GIT binary patch literal 2128 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 b?^OQ3KDlcrNtVd`00000NkvXXu0mjfWz;oZ literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-hover@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b0068784c172c6ac8d8db86252d96e5deffa5b GIT binary patch literal 2387 zcmV-Z39R;sP)?9A9R zJ3TwI58Uzpsn5CRo^$WNPj}yY`iiPDo9OK9Y>q@CH#?4V%d7^PBCOeRoJysfWHNcb zZQJ`*_4?V0GhIYx+F>e{a#Zy@z)b=FGShKp3NuDPGMS74w^BIqIge=%w8Dwc*$j}W zz67%qzXkXTP#XRzW z=4lRiFLGV|&q{S40eXPec5{bl_BJvGNOngX>u-AK%cQd=lFjlgERO+c?J`FOTdKS=Nvm|KA_QuK_EPy9*V$?U=-J(KbCh%%3r_PH4QLRMJo zkkX6Pw21s9l}dfDy}dm%6LIChfdfly+rFC;69?$^_wii%rv=aWY-52e;Vk_57CkN@QGMrHFI(FCKk!^;-(WKa;4)q zyQb>9GU~eSj{g4sb-=e^e5WM{AB}vW z)VIF?d%Y)%Kdq**vGM9k#yl%!@gNbZTJbhE9*?JuF+a8}s~s4CaS|?!-bj-b3+*?m z$LUBvUaY>Ml9;phUjW95a9#IO-}kSmre7=;ds$Vt0z&{c5jIA@ial|!md88(3ykSd zURKr1dwP17O%`ib3CN+jx%v5O`?#+AI`FleyiiW3EpmCNeMU#=@?Hw6BI$Jc%ag_V zPzabRj4=<0NS?fN>?>%H`JwjjdW9Q95xHuz7;~Bcfb3r;1*nroR#_WEZ3pxqeSRva zTG!Rpby_+9bDjWW%xl2zoV+^H9#$;^;NQA8D2i>{mzMKC=LrB1k%w~E3uFnWTdkqC z2feonWL4c<&UZ}^Ff=su7~{)n09IJ%hT0zXJ4pxD1gd&bIo~xwKwDeeaUj1YUT&Qe zYU|^1*iYnT5m~iw-@dvq`F18)jQG1Xz|;@OnQ*R)pFXWdOeKw}twh?!Z1Q#A2~tpg$)swpNDP z4*I}M3xK6zwsZCILA@*pZ5#84Lff*q6K1$3I18|o z$>d%Fb;8~02k7zl0Fc%Z{E(A05vj`;P+ILRtdA5_$o^uC*#>j}E8qcl2NiAh<&5bN zqk1BA@&FkfV^mL&(J|K8?FDTja!2lZt`mSU=6Aq5Ir$XpOjg?GSKNP%eJPEyI4`T} zQ;y@jl9T5=0hGvsbL~%;IxjE*5veaOmlxc9s0{)z#ymnG3!1DLE9{bIISR1G+Eo0d zcp_V1$)hF+U_1-%2`bKue5Py`M5Ug!g?C?7^^Rh@S|I>q%nl%bLaa#~mX|4vtg$yU zPZkDMe|BB>pT%}HLjd4qkMHEMK6+KjEQm@yYwc|XI#s>1l+#)w0LO721`g!p@hn(3 z!LHTbOhe(_e?0r2VFGH30Kik#`+|z~(W?uxAS(5oU3m9ZRqqOOSZf3@Ffi~ikT3c* ziNkXHzcs>EdrQIHSJj=Rp8XtZj(~VPo~G!Fus(7Pf@JUh)?ky0$Pdc-t2qJy`uqET z3nX)LlQ=B1*V1ZTR{ZS$(HPTF&evSu422?@OnwQ-A4Tia6!Ya&>dF5*RABvN1k_{( z0QC3w|AwM02uvQ}vB@S6HB3M}9#4zNeId<05c=j1qGkyI=`($VO#nb&U*CfSvOq*0bzS$Z@E(Pzc>?0`cv@9|loh?~F};dW z^8^5ljEp=8bOXPS#bR$))A#>^fVQ@_F%h{hds?+B{0BOOO=-1v*fanD002ovPDHLk FV1mctZvFrO literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cc56dfeed2145a6095579e805a11354a65af1b GIT binary patch literal 830 zcmV-E1Ht@>P)M{&tw`rPpTG`WVr4T`;X%iXsx2Gz_Cp)3k8_hXHUU{JUH(ZzvQB zmBau{(=2M5HYOrR0`}Dad;%~-@}r2nCHYj>^&f2k%+1Xe9LKo;;5dLaEuK{ca2LRY zQtD+(0Jd#!1u!fkg8;M^U;Lj$PJgMvY{V?$8s@?-qE*e#&aO+R)2Bq_Jb+H6lowpHEb9P(8vybl$CLpmrPNn%Fw)5N^z{7H zb^SWY9LZ5%+Eq$TI*zjw!0V7>){;Eo4@Rm$RL#%NZ?4s9GXOdREFY9oMQ@<(OUJA3 z?(Q!nZ-!X<78VvVi2(pWDwVngzzxb*DwY030lK=nN&u!qEZY(V000qr6O<#_n>YZ; znUHk0&Ku_xn5KD=y7|1_rQv1S=M{_#?7ZEN~!%oGE*QVM?wuEf2)*41pt7yZBL6xuRkFo z&vUulzSZYM?g0Sey6$j8vgO|w|DF@70I=K(?*MG~#2zZ84tY&URRCC?i1E6B=eu83 zk`(~zC*pxp>Zsq4WCeibDqI5~A~N3C5#wL&fTfwHITn=v0{~mtsu-CGEC2ui07*qo IM6N<$f|lxNjsO4v literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right@2x.png b/src/libs/vmisc/share/resources/icon/dark/32x32/rotate-top-right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe6e3f92d896782c0fef0ecc3b9bfe10116e8c2 GIT binary patch literal 1516 zcmVDR^(K?aCvDqa+tNZIVYMo8p-`~%`TQG+MB;?1KHRE0%_13f z!a|{7tLpQ>V-@)&>N-&&G6M4Xd5-0gn>> zJsuUtMPz%SPTHqp6u;Vf{c zG3L84!8M-)VnoD0BC^P~?Gud#26_^V2@wM#a;t6IV~qp_IuLOj=WAokB2~Q`_$gHP zT8|r5b$g>hp>~6=>#i1&m*_l2D6q;H^HtD*(A#0SaBFM=7S(Y*2Rx&yJtEQz+ypqG z3)jYgG3I8#3*y`q0aFM-#HcZ*tFoa`C|oWg%RSFq1>6r@*>p#IsOm$G7bbcn2IbY8)(o$Sz!hO@i^%7;ZLhBD*XkD|0J&UlMQ?BK{zhV4*Ig(g2Y{-#P901nlgU(1PtPB< zoLcr`q!Nt|9>8&&AAzTuD4QG~AAh`_Q(FiK3uDY%BGNE-lsv0RaA6rm*+v zf?O_lbuEXEC%_o<18^{8xFiyZ6}22Xo&W$5c{^;Zs@`799t#3SMn-lq`8eG$RCP%$ zdn^dZWHSE(hr+~)$h^V9!P(X9u^<3IM7{|bI&1dq+4HIyV?%(dejheAnM~eL%@!L1 zEXz6?HrDgJOx3($leQbFRO(Nl6ed-RTN|h*ePe??XHk0MV&nk1=LVWkVbk0Fx@%(qs-*)eX}dlYK)ojh&)aT04S^K zwgzKVRX0^L#*F~ZoH_G8;0EQre2r42k*K&v*0RW{^={+DH z!1WVj%s?%NSQ6l?px%n0_&dH@h$R64rBdl#YO7#Zy?-BKOh7i99T$;mD}o19o%t&f zTLJ)vhlk$*3Nx5KHpUzYk|Wjx_$qjHTC=CBfp?FwCIDb~cz6dDDiD#69LM=3XngDm z$Y!(Ss`{G$v+RGS7Z|Z80AOrvYzI&TK1`)j#~X?LUl5SVWX_AoHvenYhVUO-2K(4_ SQ7D=K0000xcWU z>KAhk9@h`?X;w(6dOp0`Il z=iN=*dX3?A#X(WAY^~Riq?~hV3=c5PE9m@IUU+oL+&Sqw^*$S#qwgfF^NcZ^>HSXE z>Z)O%P<`(w%hosVCB^q|xv+A}hM>L8o?nVnuD`g}G2Ot!PkwS}bDUb$&HEh7Z+Omm zdegVHI>hwGk-T-$7GFLq$}X5X$2P~c<Ep>u6{1-oD!MNdz^BXzU+w-j@_a z^aBd|q6RjoNr99`1&TIF+70dzw%c>;-g8A8v|+(voweTg-FvOQR~ACBo@>Lpvi}$G zF9@hrNy@UU8+)-mcYVdH5W=^n!9oZP89HzgFAz%XIWC~1VcZ7E2Qak)acWaI(Xs&S z#KRJjIZWg>R}%98J1Pl4FFqxJzi=0aP>W(~IE;IFOq}x(y-f+gLCh4?x37V6^%wNX z3=TFV00%Ie0NlXFCK|Sen+e7&_OB=aJ@}Cv`Cy~O1ww|Bl6*%`p#W^j8)`9l0Vk`H zN4Uom5$~~ei2!7I1I0&nwpH>-#JL3fHnLd2a1t=OTI7+4(S&0-gs`TwAS?7nCAed$ z!jVEX#0AefLj7MWD(8R%`tM++XJm TB!Ibf00000NkvXXu0mjfbW<<{ literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/16x16/fx.png b/src/libs/vmisc/share/resources/icon/light/16x16/fx.png new file mode 100644 index 0000000000000000000000000000000000000000..7854c0f809f2a72ee543af2961d146f67ce8e469 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X#yh2s3WX6WN&PEET=!>U|V~9oX(aH8+M;!#(_j4}m zn%Y}`>H)8iSu~4c>)fds&lz=&{u7Nmpq!C7{W>O{hVUs2MbrNO4n})%3A*Z_v}Q8DIIV0?J5QB zzd5+bP5-RXWjAY?R=N4>+rRtkKXSWm3cjoqXmbzfe+ExiKbLh*2~7Ze CAD7wy literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/16x16/fx@2x.png b/src/libs/vmisc/share/resources/icon/light/16x16/fx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..201ac6a972c5e35ad505a1591230cb53d4e94df8 GIT binary patch literal 571 zcmV-B0>u4^P)@D3=YW&n5qhKR`dsc~Htqz#1-eMICk^OEOz%WScCgYLjM zfE(N9fdPo9gNUwdn+FEK>rvHgn>PXwntY2;N;wALz$Y)GwLY`~;Cl}cQJ$GIZ^OB_ z??!#jhB*+h4W*O^0HC$be6_YwHN6H}0M-DMQe7X#lgVUz=m1j6NoKy1Ql{R=g%Hz@ z<6NiH>CR9AYPH%PfJ*>psZ^>T0F+WwM6?B9H$(eHi9}*F9*+;^^Z7f!+(3^}nEF3gaSPzPdI3Z_tj?qz{YU@+002ov JPDHLkV1jmP@B9D& literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/16x16/hold_image.png b/src/libs/vmisc/share/resources/icon/light/16x16/hold_image.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4efc5634725b6a9a96a96888cc69c7f1f6c34b GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X#B{gc;|QR~-d1BuiW) zN`mv#O3D+9QW?t2%k?tzvWt@w3sUv+i_&MmvylQSdg|%o7-G@8^s=FsbD#k01>=Ki z516)W-gr&zMjE%0-htQ*^>+^D54d!iSrnxW3R!RMW^nEJa9m0MgW>yje#spMXYTAY z_`bLE%oguArKUH`}Y0uaS+Tzb_JRr1KYrFGN&CW<%N-WmezB{sy;mk&7=E+9_qLrj&&MFic}YL!%Wuu@>0s0| l)LSY!&uH__2k)xR)yLN;GHd0p2myMS!PC{xWt~$(696I=g`5BY literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/16x16/hold_image@2x.png b/src/libs/vmisc/share/resources/icon/light/16x16/hold_image@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e14c8d9622c329d73a6e566989bbe4c0f8d63899 GIT binary patch literal 544 zcmV+*0^j|KP)+jKsxL~rBn{co5yplbvcxf z*4hieIIs`sZ`cFIy!AYb7l0?BcpZv!utdIL%=a(@gT0~u?4C(PekapL9)R8`TJZ|dC-5)8 zp~0&#p9PlNs(YS*b=+eey95`LnvmD_WOOm`EC?5cylo+`7R45H37mBOx)HdHz%_)6 zfvUjG3f!FI+Qx9$f?b+_+7Dm@=r`Cj-1oelDBghuLD&`ZQ5Z z;L~$0UIm6D>4cVvN#M$%_$82c)^$xZCc1$wpdu8m07W3v!g)U!}N}> z)-ba;hkOB>#;G@MMnzOJZvDXbjOkk3fsEvIMHk(*Yjh?_YXnNp7IoTG|HGM$ZQ9N9 zeRuy(>pZi?XN^g&i;K9rM@;&&1zc&*e3JO@OFWQFE?J$^?6BU%?WB0j)f>yya~|7v zN4e}t%vR)I_GnSX#t8?~Tx1eN{byRP3F4KzGfnvaXW`{*eU5w#`J5uRO|U}ugG9Q8 z{_7);V;D<51V8xa@^{~reYfsBSbV_wO@jF1AnC1wJLWugT;F@3>Z!O8|BV^X7Mt}7 qUOXuHZDX7Dos?(qd3L|C_|F(6VHc>pJ?<&c(+r-jelF{r5}E*WE{+BO literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/16x16/not_hold_image@2x.png b/src/libs/vmisc/share/resources/icon/light/16x16/not_hold_image@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ebb7c5b52fe50fd1015f61225ded121d3509af GIT binary patch literal 585 zcmV-P0=E5$P)wUHA(&FTq_g!PkS3qx%J>1qLXyjg zXlbKqLQX+U)TBs}px&g|xA3^k-M+WJ^Kf9`?ab_d{yQ@}JR>3uQicYa9Viuj(HK(! z68m@{BCSF|A`+y)Q{W>Y9l8xX3C0Ud{tWn~B+v9GQ0*syrju+Bcn!P(_8t4Dz7POr zoFuzI$?=U?LYaTs7dPZDcz!~{K6QM02N>u_)1##riiqIkOKC=65TgorU$@6$RY}9 z!E=w81lTmjtVOK=@Cs;qR3OtfupDI-1LMGXK=Mp~0OK)QunJ5l_CLU9tA7>$B(Rc; z?ook8m#?cjF$r*?#5H2H;8Fp8tHixi;x1ye;DKV(u3z62+h`uR4}tHBZBDVxE4K4o zbdMHn@PBDXY?B*qv+dh?woo&J`H90mhHF#<7V;8(JL XMkYH}xP_`y00000NkvXXu0mjfbS3`o literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/16x16/open_eye.png b/src/libs/vmisc/share/resources/icon/light/16x16/open_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..a59ad027eb8cdd666543e1270b30d80c38f27c55 GIT binary patch literal 391 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 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/24x24/equal.png b/src/libs/vmisc/share/resources/icon/light/24x24/equal.png new file mode 100644 index 0000000000000000000000000000000000000000..9a952b91613b1f45181aca6baa09fe0da6d0fe80 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Ktk_1)gB3b(8JOSlvbsym*FEB<5N!*2YcXI0Zq@u_?Vm>kaiJlk+RYPqLo zXYsoPjy>O{|GId8U}y{sJt85?e6QO6?Azdj{~a}tp0g}x+q3msq;6Ex|8&-pfeaeUHx3vIVCg!0KGO?tpET3 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/24x24/equal@2x.png b/src/libs/vmisc/share/resources/icon/light/24x24/equal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6d26be6e7ce481bbc682b57ee7a9f110de981960 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3TAX~PbvH$7ERG^?_ ziEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0x5JzX3_G8*6BG~_zuAky-% zQtfJ#N8STXCQYWDQ(DdD9r~OjenQixv6o{~>dDO)nRUbtAF5HGAs@Fj`(59xw>Oyo zEoIpDiaCnGU~}yK@3PfCovD#>3<>Z05+(X>Z@YVQv6qRj@UzOg@Ome%gkXl*OgBUh zEMqWZ-7s_a;WIh2me~SzNId5L!FFZMFX14F{57Tn7Jac^FVDyYE437K8a@+aC_2Z^ zp#Eu@((7Guj89(qdobp}O$)0%@P7KIm+#EK%@ERD%JU+!)t@m(exI-T66>Sy=L5aS N;OXk;vd$@?2>>^Ffb;+W literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/24x24/fx.png b/src/libs/vmisc/share/resources/icon/light/24x24/fx.png new file mode 100644 index 0000000000000000000000000000000000000000..33e5325402b2c9f12e1a8f3c1f62b3ab55220583 GIT binary patch literal 387 zcmV-}0et?6P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10T4+< zK~zYI-ITFP#6S>+|Cxx*K7qc1X|tOkSc`=s*vSw8;XbP3$*uRBYRxl2SfYO5NJp+WPpXJ%vJH%rwn=z+KPt4x{KM zRskvH17M-mYHgNErOEE~`T2RvG|lJ0ZQw~%-NXV2A+7^&fys8e{mQoOsm@xVP#E)l z{~2Hd-=vhQk#&>&m2ezqTx-1!oFjZoUy@QD`o3QwH2+mfx$L^`ZdA=gFY)&F_JP)V znXnRPf*{!NeSeeC{Jvori@lhK6uMBO(b!i?EorTHfz!Y&aGV zVzD^UYPB|m5Hr9R;0-V?gjg$;N@si3OEiGvIO9TyHDH?X5-*vixd^-lCfe=xX1QFR z=|wZK0L5Z)LTmkkumgPxf?&yY-S^dM^@s2KSA-A^;A9X4>yG2hM%7Jn4m>72`8~rh z7MjiGhtAs0&d$$~k&&xF6F8x@z8_ULu>e63+yP!Hr55Y;`d;_?Q6(+|kAQ1Yb^9J< o{|Z?fO`9x0+GGLJX6OU_25n={Z#}dBDgXcg07*qoM6N<$f|%T3&j0`b literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/24x24/go-next-skip.png b/src/libs/vmisc/share/resources/icon/light/24x24/go-next-skip.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8319f672957f64ad5b18ea6d4f7a3220d80205 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt+o^T^vI^I^SNkDqK zQ?lQ39%$}(CU9uhsgQF;Q!gq2q3Y+6gLCe->$=a_Ij#g> z0j>2t5nXAmpPHsQkDcR6Fkl#l8}I!Qz~wYeZ`Rt2m^rQl1Ny%I8OL$&y+3;IH^!Kk zzsiNqab?y`oFiiPQz$pYqQ_`Xh{fkXE{LduEC)pNNi2V#N(Fs{3Y`O11k`nXW{i0zqAd}9IOne0w*6WanMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt(e=T^vI^I^SO1$jfBN)B5na z&Qq5~78{vZlQ`RUs$Q6TgeyekWKgA!L*j3}T}(y?{)=uCRqULo&%5?N+k#cunyFH3 z9VhNo$A^5iVOg0WbcEP)mII(I0*N9h2Wp@NBtRT;iK1MV108^%giSoO zKsNIOl3xMV`xM0d^IB&(l5 zjPZ_$E@O<3ZQGtolv4}K8MD(6>zUuq_^Vs!F0n+6GLx4tkzzCpK9xwoC zmIssp+T{U7fJJ#g31C$oPykq#2ZRCEOd0LVGt0(eO&?Yge}66mxjRQ?k?rvSWD0NyD8@B9E=6Jmu6N{5jE0000anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt;9Ih_P(Ok0XhH+l_uY4{i4)wIU zC%ek|q95G*y?9k01KaB88O22)r>?SoVGj zR8Zm;jAghp^XHsbt5|JSp9z1RkWzj@OEapdd&!TkEY;cPLR`e2-w{1<_SLn8|L6ZH bJt(YMu|vI=|MOy?lNmf+{an^LB{Ts5^~i1O literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/24x24/go-previous-skip@2x.png b/src/libs/vmisc/share/resources/icon/light/24x24/go-previous-skip@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f3106fc1f35749f48fc1dd782a24906291827075 GIT binary patch literal 480 zcmV<60U!Q}P)&@3+yz2Y0o%7b)dq-}n2_xt~e? z1lH^IrPg`};C7zpr_j06Bn22_nsFRo0bC0q4n%YxGIuV?0LGX`DfK3VxDi4eoO7FD z7(RXHeoGQSuJS+vK+f_&WI*onKtupXc_0#it2__^z*!y$1aOxJ0stkH2Rs3#lm|Qj zC6xyj0!k|nEC7^P9tb$Z&N&ft&NqJsSZj~dG;N7!Ped!F)UIvYE8n?TS@Z--L@fRb zm4@&-10^B64{<4opm(7X5W#Pw+=wXm0Zv4;8yOcO>YbPa5q&F>8B5uXXf&t*0000anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt*#rT^vI^I^SNkouNtaY*{(RN5HJrKjTf;ucBed{|SNpYkX^o|GX8cS% z>pQXHTxHl*>xQedO5Z<_z0a^_>$T?r2c*jxCsr5>^qMo;77D-UoqeF=tDwNdxgF;i z^3LqxVRuvTb-&VVa^F#;Ft&)LaKDniP}MS}P0Od~F|50$^Y{Og_00OhAL2D_*w`|G P?qu+E^>bP0l+XkK57TGs literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/24x24/go-previous@2x.png b/src/libs/vmisc/share/resources/icon/light/24x24/go-previous@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4614714f4d9006ca792dadc9f7b0595b48b12406 GIT binary patch literal 466 zcmV;@0WJQCP)_vr9&%=>KY_mQ zFTMAB0JrP9KIP6+1%wdVd7fVZTocieneTIFssTa>t#j^;h;E4Jm{QtK)AX4;R|Ozd z9#8;CmIs6Z(&Yg`fJS*h2%uFS5CCYF2MPnU%L4@g7Uh9L0ITvq0f1$BAQNC+9>@Tk zLwTU!AxNgfv2BFC>Xj+ssKJRCl8>#*_E{4!{R9 zZ~zyJUM literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/clockwise.png b/src/libs/vmisc/share/resources/icon/light/32x32/clockwise.png new file mode 100644 index 0000000000000000000000000000000000000000..f62da04dcb657ba2898469e1b16c43f5280b78d1 GIT binary patch literal 710 zcmV;%0y+JOP)FDtU~F z>oucfV&EOOycu8_?4`5pdycb@eQ(#lR(rMAfBpX7^&5PlU~5BOmks7fZNIO6T0dGB+V@u!0wg+n1P?k@!W6(Pr5z$mUOR`+w-$vUP>9< zGfWm^{HR#QFu&ZM1I*0oFY5#iA@qh2E`<CmmL$wB`?flaLW}oRZ4)-6`US-@ zY#J}mKtAeOH30^)`c{pR4-WBc@e!UMhL7(-()ysWHD67GUXA6=mf=8h{EY6J00#^` zB_HEys{g>U@{Qh&vg?6-=uE(T{O0+go&+?avFzV{9Cbt+^6F zf>@xjlzx{x*ozhDA5nk=(Sws(UrIk=^N0atAj@zTUz$K1uLBTLfJzoZ=vMrgEKzLN slW-`;_@uH(S+f&>k+4z!Hym|LZxq6J?=+x-c=(M55G3sta9+ChEqGi6(9| zVP&G=E73&Lgb-uc7;r&B6EzYl$|DvE=teXKTZ$H~*yCcp($DtHo%`MA*VunDp*feC z^FRMP=gz%n<`Y%r|BQyR36zal0m>#&Hf9AVn?Tu^Q@CC3F*rBQ?av@g@Rn4>kHv(@1Lx84e zXMycNH!vq_p6B>x82D;nN6MgmZ4h`IXskN{fD3`wa8o#s;H%p=!0NgY0GHn<3JAQq zjaLNEBrOs@1V!W};6=hq=_z0rup8J990o>Iby!52a4SMPa1Abvx`1UdDD(mARCOp( z024@X*BgPi2;Zqb-~nJ>0w1d?KF$Pu><1PXmI8nP?*~YINk(}Jv;mume!dI>mlP$y z#t0&#z>`2j7Qs*PdowT);kzGLkgEW|!x03I0@r07_!R#wz}5&3TXPct=m17Mj`yXR zf;EcJ0K6U{!iLNRsO0@lkHaItq9THy!si_ipFe=5Sqt!p$JuW{dy&CcacTrU_3-*A zGXa3}fa4xV_m&ZS6}LtBU&3z5N`S{a4tmQBzKY*^55H|$39!$TXP1^8d=a!isNSV1Z%#xh6U}K}5QM z`*C{-Z>Z`7FRO&!8XC_hK#O5J9gAU(5Rq=67q`v>^oU5Ost#lGv*P#Pk;f#cD~0+VNlfr*zY3iftw6_e`rjf0N>(D z(NnP|G++U+X2A`>62smPAR==`~=Hd1yunl+!XpS5whNGyhvBSW{C5o^C_`AYo4EO|i6lje*MywMeBC;G; zaj`xxzXR^lB962f5Ro=uIdD)_Pu4s@4QhAe&$DAdXIV2L)hw!U%2|5_)l19MedB6eO!~JS!fxBF`U8%*B<^x|saIM3eDfH>&FM zxsZr~+ypS4i7dhWWTqLnZFNXh4;4nh;#8yn^@y3aHI_MM1t^<9*_aieYyxHDU%HJK Uz`hKP@&Et;07*qoM6N<$f?qyzDgXcg literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-disabled.png b/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..c14b5089a97f9d1b3cafd41952cca76c5565424e GIT binary patch literal 607 zcmV-l0-*hgP)8ELO+^v0=)fHW#u{ms8W_tpt~b;)NW7X81Ctd1W=eHN zS^~hiQqoES%;Hp201Rhg8DOdc!1RJzKQUO=r21KqQaX-1fddgCVJF^T6TYH9B3`GIx^N@k zuM(eeJ|aG*l=>7;b_2%I1J^Ru4;)!;zyHD)L->{FywssE9VD!;xY|}?TwzAon9z;4 z*rM>kKt#OEEx3j4_)=lQ8m>e{Ev2+yVd%~HhMxLkIjHD=D0;RJ7p$BKN3aK<%(r_W zB6LDTyhgTLQc$)ErL002ovPDHLkV1gZq2>k#6 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-disabled@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7ddeb3d1e033ca97f1065835e00c635cd2ba6353 GIT binary patch literal 1199 zcmaKs`!`ex0LSk&bH`*?$m5Jxd4=)<*a$BpDlHbs$jG21q$F~q zqf%oj?6kP+A87^vfTz(t-2*dke7F{IJ}5}1@8p*AmA9qLP%(8G^zzft^0EE zrwh0Y32u7{uUyP1`6zcP5(U}b)X2m=$gRI`a3=&e0U1@j-^1+jhT3)Plh7PhFz2%3 z?&hxA{p&ojKW@7tkt)I(kVrhR)7L&8Z9WZjnKj?Qd(Q>}EZx*vL`Cc^1a}Laoi5lV z>J>fQk?B~y#rKdUr;s0bjpjE(R=RGZ)@b67=nM7JXgWQl+|e8=;#n*9Q#Gx&kFS!9 zD__lNfD1mY_J2MnXIsvzVaAvQUL;`tEY6H<7d_Fm^HBdp!5S*XHrS}8EGwwnmX#+q z987Ar_KD%NkSa_%o0A3v1r`G?$t6j(og&LEz0k00knna(^j6fMmhz3zcw6=G zsUCk&XpT;M_IyC~q1UBw)k?&v*P4o0DSJ1SdJt%M#MysHZ3{8-y> zgH6nz`4#D9w=VV0BWNr-T>M4AMu;SWbeRf<$04d&0vEneoG6SKJTe8$HTBP?od>bO zHH#ISH-K!$sv8@lI(lwsIugVGa5*!_Qu`KcGyQzszHz=1BVavll}k_3{hmIPr&>m6 zTrxq)-G?F_z5{o0ydQ(`Iet)O@RYoYpJytc^crs+W zZ>s~9&I{ZkqqG$CTT)e>6&1A8famm30OhFc-@TawoVz2yjSqpH%s?Y(o!iy$lxX7| z_O7q@%&;$NZnti9%>Ep=>^Rs|#3-Ls18B~7s4w9$)5D_8SN{JiIX$Os(CQ`Etq$u)DaSFwasorCzM`ud`gq~D`}!a)?}M^%wZqWq}^Qj zsjj|tiiDHcHRd;F1yykC==Z@cCkd!}_#fI!&W(%tt{em61JPzf^bpi%h8`C z&n)V#A@u?8XHAxf3Lk}hobqP*;s~}u!FJl!@%oS6L(Jh5;401mB;#xXlbb`}FhBxb z#r**Iie!reoK`KY>&)x{k7<1S2oYnThWWsM;-Z5rzU#KRZ(6kSYyi3!)AODOEB9a2 CNEhn> literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-hover.png b/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..2423b30ca515f94f9f00e5a38c0f100776d9a8a2 GIT binary patch literal 709 zcmV;$0y_PPP)0Zigpog z3L>aYi=ZDAwJ0d)*B{U#6s4qH7$KtLIHQg;r^URPUe@R^Z%P+);4I$dd(Qpb$2sR- zQB^k5TpPN337`b9sR1Nyheae%XmSy$6OjXJid6Nl4%`3~7|W$u&w(*3$CaF#9D$dt zKm{TW0OGbhgLwe}XKg{n1V{mWYXShLETJ7>-T^>tRjvdOwreDF7l_Dl;0a(<)SK*V zujS*TDS#yKHjkQ%1BLqR*a zBkvpvYTtvsYL>Y(YjZ%0s$z&p1Mm#+nPqNzZ-=PcQHFnuhaZzMB2!Cw96q;sD-D{D z)l*()(tUF`_XkEvE~hGi7a|f8;4*O0?GbuzH4|*BakSxjHvW2=$AjZ&N&!Y(q>Bz! zNUr?*w}HRbgWDsSPp<$0U=*nFcwL;l6QW^X6|tEFudaS2I=zgy!YFt{U$w!(^Nskb zJ$#>ta_{sf7Ux$07JyKu2-|=tpxz2Y`=7RG*Kkwuits{{o_o1p{k3LhZ3*aF-G)a< z7o%Ce)nr#kwhdFjn*x782jFh)2{8F#hS_h6kZ$W|bvb4-_5Xmk;NA8I9P2;tl}jYp5*z}yI{;_| r!hkE6CffxYWt;a+SOO>k{4e_nwXbDdS-8JZ00000NkvXXu0mjfgCwJV> z{4!a>iL?sNH9`qB{5{2qYOPx*M4U@Qby}nmGKA!G_(3H>MuSd6`T--ey5#lyBMFHK z3C*?dV$@1)i-T9hv3)6%?}}q3SG7FAjlQ`e0|x#sP$65CVFHE0E5^`_5-98;{69Lc zTNgK<(;b7WQsG>2Zs&#vMl-Rv(=KE_`G$1>g+KKt@L1qYa$*m;eUo1Sj7_(`F_`EY ztAL+9A)>Qnq~PlzZEf?IvAEYO5xc=_&mbVeVp7- z@SaA1mHz@mFT&+M%v%MkVmV(0l-4ze%h+n}v^3xOM(|EUf;5(s$)cUxa&LDq{8&zR zF5SgrQ~3xIbo63&u{j(H@!PsT<4V>a+Ajp5wmWq@1V>1P@ppqoh~<=5?KkC8%GyM_ z4_<1&*bAd|!25>VW;!3fcT>Q|O;-S6; z7rFhN?B_&Yi;sif1&P1f3kk{{YlX_8!fG_tLsh0;8p;*jJ1$H($wqj}DZTE7Kx}&$xG%Ay0dh0D#u9+LF-)o>F9_-1fEfibN+3Ah+mMe5jjOK@h zuA*vu$Ow{`3huN5J*fV1*-mbU=B<2=l7@-jrTFL%!?Bg4B3?DWKc!`OpoETP%_n{& zq`E}5`*%Il-hXs)@1)z3&@9CpJhdvlMi~4Rv>! z@EYIt9I0#>M`+PBiteqkg?MzVv+B`=GPyz`j&!iG7!zodT%&DYH@&Ul&brdfPZx(zoz>7jXmX)wk+C5tdP);Dty@x->qKT%$XSn} zNDRbZWqC4qLkkmQZYO&&uQU~vQvFAZb{S&&N5&`DddAO5q4yf&%S+dz-$#Qp8F_|| z;0!_n%e-xZpSJ(ht-NqO>ZhuUG}zlD@uUiy@Z5 zN9f>F=|XIC{bk?!Xh4PE6iGEfuK3#x1d*Cq>P%f39_GXHIP*1lgavR>%XazZB<6Vh zZf?n!(8|_~u1Tmbn@1L7lB9*<8YB4-Z!9qL;~GYA0E{1u%)eH`#+v@t1Ff-mtR**F zZFBMtExPP;nJFmIYpFcQAsaP!ENzXQ_kTJ1w^HBXtA)=dmeFnk8MnoZ6NWexAtSl6)v=VFtTd}eB1uO(#Kz)gT z_y#tTM9C#cG8WmDWs^%z&)lWBA562%{Pw%O**~JHWT_z2*>iv#V5|Y8s|^t;{?%MW zW<+FpV3Ml#4d4b)pc0icEP#sfxQxt+D7-L*3e*z-gpSWiECArxDf&-<4sb9K0N6K) zF2F|ufQIMw1(e+!v3G%pYy6knUd*8~7B#^V;c{T3U*7_0+x2>=#=G7v=N{Op3PG`?@b93TfsOW&^f VRC@YT69@nR002ovPDHLkV1l)Tz)S!D literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/double-arrow-horizontal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..00688abbadca760e5b2949402ffcdae0c39b7c34 GIT binary patch literal 904 zcmV;319$w1P)Vr03S$7tWBIFXudYbHAUQL}o@k zE9VX1t;_�B>amcmsGVGr$|bTbTjg0N%>-N21P!lkBW;GU$dQG-GakhBfB11yhG%;WBe z)6ZW8Jdm_8Y(QhsMM;~0`@o8rFfEe$1FnA~zjo9@O)w%Ai zFEC3r-U4lry8zHu80ZaKt9S{l3^V{}1x8ZnUaUJblS0c5S>6VMUa5hA}Wj;8>&+VK_G zQv7~Zc+>MFX#?<-{8!01nxQ%iX={S9z2v8D9L)fG%xt9OnTVd-X5b6)+?{gh2~Nah z`w4U=?g^UNYoHVO9@FJCY8L1*vxi{=B71^n_5$c4?_%0iI(JLeXJ$iD1Il)V&1@Jr zNOWr}Z5?BP0W%vcJ1W7P>m_`iO*^as?<085#?F(l=!qp@z!eJ3j;b3_C_ETY)Z>?- zu>g+SKx2|TmHa>8C~&pt+Vu+ZEL3-k9zOvNm|3E)_kjnYvM-Wyz#(84@C>+^wD3YD zX&KND>;PT?r_Jm~;yjfY@INX0kB~Qjw=x5~0lbwN;0@rd%m8lyZ)FB}19&Slz#G6@ enE~Da-ueSq_kK${rMdBYIL0 zC1KCAwU?L~nE)KcMn-TSjV_-lJj#6DVE=ZpC$>AJA%v4?VLm|{spO}+T+gS>zoqYU zSPLN>?n_W1`}bK^`S^|5XEiERK#cKcF%Kd9%9geYxCEY<%P53!OXmhGNTz#;DXbMjXs3A_H)D*; zJqapY#b1>-8k?9-J{NoVL_8d-C&VS4?xzU&7K^x?`Apy%?%;do`x(ba(Ue}mj})|x zt0g{@I`4vl{3DKxq$^GYXS3|Ka3fpWg{6#q9S17KtpJcC)O;7l7(1`oK`ex@8`smetY9e)5bQ67Q3cdW SA+4eS0000;fr0sir;B4q#hkadJv(GWMc5v^ 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 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/expand1-disabled.png b/src/libs/vmisc/share/resources/icon/light/32x32/expand1-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..5afc068fc16667f87c05419aca67a06f11e0fee6 GIT binary patch literal 823 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 Hu0mjfGZVlE literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/expand1.png b/src/libs/vmisc/share/resources/icon/light/32x32/expand1.png new file mode 100644 index 0000000000000000000000000000000000000000..31a0226d021f5db12d7fd89db9afe62b2d89deb0 GIT binary patch literal 742 zcmVW1HXVn;6Sg%z!Ib+=6>?hJxP4Z?5=y|5`hD#CUe1Y+)elO61iVvU1qQ&MoOq+Y7fQe*;Fb2z z1D%|Bm-&7u0c*fH?F-2avusX%@eCMas@U0IRCpVx#kP=wiO%$Ez)-<5mt*&1;J%1Z1fF&9w8!8zef}=+40sG|{u_5fcold*CHy0>o;!9x zcxzhte*%EZz(e2(a3>?}oeX$0E$tHv0B&K=Yk$xe6T(}w!d)#=!k*6pd`(GltgAW= z9u!H{euGd}j>4DI(FVa3`Rm{XPAiWf4}a0X_iNi^83NRqY>65br7-w>}D+ zpMis%*eZ7M0c-*HLJ4pgh>r>+5$i-;2_c|Nl7XY%{|NiRu}@OX?1d6A08V1xZ-b<& zoyYzi7qB&4#d|IWo`(}j6%)+ YFPp(pfR|o8O8@`>07*qoM6N<$f&tw$*8l(j literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/expand1@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/expand1@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..80b11c6b60ce99018022e17ab74b615871a0e7c8 GIT binary patch literal 1534 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 Hu0mjfHplWG literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/put_after.png b/src/libs/vmisc/share/resources/icon/light/32x32/put_after.png new file mode 100644 index 0000000000000000000000000000000000000000..d295bc2ae839fe3bea083b0974843f8e0452fc17 GIT binary patch literal 506 zcmVyv;37mn?@8b+WG|V7lg3Wq zf!b8Q040wSX216h-h``SwC0xp5!kc7PgH$hgSkOxL0bbDsD z6j_3*NQQvNh)5cha$FaDlDY-Pfa{n@>&2++EUu;nU;}tc8D*SI#@>N21ovVhU_S`- z#eCimOhxF{%xud$18D{50Zt<#uXwd#1I~Ma^9bjwk#-ppaNm(c=UEdtPU}2t0t;!K wdv}2^B$fH-lp`}c@v_O1Kt1?Bzhw2|9V6y9m*}FT>Hq)$07*qoM6N<$f`xa}2><{9 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/put_after@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/put_after@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..63e9114fe8e77de8dc9abc06c5ebac19bb2a2bc1 GIT binary patch literal 911 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 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-hover.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..cd655196ae1887838c5a2e855e6d04d75f7ae4cc GIT binary patch literal 1094 zcmV-M1iAZ(P)^(8Ne2 zcq73FO^BD6Xd<>%qVYu@#Q1=h*w_LhG?J9qh_#kd1gg{0cG~GIALg9XPA@|#Gj%09 zIr-1O&-!M~+B9eiN)47|SP<2z0&ox?uK>=uz!m~Uc0tOLnRqgQQvh8py|&;l@R06x z0xX#cfM$U96QL1bf(+7PrJYf=iJs^@`Uy4(9X`)iM_ z7q6IuzrX{qT}0-k48V+ffMW+bZ9$yEx?P2c10V2(h|HSkVt&A%F>SAMg<{D`T#UsvUVOygP_9 zZEXJ~j&M(e@7`&nsjkD4hJdYC1TZ0rfcJsb0A9a~o7V>@UOAWSGB0kQk#PP%D8f(s z|Kdn}ht)IR0J~MSaY_KAK-K_H1M2|$zwiaq2^4vlJ!hM)KAud2a8IoKjkO(w zW94rEcB$&O_D836mWLaFt-#yFmg5;>S2+drkI>;{Qv*} literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-hover@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7eeffec72c08554dddfcc1ae1c92aca9433e5e02 GIT binary patch literal 2343 zcmV+?3E1|DP)93ckb_;`#s$4%2q!Njs0*J_9V1>uoE`08*!toC)Rwyhvz}*Vn1=F0P|zWF|G&{0p9^K-A3{Jq2%0>8oz7gs9sxuo3v=ryLHUZ%t?$Ofc|#d|tCv`lfW>A@9$9{s)~qYVvP85+!qE7caWN82cW1thgqve1}vcMR41=KdKduh zfzwCYeO>NX)z@QBJvOkrepg|tJV0w>C#{XfdFId*tdQ)m(NyhMX)`v6$Q!EK+b5=R zLXwE2V}!pYE;V;qUQ5eP#+Dp3$|nH#Ma3=wumdH)pM279WB=^9dio3UVlX*Vz=_`ZwN~OfD83kEFGO=)6HfIP}C<@2}Cdfj+l)zA9q+f zI>!z4O)8F_QeqKIfJ0{E^ik_qUH+1V_0zpL&tb^hRdR-l{kbFU^j5pZ5*$#764%C(tNX7A|f-R zW|klX6+l%xfW20$AshjIhcP$;p!)C4bYASXbe{S^KDnd3CQ>$u$ka%QiO9G}^F)J?0;uYF z;LmQmyR(-Mwp&L*l3lp>XXCLuJVmDh?~2H@2)Vr^B9$VtAi{hRA>0iTzc(9|+v;gQ zXFWuAjvdIn$3`13LjyTLg@~+(pik%prUP$@$Q}_{5Rd*OTmg0f$J|EO|zNSFDgeWI(Wf=VRc8aiod?4-T9i_W%guC!g_o^_)r zD9!ZpZ`gm4ottZ^-PdYWWCQSXV4JE2oYRX+000r01-y;V2Fj9!PUfv29kOGLB~I>X zp<-)2^;MR`^|QdUz-CpwY`ze+001H~8~6)8A~?qmWXVs*`3{fcj@tKIsn}W{EFzkL zEx;yKZG%1v0G>#A1JklP7^}+@7dW|l^=+i(BnQqMC)8K9QL(k2lY3gMT+U%c#IO1+ z0Dy>$0$#z`B;|$FEIVZn7BKCBeA06V^!Z+4Lt)3WHSBqzA<)%cjMb~hV#W&UhcnTI-gt3Xb zG?cF+!_Khc401-Ml0Do(_6P@=c`2l2CzG0$OiFt2PyU+sTG_R^mWB@l&Q|RJ)~V`$ z1M-ZQ0G=C&lwfSQ{tBkOhY^)w6TY-%0!8IsGtV^azsRoVYN>fIV6Xol;D@39*cJCh zOjSJytQ3(o7z-wIT*s|pm(ip2bYE|%#se3r+}6Oco#z9&R|1cP`;WGSt>UU`JMgCK zKtu{LHd0N(81;<-3NYUb8LT!{)c`*MUWjz;9|$*- z0CgB+{oksp^}Kw9xETa+4{4uQ)vH1Lqe6ccpaJ+6@EcVPvQ4dT_&=t#&151=6R-dP N002ovPDHLkV1j>ZK_&nI literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b19a855ab60c1878df3996bd9b1a3aabfdb027a3 GIT binary patch literal 585 zcmV-P0=E5$P)QzFDK%Ls>}>ojKaa)t-uiau-t)cJ_uj9kKCAQG`@Em$Jm)z_j8U0zx@xUWRR!OH z-`M-V0B#{-e&hg{#IFn>V*jWCZuSL_csw!yY%gS=>%gc0ZkGg)Sm+!86Ith%0Ypr9 z4R9?HJmOhr09p1w2LMDI>PGyC zOWE4 z%F&+NQ=E%2K3K8R)=0%_y#dvq@e3SoJO_q=Sj+-1;kd%2EYqsS^-tSNT)^E}b8r6w Xzn!_R3{QXI00000NkvXXu0mjfMGFA5 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..68d70e8f13b14d8b795e29434e7e6c0a625fff0a GIT binary patch literal 1273 zcmVs+mce=Z}s_XXkhqGz= zoI2;Pzq+ccx=j*3Ftf$Lu%ta+jx~jqAYcoyMABF_DW!!M0cLg{@Ey<(tdO*;qP&t} zmgoJC;ED%$GIB0mL16_ndjDHsZp-B{Ngq~`SSt7^U>&Cy53ng>E?q$(1(?~nxUt_( z0KiH~AH+^96^bfgEuD)8*cd67t{_(dX0`~J0On`hc9o=^F%wILA_`bXcJTlkBIME) zWGcYS7UFvUtOBvFk+eNlVyTd)fVC7W9$w7^3|0uxB266NL zf{5{NlJr)@c+t_SfcuDBJirrmSAj{w%m#41KU6^*w@7-Ug1Ax8RKUGdQ#`mC!FTU5 z84S1JnE)15*v=YB+bWD-8hyYh@MhcflfY_VxJ1lJ;5FbB@LS`W-{C_-WW5b;1#T-5 zb6nDrpsW%iYi#~dGUkYx^_BEZjw%S41B{gPO^z%Az7B}{zZe2v1jM~Oz&9yoBtX(p z;OCNYSC;fkj=TlRc*(dIH%^mkk30fCD;d{-H6?wMB9DOg17hD9;F}D22P5-<xfzN@%z)|2a+-_AC#(~YitCIdI)v}jdTyISi zR|zrf5N`L%TM_r+QdQv}7b(1H-v158 zf|(5imo#h?I3HL{`R|nW0gp@C;pLS|0Uk=32V4kjr&y04Bw&-IcIWtVTk&6+*|D5k z58+mIuPZ>twIiSf(=%M30G_+NL jz!Y!~@RFoIt7_zL$;lPSrt8t(00000NkvXXu0mjfmi{|s literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right-disabled.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..15d5dc1c6f4a1c17339ec6fdcebf01c46e9d185c GIT binary patch literal 941 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 literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right.png new file mode 100644 index 0000000000000000000000000000000000000000..23bff2b61566e27d05f12494d9abceca10a1ebd2 GIT binary patch literal 578 zcmV-I0=@l-P)~*YqYVZB5_58l;SIM62^%WUkP7QnM101*$e17M*>yl0)<08bMD zcd`MXn-Gs!#e6P+Ck+517GsP;IjEHuLg?ak!|oBC^{uHF?XY6~XVIzY^BZr<=M%Y# z@SOV8FID@lYdHhGHaEievHFq=VE+i;yQ}~qgzbtWxURj;3V<_-xG&bcwOo9&_@cf5 z-}jFhD+3{fO(BE}HNFkFg{>n(+#LAQaAuov5zAN^;ywe|}AFZL31jsCE{bj)LMLXcHF#__Q>ubOpP!1ILQ zC&kV822NwgM7w9AK)QI Q#{d8T07*qoM6N<$g5)FtI{*Lx literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-bottom-right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33070e0438018bfd89dcaeac2aa513d2e13dffdc GIT binary patch literal 1208 zcmV;p1V{UcP)vmi`~lvg2E1?}!B$ ziYi2>05h8f7I4#@58A*+Nv*8H7!|M=fAZi|@MKm>c$T@afB_EDZZ zz&P+!RzWlhFtaVdVZs6ca1OXu((%rVF)3i4aPk0a$xuNQ3NW*qfG?;P0Du*o3QnXK zVo|_6)yV@)&^048UI8`S``uUprX>9eaVTIv^^pgsf+x}+jaER7_kK5)aVq$&=?ZwB z`pE-a1UwE6R)Cpp13v9z7t6rpcpp2ciYtH@yROXv(*bRr242ayKG|3WWWmfn0PYBI zeNWOoSp`jh26SUXpx?>7f@lI@W|!h_ix8a3D~Kilz)S_-@AC>`3c$@3d~^2)VhX@r zfqrdbSAdyK0JjCYw_!w{_?kLM*O~g}s%y;aS-UG~RJ8qr*z8+Q2;9h2~0w#gY ziLDRrJReKIjHL5kwF5JLH}Em_X00yUU5ZOd;`ibfDu+!n&)z7VOi$uFfX^F1u*h1# zCA9?r_mG;yZA%TCTrXP&wglbI8N|mD;tLHR=40o8`-5k&4B}rkfK(asyF$sQGvGMz z5b#3-2$iw3z@94PB{2?M4s6HG&#_<$ct9oo7?Fz(DO`j5dOFYWvs+}Z0~c4#e9=Sj zYT%^?2I2^?qb}k;)8Gc+HQX7yVG?fv4+CR$lP?TFMg+*Dq9F6_#{J(w(@yyN`0J ztyb-)U#M+aT+%0!ZpZE79_}h0{Q#tpbWqY(Tp$*b%m1GMq>ywFcc@_x1qT#{jeh~l WR=b?zd_qS60000q=jxY29iR!cq_1l zfgrfhTt!3)Q6gNBA~!LD;unIhTZ2>?KcpJz#uxK=@(a}+@tgL8zds~@IM%5yl&1!yrUhVDej*uL% z1aw?U0Pqs<6Cj_@r&uhe&CN~a^ZBa4T5)=MsJbOzP>)~?(SX- z>csy3zJ`W|cp7*Yc;YhnZ983>oSalHm#aE?KA+d&;i1;o*R{B~sF|4=ot>RY zl9I`!VzHQfK3_5TE)a4#HQ=32MNdypS3oZ=F0`?+q2b|SwY9aC6e6HRBB7Cykz&Vx z0B-@!6|5Qpz6LZfFi`PdClU$u^z;-1e+E9coh8b|9NVd`0M`@%+yvCp(xP-aT>@WT zURFaxgMd@uBjAOycR#bizuJzQYJo2k@Cl%Wg@qFM>guYDF#_%bPuIxYEbu1q*rUKz z1=zdW!`9YTot&Jw@N_z@a5yaB7vQO@PJWeEeiqyU8vFbE2?m31=iJ;JmSq9NCH;w) zQI>%Z0j;gAx$e);&lQP81pEg0ymVhJ1J48W_V&6RTU%QkA0GqUla%+=J(b7tjYuRy zG#Yg~c6N50#~;0hmk2P%JPth5-Q8U>Ael@$j|X)TV2t_F81n%59q@N`b(IV_IB>aN z8Dkz8W8U#p0EM+1wi}^PsAPa${ZLqQec|t>V*6Qi8%)4#2#mjAxrpwWykwLM_zYy(EkctO#SwZAlw- bbr1XvPm=t*n<57$00000NkvXXu0mjfsDRW~ literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-disabled@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4701905c8b722f12ead913643c7dc3772b5886 GIT binary patch literal 2023 zcmVeqibyg`=kuE2> zEPz8xZvkH`rP`EIucX6Cu9`l!0^nyrk5cL*rPQKyILS4O7Fz-EHZY(G@p3wx^;giO9pa zoQp_C6Oae|0Qd#)F)#qk0AiIq9*_8ZK51@l7N^r`R_+_%1E4tOcrpZCNa!Kf0ZiG! zMoYcDy%M&ep&@a*-BMUsXjcB;z;A)?WK{rQ18^L87%#BH;gGVjGO4bvmfG4{866!J zqYVxY+6nQECd9WhDgdw%xE>3r%jJ^B#zr}M^r)OUb4G66x+VAT-5<*LcZyo8yM| zdcAV&*fFWEua|lA=Go2{d_JFuh}^w<^z`(! zw70iQZEdY6rEH<~>E_LwcC$V|&;nG%#S{npB0{UKS*LY%brJ{!Y{7%UpqxE>Rw^ng zVg()p{$(6lEWq1<{pU0q$WV8McD!Fz#st?pA`n+f<+;3HsBGT`wF(4h}v z`}Xa&@Ru)Nj&{HH06Wn(Vr+cY8@~Gl_z-wG72q)o0F*1HLlD8 z!23Xc%z=e=gM`r9{zKrURD#DNz&rYu*tc(=CH&yvpp=x9=;8kd{50;spq9|?&Ue!R z9+LosR(Z2?eWjG#xpT)-fX$mX>)~gBhI9g?TYz=?*59&aizWQ|^XHBC{BN=in5+O1 z-M_W9)f7G$3`$j1m2r40vZ_B9lAQoI!axND1u{7~X(~WxXQ#3C-_AB%QUVa#$@PbU zHf`Eu3NIqEZQC|I{1h-R+iP=N}nJ}{+P>OB@SiXF@X$5_Kea5W8q@&89Ih0Z-lv0!W z1pG~3Xz}93rWN$}KX-`hJ*CuuA(;;$S+;yaOU<7X*&B-Wg-S|FOe+{29W`bdPiy=G z_-n!urr8`K@)dB=s*sfc6B845K7J|M)G`+>-0JTV+VXn7fWtv?adEVd0C@P&@=GWZsW79t<4hLXzlIoM))tX4HuUHng|!e0F{-MG41(_hy(%wS-EnhQGhMkhD$_% z*Yv&M)TvW332^e{NhAFAY=b2vfF{E1Z+}%)Rkmk!0)c?6Sh2z=z~*d&B_lwMz89Q6 zecDoh*49=d{AbyQN=g7tgw8O~s#U8@dx1&o*JT?j6#_)`f^+B2MHQf>rNs#UdA5O4 zB7i1BR~T&d>ebKn0>9rcE|<$Fz)!Lblu7|2dclPY7a{~WapJ@a-};sUXd?V647g^^ zn%N^Te!pLqEn8+3;K$j9NrwPG)I(mnbV)=+jvqh%LO=Oq7C;kW_7LRSwQFU1dRmq) zU1}8IjckLYQ-Jk)*v7_2BYbzZA(BZky)mMcx(3vleEf!p{KdAC9JN^A8G6Sgzxzdo zhZqGAkuQKhNBQXe)P|FJi|4JeUm32izUZwFaR?wH*MU!USs$c6oXlIi?+yN1`}>KA ze3t59vSD$*H>i~Q6gVm(pQk6J%vvG>EEbXBG{uu~`#+KC=|EpZh9>|3002ovPDHLk FV1ish#76)C literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-hover.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee5e9833c493474c05d96deaf3e1bb0a4925334 GIT binary patch literal 1133 zcmV-z1d{uSP){76~8z(ur z=gvKI{{NXX=bX8ssyHPg@-Wb)s^{iv<8ll=Dpf$6hFPX?S-B@9Xhrzy z)h^l^&A7?}wk1=xgRckn0hx<$%i)3gQm(sc!Q4?}GSnU5#LixRI_8V3e86_#of#t_ zBDKIFAoI>g7E|-=4Y)ihTvizAxA1iZ7&R@%{Xr@>72`34!3*P@*x5^GlMjs~fZqkS ztLi8~$_R)^G4LsnS+%*C>bj+N%m{R!9--sV0Np1?821Nl-%BdBn1@yH+=R)8U3 zE3ivd|FL1Eihzh505+7>T*E^<%4}=h-#*H*trsyn$Kt9U;0*8^Py^gEWvXG|b>PkE zz;Q{6fQVE88?tge-2Y;!4gB2aCP!bsNF=NQ;630&RsCg(?Ts-4y+qgeeO0wm0nbPP zcno08lS`OakdaV!Hu*SGe*u*9z=NvVlft$K*aUp6s=*ZBlfpp)RK2&@2DR5p3o^tX=^7zqL#RgLZDG!nRFUVa8Sg+@YQ{+!ru zKR69;BOoFMP%{0f9r%4b-u*Q#1VrQu5%B|m0dDUi!!}^}k3hV;Uqt*Ovc*vXz&4`y zd>(+Yz-=2~jfUb~FW?4tJ4!%R+kh|K8Nw5XS5aNJ%r@ZBy?0Q)u_*rfma6(4B@lbQ z6b>rq_nCMMdtQboB6J)a0Qj5e@#?6!095rmpt-HVOuE@xcJ~pqA`ta{BrODD@_f*W zaC%Q)LNVr>ptZq-X!Y`j)8IA&s(J=!KD*Z>5Q{>~u3kb>?_YCz?GrMs>a7H{YICtZ zef)0qWVsZ$1ms<9`95o%00000NkvXXu0mjfVGIrd literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-hover@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bec645280ade08f2906eafe67c817f7491e98bd3 GIT binary patch literal 2321 zcmV+s3GViZP)(Dh(R1`TS_ZnhoN??whm*f9cMcA53BZ{*3Q^Y zna&8x!w0tZp(7wlsjrSaicFZcIiasRAq6 zMqv<9>m_1Zyp2dItO6o32DlZN1Kb2m1!e=wd}Zd|J&7~L4*FdK;i_-~uK+KpYFkWg z4>tiKk_OBN?gAD8bAg#eu*P5PSwQB5bSmF$;^TL|Fe9Q9cp3PUsFHm-`kl@k?U>xZ3QZ;%`kH-Dbzr7nX=FU_G!-Rj*jemP`Uf-I z$YgRsHj@jonNpZd-mEOL^D@YuI0}h!if(W0p=4tNCwE_Fz!O%VHsDo^p>Z`x)ZJQ1zHOTa6t+5-t9 zKtu$10{8>Q5*7SDO(^(wE?;|a8U;%xVoQ@Dw`qmeS|=qN8#uM^G8%SdV8`gF*N04i zh)f2y5T@5{X~O)6rm^_38H}HrxSoy%&UQC@R-dK1sMV_2=JcU7A|i8ugFui+CN`LR z&kZbnVy1uQ9x@b&!f?7BZYs7ka&)VmKBvd5raiz~RsAGx0z{+$C?Z7p?7UIjzpjw{ z#kuiTZPK9i>#mkQj%;b<*fu-v-mrG>Q+$o8e(KANivSV14LE?|vH4NBG>>J^-NKlh zjCiUwg}cW?MrK-A5;`xrDBs-3e|9$0Z>{($RXrB^GUhozM8*N10kZ=0zxD7SG+k>rSp01W_wX#Q_>I zmeLBK3aC<5hltz*?DG{0qkJE*4Op$J=VQ<#2vHFrBHsjl5}0@2>H@NIt!Mjlr4Dv2 zuc4=-KlD`{@D{MuVw{@o1YF*4*Q#n$B-tY&S_^oJfcbsScPB+$=g%B&W5<)#q2sj% zSOL7Rk;h&r0o}k~ffrTvVw7@6L_`9-W8d%QrjNF9_wp}Wep6e~&h}qb1@6o|7(-}{ zstz&-6Zi<|!f>_Msj5B7Z=*&u7VtQb=1Y8K*%Wf7XPOr7u)BEww>5#v_W}>9>Yf;7 z>jIty{t|1LD;8K1AR;#4(Q6ro!()ZrE6?C`xP8e1;GsB_M^z62hhqIMRzwOp%m@4t z*Zf7f+%P-Kv~czQR%(v~h2nm%svitV!XzUS0rv(b=G`~hyrjb6moEh7Gy-ellxx@! ziGc6>3#JRVEX^}5c(%krYppXd>sepaC6!@HfQV!P-|(epF32Hsy!n)I^u3^!sRQ_X z0_00NtSsPm0%rgGJI&X9S7$%96+vTvm#TITS-N3>6#?@D6Vq=WZ(8tdi35*2$gkNu zG_i&cRs?+2_aiMsn0A|aSii0^=c5jH|Bw+l?$_dt)OXljoGWvXIX>M|c`zo(+!>i%JlPqld_}4& z4*>+I>IvYVzI5rP2D3{BgP1OFBaRfHionpslWlQ~O$?s^s&%Eupc1 zBdS`I5DAlvAOgIHh`W91lGhr{PGhcp<55aB)`w=VN{o2PM>tQ=Zw0NjPO3h%wt|!Y zx=h=JAaAftRre=M!X#r50p2ro|9-w?L%pdLs7EQ?G&0A&4`zFTXYg7<%Xuf&2g2X8 z`Rs#Bp}k+Osv{;A044-@t-!y86~B66kQEH{E2Xau>iv}omM`hBiU+L3X9ee+oIVt6 z1t)ej)7}`g5h_>J!wHu#$uK3rYXyEcwq!$t|3bq+zf$%_W9TOGLGnu?`-BuQ&8`hsp>}wmu?tfNr0+W0{$hfWPLpzw^F|O|D*Q-P*uwZScqZ# z3TWYX@-#3F9E?;)DnC)(5fYID7=LgGhb5|7l8DZ@9*FioLrJcE^ z5|{F)zmX8jzs5qHoc$xc_aO!XRJ9x^4#--YcyWdwvHow+=NA;IYH6Z{xgLn;vUD-< rl&Y2`N2K9JJOs>8)j^)nNX7pE&u9p4(U0XS00000NkvXXu0mjfRUAk} literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left.png new file mode 100644 index 0000000000000000000000000000000000000000..44e17791e7651a9798e4c5a2c142e59441feb631 GIT binary patch literal 632 zcmV-;0*C#HP)k}yp4#-vU`?P zhW;xKU?QdTFr~EPe-LQ)8^w#1(%qEO_M#2xZ;v3QG=PKHiVNo?xk+&LV<($a5BuE9W$!F!K&{XAa1GXE_Y#WLOF zctm_ISnoUX1a=kFe#D(B!8;MyTu^&2A{OcrP literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb730d791cf5cf4ef39b075539619b2913dc11c GIT binary patch literal 1224 zcmV;(1ULJMP)vLaF*N!e@Uq$GsMW<{f#6*Ov))~g&uL{u{i z3LcG`Xn(21!g@Y~G9xGv@&(UINJ~mfE%R$|&Wr2w-gD00`|N%9`(RDZy=(3DeP^A0 z&syhPlSGa%vjxCHN#Dm@rxP=HAg%xonAw|VHWX`-oCWBVb}#UqnT?s*@)(QcitgOz z0rvy@&1|cgEse2AZs?WUJm4YVU@64n7>neBs@yK15Mr_vVv+A6mcy@rnau~T16Be{ zfQ7&iu%Tgyzkrv4=Oz8>w03F%%xn%Y46Fmz0@nlA&`vcT2VMeRkaVn(hotBREC3z= zwgbliMYiL>v%qDwxkV;E0=!lx6q|G}`=b=%(xd{E#K#9jx|baVMuAJB3IN;)yqf{x zes%=1d zrZOPpO8n;FO%S*NIGh0~7vjS`xpBHsa$* z{?QBw_Orh!?mCB@I607CM$vVpAoC0Gg9Gs~V1?Iy<{-cuk;qN~uT%8*Bf#b5dUw?L zoi2$l_aW{i0I-H)H*JgbB=95^*D0{RkMAj9E3h<#xT^qfwM2YBa1Z4iqGrvzX84|< z==B%3LAP2HkW!l2+V2ly?!_aY?Sn#qu&W& z3-F>G$6PL`9Eq7(2lx^29Xg%`?w0hnr+;+R&EbaeClByk&g7w9fI9jPqMk#sV^KMDHo0cLg)#Zb{_1N)TG0&c>8_un=f$V0UN!vS&M5AaQj zDgjn`#uTvA(>FP)1n_++VN%j>p1#RZCBQPznEO2a27;afln*d{UqU$GpH6!8tAML0 zUPkc2l&9Z7V8AQD#u>*?0={ow94`I4ai63;p7El>C`R1h5bte~y%e+f{$1Aq(UJ5m zur1;mn{p)&<*l%p#j1iYDIP&(D?kUJtb*+k;&0BGJajcfX0{6Wieg`A1A8Q`Z7EhX z{9p2tzNQ#{wuR9aV@1O`?Xa1xrr5PZt6)OXZGkb8;G9iQ(msj@ilG>7Ax09MHxMzi zVc-k=t6*Hx?V*XK!g)V?lJ*kT&yNQ9CP&YaSU?r*mNe2vVyV#c#;2@;4?N;+4ofFJ zs)nMjRWR$$K2+TLmR0bfL#$2V>7+;9qp@3nCT;Aj+WEUt+5AZQ9N5ty&a6E9(BS_9 zW_BwuQSp_JC9P{UtAwa+f6GZu)tLLK_R>j@rv3jDeU9&x^l4kk3<8Y=kTd~&(&MA- zpZ?atWdbzwCTGWNKl|VyfTZ2PuC7DRw4Y9TxXu8lH@uG|eb#m|gMjnj=FDst@VKP$ mI4Pxtj{sLoIut3N!I^5GpmVfvSVHtczNIF zo#!(T?>o#OiCiz>2JqcQ)|`9K9236@Oamvtzn2C8-T-ER6Wg{02si-jKmqO(&j1RC z!-~h_T3cH)00AlB58!)X2)GTDJU0M{0uz8^+qSy9yS1^gAxUx^M~Os2ZEbC8Y;05{ z67hlr90T71?_L-HR0C5$+O};a5{XRWr?suEEzQo(s;jF@rKP1_%pCA~j{A!k@Q+#C z+S;mQGI?(D>~?r~sL|0;m6eql#3SHVt`)cfeBmxqQBjfl`}>~>vbVRVcsyFw>!-gE*KiA2=b*QcGGol}T`fdLb@1-z0ozym1;J_8_#04hak0k7 z$9;fwI<2OrCbRDDg#jMO%PwROILVp|0WH9vfQE;MeTen-b%n!W^8%}QCV(ed2{8DS zYTXZoLRws0^dUMsJ53etJQpAb;H$vHs;Vj-A0KA`D=RAo@E}ltix>nnJw5HKLNppR zh^yZC5czN40GgPX@C`OMH=FMJ-toKxBy9t~EiEl^baa#%kHuo9`&OU;xBYlhf93lKTENeM=H}*<-S+qQH8wV8j^htO zy$4zV)z{ab0;JPv)zs7&z|Eil7Vs;e`T2PtU}|d0BwxtH=NsT6J^<9v(2z;)IF9$} zV?hHfU=`59!h$4ea&ponzvqh$0^lM(G*xgMN7dEU2JrS}0W9DbK<(}ACi(2CxS#+o z;x_(IxEq%Z$eajZ=FFHN0WRWW{{N}H{-OXO;L9h?{|6FUm4j`-vNr$#002ovPDHLk FV1j6Dpy2=j literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-disabled@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-disabled@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bafe33000a798ad6fb0ca34e422eaf0ab5654c25 GIT binary patch literal 1937 zcmV;C2X6R@P)f4DQ!pHvVkqlG*n*NWovvvX{3qvgI~;wtiY-$Q9>dH z&~Ku`l<-zUOcpI4`T^K63=6&5IxNJxov8j#LR+0uFZFfX~D-gD

CDx8n7BZQF;#VM3u0p-_m24{(bJ; zxx>iF2)A$FW_Wm*si`U3wicTPE(1Xk8A#_mE3+B#moSXD-|v^BM~_M*5|O!DG#Zt` z!9h86=#X@DbVzx5dAh847g(0<46q7c44lB`9{2nG(%s!H(P(te!cF%0@nboC`m}U* zc1lS}iPKyW1WL080H`(z2V~v4bu;eqT-(UVi0s(0L*~z)Zvrt0d@Nf46!2x>ucq`1 z1OjsA%o&-Uo_?+%Mn^|w)225{O77BAYjFHbMCGYylV_g8)jYcH+;5mWMnpcyIG`I! zq{)atARxWHz4GkYv(#vrd`n77BoGM5mMvSPx3^b9p-{%zaQygjyLsX7z(+F8fJ|mf z1$+sIIU)(-$&)9pSAC_WrPAKsE`5D{DS&S5;K74-@qV5&02+)hI%Py-W20*T)>2|z<_`O>ImUeBxcv4J7MTK0ucFhrj%~Rn*-T_zyeSQ{gT7hszG$oB2q^(^>tQ3FUoxSSN^^Z8_KY|IE?XlQ80 zBk@H5@Tzsquz&x4BLESRRjXF%3!@sR_&NJ;Fk2=f?-Snu0pP@m6U1UMqyPH#>#c_h z_?%Pxf(MYWp5%|ackePVFkp1-=;+X^+MNOy3xHn{-?9UszrWw;*w)s@f&~k#Rj)Y( zE(!o5GC_Q)4Zx*KmyEt;Wo4{cv&LH0pp+^%`4k;Of<@M#tsLm+MtcCf{NL@K5W((9n?4QOf{;fXTOL0Eoya@%ID389-xW zqh94V`4$a;grzn;Z{ECVbn<$=_N+fezly^)n^H<9Cnt?d;POd;O_Zv+1@ofHus zJa}MiTvu0@F8*&tO&M>2a5$Xu+q-wKp8CH@^^tFpE+A~QUi^v`DjYh@q_v-*&D<%LQ zwB6#fXV1C@aQN_H$GyV53v>zL4XcQiD_6S8f^ax2wY9Z6fLDtVz>F+7ckWzT05&_t z{WD_cTU-VZzHSw>di83@ESQ*>keZqreS55>m;rc*f0mmPb^iQ$BY*=34(Ox*o^9NG z3(F9~W~-={mKNJAn3$N5MT-{c09s!J03PDs8mENy_xH~L(ACwYi+|S`GvA_S0pU%j zxxi-hZSVbJ22e))`+}6n3l}b=00e_Uee{3r7%$&~W(naNc3EH;{ZG7z0LqAe1CSDX z@#00uzEcZ3aLp3%a!G81OT{xOn?iO7dasUYx&Oxyks XDeSjhz%OM{00000NkvXXu0mjfa)Xg{ literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-hover.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb24a468eefc5c1cc4dcdf3266d7f079672ddf1 GIT binary patch literal 1101 zcmV-T1hV^yP)mwZaopWLeqi@*0Sk-e z@JS|_dHyr={N~x+nH@v~y9HPa9A3zndFQklcs1}PpabD00|2UlWOKz2p} zj1@Nn;>c1`v$pt|fUkgkKm$VQ_D0HAu)avs=KL0*y5?jit4Oz2!_ z33B|vCC0DC0Ybob5ow+iz{r3Hcma43a64TZfvrB)JyW(|kcqJbU+?Rqvn2?S1fCF) z!*c?p8cN*)?6iW^Hh8IPEW=gkC&iu%*)x&250qkxwE+I5ijeWE+yZSJxx1t;1b_{@+-g~ zuv$d^vISrPDFB{l>dPoJ+&ZukSOwGo4+1N5@--fMqmr7<#i{Y4!{^U-GH_-TV84jG zvLFBp$j!hG;5DYccZWrD0GoghfXa=pmUHj+($v^%m!lkf_y_caM1k8xBxs%6fejOp zu!y`5lmmNaXu60T0qzD)AKTwg|LJt5i&nbu*Lwk6z*95lwgq4bHYy@}uA_|s4WcvJ zw)Y}>BAwa5R-ajY@`eCx0R91dG%^sSr+ql(_g3X|Yeg8zMQWr~GBLZnIjGQ2@iv#G^@uddE|a;#GNO_0FXL=mr?-jiemQ zN^UZD%oWy-S&JD}DYXk&1C#)SuEf%srpWVT6As2Il~PTH``n@e0A0X)W+O5(IZezf zauN>4TtK7Y`oh*uXxEfd3OEM@wl!5#xxQ$cJ{d{U)jCA$+r0qoBC=tz_W=Rk0qFSn z@+{rya##tZ*cqnpgYQy`KIL0?&{? TK4Q@R00000NkvXXu0mjf^3U)b literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-hover@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0cf62b98b0ce980bd1f1eb7301bcc6ec0b2bf617 GIT binary patch literal 2253 zcmV;;2r~DHP)j1X@gO1_*(qJQBhqiR7`H?BnMj_wI7{?%un* z$p-g+XYS0s=lss^obx@u^E>Bv&Q&79XhJDf2|OwykBw?Y!$ihtDOO6AE2Vx7oC3Zw zTJ?++u2d^jN|ggo0ADreSE;TiRY(~DN~x*9S|U51_84(P6YO}}TEMV?)v?ssNrub8Hbk&6|+L#~*qh)hll2*?IM`ihF?z zz5mZsrPK-FHDC{L zR73)awrwPcOMpJd9|OJt?`!rQPZa*aARSG8TzcmQ=MMMKdbFE>&z6u^fbWS&^N1=o zAxwb2fmsVYglUeCEzw52dSxlDoYC1l4)z6TIoQR2c3Z0E$T%MA6$^o4c61F7&2N`ICEKLGBEB~)CQ z$HFyJnQ?zH>elf<-?bs$_-QMRuXaN8?6?Z76p;fXsUyM%D5dTLHllgsC=|axkA>g5 z^+a53yun|eYUXOofH|ul_>73`AFl40tAI|#2H<0{3jIHb@Oy*oUVnzhzjT_j`hic2 z$iIf8*LEiumx#(d=07rp4=*i2W!~KG2Zn-dU(-Zxp^Lo2EXGXCW6k9^=HnSr^F3lu85pUR$oF};be*MdxLDKu8XZJ1Bxp0m^`b1^10)vS~QW| zamf*KY+E~fYFf-BGy->vh&LHs3C99TDFrMAeu$Ni(21CSUlE&TA4*7XMy8^CP9fD_ zEaiiXCq`J39qM1Y$lhnqnUgn*$fF4<(2;a71fY}(5fRfOitfnc+PNr)6&K?sxmmQP zj60X#o{(?(`??m6zuaz25@3mlyq;*C!y+JDSeqJ819Rhu4g%i+rT~?|M}Rx5geT1$ z%d(njlvIteRq7uM^5Uu!be@g~BpZQh5sR&q2_qsPtRy}W9udhil_>=70hR!t2O`c3 zvT`%|?7AvuE-kUG``WnyezW3ja|F6tM7Ac>_Eeqw!<2vZ4qumCFHEphbey zZ)U)fwUx~I@?_h3|M`3?hhMy4Olk$Di^x#CHm7tI7m+#)AwPP#>{b zz;^+y;R3I1ILp6xUAC=v{=-wuOKS!2xkTDLD%%(n5ebK}BH|N~=g=&uTT6u9>sq*c zvd^+y?l>06 zlu~L^yt;15Mpi`j4WrC4;M<|^>uny6)?Tud&vIulYgvTDbfF#A+Ts?5G|59mev5V@ z1i+yeF5v0$S;|+hEHx)Bk5@-p6QJV>^i8j~*U#HKtsP>?v@w*<$Tud*bxMXNFQ)C^nJFj+fp{erIy)%pvMb5O6brJ#Z8b7X_wkE)2 z0RS_sWF13*h;#s5q3_OS>&xV#im1TTa!c$O0(68AJ+HTVEQMU|40Bv?o26_@nl%bg zO3ec%qb+}-^R@6bQSVjzP(Qyo8*gv;_N+=jv@zp++7bXv1-4mbdj9JpFcc&+JGK$$ z7iAmIC8q;>V~8zE=P9rQljDnkXjf-e$S<~B`a{?&A_vo!0R2#Nqn*q^kM#v{&X`Qg zJRR#H#b<)4hEggM%?iTjgv)BCF@3Riews5T)AAm{?+xM~(xRq@t?lgpMVm4EA0n~@ z(tH)r{}ZY)rZv>I;~wk6UEs34L~*$@a2L36Ij&^hQk3uhLO@NN=XuskCaQRdp zr}kL~LuMR*xr5#-5x!!Nh#U!hq&)$#tl;40_hS7o5Cxw%Xg)3n!{~zp2+*+&qZOR& zA9h9d~jtzd&OEuIzlJOK`GiTHy?FpWMqga92|f$$$<9Zh{S zALz0aKDNDs{_7E=|2GjiZkBTl0lF1L>22za?t!uaBkIF$CzS1%54iU1w8K={{? zj;20Z>TX&=!`7(LeoqnSvy2zRU$eZYXK0pf}fa@gP5X6J2=_` zAf^>;7m+U|THetX0AVY5M*j?8vFEpf<1GL{zx{0n>O^F9GG){GULawJ$dFQM6OsQW bCWQY1kN42iX(HvH00000NkvXXu0mjf3x^%p literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right.png new file mode 100644 index 0000000000000000000000000000000000000000..e55fd5fdd042ef55e060370629019572dd5fcbcc GIT binary patch literal 571 zcmV-B0>u4^P)h$x~-#^R>fY_fZMm)Y~dgPnbE=J(y1eQ(4VHFZqjVLx+vuGvs{ z9FMSuA43Dc80M33O#Tzwa{+`Tw9Y~ZG0agbP-prq1wBi3{65lfk7kwGCO?O}~uBS;kAy#m)aTQ=s3m|_n z)mIrNkQ?}&3E~rW57GyA;tIYM7F)$MF5xylHiWpjl}@-LfqcbUDb~S^Za=64_=SA~ z0Tje`;abgZJ?{Z=c}oBd0QZ-UtL%&AIUN}-#`p!dYEs5R2qVQ8SpkyW)xEr`>~yOD zF~-kWtVucADnPOqHL)YZ09dMt9ViaA2vNFLRgS8U3~BsoVeo zuNsOkWN$s3qURwYO;(Q5UV%Px1ikROtr%iwaaY6TbKK{P|I+&}9{{vmF{F5CxEyMr-002ov JPDHLkV1hUF>XiTh literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right@2x.png b/src/libs/vmisc/share/resources/icon/light/32x32/rotate-top-right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bf1f1c0a5f79cb993bf5a92bb5afac611293a80e GIT binary patch literal 1179 zcmV;M1Z4Y(P)e~7Rwdy{uLML$ z#6Q4d?*v3f#BabYoe+?aV8B|!UL!u~jDQ>&&jzZ9X<$vATxvfJW?^Qlf%k#O`gFYp zyan6?ECiMS_cb2497lnrlBO&5Zc{>XYs4=UUzy82d~U7Fg?*l~* z(GVc%FWmD%6U;4Yh=za!CmZ_RS=12hrz~c+448*|G`^gio@y9wEO~pC$Jt=-1I+9d z;PZ}$SspS0vvBYC3Rm!!_+HYQVAlY-mzvu<9AX>-zZEvKAzb-e>^bzelAeaZtAL~_ z+@~_WvGwMUpcMeA3XTEydkXoDq-Sm(1g!w*LMu8 zhTPSMNE8663XTJd8ix2<(sTKfQ78aX6|}i881Hp58U;YAf)kXy;3&XXlAiC?5RC#L zRl$zBZn!P{o`^~T0A@CVdn~T{eZgKyFBCOKr2qg)*Qs6+1iV+)Avy&>s)9dppYWIA zOGz)5b%;&@kgA|xMGyrme-=?H04k~A3rR2aixZ^+AXPz8MVO{!<wEkjgdN#G-+l#fFJAn-T-kVDFwC_<4*tp002ovPDHLkV1oK>`sV-u literal 0 HcmV?d00001 diff --git a/src/libs/vmisc/share/resources/icon/svg/close.svg b/src/libs/vmisc/share/resources/icon/svg/close.svg new file mode 100644 index 000000000..43f57c41e --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/close.svg @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/clockwise.svg b/src/libs/vmisc/share/resources/icon/svg/dark/clockwise.svg new file mode 100644 index 000000000..cda1e158e --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/clockwise.svg @@ -0,0 +1,48 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/closed_eye.svg b/src/libs/vmisc/share/resources/icon/svg/dark/closed_eye.svg new file mode 100644 index 000000000..7227c4894 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/closed_eye.svg @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-disabled.svg new file mode 100644 index 000000000..ec06cb4fd --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-disabled.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-hover.svg new file mode 100644 index 000000000..71e814ca7 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal-hover.svg @@ -0,0 +1,44 @@ + + + +up right down left sign diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal.svg b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal.svg new file mode 100644 index 000000000..59b821bc8 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-horizontal.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-disabled.svg new file mode 100644 index 000000000..bcfcaaa97 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-disabled.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-hover.svg new file mode 100644 index 000000000..5d2e937b8 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical-hover.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical.svg b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical.svg new file mode 100644 index 000000000..4837da8e3 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/double-arrow-vertical.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/equal.svg b/src/libs/vmisc/share/resources/icon/svg/dark/equal.svg new file mode 100644 index 000000000..815f5f5de --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/equal.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/expand1-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/expand1-disabled.svg new file mode 100644 index 000000000..ac75aad24 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/expand1-disabled.svg @@ -0,0 +1,45 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/expand1-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/expand1-hover.svg new file mode 100644 index 000000000..598a2da3c --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/expand1-hover.svg @@ -0,0 +1,45 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/expand1.svg b/src/libs/vmisc/share/resources/icon/svg/dark/expand1.svg new file mode 100644 index 000000000..ece24ddc3 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/expand1.svg @@ -0,0 +1,45 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/expand2-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/expand2-disabled.svg new file mode 100644 index 000000000..3ab0ea80c --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/expand2-disabled.svg @@ -0,0 +1,44 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/expand2-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/expand2-hover.svg new file mode 100644 index 000000000..f72ee2fbc --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/expand2-hover.svg @@ -0,0 +1,44 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/expand2.svg b/src/libs/vmisc/share/resources/icon/svg/dark/expand2.svg new file mode 100644 index 000000000..a2c6cd95e --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/expand2.svg @@ -0,0 +1,44 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/fx.svg b/src/libs/vmisc/share/resources/icon/svg/dark/fx.svg new file mode 100644 index 000000000..39d94e937 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/fx.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/go-next-skip.svg b/src/libs/vmisc/share/resources/icon/svg/dark/go-next-skip.svg new file mode 100644 index 000000000..f9b78bb66 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/go-next-skip.svg @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/go-next.svg b/src/libs/vmisc/share/resources/icon/svg/dark/go-next.svg new file mode 100644 index 000000000..aa8a34b1b --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/go-next.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/go-previous-skip.svg b/src/libs/vmisc/share/resources/icon/svg/dark/go-previous-skip.svg new file mode 100644 index 000000000..29b85287d --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/go-previous-skip.svg @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/go-previous.svg b/src/libs/vmisc/share/resources/icon/svg/dark/go-previous.svg new file mode 100644 index 000000000..9dc361202 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/go-previous.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/hold_image.svg b/src/libs/vmisc/share/resources/icon/svg/dark/hold_image.svg new file mode 100644 index 000000000..0317266ae --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/hold_image.svg @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/not_hold_image.svg b/src/libs/vmisc/share/resources/icon/svg/dark/not_hold_image.svg new file mode 100644 index 000000000..421d53e3c --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/not_hold_image.svg @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/open_eye.svg b/src/libs/vmisc/share/resources/icon/svg/dark/open_eye.svg new file mode 100644 index 000000000..9ce581003 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/open_eye.svg @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/put_after.svg b/src/libs/vmisc/share/resources/icon/svg/dark/put_after.svg new file mode 100644 index 000000000..b2c5f194b --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/put_after.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-disabled.svg new file mode 100644 index 000000000..a1e542d87 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-hover.svg new file mode 100644 index 000000000..da0026394 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left-hover.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left.svg new file mode 100644 index 000000000..48e8ac322 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-left.svg @@ -0,0 +1,59 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-disabled.svg new file mode 100644 index 000000000..20b94fa3e --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-hover.svg new file mode 100644 index 000000000..41f7e594b --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right-hover.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right.svg new file mode 100644 index 000000000..ccebe17a4 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-bottom-right.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-disabled.svg new file mode 100644 index 000000000..35b5eece9 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-hover.svg new file mode 100644 index 000000000..c87dc09fa --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left-hover.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left.svg new file mode 100644 index 000000000..dba7cae04 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-left.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-disabled.svg new file mode 100644 index 000000000..bbe69d352 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-hover.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-hover.svg new file mode 100644 index 000000000..70f93d418 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right-hover.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right.svg b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right.svg new file mode 100644 index 000000000..06b12a5f0 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/dark/rotate-top-right.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/clockwise.svg b/src/libs/vmisc/share/resources/icon/svg/light/clockwise.svg new file mode 100644 index 000000000..f19359e9f --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/clockwise.svg @@ -0,0 +1,47 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/closed_eye.svg b/src/libs/vmisc/share/resources/icon/svg/light/closed_eye.svg new file mode 100644 index 000000000..9f2d9ad6d --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/closed_eye.svg @@ -0,0 +1,45 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-disabled.svg new file mode 100644 index 000000000..104705eac --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-disabled.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-hover.svg new file mode 100644 index 000000000..c3db82e62 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal-hover.svg @@ -0,0 +1,44 @@ + + + +up right down left sign diff --git a/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal.svg b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal.svg new file mode 100644 index 000000000..7eef0dc91 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-horizontal.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-disabled.svg new file mode 100644 index 000000000..0d5ac177c --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-disabled.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-hover.svg new file mode 100644 index 000000000..224bbcd09 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical-hover.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical.svg b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical.svg new file mode 100644 index 000000000..1c6b2b50a --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/double-arrow-vertical.svg @@ -0,0 +1,48 @@ + + + + + + + up right down left sign + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/equal.svg b/src/libs/vmisc/share/resources/icon/svg/light/equal.svg new file mode 100644 index 000000000..d85dfee1b --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/equal.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/expand1-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/expand1-disabled.svg new file mode 100644 index 000000000..74ab3b8cc --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/expand1-disabled.svg @@ -0,0 +1,47 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/expand1-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/expand1-hover.svg new file mode 100644 index 000000000..5dfd19893 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/expand1-hover.svg @@ -0,0 +1,47 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/expand1.svg b/src/libs/vmisc/share/resources/icon/svg/light/expand1.svg new file mode 100644 index 000000000..ef4c6b1da --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/expand1.svg @@ -0,0 +1,47 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/expand2-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/expand2-disabled.svg new file mode 100644 index 000000000..25731b3dc --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/expand2-disabled.svg @@ -0,0 +1,47 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/expand2-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/expand2-hover.svg new file mode 100644 index 000000000..f60de9664 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/expand2-hover.svg @@ -0,0 +1,47 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/expand2.svg b/src/libs/vmisc/share/resources/icon/svg/light/expand2.svg new file mode 100644 index 000000000..0b27a275f --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/expand2.svg @@ -0,0 +1,47 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/fx.svg b/src/libs/vmisc/share/resources/icon/svg/light/fx.svg new file mode 100644 index 000000000..8e9fbfecb --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/fx.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/go-next-skip.svg b/src/libs/vmisc/share/resources/icon/svg/light/go-next-skip.svg new file mode 100644 index 000000000..05c1579cb --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/go-next-skip.svg @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/go-next.svg b/src/libs/vmisc/share/resources/icon/svg/light/go-next.svg new file mode 100644 index 000000000..59c6b0b0e --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/go-next.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/go-previous-skip.svg b/src/libs/vmisc/share/resources/icon/svg/light/go-previous-skip.svg new file mode 100644 index 000000000..52da11cf0 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/go-previous-skip.svg @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/go-previous.svg b/src/libs/vmisc/share/resources/icon/svg/light/go-previous.svg new file mode 100644 index 000000000..436ce4a12 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/go-previous.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/hold_image.svg b/src/libs/vmisc/share/resources/icon/svg/light/hold_image.svg new file mode 100644 index 000000000..05ecb044b --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/hold_image.svg @@ -0,0 +1,45 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/not_hold_image.svg b/src/libs/vmisc/share/resources/icon/svg/light/not_hold_image.svg new file mode 100644 index 000000000..5d9a68191 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/not_hold_image.svg @@ -0,0 +1,45 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/open_eye.svg b/src/libs/vmisc/share/resources/icon/svg/light/open_eye.svg new file mode 100644 index 000000000..4dbd5bfce --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/open_eye.svg @@ -0,0 +1,45 @@ + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/put_after.svg b/src/libs/vmisc/share/resources/icon/svg/light/put_after.svg new file mode 100644 index 000000000..29e242507 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/put_after.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-disabled.svg new file mode 100644 index 000000000..bbbbd436c --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-hover.svg new file mode 100644 index 000000000..5a31f2a25 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left-hover.svg @@ -0,0 +1,59 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left.svg new file mode 100644 index 000000000..233710812 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-left.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-disabled.svg new file mode 100644 index 000000000..bb6714104 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-hover.svg new file mode 100644 index 000000000..3c2a19217 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right-hover.svg @@ -0,0 +1,59 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right.svg new file mode 100644 index 000000000..9cb579a03 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-bottom-right.svg @@ -0,0 +1,61 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-disabled.svg new file mode 100644 index 000000000..e76cdcb5c --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-hover.svg new file mode 100644 index 000000000..07bc5fa03 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left-hover.svg @@ -0,0 +1,59 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left.svg new file mode 100644 index 000000000..5a0868cdf --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-left.svg @@ -0,0 +1,59 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-disabled.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-disabled.svg new file mode 100644 index 000000000..edbec2ccd --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-disabled.svg @@ -0,0 +1,60 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-hover.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-hover.svg new file mode 100644 index 000000000..528eb93bd --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right-hover.svg @@ -0,0 +1,59 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right.svg b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right.svg new file mode 100644 index 000000000..5abd15d8b --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/light/rotate-top-right.svg @@ -0,0 +1,59 @@ + + + + diff --git a/src/libs/vmisc/share/resources/icon/svg/roll.svg b/src/libs/vmisc/share/resources/icon/svg/roll.svg new file mode 100644 index 000000000..a252680d3 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/roll.svg @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/src/libs/vmisc/share/resources/icon/svg/star.svg b/src/libs/vmisc/share/resources/icon/svg/star.svg new file mode 100644 index 000000000..5da91ad71 --- /dev/null +++ b/src/libs/vmisc/share/resources/icon/svg/star.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + diff --git a/src/libs/vmisc/share/resources/scenestyle.qrc b/src/libs/vmisc/share/resources/scenestyle.qrc new file mode 100644 index 000000000..b5ac6c4a9 --- /dev/null +++ b/src/libs/vmisc/share/resources/scenestyle.qrc @@ -0,0 +1,6 @@ + + + scenestyle/light/style.json + scenestyle/dark/style.json + + diff --git a/src/libs/vmisc/share/resources/scenestyle/dark/style.json b/src/libs/vmisc/share/resources/scenestyle/dark/style.json new file mode 100644 index 000000000..e5255b9d9 --- /dev/null +++ b/src/libs/vmisc/share/resources/scenestyle/dark/style.json @@ -0,0 +1,48 @@ +{ + "ToolStyle": { + "PatternColor": [120, 160, 200], + "DisabledColor": "#dedede", + "ColorAdjustments": { + "black": [120, 160, 200] + }, + "PointColor": [120, 160, 200], + "LabelColor": "#f8f8f8", + "LabelHoverColor": "lightGreen", + "LabelLineColor": [120, 160, 200, 125], + "AccuracyRadiusColor": "yellow", + "ControlLineColor": [120, 160, 200, 125], + "ControlPointColor": "red", + "VisMainColor": "red", + "VisSupportColor": "magenta", + "VisSupportColor2": "darkGreen", + "VisSupportColor3": "darkBlue", + "VisSupportColor4": "darkRed", + "BasePointColor": "red" + }, + "PatternPieceStyle": { + "PieceColor": [120, 160, 200], + "PointColor": [120, 160, 200], + "NodeLabelColor": "#f8f8f8", + "NodeLabelHoverColor": "lightGreen", + "NodeLabelLineColor": [120, 160, 200, 125], + "LabelBackgroundColor": [255, 255, 180, 200], + "LabelTextColor": "black", + "LabelModeColor": "white" + }, + "ManualLayoutStyle": { + "SheetBorderColor": "#808080", + "SheetMarginColor": [0, 179, 255], + "SheetGridColor": [204, 204, 204], + "SheetTileGridColor": [255, 0, 0, 127], + "SheetTileNumberColor": "lightBlue", + "PieceOkColor": [120, 160, 200], + "PieceErrorColor": [255, 150, 150], + "PieceHoverColor": [199, 244, 249, 60], + "PieceHandleColor": "lightBlue", + "PieceHandleHoverColor": "lightGreen", + "CarrouselPieceColor": [120, 160, 200], + "CarrouselPieceSelectedColor": [255, 160, 160, 60], + "CarrouselPieceBackgroundColor": [32, 32, 32], + "CarrouselPieceForegroundColor": [0, 0, 80] + } +} diff --git a/src/libs/vmisc/share/resources/scenestyle/light/style.json b/src/libs/vmisc/share/resources/scenestyle/light/style.json new file mode 100644 index 000000000..1afc8e2c7 --- /dev/null +++ b/src/libs/vmisc/share/resources/scenestyle/light/style.json @@ -0,0 +1,45 @@ +{ + "ToolStyle": { + "PatternColor": "black", + "DisabledColor": "lightgray", + "PointColor": "black", + "LabelColor": "black", + "LabelHoverColor": "green", + "LabelLineColor": [0, 0, 0], + "AccuracyRadiusColor": "blue", + "ControlLineColor": [0, 0, 0], + "ControlPointColor": "red", + "VisMainColor": "red", + "VisSupportColor": "magenta", + "VisSupportColor2": "darkGreen", + "VisSupportColor3": "darkBlue", + "VisSupportColor4": "darkRed", + "BasePointColor": "red" + }, + "PatternPieceStyle": { + "PieceColor": "black", + "PointColor": "black", + "NodeLabelColor": "black", + "NodeLabelHoverColor": "green", + "NodeLabelLineColor": [0, 0, 0], + "LabelBackgroundColor": [251, 251, 175, 128], + "LabelTextColor": "black", + "LabelModeColor": "black" + }, + "ManualLayoutStyle": { + "SheetBorderColor": "black", + "SheetMarginColor": [0, 179, 255], + "SheetGridColor": [204, 204, 204], + "SheetTileGridColor": [255, 0, 0, 127], + "SheetTileNumberColor": "black", + "PieceOkColor": "black", + "PieceErrorColor": "red", + "PieceHoverColor": [199, 244, 249, 60], + "PieceHandleColor": "black", + "PieceHandleHoverColor": "green", + "CarrouselPieceColor": "black", + "CarrouselPieceSelectedColor": [255, 160, 160, 60], + "CarrouselPieceBackgroundColor": "white", + "CarrouselPieceForegroundColor": "white" + } +} diff --git a/src/libs/vmisc/theme/themeDef.h b/src/libs/vmisc/theme/themeDef.h new file mode 100644 index 000000000..704dd1667 --- /dev/null +++ b/src/libs/vmisc/theme/themeDef.h @@ -0,0 +1,56 @@ +/************************************************************************ + ** + ** @file themeDef.h + ** @author Roman Telezhynskyi + ** @date 26 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#ifndef THEMEDEF_H +#define THEMEDEF_H + +enum class VColorRole +{ + DefaultColor, + PatternColor, + CustomColor, // Controled by pen color outside of an item + DraftPointColor, + DraftLabelColor, + DraftLabelHoverColor, + DraftLabelLineColor, + ControlLineColor, + ControlPointColor, + AccuracyRadiusColor, + VisMainColor, + VisSupportColor, + VisSupportColor2, + VisSupportColor3, + VisSupportColor4, + BasePointColor, + PieceColor, + PiecePointColor, + PieceNodeLabelColor, + PieceNodeLabelHoverColor, + PieceNodeLabelLineColor +}; + +#endif // THEMEDEF_H diff --git a/src/libs/vmisc/theme/vmanuallayoutstyle.cpp b/src/libs/vmisc/theme/vmanuallayoutstyle.cpp new file mode 100644 index 000000000..d4f2732d6 --- /dev/null +++ b/src/libs/vmisc/theme/vmanuallayoutstyle.cpp @@ -0,0 +1,119 @@ +/************************************************************************ + ** + ** @file vmanuallayoutstyle.cpp + ** @author Roman Telezhynskyi + ** @date 29 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#include "vmanuallayoutstyle.h" + +#include +#include + +#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) +#include "../diagnostic.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) + +namespace +{ +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wunused-member-function") + +Q_GLOBAL_STATIC_WITH_ARGS(const QString, ManualLayoutStyleNodeVar, (QLatin1String("ManualLayoutStyle"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, SheetBorderColorVar, (QLatin1String("SheetBorderColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, SheetMarginColorVar, (QLatin1String("SheetMarginColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, SheetGridColorVar, (QLatin1String("SheetGridColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, SheetTileGridColorVar, (QLatin1String("SheetTileGridColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, SheetTileNumberColorVar, (QLatin1String("SheetTileNumberColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PieceOkColorVar, (QLatin1String("PieceOkColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PieceErrorColorVar, (QLatin1String("PieceErrorColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PieceHoverColorVar, (QLatin1String("PieceHoverColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PieceHandleColorVar, (QLatin1String("PieceHandleColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PieceHandleHoverColorVar, (QLatin1String("PieceHandleHoverColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, CarrouselPieceColorVar, (QLatin1String("CarrouselPieceColor"))) // NOLINT +// NOLINTNEXTLINE +Q_GLOBAL_STATIC_WITH_ARGS(const QString, CarrouselPieceSelectedColorVar, (QLatin1String("CarrouselPieceSelectedColor"))) +// NOLINTNEXTLINE +Q_GLOBAL_STATIC_WITH_ARGS(const QString, CarrouselPieceBackgroundColorVar, + (QLatin1String("CarrouselPieceBackgroundColor"))) +// NOLINTNEXTLINE +Q_GLOBAL_STATIC_WITH_ARGS(const QString, CarrouselPieceForegroundColorVar, + (QLatin1String("CarrouselPieceForegroundColor"))) + +QT_WARNING_POP +} // namespace + +//--------------------------------------------------------------------------------------------------------------------- +VManualLayoutStyle::VManualLayoutStyle() +{ + LoadJsonFile(VStylesheetStyle::GetResourceName()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VManualLayoutStyle::LoadJson(const QJsonObject &json) +{ + QJsonValue toolStyleValues = json[*ManualLayoutStyleNodeVar]; + + QJsonObject obj = toolStyleValues.toObject(); + + ReadColor(obj, *SheetBorderColorVar, m_sheetBorderColor); + ReadColor(obj, *SheetMarginColorVar, m_sheetMarginColor); + ReadColor(obj, *SheetGridColorVar, m_sheetGridColor); + ReadColor(obj, *SheetTileGridColorVar, m_sheetTileGridColor); + ReadColor(obj, *SheetTileNumberColorVar, m_sheetTileNumberColor); + ReadColor(obj, *PieceOkColorVar, m_pieceOkColor); + ReadColor(obj, *PieceErrorColorVar, m_pieceErrorColor); + ReadColor(obj, *PieceHoverColorVar, m_pieceHoverColor); + ReadColor(obj, *PieceHandleColorVar, m_pieceHandleColor); + ReadColor(obj, *PieceHandleHoverColorVar, m_pieceHandleHoverColor); + ReadColor(obj, *CarrouselPieceColorVar, m_carrouselPieceColor); + ReadColor(obj, *CarrouselPieceSelectedColorVar, m_carrouselPieceSelectedColor); + ReadColor(obj, *CarrouselPieceBackgroundColorVar, m_carrouselPieceBackgroundColor); + ReadColor(obj, *CarrouselPieceForegroundColorVar, m_carrouselPieceForegroundColor); +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VManualLayoutStyle::ToJson() const -> QJsonObject +{ + QJsonObject obj; + + WriteColor(obj, *SheetBorderColorVar, m_sheetBorderColor); + WriteColor(obj, *SheetMarginColorVar, m_sheetMarginColor); + WriteColor(obj, *SheetGridColorVar, m_sheetGridColor); + WriteColor(obj, *SheetTileGridColorVar, m_sheetTileGridColor); + WriteColor(obj, *SheetTileNumberColorVar, m_sheetTileNumberColor); + WriteColor(obj, *PieceOkColorVar, m_pieceOkColor); + WriteColor(obj, *PieceErrorColorVar, m_pieceErrorColor); + WriteColor(obj, *PieceHoverColorVar, m_pieceHoverColor); + WriteColor(obj, *PieceHandleColorVar, m_pieceHandleColor); + WriteColor(obj, *PieceHandleHoverColorVar, m_pieceHandleHoverColor); + WriteColor(obj, *CarrouselPieceColorVar, m_carrouselPieceColor); + WriteColor(obj, *CarrouselPieceSelectedColorVar, m_carrouselPieceSelectedColor); + WriteColor(obj, *CarrouselPieceBackgroundColorVar, m_carrouselPieceBackgroundColor); + WriteColor(obj, *CarrouselPieceForegroundColorVar, m_carrouselPieceForegroundColor); + + QJsonObject root; + root[*ManualLayoutStyleNodeVar] = obj; + + return root; +} diff --git a/src/libs/vmisc/theme/vmanuallayoutstyle.h b/src/libs/vmisc/theme/vmanuallayoutstyle.h new file mode 100644 index 000000000..878a5d2b4 --- /dev/null +++ b/src/libs/vmisc/theme/vmanuallayoutstyle.h @@ -0,0 +1,170 @@ +/************************************************************************ + ** + ** @file vmanuallayoutstyle.h + ** @author Roman Telezhynskyi + ** @date 29 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#ifndef VMANUALLAYOUTSTYLE_H +#define VMANUALLAYOUTSTYLE_H + +#include "vstylesheetstyle.h" + +#include + +class VManualLayoutStyle : public VStylesheetStyle +{ +public: + VManualLayoutStyle(); + + ~VManualLayoutStyle() override = default; + + VManualLayoutStyle(const VManualLayoutStyle &) = default; + auto operator=(const VManualLayoutStyle &) -> VManualLayoutStyle & = default; + +#ifdef Q_COMPILER_RVALUE_REFS + VManualLayoutStyle(VManualLayoutStyle &&) = default; + auto operator=(VManualLayoutStyle &&) -> VManualLayoutStyle & = default; +#endif + + void LoadJson(QJsonObject const &json) override; + + auto ToJson() const -> QJsonObject override; + + auto SheetBorderColor() const -> QColor; + auto SheetMarginColor() const -> QColor; + auto SheetGridColor() const -> QColor; + auto SheetTileGridColor() const -> QColor; + auto SheetTileNumberColor() const -> QColor; + auto PieceOkColor() const -> QColor; + auto PieceErrorColor() const -> QColor; + auto PieceHoverColor() const -> QColor; + auto PieceHandleColor() const -> QColor; + auto PieceHandleHoverColor() const -> QColor; + auto CarrouselPieceColor() const -> QColor; + auto CarrouselPieceSelectedColor() const -> QColor; + auto CarrouselPieceBackgroundColor() const -> QColor; + auto CarrouselPieceForegroundColor() const -> QColor; + +private: + QColor m_sheetBorderColor{}; + QColor m_sheetMarginColor{}; + QColor m_sheetGridColor{}; + QColor m_sheetTileGridColor{}; + QColor m_sheetTileNumberColor{}; + QColor m_pieceOkColor{}; + QColor m_pieceErrorColor{}; + QColor m_pieceHoverColor{}; + QColor m_pieceHandleColor{}; + QColor m_pieceHandleHoverColor{}; + QColor m_carrouselPieceColor{}; + QColor m_carrouselPieceSelectedColor{}; + QColor m_carrouselPieceBackgroundColor{}; + QColor m_carrouselPieceForegroundColor{}; +}; + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::SheetBorderColor() const -> QColor +{ + return m_sheetBorderColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::SheetMarginColor() const -> QColor +{ + return m_sheetMarginColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::SheetGridColor() const -> QColor +{ + return m_sheetGridColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::SheetTileGridColor() const -> QColor +{ + return m_sheetTileGridColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::SheetTileNumberColor() const -> QColor +{ + return m_sheetTileNumberColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::PieceOkColor() const -> QColor +{ + return m_pieceOkColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::PieceErrorColor() const -> QColor +{ + return m_pieceErrorColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::PieceHoverColor() const -> QColor +{ + return m_pieceHoverColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::PieceHandleColor() const -> QColor +{ + return m_pieceHandleColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VManualLayoutStyle::PieceHandleHoverColor() const -> QColor +{ + return m_pieceHandleHoverColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QColor VManualLayoutStyle::CarrouselPieceColor() const +{ + return m_carrouselPieceColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QColor VManualLayoutStyle::CarrouselPieceSelectedColor() const +{ + return m_carrouselPieceSelectedColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QColor VManualLayoutStyle::CarrouselPieceBackgroundColor() const +{ + return m_carrouselPieceBackgroundColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QColor VManualLayoutStyle::CarrouselPieceForegroundColor() const +{ + return m_carrouselPieceForegroundColor; +} + +#endif // VMANUALLAYOUTSTYLE_H diff --git a/src/libs/vmisc/theme/vpatternpiecestyle.cpp b/src/libs/vmisc/theme/vpatternpiecestyle.cpp new file mode 100644 index 000000000..811c6b959 --- /dev/null +++ b/src/libs/vmisc/theme/vpatternpiecestyle.cpp @@ -0,0 +1,95 @@ +/************************************************************************ + ** + ** @file vpatternpiecestyle.cpp + ** @author Roman Telezhynskyi + ** @date 28 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#include "vpatternpiecestyle.h" + +#include + +#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) +#include "../diagnostic.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) + +namespace +{ +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wunused-member-function") + +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PatternPieceStyleNodeVar, (QLatin1String("PatternPieceStyle"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PieceColorVar, (QLatin1String("PieceColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PointColorVar, (QLatin1String("PointColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, NodeLabelColorVar, (QLatin1String("NodeLabelColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, NodeLabelHoverColorVar, (QLatin1String("NodeLabelHoverColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, NodeLabelLineColorVar, (QLatin1String("NodeLabelLineColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, LabelBackgroundColorVar, (QLatin1String("LabelBackgroundColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, LabelTextColorVar, (QLatin1String("LabelTextColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, LabelModeColorVar, (QLatin1String("LabelModeColor"))) // NOLINT + +QT_WARNING_POP +} // namespace + +//--------------------------------------------------------------------------------------------------------------------- +VPatternPieceStyle::VPatternPieceStyle() +{ + LoadJsonFile(VStylesheetStyle::GetResourceName()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPatternPieceStyle::LoadJson(const QJsonObject &json) +{ + QJsonValue toolStyleValues = json[*PatternPieceStyleNodeVar]; + + QJsonObject obj = toolStyleValues.toObject(); + + ReadColor(obj, *PieceColorVar, m_pieceColor); + ReadColor(obj, *PointColorVar, m_pointColor); + ReadColor(obj, *NodeLabelColorVar, m_nodeLabelColor); + ReadColor(obj, *NodeLabelHoverColorVar, m_nodeLabelHoverColor); + ReadColor(obj, *NodeLabelLineColorVar, m_nodeLabelLineColor); + ReadColor(obj, *LabelBackgroundColorVar, m_labelBackgroundColor); + ReadColor(obj, *LabelTextColorVar, m_labelTextColor); + ReadColor(obj, *LabelModeColorVar, m_labelModeColor); +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VPatternPieceStyle::ToJson() const -> QJsonObject +{ + QJsonObject obj; + + WriteColor(obj, *PieceColorVar, m_pieceColor); + WriteColor(obj, *PointColorVar, m_pointColor); + WriteColor(obj, *NodeLabelColorVar, m_nodeLabelColor); + WriteColor(obj, *NodeLabelHoverColorVar, m_nodeLabelHoverColor); + WriteColor(obj, *NodeLabelLineColorVar, m_nodeLabelLineColor); + WriteColor(obj, *LabelBackgroundColorVar, m_labelBackgroundColor); + WriteColor(obj, *LabelTextColorVar, m_labelTextColor); + WriteColor(obj, *LabelModeColorVar, m_labelModeColor); + + QJsonObject root; + root[*PatternPieceStyleNodeVar] = obj; + + return root; +} diff --git a/src/libs/vmisc/theme/vpatternpiecestyle.h b/src/libs/vmisc/theme/vpatternpiecestyle.h new file mode 100644 index 000000000..2b54505b1 --- /dev/null +++ b/src/libs/vmisc/theme/vpatternpiecestyle.h @@ -0,0 +1,122 @@ +/************************************************************************ + ** + ** @file vpatternpiecestyle.h + ** @author Roman Telezhynskyi + ** @date 28 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#ifndef VPATTERNPIECESTYLE_H +#define VPATTERNPIECESTYLE_H + +#include "vstylesheetstyle.h" + +#include + +class VPatternPieceStyle : public VStylesheetStyle +{ +public: + VPatternPieceStyle(); + + ~VPatternPieceStyle() override = default; + + VPatternPieceStyle(const VPatternPieceStyle &) = default; + auto operator=(const VPatternPieceStyle &) -> VPatternPieceStyle & = default; + +#ifdef Q_COMPILER_RVALUE_REFS + VPatternPieceStyle(VPatternPieceStyle &&) = default; + auto operator=(VPatternPieceStyle &&) -> VPatternPieceStyle & = default; +#endif + + void LoadJson(QJsonObject const &json) override; + + auto ToJson() const -> QJsonObject override; + + auto PieceColor() const -> QColor; + auto PointColor() const -> QColor; + auto NodeLabelColor() const -> QColor; + auto NodeLabelHoverColor() const -> QColor; + auto NodeLabelLineColor() const -> QColor; + auto LabelBackgroundColor() const -> QColor; + auto LabelTextColor() const -> QColor; + auto LabelModeColor() const -> QColor; + +private: + QColor m_pieceColor{}; + QColor m_pointColor{}; + QColor m_nodeLabelColor{}; + QColor m_nodeLabelHoverColor{}; + QColor m_nodeLabelLineColor{}; + QColor m_labelBackgroundColor{}; + QColor m_labelTextColor{}; + QColor m_labelModeColor{}; +}; + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::PieceColor() const -> QColor +{ + return m_pieceColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::PointColor() const -> QColor +{ + return m_pointColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::NodeLabelColor() const -> QColor +{ + return m_nodeLabelColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::NodeLabelHoverColor() const -> QColor +{ + return m_nodeLabelHoverColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::NodeLabelLineColor() const -> QColor +{ + return m_nodeLabelLineColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::LabelBackgroundColor() const -> QColor +{ + return m_labelBackgroundColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::LabelTextColor() const -> QColor +{ + return m_labelTextColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VPatternPieceStyle::LabelModeColor() const -> QColor +{ + return m_labelModeColor; +} + +#endif // VPATTERNPIECESTYLE_H diff --git a/src/libs/vmisc/theme/vscenestylesheet.cpp b/src/libs/vmisc/theme/vscenestylesheet.cpp new file mode 100644 index 000000000..79210c07d --- /dev/null +++ b/src/libs/vmisc/theme/vscenestylesheet.cpp @@ -0,0 +1,172 @@ +/************************************************************************ + ** + ** @file vscenestylesheet.cpp + ** @author Roman Telezhynskyi + ** @date 24 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#include "vscenestylesheet.h" + +#include "../def.h" +#include "vmisc/theme/vmanuallayoutstyle.h" +#include "vtheme.h" + +#include +#include + +//--------------------------------------------------------------------------------------------------------------------- +auto VSceneStylesheet::Instance() -> VSceneStylesheet & +{ + static VSceneStylesheet stylesheet; + + return stylesheet; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSceneStylesheet::ResetStyles() +{ + SetToolStyle(VToolStyle()); + SetPatternPieceStyle(VPatternPieceStyle()); + SetManualLayoutStyle(VManualLayoutStyle()); +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VSceneStylesheet::ToolStyle() -> const VToolStyle & +{ + return Instance().m_toolStyle; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSceneStylesheet::SetToolStyle(const VToolStyle &style) +{ + Instance().m_toolStyle = style; +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VSceneStylesheet::PatternPieceStyle() -> const VPatternPieceStyle & +{ + return Instance().m_patternPieceStyle; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSceneStylesheet::SetPatternPieceStyle(const VPatternPieceStyle &style) +{ + Instance().m_patternPieceStyle = style; +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VSceneStylesheet::ManualLayoutStyle() -> const VManualLayoutStyle & +{ + return Instance().m_manualLayoutStyle; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSceneStylesheet::SetManualLayoutStyle(const VManualLayoutStyle &style) +{ + Instance().m_manualLayoutStyle = style; +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VSceneStylesheet::Color(VColorRole role) -> QColor +{ + switch (role) + { + case (VColorRole::PatternColor): + return ToolStyle().PatternColor(); + case (VColorRole::DraftPointColor): + return ToolStyle().PointColor(); + case (VColorRole::DraftLabelColor): + return ToolStyle().LabelColor(); + case (VColorRole::DraftLabelHoverColor): + return ToolStyle().LabelHoverColor(); + case (VColorRole::DraftLabelLineColor): + return ToolStyle().LabelLineColor(); + case (VColorRole::ControlLineColor): + return ToolStyle().ControlLineColor(); + case (VColorRole::ControlPointColor): + return ToolStyle().ControlPointColor(); + case (VColorRole::AccuracyRadiusColor): + return ToolStyle().AccuracyRadiusColor(); + case (VColorRole::VisMainColor): + return ToolStyle().VisMainColor(); + case (VColorRole::VisSupportColor): + return ToolStyle().VisSupportColor(); + case (VColorRole::VisSupportColor2): + return ToolStyle().VisSupportColor2(); + case (VColorRole::VisSupportColor3): + return ToolStyle().VisSupportColor3(); + case (VColorRole::VisSupportColor4): + return ToolStyle().VisSupportColor4(); + case (VColorRole::BasePointColor): + return ToolStyle().BasePointColor(); + case (VColorRole::PieceColor): + return PatternPieceStyle().PieceColor(); + case (VColorRole::PiecePointColor): + return PatternPieceStyle().PointColor(); + case (VColorRole::PieceNodeLabelColor): + return PatternPieceStyle().NodeLabelColor(); + case (VColorRole::PieceNodeLabelHoverColor): + return PatternPieceStyle().NodeLabelHoverColor(); + case (VColorRole::PieceNodeLabelLineColor): + return PatternPieceStyle().NodeLabelLineColor(); + case (VColorRole::DefaultColor): + default: + return Qt::black; + } +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VSceneStylesheet::CorrectToolColor(const QGraphicsItem *item, const QColor &color) -> QColor +{ + SCASSERT(item != nullptr) + + if (item->isEnabled()) + { + return color; + } + + QColor disabled = ToolStyle().DisabledColor(); + disabled.setAlpha(color.alpha()); + return disabled; +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VSceneStylesheet::CorrectToolColorForDarkTheme(const QColor &color) -> QColor +{ + if (VTheme::ColorSheme() != VColorSheme::Dark) + { + return color; + } + + QMap adjustments = ToolStyle().ColorAdjustments(); + + QString colorName = color.name(QColor::HexArgb); + if (adjustments.contains(colorName)) + { + QColor c = adjustments.value(color.name(QColor::HexArgb)); + colorName = c.name(QColor::HexArgb); + return c; + } + + return color.lighter(150); +} diff --git a/src/libs/vmisc/theme/vscenestylesheet.h b/src/libs/vmisc/theme/vscenestylesheet.h new file mode 100644 index 000000000..145e557d7 --- /dev/null +++ b/src/libs/vmisc/theme/vscenestylesheet.h @@ -0,0 +1,77 @@ +/************************************************************************ + ** + ** @file vscenestylesheet.h + ** @author Roman Telezhynskyi + ** @date 24 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#ifndef VSCENESTYLESHEET_H +#define VSCENESTYLESHEET_H + +#include + +#include "themeDef.h" +#include "vmanuallayoutstyle.h" +#include "vpatternpiecestyle.h" +#include "vtoolstyle.h" + +#if QT_VERSION < QT_VERSION_CHECK(5, 13, 0) +#include "../defglobal.h" +#endif + +class QGraphicsItem; + +class VSceneStylesheet +{ +public: + ~VSceneStylesheet() = default; + + static auto Instance() -> VSceneStylesheet &; + + static void ResetStyles(); + + static auto ToolStyle() -> VToolStyle const &; + static void SetToolStyle(const VToolStyle &style); + + static auto PatternPieceStyle() -> VPatternPieceStyle const &; + static void SetPatternPieceStyle(const VPatternPieceStyle &style); + + static auto ManualLayoutStyle() -> VManualLayoutStyle const &; + static void SetManualLayoutStyle(const VManualLayoutStyle &style); + + static auto Color(VColorRole role) -> QColor; + + static auto CorrectToolColor(const QGraphicsItem *item, const QColor &color) -> QColor; + static auto CorrectToolColorForDarkTheme(const QColor &color) -> QColor; + +private: + Q_DISABLE_COPY_MOVE(VSceneStylesheet) // NOLINT + + VToolStyle m_toolStyle{}; + VPatternPieceStyle m_patternPieceStyle{}; + VManualLayoutStyle m_manualLayoutStyle{}; + + VSceneStylesheet() = default; +}; + +#endif // VSCENESTYLESHEET_H diff --git a/src/libs/vmisc/theme/vstylesheetstyle.cpp b/src/libs/vmisc/theme/vstylesheetstyle.cpp new file mode 100644 index 000000000..edb573290 --- /dev/null +++ b/src/libs/vmisc/theme/vstylesheetstyle.cpp @@ -0,0 +1,152 @@ +/************************************************************************ + ** + ** @file vstylesheetstyle.cpp + ** @author Roman Telezhynskyi + ** @date 24 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#include "vstylesheetstyle.h" +#include "vtheme.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace +{ +ExportColorScheme exportColorScheme = ExportColorScheme::Default; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VStylesheetStyle::LoadJsonFromByteArray(const QByteArray &byteArray) +{ + auto json = QJsonDocument::fromJson(byteArray).object(); + + LoadJson(json); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VStylesheetStyle::LoadJsonText(const QString &jsonText) +{ + LoadJsonFromByteArray(jsonText.toUtf8()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VStylesheetStyle::LoadJsonFile(const QString &fileName) +{ + QFile file(fileName); + + if (!file.open(QIODevice::ReadOnly)) + { + qWarning() << "Couldn't open file " << fileName; + + return; + } + + LoadJsonFromByteArray(file.readAll()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VStylesheetStyle::SetExportColorScheme(ExportColorScheme colorScheme) +{ + exportColorScheme = colorScheme; +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VStylesheetStyle::GetResourceName() -> QString +{ + const QString light = QStringLiteral("light"); + QString colorSheme; + + if (exportColorScheme == ExportColorScheme::BackAndWhite) + { + colorSheme = light; + } + else + { + colorSheme = (VTheme::ColorSheme() == VColorSheme::Dark ? QStringLiteral("dark") : light); + } + + return QStringLiteral(":/scenestyle/%1/style.json").arg(colorSheme); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VStylesheetStyle::CheckUndefinedValue(const QJsonValue &v, const QString &variable) +{ + if (v.type() == QJsonValue::Undefined || v.type() == QJsonValue::Null) + { + qWarning() << "Undefined value for parameter:" << variable; + } +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VStylesheetStyle::ReadColorValue(const QJsonValue &value) -> QColor +{ + if (value.isArray()) + { + auto colorArray = value.toArray(); + std::vector rgba; + rgba.reserve(4); + + std::transform(colorArray.begin(), colorArray.end(), std::back_inserter(rgba), + [](const QJsonValue &value) { return value.toInt(); }); + + if (rgba.size() == 3) + { + rgba.push_back(255); + } + + if (rgba.size() == 4) + { + return {rgba[0], rgba[1], rgba[2], rgba[3]}; + } + } + else + { + return {value.toString()}; + } + return Qt::black; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VStylesheetStyle::ReadColor(const QJsonObject &values, const QString &colorName, QColor &variable) +{ + auto valueRef = values[colorName]; + + CheckUndefinedValue(valueRef, colorName); + + variable = ReadColorValue(valueRef); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VStylesheetStyle::WriteColor(const QJsonObject &values, const QString &colorName, const QColor &variable) +{ + values[colorName] = variable.name(QColor::HexArgb); +} diff --git a/src/libs/vmisc/theme/vstylesheetstyle.h b/src/libs/vmisc/theme/vstylesheetstyle.h new file mode 100644 index 000000000..f2821da65 --- /dev/null +++ b/src/libs/vmisc/theme/vstylesheetstyle.h @@ -0,0 +1,78 @@ +/************************************************************************ + ** + ** @file vstylesheetstyle.h + ** @author Roman Telezhynskyi + ** @date 24 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#ifndef VSTYLESHEETSTYLE_H +#define VSTYLESHEETSTYLE_H + +#include + +class QJsonObject; +class QJsonValue; +class QByteArray; +class QString; +class QColor; + +enum class ExportColorScheme +{ + Default, + BackAndWhite +}; + +class VStylesheetStyle +{ +public: + VStylesheetStyle() = default; + virtual ~VStylesheetStyle() = default; + + VStylesheetStyle(const VStylesheetStyle &) = default; + auto operator=(const VStylesheetStyle &) -> VStylesheetStyle & = default; + +#ifdef Q_COMPILER_RVALUE_REFS + VStylesheetStyle(VStylesheetStyle &&) = default; + auto operator=(VStylesheetStyle &&) -> VStylesheetStyle & = default; +#endif + + virtual void LoadJson(QJsonObject const &json) = 0; + virtual auto ToJson() const -> QJsonObject = 0; + + /// Loads from utf-8 byte array. + virtual void LoadJsonFromByteArray(const QByteArray &byteArray); + virtual void LoadJsonText(const QString &jsonText); + virtual void LoadJsonFile(const QString &fileName); + + static void SetExportColorScheme(ExportColorScheme colorScheme); + + static auto GetResourceName() -> QString; + + static void CheckUndefinedValue(const QJsonValue &v, const QString &variable); + + static auto ReadColorValue(const QJsonValue &value) -> QColor; + static void ReadColor(const QJsonObject &values, const QString &colorName, QColor &variable); + static void WriteColor(const QJsonObject &values, const QString &colorName, const QColor &variable); +}; + +#endif // VSTYLESHEETSTYLE_H diff --git a/src/libs/vmisc/theme/vtheme.cpp b/src/libs/vmisc/theme/vtheme.cpp index ec3160ee2..79cb63af2 100644 --- a/src/libs/vmisc/theme/vtheme.cpp +++ b/src/libs/vmisc/theme/vtheme.cpp @@ -66,6 +66,7 @@ using namespace bpstd::literals::chrono_literals; #include "../defglobal.h" #include "../vabstractapplication.h" +#include "vscenestylesheet.h" namespace { @@ -223,7 +224,7 @@ void ActivateDefaultTheme() } //--------------------------------------------------------------------------------------------------------------------- -QString GetResourceName(const QString &root, const QString &iconName, bool dark) +auto GetResourceName(const QString &root, const QString &iconName, bool dark) -> QString { return QStringLiteral(":/%1/%2/%3").arg(root, dark ? "dark" : "light", iconName); } @@ -500,6 +501,9 @@ void VTheme::ResetThemeSettings() const SetToAutoTheme(); SetIconTheme(); InitThemeMode(); + VSceneStylesheet::ResetStyles(); + + emit Instance()->ThemeSettingsChanged(); } //--------------------------------------------------------------------------------------------------------------------- @@ -507,7 +511,7 @@ auto VTheme::GetIconResource(const QString &root, const QString &iconName) -> QI { QIcon icon; bool dark = (ColorSheme() == VColorSheme::Dark); - QPixmap pixmap = GetPixmapResource(root, iconName, dark); + QPixmap pixmap = ::GetPixmapResource(root, iconName, dark); icon.addPixmap(pixmap); if (dark) { @@ -520,6 +524,13 @@ auto VTheme::GetIconResource(const QString &root, const QString &iconName) -> QI return icon; } +//--------------------------------------------------------------------------------------------------------------------- +auto VTheme::GetPixmapResource(const QString &root, const QString &iconName) -> QPixmap +{ + bool dark = (ColorSheme() == VColorSheme::Dark); + return ::GetPixmapResource(root, iconName, dark); +} + //--------------------------------------------------------------------------------------------------------------------- auto VTheme::GetResourceName(const QString &root, const QString &iconName) -> QString { diff --git a/src/libs/vmisc/theme/vtheme.h b/src/libs/vmisc/theme/vtheme.h index ddf429a03..5df569ec6 100644 --- a/src/libs/vmisc/theme/vtheme.h +++ b/src/libs/vmisc/theme/vtheme.h @@ -57,6 +57,7 @@ public: void ResetThemeSettings() const; static auto GetIconResource(const QString &root, const QString &iconName) -> QIcon; + static auto GetPixmapResource(const QString &root, const QString &iconName) -> QPixmap; static auto GetResourceName(const QString &root, const QString &iconName) -> QString; static auto NativeDarkThemeAvailable() -> bool; @@ -67,6 +68,9 @@ public: static void InitThemeMode(); static auto ThemeStylesheet() -> QString; +signals: + void ThemeSettingsChanged(); + private: Q_DISABLE_COPY_MOVE(VTheme) // NOLINT diff --git a/src/libs/vmisc/theme/vtoolstyle.cpp b/src/libs/vmisc/theme/vtoolstyle.cpp new file mode 100644 index 000000000..9cf139318 --- /dev/null +++ b/src/libs/vmisc/theme/vtoolstyle.cpp @@ -0,0 +1,158 @@ +/************************************************************************ + ** + ** @file vtoolstyle.cpp + ** @author Roman Telezhynskyi + ** @date 24 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#include "vtoolstyle.h" + +#include +#include +#include +#include +#include + +#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) +#include "../diagnostic.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) + +namespace +{ +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wunused-member-function") + +Q_GLOBAL_STATIC_WITH_ARGS(const QString, ToolStyleNodeVar, (QLatin1String("ToolStyle"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PatternColorVar, (QLatin1String("PatternColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, DisabledColorVar, (QLatin1String("DisabledColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, ColorAdjustmentsVar, (QLatin1String("ColorAdjustments"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, PointColorVar, (QLatin1String("PointColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, LabelColorVar, (QLatin1String("LabelColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, LabelHoverColorVar, (QLatin1String("LabelHoverColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, LabelLineColorVar, (QLatin1String("LabelLineColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, AccuracyRadiusColorVar, (QLatin1String("AccuracyRadiusColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, ControlLineColorVar, (QLatin1String("ControlLineColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, ControlPointColorVar, (QLatin1String("ControlPointColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, VisMainColorVar, (QLatin1String("VisMainColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, VisSupportColorVar, (QLatin1String("VisSupportColor"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, VisSupportColor2Var, (QLatin1String("VisSupportColor2"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, VisSupportColor3Var, (QLatin1String("VisSupportColor3"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, VisSupportColor4Var, (QLatin1String("VisSupportColor4"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, BasePointColorVar, (QLatin1String("BasePointColor"))) // NOLINT + +QT_WARNING_POP + +//--------------------------------------------------------------------------------------------------------------------- +void ReadColorAdjustments(const QJsonObject &values, const QString &variable, QMap &adjustments) +{ + auto valueRef = values[variable]; + + if (valueRef.type() == QJsonValue::Undefined || valueRef.type() == QJsonValue::Null || !valueRef.isObject()) + { + return; + } + + QJsonObject colorAdjustmentsObject = valueRef.toObject(); + + for (const QString &key : colorAdjustmentsObject.keys()) + { + QColor keyColor(key); + QColor valueColor = VStylesheetStyle::ReadColorValue(colorAdjustmentsObject.value(key)); + QString colorName = valueColor.name(QColor::HexArgb); + adjustments.insert(keyColor.name(QColor::HexArgb), colorName); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void WriteColorAdjustments(const QJsonObject &values, const QString &variable, + const QMap &adjustments) +{ + QJsonObject colorAdjustmentsObject; + + for (auto it = adjustments.begin(); it != adjustments.end(); ++it) + { + colorAdjustmentsObject.insert(it.key(), it.value()); + } + + values[variable] = colorAdjustmentsObject; +} +} // namespace + +//--------------------------------------------------------------------------------------------------------------------- +VToolStyle::VToolStyle() +{ + LoadJsonFile(VStylesheetStyle::GetResourceName()); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolStyle::LoadJson(const QJsonObject &json) +{ + QJsonValue toolStyleValues = json[*ToolStyleNodeVar]; + + QJsonObject obj = toolStyleValues.toObject(); + + ReadColor(obj, *PatternColorVar, m_patternColor); + ReadColor(obj, *DisabledColorVar, m_disabledColor); + ReadColorAdjustments(obj, *ColorAdjustmentsVar, m_colorAdjustments); + ReadColor(obj, *PointColorVar, m_pointColor); + ReadColor(obj, *LabelColorVar, m_labelColor); + ReadColor(obj, *LabelHoverColorVar, m_labelHoverColor); + ReadColor(obj, *LabelLineColorVar, m_labelLineColor); + ReadColor(obj, *AccuracyRadiusColorVar, m_accuracyRadiusColor); + ReadColor(obj, *ControlLineColorVar, m_controlLineColor); + ReadColor(obj, *ControlPointColorVar, m_controlPointColor); + ReadColor(obj, *VisMainColorVar, m_visMainColor); + ReadColor(obj, *VisSupportColorVar, m_visSupportColor); + ReadColor(obj, *VisSupportColor2Var, m_visSupportColor2); + ReadColor(obj, *VisSupportColor3Var, m_visSupportColor3); + ReadColor(obj, *VisSupportColor4Var, m_visSupportColor4); + ReadColor(obj, *BasePointColorVar, m_basePointColor); +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VToolStyle::ToJson() const -> QJsonObject +{ + QJsonObject obj; + + WriteColor(obj, *PatternColorVar, m_patternColor); + WriteColor(obj, *DisabledColorVar, m_disabledColor); + WriteColorAdjustments(obj, *ColorAdjustmentsVar, m_colorAdjustments); + WriteColor(obj, *PointColorVar, m_pointColor); + WriteColor(obj, *LabelColorVar, m_labelColor); + WriteColor(obj, *LabelHoverColorVar, m_labelHoverColor); + WriteColor(obj, *LabelLineColorVar, m_labelLineColor); + WriteColor(obj, *AccuracyRadiusColorVar, m_accuracyRadiusColor); + WriteColor(obj, *ControlLineColorVar, m_controlLineColor); + WriteColor(obj, *ControlPointColorVar, m_controlPointColor); + WriteColor(obj, *VisMainColorVar, m_visMainColor); + WriteColor(obj, *VisSupportColorVar, m_visSupportColor); + WriteColor(obj, *VisSupportColor2Var, m_visSupportColor2); + WriteColor(obj, *VisSupportColor3Var, m_visSupportColor3); + WriteColor(obj, *VisSupportColor4Var, m_visSupportColor4); + WriteColor(obj, *BasePointColorVar, m_basePointColor); + + QJsonObject root; + root[*ToolStyleNodeVar] = obj; + + return root; +} diff --git a/src/libs/vmisc/theme/vtoolstyle.h b/src/libs/vmisc/theme/vtoolstyle.h new file mode 100644 index 000000000..b51de91f9 --- /dev/null +++ b/src/libs/vmisc/theme/vtoolstyle.h @@ -0,0 +1,188 @@ +/************************************************************************ + ** + ** @file vtoolstyle.h + ** @author Roman Telezhynskyi + ** @date 24 7, 2023 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2023 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ +#ifndef VTOOLSTYLE_H +#define VTOOLSTYLE_H + +#include "vstylesheetstyle.h" + +#include +#include + +class VToolStyle : public VStylesheetStyle +{ +public: + VToolStyle(); + + ~VToolStyle() override = default; + + VToolStyle(const VToolStyle &) = default; + auto operator=(const VToolStyle &) -> VToolStyle & = default; + +#ifdef Q_COMPILER_RVALUE_REFS + VToolStyle(VToolStyle &&) = default; + auto operator=(VToolStyle &&) -> VToolStyle & = default; +#endif + + void LoadJson(QJsonObject const &json) override; + + auto ToJson() const -> QJsonObject override; + + auto ColorAdjustments() const -> QMap; + + auto PatternColor() const -> QColor; + auto DisabledColor() const -> QColor; + auto PointColor() const -> QColor; + auto LabelColor() const -> QColor; + auto LabelHoverColor() const -> QColor; + auto LabelLineColor() const -> QColor; + auto AccuracyRadiusColor() const -> QColor; + auto ControlLineColor() const -> QColor; + auto ControlPointColor() const -> QColor; + auto VisMainColor() const -> QColor; + auto VisSupportColor() const -> QColor; + auto VisSupportColor2() const -> QColor; + auto VisSupportColor3() const -> QColor; + auto VisSupportColor4() const -> QColor; + auto BasePointColor() const -> QColor; + +private: + QColor m_patternColor{}; + QColor m_disabledColor{}; + QColor m_pointColor{}; + QColor m_labelColor{}; + QColor m_labelHoverColor{}; + QColor m_labelLineColor{}; + QColor m_controlLineColor{}; + QColor m_controlPointColor{}; + QColor m_accuracyRadiusColor{}; + QColor m_visMainColor{}; + QColor m_visSupportColor{}; + QColor m_visSupportColor2{}; + QColor m_visSupportColor3{}; + QColor m_visSupportColor4{}; + QColor m_basePointColor{}; + QMap m_colorAdjustments{}; +}; + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::PatternColor() const -> QColor +{ + return m_patternColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::DisabledColor() const -> QColor +{ + return m_disabledColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::ColorAdjustments() const -> QMap +{ + return m_colorAdjustments; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::PointColor() const -> QColor +{ + return m_pointColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::LabelColor() const -> QColor +{ + return m_labelColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::LabelHoverColor() const -> QColor +{ + return m_labelHoverColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::LabelLineColor() const -> QColor +{ + return m_labelLineColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::AccuracyRadiusColor() const -> QColor +{ + return m_accuracyRadiusColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::ControlLineColor() const -> QColor +{ + return m_controlLineColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::ControlPointColor() const -> QColor +{ + return m_controlPointColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::VisMainColor() const -> QColor +{ + return m_visMainColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::VisSupportColor() const -> QColor +{ + return m_visSupportColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::VisSupportColor2() const -> QColor +{ + return m_visSupportColor2; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::VisSupportColor3() const -> QColor +{ + return m_visSupportColor3; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::VisSupportColor4() const -> QColor +{ + return m_visSupportColor4; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VToolStyle::BasePointColor() const -> QColor +{ + return m_basePointColor; +} + +#endif // VTOOLSTYLE_H diff --git a/src/libs/vmisc/vabstractapplication.cpp b/src/libs/vmisc/vabstractapplication.cpp index 4dda44ccd..0f68add98 100644 --- a/src/libs/vmisc/vabstractapplication.cpp +++ b/src/libs/vmisc/vabstractapplication.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #include #include "QtConcurrent/qtconcurrentrun.h" diff --git a/src/libs/vmisc/vmisc.qbs b/src/libs/vmisc/vmisc.qbs index 29a19e164..38ded48b1 100644 --- a/src/libs/vmisc/vmisc.qbs +++ b/src/libs/vmisc/vmisc.qbs @@ -160,10 +160,21 @@ VLib { name: "theme" prefix: "theme/" files: [ + "themeDef.h", "vapplicationstyle.cpp", "vapplicationstyle.h", + "vmanuallayoutstyle.cpp", + "vmanuallayoutstyle.h", + "vpatternpiecestyle.cpp", + "vpatternpiecestyle.h", + "vscenestylesheet.cpp", + "vscenestylesheet.h", + "vstylesheetstyle.cpp", + "vstylesheetstyle.h", "vtheme.h", "vtheme.cpp", + "vtoolstyle.cpp", + "vtoolstyle.h", ] } @@ -183,7 +194,8 @@ VLib { files: [ "icon.qrc", "flags.qrc", - "breezethemes/breeze.qrc" + "breezethemes/breeze.qrc", + "scenestyle.qrc", ] } diff --git a/src/libs/vmisc/vtablesearch.cpp b/src/libs/vmisc/vtablesearch.cpp index 2a9ec417d..2c1107718 100644 --- a/src/libs/vmisc/vtablesearch.cpp +++ b/src/libs/vmisc/vtablesearch.cpp @@ -32,17 +32,16 @@ #include #include #include -#include -#include "../vmisc/def.h" #include "../vmisc/compatibility.h" +#include "../vmisc/def.h" const int VTableSearch::MaxHistoryRecords = 10; //--------------------------------------------------------------------------------------------------------------------- VTableSearch::VTableSearch(QTableWidget *table, QObject *parent) - : QObject(parent), - table(table) + : QObject(parent), + table(table) { } @@ -51,19 +50,19 @@ void VTableSearch::Clear() { SCASSERT(table != nullptr) - for(int i = 0; i < table->rowCount(); ++i) + for (int i = 0; i < table->rowCount(); ++i) { - for(int j = 0; j < table->columnCount(); ++j) + for (int j = 0; j < table->columnCount(); ++j) { if (QTableWidgetItem *item = table->item(i, j)) { if (item->row() % 2 != 0 && table->alternatingRowColors()) { - item->setBackground(QPalette().alternateBase()); + item->setBackground(table->palette().alternateBase()); } else { - item->setBackground(QPalette().base()); + item->setBackground(table->palette().base()); } } } @@ -122,16 +121,16 @@ auto VTableSearch::FindTableItems(QString term) -> QList QRegularExpression re(term, options); - if(not re.isValid()) + if (not re.isValid()) { return {}; } QList list; - for (int r=0; rrowCount(); ++r) + for (int r = 0; r < table->rowCount(); ++r) { - for (int c=0; ccolumnCount(); ++c) + for (int c = 0; c < table->columnCount(); ++c) { QTableWidgetItem *cell = table->item(r, c); if (cell != nullptr) @@ -156,18 +155,18 @@ auto VTableSearch::FindCurrentMatchIndex() const -> int return 0; } - QList selectedItems = table->selectedItems(); + QList selectedItems = table->selectedItems(); if (selectedItems.isEmpty()) { return 0; } - QTableWidgetItem* selectedItem = ConstFirst(selectedItems); + QTableWidgetItem *selectedItem = ConstFirst(selectedItems); - for (int i=0; irow()>= selectedItem->row() && item->column()>= selectedItem->column()) + QTableWidgetItem *item = searchList.at(i); + if (item->row() >= selectedItem->row() && item->column() >= selectedItem->column()) { return i; } @@ -179,7 +178,7 @@ auto VTableSearch::FindCurrentMatchIndex() const -> int //--------------------------------------------------------------------------------------------------------------------- void VTableSearch::Find(const QString &term) { - if(table == nullptr) + if (table == nullptr) { return; } @@ -293,11 +292,11 @@ void VTableSearch::RefreshList(const QString &term) if (searchIndex < 0) { - searchIndex = searchList.size() - 1; + searchIndex = searchList.size() - 1; } else if (searchIndex >= searchList.size()) { - searchIndex = 0; + searchIndex = 0; } QTableWidgetItem *item = searchList.at(searchIndex); diff --git a/src/libs/vpropertyexplorer/checkablemessagebox.cpp b/src/libs/vpropertyexplorer/checkablemessagebox.cpp index 28eee0a3b..61aa17f81 100644 --- a/src/libs/vpropertyexplorer/checkablemessagebox.cpp +++ b/src/libs/vpropertyexplorer/checkablemessagebox.cpp @@ -30,7 +30,6 @@ #include #include #include -#include static const char kDoNotAskAgainKey[] = "DoNotAskAgain"; @@ -51,7 +50,11 @@ class CheckableMessageBoxPrivate { public: explicit CheckableMessageBoxPrivate(QDialog *q) - : pixmapLabel(nullptr), messageLabel(nullptr), checkBox(nullptr), buttonBox(nullptr), clickedButton(nullptr) + : pixmapLabel(nullptr), + messageLabel(nullptr), + checkBox(nullptr), + buttonBox(nullptr), + clickedButton(nullptr) { QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); @@ -68,7 +71,7 @@ public: messageLabel->setMinimumSize(QSize(300, 0)); messageLabel->setWordWrap(true); messageLabel->setOpenExternalLinks(true); - messageLabel->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse); + messageLabel->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard | Qt::LinksAccessibleByMouse); QSpacerItem *checkBoxRightSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum); QSpacerItem *buttonSpacer = new QSpacerItem(0, 1, QSizePolicy::Minimum, QSizePolicy::Minimum); @@ -78,7 +81,7 @@ public: buttonBox = new QDialogButtonBox(q); buttonBox->setOrientation(Qt::Horizontal); - buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok); QVBoxLayout *verticalLayout = new QVBoxLayout(); verticalLayout->addWidget(pixmapLabel); @@ -104,19 +107,20 @@ public: QCheckBox *checkBox; QDialogButtonBox *buttonBox; QAbstractButton *clickedButton; + private: Q_DISABLE_COPY_MOVE(CheckableMessageBoxPrivate) // NOLINT }; -CheckableMessageBox::CheckableMessageBox(QWidget *parent) : - QDialog(parent), +CheckableMessageBox::CheckableMessageBox(QWidget *parent) + : QDialog(parent), d(new CheckableMessageBoxPrivate(this)) { setModal(true); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(d->buttonBox, SIGNAL(accepted()), SLOT(accept())); connect(d->buttonBox, SIGNAL(rejected()), SLOT(reject())); - connect(d->buttonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(slotClicked(QAbstractButton*))); + connect(d->buttonBox, SIGNAL(clicked(QAbstractButton *)), SLOT(slotClicked(QAbstractButton *))); } CheckableMessageBox::~CheckableMessageBox() @@ -233,7 +237,7 @@ auto CheckableMessageBox::defaultButton() const -> QDialogButtonBox::StandardBut { if (pb->isDefault()) { - return d->buttonBox->standardButton(pb); + return d->buttonBox->standardButton(pb); } } } @@ -295,7 +299,7 @@ auto CheckableMessageBox::dialogButtonBoxToMessageBoxButton(QDialogButtonBox::St auto CheckableMessageBox::askAgain(QSettings *settings, const QString &settingsSubKey) -> bool { - //QTC_CHECK(settings); + // QTC_CHECK(settings); if (settings) { settings->beginGroup(QLatin1String(kDoNotAskAgainKey)); @@ -315,9 +319,8 @@ void CheckableMessageBox::initDoNotAskAgainMessageBox(CheckableMessageBox &messa DoNotAskAgainType type) { messageBox.setWindowTitle(title); - messageBox.setIconPixmap(QMessageBox::standardIcon(type == Information - ? QMessageBox::Information - : QMessageBox::Question)); + messageBox.setIconPixmap( + QMessageBox::standardIcon(type == Information ? QMessageBox::Information : QMessageBox::Question)); messageBox.setText(text); messageBox.setCheckBoxVisible(true); messageBox.setCheckBoxText(type == Information ? CheckableMessageBox::msgDoNotShowAgain() @@ -393,7 +396,7 @@ CheckableMessageBox::doNotShowAgainInformation(QWidget *parent, const QString &t { if (!askAgain(settings, settingsSubKey)) { - return defaultButton; + return defaultButton; } CheckableMessageBox messageBox(parent); @@ -414,7 +417,7 @@ CheckableMessageBox::doNotShowAgainInformation(QWidget *parent, const QString &t // cppcheck-suppress unusedFunction void CheckableMessageBox::resetAllDoNotAskAgainQuestions(QSettings *settings) { - //Q_ASSERT(settings, return); + // Q_ASSERT(settings, return); settings->beginGroup(QLatin1String(kDoNotAskAgainKey)); settings->remove(QString()); settings->endGroup(); @@ -427,7 +430,7 @@ void CheckableMessageBox::resetAllDoNotAskAgainQuestions(QSettings *settings) // cppcheck-suppress unusedFunction auto CheckableMessageBox::hasSuppressedQuestions(QSettings *settings) -> bool { - //Q_ASSERT(settings, return false); + // Q_ASSERT(settings, return false); bool hasSuppressed = false; settings->beginGroup(QLatin1String(kDoNotAskAgainKey)); for (auto &subKey : settings->childKeys()) diff --git a/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.h b/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.h index 0ebbd0f94..f5573383a 100644 --- a/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.h +++ b/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.h @@ -21,14 +21,12 @@ #ifndef VVECTOR3DPROPERTY_H #define VVECTOR3DPROPERTY_H - -#include #include #include #include #include -#include #include +#include #include "../../vproperty.h" #include "../../vpropertyexplorer_global.h" @@ -40,16 +38,22 @@ struct VPROPERTYEXPLORERSHARED_EXPORT Vector3D //-V690 { public: Vector3D() - :X(0), Y(0), Z(0) - {} + : X(0), + Y(0), + Z(0) + { + } - Vector3D(const Vector3D& other) - :X(other.X), Y(other.Y), Z(other.Z) - {} + Vector3D(const Vector3D &other) + : X(other.X), + Y(other.Y), + Z(other.Z) + { + } auto operator=(const Vector3D &other) -> Vector3D & { - if ( &other == this ) + if (&other == this) { return *this; } @@ -76,8 +80,9 @@ QT_WARNING_DISABLE_GCC("-Wsuggest-final-types") class VPROPERTYEXPLORERSHARED_EXPORT QVector3DProperty : public VProperty { Q_OBJECT // NOLINT + public: - explicit QVector3DProperty(const QString& name); + explicit QVector3DProperty(const QString &name); virtual ~QVector3DProperty() override {} @@ -91,7 +96,7 @@ public: virtual auto getVector() const -> Vector3D; //! Sets the Vector3d - virtual void setVector(const Vector3D& vect); + virtual void setVector(const Vector3D &vect); //! Sets the Vector3d virtual void setVector(double x, double y, double z); @@ -107,7 +112,7 @@ public: virtual auto clone(bool include_children = true, VProperty *container = NULL) const -> VProperty * override; //! Sets the value of the property - virtual void setValue(const QVariant& value) override; + virtual void setValue(const QVariant &value) override; //! Returns the value of the property as a QVariant virtual auto getValue() const -> QVariant override; @@ -118,6 +123,6 @@ private: QT_WARNING_POP -} +} // namespace VPE #endif // VVECTOR3DPROPERTY_H diff --git a/src/libs/vpropertyexplorer/plugins/vboolproperty.h b/src/libs/vpropertyexplorer/plugins/vboolproperty.h index 91d0a90df..de97e820c 100644 --- a/src/libs/vpropertyexplorer/plugins/vboolproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vboolproperty.h @@ -25,7 +25,6 @@ #include #include #include -#include #include #include diff --git a/src/libs/vpropertyexplorer/plugins/vcolorproperty.h b/src/libs/vpropertyexplorer/plugins/vcolorproperty.h index fce23807a..ade990639 100644 --- a/src/libs/vpropertyexplorer/plugins/vcolorproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vcolorproperty.h @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff --git a/src/libs/vpropertyexplorer/plugins/vemptyproperty.h b/src/libs/vpropertyexplorer/plugins/vemptyproperty.h index fc1a68f84..c16bb0b9b 100644 --- a/src/libs/vpropertyexplorer/plugins/vemptyproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vemptyproperty.h @@ -26,7 +26,6 @@ #include #include #include -#include #include #include "../vproperty.h" diff --git a/src/libs/vpropertyexplorer/plugins/venumproperty.h b/src/libs/vpropertyexplorer/plugins/venumproperty.h index 7a3820e0c..22f7b9ca5 100644 --- a/src/libs/vpropertyexplorer/plugins/venumproperty.h +++ b/src/libs/vpropertyexplorer/plugins/venumproperty.h @@ -27,7 +27,6 @@ #include #include #include -#include #include #include "../vproperty.h" diff --git a/src/libs/vpropertyexplorer/plugins/vfileproperty.h b/src/libs/vpropertyexplorer/plugins/vfileproperty.h index b80497bdc..12dcef011 100644 --- a/src/libs/vpropertyexplorer/plugins/vfileproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vfileproperty.h @@ -21,7 +21,6 @@ #ifndef VFILEPROPERTY_H #define VFILEPROPERTY_H - #include #include #include @@ -29,7 +28,6 @@ #include #include #include -#include #include #include "../vproperty.h" @@ -45,6 +43,7 @@ QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods") class VPROPERTYEXPLORERSHARED_EXPORT VFileProperty : public VProperty { Q_OBJECT // NOLINT + public: explicit VFileProperty(const QString &name); @@ -52,13 +51,13 @@ public: virtual ~VFileProperty() override; //! Sets the file filters. The file filters have to be like the ones passed a QFileOpenDialog. - virtual void setFileFilters(const QString& filefilters); + virtual void setFileFilters(const QString &filefilters); //! Returns the current file filters as a string virtual auto getFileFilters() const -> QString; //! Set file - virtual void setFile(const QString& file); + virtual void setFile(const QString &file); //! Get file virtual auto getFile() const -> QString; @@ -83,7 +82,7 @@ public: //! Sets the settings. Available settings: //! //! key: "FileFilters" - value: File filters in the same format the QFileDialog expects it - virtual void setSetting(const QString& key, const QVariant& value) override; + virtual void setSetting(const QString &key, const QVariant &value) override; //! Get the settings. This function has to be implemented in a subclass in order to have an effect virtual auto getSetting(const QString &key) const -> QVariant override; @@ -114,6 +113,6 @@ private: QT_WARNING_POP -} +} // namespace VPE #endif // VFILEPROPERTY_H diff --git a/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp b/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp index f2be7b5a6..86556ef57 100644 --- a/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp +++ b/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp @@ -35,7 +35,6 @@ #include #include #include -#include #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) #include @@ -44,8 +43,13 @@ #endif VPE::VFileEditWidget::VFileEditWidget(QWidget *parent, bool is_directory) - : QWidget(parent), CurrentFilePath(), ToolButton(nullptr), FileLineEdit(nullptr), FileDialogFilter(), FilterList(), - Directory(is_directory) + : QWidget(parent), + CurrentFilePath(), + ToolButton(nullptr), + FileLineEdit(nullptr), + FileDialogFilter(), + FilterList(), + Directory(is_directory) { // Create the tool button,ToolButton = new QToolButton(this); ToolButton = new QToolButton(this); @@ -53,7 +57,7 @@ VPE::VFileEditWidget::VFileEditWidget(QWidget *parent, bool is_directory) ToolButton->setText("..."); ToolButton->setFixedWidth(20); ToolButton->installEventFilter(this); - setFocusProxy(ToolButton); // Make the ToolButton the focus proxy + setFocusProxy(ToolButton); // Make the ToolButton the focus proxy setFocusPolicy(ToolButton->focusPolicy()); connect(ToolButton, &QToolButton::clicked, this, &VFileEditWidget::onToolButtonClicked); @@ -64,7 +68,7 @@ VPE::VFileEditWidget::VFileEditWidget(QWidget *parent, bool is_directory) FileLineEdit->installEventFilter(this); // The layout (a horizontal layout) - QHBoxLayout* layout = new QHBoxLayout(this); + QHBoxLayout *layout = new QHBoxLayout(this); layout->setSpacing(0); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(FileLineEdit); @@ -74,13 +78,11 @@ VPE::VFileEditWidget::VFileEditWidget(QWidget *parent, bool is_directory) setAcceptDrops(true); } - VPE::VFileEditWidget::~VFileEditWidget() { // nothing needs to be done here } - void VPE::VFileEditWidget::setFile(const QString &value, bool emit_signal) { if (CurrentFilePath != value) @@ -96,8 +98,7 @@ void VPE::VFileEditWidget::setFile(const QString &value, bool emit_signal) } } - -void VPE::VFileEditWidget::setFilter(const QString &dialog_filter, const QStringList& filter_list) +void VPE::VFileEditWidget::setFilter(const QString &dialog_filter, const QStringList &filter_list) { FileDialogFilter = dialog_filter; FilterList = filter_list; @@ -113,21 +114,21 @@ auto VPE::VFileEditWidget::getFile() const -> QString return CurrentFilePath; } - void VPE::VFileEditWidget::onToolButtonClicked() { - QString filepath = (Directory ? QFileDialog::getExistingDirectory(nullptr, tr("Directory"), CurrentFilePath, - QFileDialog::ShowDirsOnly + QString filepath = + (Directory ? QFileDialog::getExistingDirectory(nullptr, tr("Directory"), CurrentFilePath, + QFileDialog::ShowDirsOnly #ifdef Q_OS_LINUX - | QFileDialog::DontUseNativeDialog + | QFileDialog::DontUseNativeDialog #endif - ) - : QFileDialog::getOpenFileName(nullptr, tr("Open File"), CurrentFilePath, - FileDialogFilter, nullptr + ) + : QFileDialog::getOpenFileName(nullptr, tr("Open File"), CurrentFilePath, FileDialogFilter, nullptr #ifdef Q_OS_LINUX - , QFileDialog::DontUseNativeDialog + , + QFileDialog::DontUseNativeDialog #endif - )); + )); if (filepath.isNull() == false) { setFile(filepath, true); @@ -141,11 +142,11 @@ auto VPE::VFileEditWidget::eventFilter(QObject *obj, QEvent *ev) -> bool ev->ignore(); if (ev->type() == QEvent::DragEnter) { - dragEnterEvent(static_cast(ev)); + dragEnterEvent(static_cast(ev)); } else if (ev->type() == QEvent::Drop) { - dropEvent(static_cast(ev)); + dropEvent(static_cast(ev)); } if (ev->isAccepted()) @@ -178,8 +179,7 @@ auto VPE::VFileEditWidget::isDirectory() -> bool return Directory; } - -void VPE::VFileEditWidget::dragEnterEvent(QDragEnterEvent* event) +void VPE::VFileEditWidget::dragEnterEvent(QDragEnterEvent *event) { QString tmpFileName; if (checkMimeData(event->mimeData(), tmpFileName)) @@ -190,18 +190,18 @@ void VPE::VFileEditWidget::dragEnterEvent(QDragEnterEvent* event) } // cppcheck-suppress unusedFunction -void VPE::VFileEditWidget::dragMoveEvent(QDragMoveEvent* event) +void VPE::VFileEditWidget::dragMoveEvent(QDragMoveEvent *event) { event->acceptProposedAction(); } // cppcheck-suppress unusedFunction -void VPE::VFileEditWidget::dragLeaveEvent(QDragLeaveEvent* event) +void VPE::VFileEditWidget::dragLeaveEvent(QDragLeaveEvent *event) { event->accept(); } -void VPE::VFileEditWidget::dropEvent(QDropEvent* event) +void VPE::VFileEditWidget::dropEvent(QDropEvent *event) { QString tmpFileName; if (checkMimeData(event->mimeData(), tmpFileName)) @@ -214,8 +214,7 @@ void VPE::VFileEditWidget::dropEvent(QDropEvent* event) } } - -auto VPE::VFileEditWidget::checkMimeData(const QMimeData* data, QString& file) const -> bool +auto VPE::VFileEditWidget::checkMimeData(const QMimeData *data, QString &file) const -> bool { if (data->hasUrls()) { @@ -223,7 +222,7 @@ auto VPE::VFileEditWidget::checkMimeData(const QMimeData* data, QString& file) c QFileInfo tmpFileInfo; auto tmpUrl = std::find_if(tmpUrlList.cbegin(), tmpUrlList.cend(), - [](const QUrl &tmpUrl){return QFile::exists(tmpUrl.toLocalFile());}); + [](const QUrl &tmpUrl) { return QFile::exists(tmpUrl.toLocalFile()); }); if (tmpUrl != tmpUrlList.cend()) { @@ -254,16 +253,17 @@ auto VPE::VFileEditWidget::checkFileFilter(const QString &file) const -> bool return false; } - return std::any_of(FilterList.begin(), FilterList.end(), [file](const QString &tmpFilter) - { + return std::any_of(FilterList.begin(), FilterList.end(), + [file](const QString &tmpFilter) + { #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - const QString wildcardFilter = QRegularExpression::wildcardToRegularExpression(tmpFilter); - QRegularExpression tmpRegExpFilter(QRegularExpression::anchoredPattern(wildcardFilter), - QRegularExpression::CaseInsensitiveOption); - return tmpRegExpFilter.match(file).hasMatch(); + const QString wildcardFilter = QRegularExpression::wildcardToRegularExpression(tmpFilter); + QRegularExpression tmpRegExpFilter(QRegularExpression::anchoredPattern(wildcardFilter), + QRegularExpression::CaseInsensitiveOption); + return tmpRegExpFilter.match(file).hasMatch(); #else QRegExp tmpRegExpFilter(tmpFilter, Qt::CaseInsensitive, QRegExp::Wildcard); return tmpRegExpFilter.exactMatch(file); #endif - }); + }); } diff --git a/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.cpp b/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.cpp index 90bf9711f..550752c46 100644 --- a/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.cpp +++ b/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -40,13 +41,14 @@ #include "../vproperty_p.h" VPE::VLineColorProperty::VLineColorProperty(const QString &name) - : VProperty(name, + : VProperty(name, #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - QMetaType::Int), + QMetaType::Int), #else - QVariant::Int), + QVariant::Int), #endif - colors(), indexList() + colors(), + indexList() { VProperty::d_ptr->VariantValue = 0; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) @@ -60,7 +62,7 @@ auto VPE::VLineColorProperty::data(int column, int role) const -> QVariant { if (colors.empty()) { - return QVariant(); + return {}; } int tmpIndex = VProperty::d_ptr->VariantValue.toInt(); @@ -78,10 +80,8 @@ auto VPE::VLineColorProperty::data(int column, int role) const -> QVariant { return tmpIndex; } - else - { - return VProperty::data(column, role); - } + + return VProperty::data(column, role); } auto VPE::VLineColorProperty::createEditor(QWidget *parent, const QStyleOptionViewItem &options, @@ -89,19 +89,26 @@ auto VPE::VLineColorProperty::createEditor(QWidget *parent, const QStyleOptionVi { Q_UNUSED(options) Q_UNUSED(delegate) - QComboBox* tmpEditor = new QComboBox(parent); + auto *tmpEditor = new QComboBox(parent); + tmpEditor->setPalette(parent->palette()); int size = tmpEditor->iconSize().height(); // On Mac pixmap should be little bit smaller. #if defined(Q_OS_MAC) size -= 2; // Two pixels should be enough. -#endif //defined(Q_OS_MAC) +#endif // defined(Q_OS_MAC) QMap::const_iterator i = colors.constBegin(); while (i != colors.constEnd()) { QPixmap pix(size, size); pix.fill(QColor(i.key())); + + // Draw a white border around the icon + QPainter painter(&pix); + painter.setPen(tmpEditor->palette().color(QPalette::Text)); + painter.drawRect(0, 0, size - 1, size - 1); + tmpEditor->addItem(QIcon(pix), i.value(), QVariant(i.key())); ++i; } @@ -117,13 +124,13 @@ auto VPE::VLineColorProperty::createEditor(QWidget *parent, const QStyleOptionVi auto VPE::VLineColorProperty::getEditorData(const QWidget *editor) const -> QVariant { - const QComboBox* tmpEditor = qobject_cast(editor); + const auto *tmpEditor = qobject_cast(editor); if (tmpEditor) { return tmpEditor->currentIndex(); } - return QVariant(0); + return {0}; } void VPE::VLineColorProperty::setColors(const QMap &colors) @@ -191,6 +198,6 @@ auto VPE::VLineColorProperty::IndexOfColor(const QMap &colors, void VPE::VLineColorProperty::currentIndexChanged(int index) { Q_UNUSED(index) - UserChangeEvent *event = new UserChangeEvent(); - QCoreApplication::postEvent ( VProperty::d_ptr->editor, event ); + auto *event = new UserChangeEvent(); + QCoreApplication::postEvent(VProperty::d_ptr->editor, event); } diff --git a/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.h b/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.h index f7136a9f0..0e5981320 100644 --- a/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vlinecolorproperty.h @@ -29,7 +29,6 @@ #ifndef VLINECOLORPROPERTY_H #define VLINECOLORPROPERTY_H - #include #include #include @@ -37,7 +36,6 @@ #include #include #include -#include #include #include "../vproperty.h" @@ -49,12 +47,13 @@ namespace VPE class VPROPERTYEXPLORERSHARED_EXPORT VLineColorProperty : public VProperty { Q_OBJECT // NOLINT + public: //! Constructor - explicit VLineColorProperty(const QString& name); + explicit VLineColorProperty(const QString &name); //! Destructor - virtual ~VLineColorProperty() override {} + ~VLineColorProperty() override {} //! Get the data how it should be displayed virtual auto data(int column = DPC_Name, int role = Qt::DisplayRole) const -> QVariant override; @@ -77,7 +76,7 @@ public: virtual auto getColors() const -> QMap; //! Sets the value of the property - virtual void setValue(const QVariant& value) override; + virtual void setValue(const QVariant &value) override; //! Returns a string containing the type of the property virtual auto type() const -> QString override; @@ -100,11 +99,12 @@ protected: QMap colors; QVector indexList; // No use of d-pointer in this case, because it is unlikely this will change. If it does, we can still add other - //members by reimplementing the VPropertyPrivate class without touching this header file. + // members by reimplementing the VPropertyPrivate class without touching this header file. + private: Q_DISABLE_COPY_MOVE(VLineColorProperty) // NOLINT }; -} +} // namespace VPE #endif // VLINECOLORPROPERTY_H diff --git a/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.cpp b/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.cpp index c5a476d16..d5cd793ad 100644 --- a/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.cpp +++ b/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.cpp @@ -37,13 +37,14 @@ #include "../vproperty_p.h" VPE::VLineTypeProperty::VLineTypeProperty(const QString &name) - : VProperty(name, + : VProperty(name, #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - QMetaType::Int), + QMetaType::Int), #else - QVariant::Int), + QVariant::Int), #endif - styles(), indexList() + styles(), + indexList() { VProperty::d_ptr->VariantValue = 0; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) @@ -57,7 +58,7 @@ auto VPE::VLineTypeProperty::data(int column, int role) const -> QVariant { if (styles.empty()) { - return QVariant(); + return {}; } int tmpIndex = VProperty::d_ptr->VariantValue.toInt(); @@ -71,14 +72,12 @@ auto VPE::VLineTypeProperty::data(int column, int role) const -> QVariant { return indexList.at(tmpIndex); } + if (column == DPC_Data && Qt::EditRole == role) { return tmpIndex; } - else - { - return VProperty::data(column, role); - } + return VProperty::data(column, role); } auto VPE::VLineTypeProperty::createEditor(QWidget *parent, const QStyleOptionViewItem &options, @@ -86,7 +85,7 @@ auto VPE::VLineTypeProperty::createEditor(QWidget *parent, const QStyleOptionVie { Q_UNUSED(options) Q_UNUSED(delegate) - QComboBox* tmpEditor = new QComboBox(parent); + auto *tmpEditor = new QComboBox(parent); tmpEditor->clear(); tmpEditor->setLocale(parent->locale()); tmpEditor->setIconSize(QSize(80, 14)); @@ -110,13 +109,13 @@ auto VPE::VLineTypeProperty::createEditor(QWidget *parent, const QStyleOptionVie auto VPE::VLineTypeProperty::getEditorData(const QWidget *editor) const -> QVariant { - const QComboBox* tmpEditor = qobject_cast(editor); + const auto *tmpEditor = qobject_cast(editor); if (tmpEditor) { return tmpEditor->currentIndex(); } - return QVariant(0); + return {0}; } void VPE::VLineTypeProperty::setStyles(const QMap &styles) @@ -184,6 +183,6 @@ auto VPE::VLineTypeProperty::IndexOfStyle(const QMap &styles, co void VPE::VLineTypeProperty::currentIndexChanged(int index) { Q_UNUSED(index) - UserChangeEvent *event = new UserChangeEvent(); - QCoreApplication::postEvent ( VProperty::d_ptr->editor, event ); + auto *event = new UserChangeEvent(); + QCoreApplication::postEvent(VProperty::d_ptr->editor, event); } diff --git a/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.h b/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.h index 1472e402a..9272eb7ba 100644 --- a/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vlinetypeproperty.h @@ -29,7 +29,6 @@ #ifndef VLINETYPEPROPERTY_H #define VLINETYPEPROPERTY_H - #include #include #include @@ -38,7 +37,6 @@ #include #include #include -#include #include #include "../vproperty.h" @@ -50,26 +48,27 @@ namespace VPE class VPROPERTYEXPLORERSHARED_EXPORT VLineTypeProperty : public VProperty { Q_OBJECT // NOLINT + public: //! Constructor - explicit VLineTypeProperty(const QString& name); + explicit VLineTypeProperty(const QString &name); //! Destructor - virtual ~VLineTypeProperty() override {} + ~VLineTypeProperty() override = default; //! Get the data how it should be displayed - virtual auto data(int column = DPC_Name, int role = Qt::DisplayRole) const -> QVariant override; + auto data(int column = DPC_Name, int role = Qt::DisplayRole) const -> QVariant override; //! Returns an editor widget, or NULL if it doesn't supply one //! \param parent The widget to which the editor will be added as a child //! \options Render options //! \delegate A pointer to the QAbstractItemDelegate requesting the editor. This can be used to connect signals and //! slots. - virtual auto createEditor(QWidget *parent, const QStyleOptionViewItem &options, - const QAbstractItemDelegate *delegate) -> QWidget * override; + auto createEditor(QWidget *parent, const QStyleOptionViewItem &options, const QAbstractItemDelegate *delegate) + -> QWidget * override; //! Gets the data from the widget - virtual auto getEditorData(const QWidget *editor) const -> QVariant override; + auto getEditorData(const QWidget *editor) const -> QVariant override; //! Sets the line styles virtual void setStyles(const QMap &styles); @@ -78,17 +77,17 @@ public: virtual auto getStyles() const -> QMap; //! Sets the value of the property - virtual void setValue(const QVariant& value) override; + void setValue(const QVariant &value) override; //! Returns a string containing the type of the property - virtual auto type() const -> QString override; + auto type() const -> QString override; //! Clones this property //! \param include_children Indicates whether to also clone the children //! \param container If a property is being passed here, no new VProperty is being created but instead it is tried //! to fill all the data into container. This can also be used when subclassing this function. //! \return Returns the newly created property (or container, if it was not NULL) - Q_REQUIRED_RESULT virtual auto clone(bool include_children = true, VProperty *container = nullptr) const + Q_REQUIRED_RESULT auto clone(bool include_children = true, VProperty *container = nullptr) const -> VProperty * override; static auto IndexOfStyle(const QMap &styles, const QString &style) -> vpesizetype; @@ -101,11 +100,12 @@ protected: QMap styles; QVector indexList; // No use of d-pointer in this case, because it is unlikely this will change. If it does, we can still add other - //members by reimplementing the VPropertyPrivate class without touching this header file. + // members by reimplementing the VPropertyPrivate class without touching this header file. + private: Q_DISABLE_COPY_MOVE(VLineTypeProperty) // NOLINT }; -} +} // namespace VPE #endif // VLINETYPEPROPERTY_H diff --git a/src/libs/vpropertyexplorer/plugins/vobjectproperty.h b/src/libs/vpropertyexplorer/plugins/vobjectproperty.h index 838e234e4..0bd07046e 100644 --- a/src/libs/vpropertyexplorer/plugins/vobjectproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vobjectproperty.h @@ -21,7 +21,6 @@ #ifndef VOBJECTPROPERTY_H #define VOBJECTPROPERTY_H - #include #include #include @@ -29,7 +28,6 @@ #include #include #include -#include #include #include "../vproperty.h" @@ -43,9 +41,10 @@ namespace VPE class VPROPERTYEXPLORERSHARED_EXPORT VObjectProperty : public VProperty { Q_OBJECT // NOLINT + public: //! Constructor - explicit VObjectProperty(const QString& name); + explicit VObjectProperty(const QString &name); //! Destructor virtual ~VObjectProperty() override {} @@ -74,7 +73,7 @@ public: virtual auto getObjects() const -> QMap; //! Sets the value of the property - virtual void setValue(const QVariant& value) override; + virtual void setValue(const QVariant &value) override; //! Returns a string containing the type of the property virtual auto type() const -> QString override; @@ -94,14 +93,14 @@ protected: //! The list of possible objects QMap objects; - void FillList(QComboBox *box, const QMap &list)const; + void FillList(QComboBox *box, const QMap &list) const; // No use of d-pointer in this case, because it is unlikely this will change. If it does, we can still add other - //members by reimplementing the VPropertyPrivate class without touching this header file. + // members by reimplementing the VPropertyPrivate class without touching this header file. private: Q_DISABLE_COPY_MOVE(VObjectProperty) // NOLINT }; -} +} // namespace VPE #endif // VOBJECTPROPERTY_H diff --git a/src/libs/vpropertyexplorer/plugins/vpointfproperty.h b/src/libs/vpropertyexplorer/plugins/vpointfproperty.h index 152d829a9..4158eed1c 100644 --- a/src/libs/vpropertyexplorer/plugins/vpointfproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vpointfproperty.h @@ -21,13 +21,11 @@ #ifndef VPOINTFPROPERTY_H #define VPOINTFPROPERTY_H - #include #include #include #include #include -#include #include #include "../vproperty.h" @@ -39,8 +37,9 @@ namespace VPE class VPROPERTYEXPLORERSHARED_EXPORT VPointFProperty : public VProperty { Q_OBJECT // NOLINT + public: - explicit VPointFProperty(const QString& name); + explicit VPointFProperty(const QString &name); virtual ~VPointFProperty() override {} @@ -54,7 +53,7 @@ public: virtual auto getPointF() const -> QPointF; //! Sets the QPointF - virtual void setPointF(const QPointF& point); + virtual void setPointF(const QPointF &point); //! Sets the QPointF virtual void setPointF(qreal x, qreal y); @@ -71,7 +70,7 @@ public: -> VProperty * override; //! Sets the value of the property - virtual void setValue(const QVariant& value) override; + virtual void setValue(const QVariant &value) override; //! Returns the value of the property as a QVariant virtual auto getValue() const -> QVariant override; @@ -80,6 +79,6 @@ private: Q_DISABLE_COPY_MOVE(VPointFProperty) // NOLINT }; -} +} // namespace VPE #endif // VPOINTFPROPERTY_H diff --git a/src/libs/vpropertyexplorer/plugins/vshortcutproperty.h b/src/libs/vpropertyexplorer/plugins/vshortcutproperty.h index ab1259ad4..b64b45217 100644 --- a/src/libs/vpropertyexplorer/plugins/vshortcutproperty.h +++ b/src/libs/vpropertyexplorer/plugins/vshortcutproperty.h @@ -21,13 +21,11 @@ #ifndef VSHORTCUTROPERTY_H #define VSHORTCUTROPERTY_H - #include #include #include #include #include -#include #include #include "../vproperty.h" @@ -43,6 +41,7 @@ QT_WARNING_DISABLE_GCC("-Wsuggest-final-types") class VPROPERTYEXPLORERSHARED_EXPORT VShortcutProperty : public VProperty { Q_OBJECT // NOLINT + public: explicit VShortcutProperty(const QString &name); @@ -78,7 +77,7 @@ public: -> VProperty * override; //! Sets the value of the property - virtual void setValue(const QVariant& value) override; + virtual void setValue(const QVariant &value) override; private: Q_DISABLE_COPY_MOVE(VShortcutProperty) // NOLINT @@ -86,6 +85,6 @@ private: QT_WARNING_POP -} +} // namespace VPE #endif // VFILEPROPERTY_H diff --git a/src/libs/vpropertyexplorer/plugins/vshortcutpropertyeditor.cpp b/src/libs/vpropertyexplorer/plugins/vshortcutpropertyeditor.cpp index 279b1307e..d59ba21eb 100644 --- a/src/libs/vpropertyexplorer/plugins/vshortcutpropertyeditor.cpp +++ b/src/libs/vpropertyexplorer/plugins/vshortcutpropertyeditor.cpp @@ -25,10 +25,11 @@ #include #include #include -#include VPE::VShortcutEditWidget::VShortcutEditWidget(QWidget *parent) - : QWidget(parent), CurrentKeySequence(), LineEdit(nullptr) + : QWidget(parent), + CurrentKeySequence(), + LineEdit(nullptr) { // Create the line edit widget LineEdit = new QLineEdit(this); @@ -39,13 +40,12 @@ VPE::VShortcutEditWidget::VShortcutEditWidget(QWidget *parent) connect(LineEdit, &QLineEdit::textEdited, this, &VShortcutEditWidget::onTextEdited); // The layout (a horizontal layout) - QHBoxLayout* layout = new QHBoxLayout(this); + QHBoxLayout *layout = new QHBoxLayout(this); layout->setSpacing(0); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(LineEdit); } - VPE::VShortcutEditWidget::~VShortcutEditWidget() { // nothing needs to be done here @@ -57,15 +57,12 @@ auto VPE::VShortcutEditWidget::eventFilter(QObject *obj, QEvent *event) -> bool { if (event->type() == QEvent::KeyPress) { - QKeyEvent *keyEvent = static_cast(event); + QKeyEvent *keyEvent = static_cast(event); int keys = keyEvent->key(); - if (keys != Qt::Key_Shift && - keys != Qt::Key_Control && - keys != Qt::Key_Meta && - keys != Qt::Key_AltGr && - keys != Qt::Key_Alt) + if (keys != Qt::Key_Shift && keys != Qt::Key_Control && keys != Qt::Key_Meta && keys != Qt::Key_AltGr && + keys != Qt::Key_Alt) { keys += keyEvent->modifiers(); setShortcut(QKeySequence(keys), true); diff --git a/src/libs/vpropertyexplorer/vproperty.h b/src/libs/vpropertyexplorer/vproperty.h index e4067d73e..9e2a2f498 100644 --- a/src/libs/vpropertyexplorer/vproperty.h +++ b/src/libs/vpropertyexplorer/vproperty.h @@ -64,7 +64,7 @@ public: : QEvent(static_cast(MyCustomEventType)) { } - virtual ~UserChangeEvent() override; + ~UserChangeEvent() override; }; class VPropertyPrivate; diff --git a/src/libs/vpropertyexplorer/vpropertyformview.cpp b/src/libs/vpropertyexplorer/vpropertyformview.cpp index f72d5b87c..a5c648b62 100644 --- a/src/libs/vpropertyexplorer/vpropertyformview.cpp +++ b/src/libs/vpropertyexplorer/vpropertyformview.cpp @@ -21,27 +21,26 @@ #include "vpropertyformview.h" #include -#include #include "vpropertyformview_p.h" #include "vpropertyformwidget_p.h" #include "vpropertymodel.h" #include "vpropertyset.h" -VPE::VPropertyFormView::VPropertyFormView(QWidget* parent) - : VPropertyFormWidget(new VPropertyFormViewPrivate(), parent) +VPE::VPropertyFormView::VPropertyFormView(QWidget *parent) + : VPropertyFormWidget(new VPropertyFormViewPrivate(), parent) { // } -VPE::VPropertyFormView::VPropertyFormView(VPropertyModel* model, QWidget *parent) - : VPropertyFormWidget(new VPropertyFormViewPrivate(), parent) +VPE::VPropertyFormView::VPropertyFormView(VPropertyModel *model, QWidget *parent) + : VPropertyFormWidget(new VPropertyFormViewPrivate(), parent) { setModel(model); } -VPE::VPropertyFormView::VPropertyFormView(VPropertySet* property_set, QWidget *parent) - : VPropertyFormWidget(new VPropertyFormViewPrivate(), parent) +VPE::VPropertyFormView::VPropertyFormView(VPropertySet *property_set, QWidget *parent) + : VPropertyFormWidget(new VPropertyFormViewPrivate(), parent) { setPropertySet(property_set); } @@ -65,7 +64,7 @@ void VPE::VPropertyFormView::setModel(VPropertyModel *model) removeModelAndSet(); // Set model - static_cast(d_ptr)->Model = model; + static_cast(d_ptr)->Model = model; if (model) { // Set the property list @@ -85,13 +84,13 @@ void VPE::VPropertyFormView::setModel(VPropertyModel *model) updatePropertyList(); } -void VPE::VPropertyFormView::setPropertySet(VPropertySet* property_set) +void VPE::VPropertyFormView::setPropertySet(VPropertySet *property_set) { // Remove old model or set removeModelAndSet(); // Set property set - static_cast(d_ptr)->PropertySet = property_set; + static_cast(d_ptr)->PropertySet = property_set; if (property_set) { // Set the property list @@ -137,40 +136,40 @@ void VPE::VPropertyFormView::dataChanged(const QModelIndex &top_left, const QMod Q_UNUSED(bottom_right) // Ucomment when handle data changes -// if (static_cast(d_ptr)->IgnoreDataChangedSignal) -// { -// return; -// } + // if (static_cast(d_ptr)->IgnoreDataChangedSignal) + // { + // return; + // } // todo: handle data changes } void VPE::VPropertyFormView::dataSubmitted(VProperty *property) { - VPropertyModel* tmpModel = static_cast(d_ptr)->Model; + VPropertyModel *tmpModel = static_cast(d_ptr)->Model; if (tmpModel && d_ptr->UpdateEditors) { - static_cast(d_ptr)->IgnoreDataChangedSignal = true; + static_cast(d_ptr)->IgnoreDataChangedSignal = true; tmpModel->onDataChangedByModel(property); - static_cast(d_ptr)->IgnoreDataChangedSignal = false; + static_cast(d_ptr)->IgnoreDataChangedSignal = false; } } void VPE::VPropertyFormView::showEvent(QShowEvent *event) { Q_UNUSED(event) - if (static_cast(d_ptr)->NeedsRebuild) + if (static_cast(d_ptr)->NeedsRebuild) { build(); } - static_cast(d_ptr)->NeedsRebuild = false; + static_cast(d_ptr)->NeedsRebuild = false; } void VPE::VPropertyFormView::updatePropertyList() { - VPropertyModel* tmpModel = static_cast(d_ptr)->Model; - VPropertySet* tmpSet = static_cast(d_ptr)->PropertySet; + VPropertyModel *tmpModel = static_cast(d_ptr)->Model; + VPropertySet *tmpSet = static_cast(d_ptr)->PropertySet; if (tmpModel && tmpModel->getPropertySet()) { @@ -188,20 +187,20 @@ void VPE::VPropertyFormView::updatePropertyList() build(); } else - static_cast(d_ptr)->NeedsRebuild = true; + static_cast(d_ptr)->NeedsRebuild = true; } void VPE::VPropertyFormView::removeModelAndSet() { - if (static_cast(d_ptr)->Model) + if (static_cast(d_ptr)->Model) { - disconnect(static_cast(d_ptr)->Model, nullptr, this, nullptr); - static_cast(d_ptr)->Model = nullptr; + disconnect(static_cast(d_ptr)->Model, nullptr, this, nullptr); + static_cast(d_ptr)->Model = nullptr; } - static_cast(d_ptr)->NeedsRebuild = true; + static_cast(d_ptr)->NeedsRebuild = true; d_ptr->Properties.clear(); - static_cast(d_ptr)->PropertySet = nullptr; + static_cast(d_ptr)->PropertySet = nullptr; } void VPE::VPropertyFormView::connectPropertyFormWidget(VPropertyFormWidget *widget) @@ -213,7 +212,7 @@ void VPE::VPropertyFormView::connectPropertyFormWidget(VPropertyFormWidget *widg connect(widget, &VPropertyFormWidget::propertyDataSubmitted, this, &VPropertyFormView::dataSubmitted, Qt::UniqueConnection); - const QList tmpList = widget->getChildPropertyFormWidgets(); + const QList tmpList = widget->getChildPropertyFormWidgets(); for (auto *tmpEditorWidget : tmpList) { diff --git a/src/libs/vpropertyexplorer/vpropertyformview.h b/src/libs/vpropertyexplorer/vpropertyformview.h index 659e58059..9424dc5b1 100644 --- a/src/libs/vpropertyexplorer/vpropertyformview.h +++ b/src/libs/vpropertyexplorer/vpropertyformview.h @@ -21,7 +21,6 @@ #ifndef VPROPERTYFORMVIEW_H #define VPROPERTYFORMVIEW_H - #include #include #include @@ -44,55 +43,54 @@ QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods") class VPROPERTYEXPLORERSHARED_EXPORT VPropertyFormView : public VPropertyFormWidget { Q_OBJECT // NOLINT + public: //! Constructor explicit VPropertyFormView(QWidget *parent = nullptr); //! Constructor - explicit VPropertyFormView(VPropertyModel* model, QWidget *parent = nullptr); + explicit VPropertyFormView(VPropertyModel *model, QWidget *parent = nullptr); //! Constructor - explicit VPropertyFormView(VPropertySet* property_set, QWidget *parent = nullptr); + explicit VPropertyFormView(VPropertySet *property_set, QWidget *parent = nullptr); //! Destructor virtual ~VPropertyFormView() override; - public slots: //! Rebuilds the whole form virtual void build() override; //! Set the source model. Leads to the rebuild of the form //! \param model The model to use - void setModel(VPropertyModel* model); + void setModel(VPropertyModel *model); //! Set the property set to use. Note that if using a property set directly, adding and removing properties to the //! property set leads to undifined behaviour for the property set misses notification signals. //! \param property_set The property set to use - void setPropertySet(VPropertySet* property_set); + void setPropertySet(VPropertySet *property_set); //! Called when a row gets removed in the model - void rowsRemoved(const QModelIndex& parent, int start, int end); + void rowsRemoved(const QModelIndex &parent, int start, int end); //! Called when a new row is being inserted into the model - void rowsInserted(const QModelIndex& parent, int start, int end); + void rowsInserted(const QModelIndex &parent, int start, int end); //! Called when the model is being reset void modelReset(); - private slots: //! Called, when the model gets destroyed void modelDestroyed(); //! Called when data in the model gets changed - void dataChanged(const QModelIndex& top_left, const QModelIndex& bottom_right); + void dataChanged(const QModelIndex &top_left, const QModelIndex &bottom_right); //! Updates the model when data was submitted by the view - void dataSubmitted(VProperty* property); + void dataSubmitted(VProperty *property); protected: - virtual void showEvent(QShowEvent* event) override; + void showEvent(QShowEvent *event) override; //! Rebuilds the widegt only if it is visible void updatePropertyList(); @@ -101,7 +99,7 @@ protected: void removeModelAndSet(); //! Function to handle newly created VPropertyWidgets - virtual void connectPropertyFormWidget(VPropertyFormWidget* widget); + virtual void connectPropertyFormWidget(VPropertyFormWidget *widget); private: Q_DISABLE_COPY_MOVE(VPropertyFormView) // NOLINT @@ -109,6 +107,6 @@ private: QT_WARNING_POP -} // Namespace VPE +} // Namespace VPE #endif // VPROPERTYFORMVIEW_H diff --git a/src/libs/vpropertyexplorer/vpropertyformwidget.cpp b/src/libs/vpropertyexplorer/vpropertyformwidget.cpp index 61f309da0..863b04afd 100644 --- a/src/libs/vpropertyexplorer/vpropertyformwidget.cpp +++ b/src/libs/vpropertyexplorer/vpropertyformwidget.cpp @@ -30,15 +30,15 @@ #include #include #include -#include #include "plugins/vwidgetproperty.h" #include "vproperty.h" #include "vpropertyformwidget_p.h" VPE::VPropertyFormWidget::VPropertyFormWidget(const QString &title, const QString &description, - const QList& properties, QWidget *parent) - : QGroupBox(title, parent), d_ptr(new VPropertyFormWidgetPrivate(properties)) + const QList &properties, QWidget *parent) + : QGroupBox(title, parent), + d_ptr(new VPropertyFormWidgetPrivate(properties)) { VPE::VPropertyFormWidget::build(); setToolTip(description); @@ -46,7 +46,8 @@ VPE::VPropertyFormWidget::VPropertyFormWidget(const QString &title, const QStrin } VPE::VPropertyFormWidget::VPropertyFormWidget(VProperty *parent_property, QWidget *parent) - : QGroupBox(parent), d_ptr(new VPropertyFormWidgetPrivate()) + : QGroupBox(parent), + d_ptr(new VPropertyFormWidgetPrivate()) { if (parent_property) { @@ -60,7 +61,8 @@ VPE::VPropertyFormWidget::VPropertyFormWidget(VProperty *parent_property, QWidge VPE::VPropertyFormWidget::VPropertyFormWidget(VPropertyFormWidgetPrivate *d_pointer, QWidget *parent, const QString &title, const QString &description) - : QGroupBox(title, parent), d_ptr(d_pointer) + : QGroupBox(title, parent), + d_ptr(d_pointer) { VPE::VPropertyFormWidget::build(); setToolTip(description); @@ -72,7 +74,6 @@ VPE::VPropertyFormWidget::~VPropertyFormWidget() delete d_ptr; } - void VPE::VPropertyFormWidget::build() { // Clear the old content, delete old widgets @@ -97,14 +98,14 @@ void VPE::VPropertyFormWidget::build() return; //... only if there are properties } - QFormLayout* tmpFormLayout = new QFormLayout(this); + QFormLayout *tmpFormLayout = new QFormLayout(this); tmpFormLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); setLayout(tmpFormLayout); for (int i = 0; i < d_ptr->Properties.count(); ++i) { // Get the current property - VProperty* tmpProperty = d_ptr->Properties.value(i, nullptr); + VProperty *tmpProperty = d_ptr->Properties.value(i, nullptr); if (!tmpProperty) { continue; @@ -118,7 +119,7 @@ void VPE::VPropertyFormWidget::build() QWidget *group = new QWidget(this); tmpFormLayout->addRow(group); - QFormLayout* subFormLayout = new QFormLayout(group); + QFormLayout *subFormLayout = new QFormLayout(group); subFormLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); QMargins margins = subFormLayout->contentsMargins(); margins.setTop(0); @@ -127,7 +128,7 @@ void VPE::VPropertyFormWidget::build() subFormLayout->setContentsMargins(margins); group->setLayout(subFormLayout); - QList children = tmpProperty->getChildren(); + QList children = tmpProperty->getChildren(); for (int j = 0; j < children.size(); ++j) { buildEditor(children[j], subFormLayout); @@ -140,7 +141,7 @@ void VPE::VPropertyFormWidget::build() else { // Child properties, the property itself is not being added - VPropertyFormWidget* tmpNewFormWidget = new VPropertyFormWidget(tmpProperty, this); + VPropertyFormWidget *tmpNewFormWidget = new VPropertyFormWidget(tmpProperty, this); tmpFormLayout->addRow(tmpNewFormWidget); d_ptr->EditorWidgets.append(VPropertyFormWidgetPrivate::SEditorWidget(tmpNewFormWidget)); tmpNewFormWidget->setCommitBehaviour(d_ptr->UpdateEditors); @@ -148,7 +149,7 @@ void VPE::VPropertyFormWidget::build() } else if (tmpProperty->type() == "widget") { - VWidgetProperty* tmpWidgetProperty = static_cast(tmpProperty); + VWidgetProperty *tmpWidgetProperty = static_cast(tmpProperty); tmpFormLayout->addRow(tmpWidgetProperty->getWidget()); d_ptr->EditorWidgets.append(VPropertyFormWidgetPrivate::SEditorWidget(tmpWidgetProperty->getWidget())); } @@ -159,11 +160,11 @@ void VPE::VPropertyFormWidget::build() } } -void VPE::VPropertyFormWidget::buildEditor(VProperty* property, QFormLayout* formLayout, Property type) +void VPE::VPropertyFormWidget::buildEditor(VProperty *property, QFormLayout *formLayout, Property type) { // Add property (no child properties) // Create the editor (if it doesn't work, create empty widget) - QWidget* tmpEditor = property->createEditor(this, QStyleOptionViewItem(), nullptr); + QWidget *tmpEditor = property->createEditor(this, QStyleOptionViewItem(), nullptr); if (!tmpEditor) { tmpEditor = new QWidget(this); @@ -182,7 +183,7 @@ void VPE::VPropertyFormWidget::buildEditor(VProperty* property, QFormLayout* for // add new row if (type == Property::Complex) { - QString name = ""+property->getName()+""; + QString name = "" + property->getName() + ""; formLayout->addRow(name, tmpEditor); } else @@ -216,8 +217,8 @@ void VPE::VPropertyFormWidget::commitData(int row) return; } - VPropertyFormWidgetPrivate::SEditorWidget& tmpEditorWidget = d_ptr->EditorWidgets[row]; - VProperty* tmpProperty = d_ptr->Properties[row]; + VPropertyFormWidgetPrivate::SEditorWidget &tmpEditorWidget = d_ptr->EditorWidgets[row]; + VProperty *tmpProperty = d_ptr->Properties[row]; if (tmpEditorWidget.FormWidget) { tmpEditorWidget.FormWidget->commitData(); @@ -250,8 +251,8 @@ void VPE::VPropertyFormWidget::loadData(int row) return; } - VPropertyFormWidgetPrivate::SEditorWidget& tmpEditorWidget = d_ptr->EditorWidgets[row]; - VProperty* tmpProperty = d_ptr->Properties[row]; + VPropertyFormWidgetPrivate::SEditorWidget &tmpEditorWidget = d_ptr->EditorWidgets[row]; + VProperty *tmpProperty = d_ptr->Properties[row]; if (tmpEditorWidget.FormWidget) { tmpEditorWidget.FormWidget->loadData(); @@ -266,7 +267,7 @@ void VPE::VPropertyFormWidget::setCommitBehaviour(bool auto_commit) { d_ptr->UpdateEditors = auto_commit; - const QList tmpChildFormWidgets = getChildPropertyFormWidgets(); + const QList tmpChildFormWidgets = getChildPropertyFormWidgets(); for (auto *tmpChild : tmpChildFormWidgets) { if (tmpChild) @@ -297,7 +298,7 @@ auto VPE::VPropertyFormWidget::eventFilter(QObject *object, QEvent *event) -> bo return false; } - QWidget* editor = qobject_cast(object); + QWidget *editor = qobject_cast(object); if (!editor) { return false; @@ -377,7 +378,7 @@ void VPE::VPropertyFormWidget::commitData(const QWidget *editor) for (int i = 0; i < d_ptr->EditorWidgets.count(); ++i) { - VPropertyFormWidgetPrivate::SEditorWidget& tmpEditorWidget = d_ptr->EditorWidgets[i]; + VPropertyFormWidgetPrivate::SEditorWidget &tmpEditorWidget = d_ptr->EditorWidgets[i]; if (tmpEditorWidget.Editor == editor) { commitData(i); diff --git a/src/libs/vpropertyexplorer/vpropertymodel.h b/src/libs/vpropertyexplorer/vpropertymodel.h index a0f37186f..3d2581a06 100644 --- a/src/libs/vpropertyexplorer/vpropertymodel.h +++ b/src/libs/vpropertyexplorer/vpropertymodel.h @@ -21,7 +21,6 @@ #ifndef VPROPERTYMODEL_H #define VPROPERTYMODEL_H - #include #include #include @@ -29,7 +28,6 @@ #include #include #include -#include #include #include "vproperty.h" @@ -67,8 +65,9 @@ QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods") class VPROPERTYEXPLORERSHARED_EXPORT VPropertyModel : public QAbstractItemModel { Q_OBJECT // NOLINT + public: - explicit VPropertyModel(QObject * parent = nullptr); + explicit VPropertyModel(QObject *parent = nullptr); virtual ~VPropertyModel() override; //! Adds the property to the model and attaches it to the parentid @@ -143,31 +142,31 @@ public: //! \param property_set The new property set. Setting this to NULL has the same effect as calling clear. //! \param emit_signals Default: true. Set this to false if you want to prevent the model from emmiting the reset //! model signals - virtual void setPropertySet(VPropertySet* property_set, bool emit_signals = true); + virtual void setPropertySet(VPropertySet *property_set, bool emit_signals = true); //! Removes a property from the model and returns it virtual auto takeProperty(const QString &id) -> VProperty *; //! Removes a property from the model and deletes it - virtual void removeProperty(const QString& id); + virtual void removeProperty(const QString &id); signals: //! This signal is being emitted, when the setData method is being called - void onDataChangedByEditor(VProperty* property); + void onDataChangedByEditor(VProperty *property); public slots: //! This function causes the views to update the property - void onDataChangedByModel(VProperty* property); + void onDataChangedByModel(VProperty *property); protected: //! Gets a property by its ModelIndex virtual auto getIndexFromProperty(VProperty *property, int column = 0) const -> QModelIndex; //! Protected constructor passing the private object - explicit VPropertyModel(VPropertyModelPrivate* d, QObject* parent = nullptr); + explicit VPropertyModel(VPropertyModelPrivate *d, QObject *parent = nullptr); //! The model data - VPropertyModelPrivate* d_ptr; + VPropertyModelPrivate *d_ptr; private: Q_DISABLE_COPY_MOVE(VPropertyModel) // NOLINT @@ -175,6 +174,6 @@ private: QT_WARNING_POP -} +} // namespace VPE #endif // VPROPERTYMODEL_H diff --git a/src/libs/vtools/dialogs/dialogtoolbox.cpp b/src/libs/vtools/dialogs/dialogtoolbox.cpp index 17e7908e9..6bb40499f 100644 --- a/src/libs/vtools/dialogs/dialogtoolbox.cpp +++ b/src/libs/vtools/dialogs/dialogtoolbox.cpp @@ -42,6 +42,7 @@ #include "../vpatterndb/variables/vcurvelength.h" #include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vpiecenode.h" +#include "qdialogbuttonbox.h" #include #include @@ -50,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -570,7 +572,7 @@ void SetTabStopDistance(QPlainTextEdit *edit, int tabWidthChar) } //--------------------------------------------------------------------------------------------------------------------- -auto LineColor(int size, const QString &color) -> QIcon +auto LineColor(const QColor &borderColor, int size, const QString &color) -> QIcon { // On Mac pixmap should be little bit smaller. #if defined(Q_OS_MAC) @@ -579,7 +581,13 @@ auto LineColor(int size, const QString &color) -> QIcon QPixmap pix(size, size); pix.fill(QColor(color)); - return QIcon(pix); + + // Draw a white border around the icon + QPainter painter(&pix); + painter.setPen(borderColor); + painter.drawRect(0, 0, size - 1, size - 1); + + return {pix}; } //--------------------------------------------------------------------------------------------------------------------- @@ -831,3 +839,26 @@ auto InvalidSegment(QListWidget *listWidget, const VContainer *data, QString &er return false; } + +//--------------------------------------------------------------------------------------------------------------------- +void InitDialogButtonBoxIcons(QDialogButtonBox *buttonBox) +{ + SCASSERT(buttonBox != nullptr) + + QStyle *style = QApplication::style(); + + if (QPushButton *bOk = buttonBox->button(QDialogButtonBox::Ok)) + { + bOk->setIcon(style->standardIcon(QStyle::SP_DialogOkButton)); + } + + if (QPushButton *bApply = buttonBox->button(QDialogButtonBox::Apply)) + { + bApply->setIcon(style->standardIcon(QStyle::SP_DialogApplyButton)); + } + + if (QPushButton *bCancel = buttonBox->button(QDialogButtonBox::Cancel)) + { + bCancel->setIcon(style->standardIcon(QStyle::SP_DialogCancelButton)); + } +} diff --git a/src/libs/vtools/dialogs/dialogtoolbox.h b/src/libs/vtools/dialogs/dialogtoolbox.h index c0a59f366..e63e9b5f6 100644 --- a/src/libs/vtools/dialogs/dialogtoolbox.h +++ b/src/libs/vtools/dialogs/dialogtoolbox.h @@ -28,13 +28,13 @@ #ifndef DIALOGTOOLBOX_H #define DIALOGTOOLBOX_H +#include #include #include -#include -#include "../vpatterndb/variables/vinternalvariable.h" -#include "../vmisc/typedef.h" #include "../vgeometry/vgeometrydef.h" +#include "../vmisc/typedef.h" +#include "../vpatterndb/variables/vinternalvariable.h" class QPlainTextEdit; class QPushButton; @@ -48,6 +48,7 @@ class QLineEdit; class VContainer; class QListWidget; class VPieceNode; +class QDialogButtonBox; constexpr int formulaTimerTimeout = 300; @@ -59,7 +60,7 @@ QT_WARNING_DISABLE_GCC("-Weffc++") struct FormulaData { QString formula; - const QHash > *variables{nullptr}; + const QHash> *variables{nullptr}; QLabel *labelEditFormula{nullptr}; QLabel *labelResult{nullptr}; QString postfix; @@ -70,14 +71,14 @@ struct FormulaData QT_WARNING_POP auto RowNode(QListWidget *listWidget, int i) -> VPieceNode; -void MoveCursorToEnd(QPlainTextEdit *plainTextEdit); -void DeployFormula(QDialog *dialog, QPlainTextEdit *formula, QPushButton *buttonGrowLength, int formulaBaseHeight); +void MoveCursorToEnd(QPlainTextEdit *plainTextEdit); +void DeployFormula(QDialog *dialog, QPlainTextEdit *formula, QPushButton *buttonGrowLength, int formulaBaseHeight); auto FilterObject(QObject *object, QEvent *event) -> bool; auto EvalToolFormula(QDialog *dialog, const FormulaData &data, bool &flag) -> qreal; -void ChangeColor(QWidget *widget, const QColor &color); +void ChangeColor(QWidget *widget, const QColor &color); auto OkColor(QWidget *widget) -> QColor; -void CheckPointLabel(QDialog *dialog, QLineEdit* edit, QLabel *labelEditNamePoint, const QString &pointName, - const VContainer *data, bool &flag); +void CheckPointLabel(QDialog *dialog, QLineEdit *edit, QLabel *labelEditNamePoint, const QString &pointName, + const VContainer *data, bool &flag); auto FindNotExcludedNodeDown(QListWidget *listWidget, int candidate) -> int; auto FindNotExcludedNodeUp(QListWidget *listWidget, int candidate) -> int; auto FindNotExcludedPointDown(QListWidget *listWidget, int start) -> int; @@ -89,10 +90,11 @@ auto EachPointLabelIsUnique(QListWidget *listWidget) -> bool; auto InvalidSegment(QListWidget *listWidget, const VContainer *data, QString &error) -> bool; auto DialogWarningIcon() -> QString; auto NodeFont(QFont font, bool nodeExcluded = false) -> QFont; -void CurrentCurveLength(vidtype curveId, VContainer *data); -void SetTabStopDistance(QPlainTextEdit *edit, int tabWidthChar=4); -auto LineColor(int size, const QString &color) -> QIcon; +void CurrentCurveLength(vidtype curveId, VContainer *data); +void SetTabStopDistance(QPlainTextEdit *edit, int tabWidthChar = 4); +auto LineColor(const QColor &borderColor, int size, const QString &color) -> QIcon; auto SegmentAliases(GOType curveType, const QString &alias1, const QString &alias2) -> QPair; auto GetNodeName(const VContainer *data, const VPieceNode &node, bool showPassmarkDetails = false) -> QString; +void InitDialogButtonBoxIcons(QDialogButtonBox *buttonBox); #endif // DIALOGTOOLBOX_H diff --git a/src/libs/vtools/dialogs/support/dialogeditlabel.ui b/src/libs/vtools/dialogs/support/dialogeditlabel.ui index 94b3d607a..784efd035 100644 --- a/src/libs/vtools/dialogs/support/dialogeditlabel.ui +++ b/src/libs/vtools/dialogs/support/dialogeditlabel.ui @@ -35,7 +35,7 @@ Clear current and begin new label - ... + @@ -68,7 +68,7 @@ Import from label template - ... + @@ -91,7 +91,7 @@ Export label as template - ... + @@ -141,7 +141,7 @@ Move on top - ... + @@ -158,7 +158,7 @@ Move up - ... + @@ -175,7 +175,7 @@ Move down - ... + @@ -192,7 +192,7 @@ Move on bottom - ... + @@ -231,7 +231,7 @@ Bold - ... + @@ -251,7 +251,7 @@ Italic - ... + @@ -271,7 +271,7 @@ Aligns with the left edge - ... + @@ -291,7 +291,7 @@ Centers horizontally in the available space - ... + @@ -311,7 +311,7 @@ Aligns with the right edge - ... + @@ -363,7 +363,7 @@ - ... + @@ -377,7 +377,7 @@ false - ... + diff --git a/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp b/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp index 426173cc7..b55ea48a3 100644 --- a/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp +++ b/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp @@ -28,7 +28,6 @@ #include "dialogeditwrongformula.h" -#include #include #include #include @@ -47,40 +46,44 @@ #include #include #include +#include #include #include -#include #include -#include -#include "../vpatterndb/vcontainer.h" -#include "../vpatterndb/vtranslatevars.h" +#include "../tools/dialogtool.h" +#include "../vmisc/def.h" +#include "../vmisc/theme/vtheme.h" +#include "../vmisc/vabstractapplication.h" +#include "../vmisc/vcommonsettings.h" #include "../vpatterndb/variables/varcradius.h" #include "../vpatterndb/variables/vcurveangle.h" -#include "../vpatterndb/variables/vcurvelength.h" #include "../vpatterndb/variables/vcurveclength.h" +#include "../vpatterndb/variables/vcurvelength.h" #include "../vpatterndb/variables/vincrement.h" #include "../vpatterndb/variables/vlineangle.h" #include "../vpatterndb/variables/vlinelength.h" #include "../vpatterndb/variables/vmeasurement.h" #include "../vpatterndb/variables/vpiecearea.h" -#include "../vmisc/def.h" -#include "../vmisc/vabstractapplication.h" -#include "../vmisc/vcommonsettings.h" -#include "../tools/dialogtool.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "ui_dialogeditwrongformula.h" template class QSharedPointer; -enum {ColumnName = 0, ColumnFullName}; +enum +{ + ColumnName = 0, + ColumnFullName +}; //--------------------------------------------------------------------------------------------------------------------- DialogEditWrongFormula::DialogEditWrongFormula(const VContainer *data, quint32 toolId, QWidget *parent) - : QDialog(parent), - ui(new Ui::DialogEditWrongFormula), - m_data(data), - m_toolId(toolId), - timerFormula(new QTimer(this)) + : QDialog(parent), + ui(new Ui::DialogEditWrongFormula), + m_data(data), + m_toolId(toolId), + timerFormula(new QTimer(this)) { SCASSERT(data != nullptr) @@ -115,12 +118,10 @@ DialogEditWrongFormula::DialogEditWrongFormula(const VContainer *data, quint32 t connect(ui->toolButtonPutHere, &QPushButton::clicked, this, &DialogEditWrongFormula::PutHere); connect(ui->tableWidget, &QTableWidget::itemDoubleClicked, this, &DialogEditWrongFormula::PutVal); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - timerFormula->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { timerFormula->start(formulaTimerTimeout); }); - //Disable Qt::WaitCursor + // Disable Qt::WaitCursor #ifndef QT_NO_CURSOR if (QGuiApplication::overrideCursor() != nullptr) { @@ -166,7 +167,7 @@ void DialogEditWrongFormula::DialogRejected() //--------------------------------------------------------------------------------------------------------------------- void DialogEditWrongFormula::EvalFormula() -{ +{ FormulaData formulaData; formulaData.formula = ui->plainTextEditFormula->toPlainText(); formulaData.variables = m_data->DataVariables(); @@ -191,7 +192,7 @@ void DialogEditWrongFormula::ValChanged(int row) ui->labelDescription->setText(QString()); return; } - QTableWidgetItem *item = ui->tableWidget->item( row, ColumnName ); + QTableWidgetItem *item = ui->tableWidget->item(row, ColumnName); const QString name = VAbstractApplication::VApp()->TrVars()->VarFromUser(item->text()); try @@ -414,8 +415,8 @@ void DialogEditWrongFormula::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogEditWrongFormula::showEvent(QShowEvent *event) { - QDialog::showEvent( event ); - if ( event->spontaneous() ) + QDialog::showEvent(event); + if (event->spontaneous()) { return; } @@ -434,7 +435,7 @@ void DialogEditWrongFormula::showEvent(QShowEvent *event) CheckState(); - m_isInitialized = true;//first show windows are held + m_isInitialized = true; // first show windows are held } //--------------------------------------------------------------------------------------------------------------------- @@ -450,6 +451,24 @@ void DialogEditWrongFormula::resizeEvent(QResizeEvent *event) QDialog::resizeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEditWrongFormula::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + QDialog::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogEditWrongFormula::CheckState() { @@ -467,8 +486,8 @@ void DialogEditWrongFormula::CheckState() //--------------------------------------------------------------------------------------------------------------------- void DialogEditWrongFormula::SetFormula(const QString &value) { - formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); ui->plainTextEditFormula->setPlainText(formula); MoveCursorToEnd(ui->plainTextEditFormula); ui->plainTextEditFormula->selectAll(); @@ -538,7 +557,7 @@ void DialogEditWrongFormula::InitVariables() Measurements(); // clear text filter every time when new radio button selected - auto ClearFilterFormulaInputs = [this] () { ui->filterFormulaInputs->clear(); }; + auto ClearFilterFormulaInputs = [this]() { ui->filterFormulaInputs->clear(); }; connect(ui->radioButtonStandardTable, &QRadioButton::clicked, this, &DialogEditWrongFormula::Measurements); connect(ui->radioButtonStandardTable, &QRadioButton::clicked, this, ClearFilterFormulaInputs); @@ -599,13 +618,20 @@ auto DialogEditWrongFormula::Eval(const FormulaData &formulaData, bool &flag) -> return result; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEditWrongFormula::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->label->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ShowVariable show variables in list * @param var container with variables */ -template -void DialogEditWrongFormula::ShowVariable(const QMap &var) +template void DialogEditWrongFormula::ShowVariable(const QMap &var) { ui->tableWidget->blockSignals(true); ui->tableWidget->clearContents(); @@ -619,16 +645,16 @@ void DialogEditWrongFormula::ShowVariable(const QMap &var) iMap.next(); if (ui->checkBoxHideEmpty->isEnabled() && ui->checkBoxHideEmpty->isChecked() && iMap.value()->IsNotUsed()) { - continue; //skip this measurement + continue; // skip this measurement } if (iMap.value()->Filter(m_toolId) == false) - {// If we create this variable don't show + { // If we create this variable don't show ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1); auto *item = new QTableWidgetItem(iMap.key()); QFont font = item->font(); font.setBold(true); item->setFont(font); - ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, ColumnName, item); + ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, ColumnName, item); } } ui->tableWidget->blockSignals(false); @@ -641,7 +667,7 @@ void DialogEditWrongFormula::ShowVariable(const QMap &var) * @brief ShowMeasurements show measurements in table * @param var container with measurements */ -void DialogEditWrongFormula::ShowMeasurements(const QMap > &var) +void DialogEditWrongFormula::ShowMeasurements(const QMap> &var) { ui->tableWidget->blockSignals(true); ui->tableWidget->clearContents(); @@ -655,10 +681,10 @@ void DialogEditWrongFormula::ShowMeasurements(const QMapcheckBoxHideEmpty->isEnabled() && ui->checkBoxHideEmpty->isChecked() && iMap.value()->IsNotUsed()) { - continue; //skip this measurement + continue; // skip this measurement } if (not iMap.value()->Filter(m_toolId)) - {// If we create this variable don't show + { // If we create this variable don't show ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1); auto *itemName = new QTableWidgetItem(iMap.key()); QFont fontName = itemName->font(); @@ -680,8 +706,8 @@ void DialogEditWrongFormula::ShowMeasurements(const QMapsetToolTip(itemFullName->text()); - ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, ColumnName, itemName); - ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, ColumnFullName, itemFullName); + ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, ColumnName, itemName); + ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, ColumnFullName, itemFullName); } } ui->tableWidget->blockSignals(false); @@ -713,12 +739,11 @@ void DialogEditWrongFormula::ShowFunctions() QFont font = item->font(); font.setBold(true); item->setFont(font); - ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, ColumnName, item); + ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, ColumnName, item); - functionsDescriptions.contains(i.key()) - ? item->setToolTip(functionsDescriptions.value(i.key()) - .translate(VAbstractApplication::VApp()->Settings()->GetLocale())) - : item->setToolTip(i.value().getMdisambiguation()); + functionsDescriptions.contains(i.key()) ? item->setToolTip(functionsDescriptions.value(i.key()).translate( + VAbstractApplication::VApp()->Settings()->GetLocale())) + : item->setToolTip(i.value().getMdisambiguation()); ++i; } @@ -732,13 +757,13 @@ void DialogEditWrongFormula::ShowIncrementsInPreviewCalculation(bool show) { ui->checkBoxHideEmpty->setEnabled(false); - QMap > increments; + QMap> increments; - const QMap > list = m_data->DataIncrements(); - QMap >::const_iterator i = list.constBegin(); + const QMap> list = m_data->DataIncrements(); + QMap>::const_iterator i = list.constBegin(); while (i != list.constEnd()) { - if(i.value()->IsPreviewCalculation() == show) + if (i.value()->IsPreviewCalculation() == show) { increments.insert(i.key(), i.value()); } @@ -772,7 +797,7 @@ void DialogEditWrongFormula::FilterVariablesEdited(const QString &filter) } // show rows with matched filter - const QList items = ui->tableWidget->findItems(filter, Qt::MatchContains); + const QList items = ui->tableWidget->findItems(filter, Qt::MatchContains); for (auto *item : items) { // If filter is empty findItems() for unknown reason returns nullptr items. diff --git a/src/libs/vtools/dialogs/support/dialogeditwrongformula.h b/src/libs/vtools/dialogs/support/dialogeditwrongformula.h index a0d1231f1..a06458902 100644 --- a/src/libs/vtools/dialogs/support/dialogeditwrongformula.h +++ b/src/libs/vtools/dialogs/support/dialogeditwrongformula.h @@ -113,6 +113,7 @@ protected: void closeEvent(QCloseEvent *event) override; void showEvent(QShowEvent *event) override; void resizeEvent(QResizeEvent *event) override; + void changeEvent(QEvent *event) override; virtual void CheckState(); private slots: @@ -156,6 +157,8 @@ private: bool square = false); auto Eval(const FormulaData &formulaData, bool &flag) -> qreal; + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/support/dialogeditwrongformula.ui b/src/libs/vtools/dialogs/support/dialogeditwrongformula.ui index 6cfa88c9c..2d19e614a 100644 --- a/src/libs/vtools/dialogs/support/dialogeditwrongformula.ui +++ b/src/libs/vtools/dialogs/support/dialogeditwrongformula.ui @@ -95,7 +95,7 @@ Insert variable into formula - ... + @@ -115,7 +115,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/support/dialogundo.cpp b/src/libs/vtools/dialogs/support/dialogundo.cpp index 93ccf6848..bdf454276 100644 --- a/src/libs/vtools/dialogs/support/dialogundo.cpp +++ b/src/libs/vtools/dialogs/support/dialogundo.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vcommonsettings.h" @@ -39,7 +38,9 @@ //--------------------------------------------------------------------------------------------------------------------- DialogUndo::DialogUndo(QWidget *parent) - :QDialog(parent), ui(new Ui::DialogUndo), result(UndoButton::Cancel) + : QDialog(parent), + ui(new Ui::DialogUndo), + result(UndoButton::Cancel) { ui->setupUi(this); @@ -52,17 +53,19 @@ DialogUndo::DialogUndo(QWidget *parent) } else { - connect(ui->pushButtonUndo, &QPushButton::clicked, this, [this]() - { - result = UndoButton::Undo; - accept(); - }); + connect(ui->pushButtonUndo, &QPushButton::clicked, this, + [this]() + { + result = UndoButton::Undo; + accept(); + }); } - connect(ui->pushButtonFix, &QPushButton::clicked, this, [this]() - { - result = UndoButton::Fix; - accept(); - }); + connect(ui->pushButtonFix, &QPushButton::clicked, this, + [this]() + { + result = UndoButton::Fix; + accept(); + }); connect(ui->pushButtonCancel, &QPushButton::clicked, this, &DialogUndo::Cancel); setCursor(Qt::ArrowCursor); diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.cpp b/src/libs/vtools/dialogs/tools/dialogalongline.cpp index 5d07d6ec2..8477b9139 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogalongline.cpp @@ -48,13 +48,14 @@ #include "../support/dialogeditwrongformula.h" #include "../vgeometry/../ifc/ifcdef.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "../vpatterndb/vcontainer.h" #include "../vpatterndb/variables/vlinelength.h" +#include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vtranslatevars.h" -#include "ui_dialogalongline.h" #include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogalongline.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -63,19 +64,21 @@ * @param parent parent widget */ DialogAlongLine::DialogAlongLine(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogAlongLine), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogAlongLine), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogAlongLine::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -84,29 +87,28 @@ DialogAlongLine::DialogAlongLine(const VContainer *data, quint32 toolId, QWidget FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogAlongLine::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogAlongLine::DeployFormulaTextEdit); - connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, - this, &DialogAlongLine::PointChanged); - connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, - this, &DialogAlongLine::PointChanged); + connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, this, &DialogAlongLine::PointChanged); + connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, this, &DialogAlongLine::PointChanged); vis = new VisToolAlongLine(data); // Call after initialization vis!!!! - SetTypeLine(TypeLineNone);//By default don't show line + SetTypeLine(TypeLineNone); // By default don't show line ui->tabWidget->setCurrentIndex(0); SetTabStopDistance(ui->plainTextEditToolNotes); @@ -186,7 +188,7 @@ DialogAlongLine::~DialogAlongLine() */ void DialogAlongLine::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -239,6 +241,24 @@ void DialogAlongLine::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogAlongLine::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogAlongLine::SetCurrentLength() { @@ -260,7 +280,7 @@ void DialogAlongLine::SetCurrentLength() SCASSERT(length != nullptr) length->SetName(currentLength); - auto *locData = const_cast (data); + auto *locData = const_cast(data); locData->AddVariable(length); } @@ -282,8 +302,7 @@ void DialogAlongLine::ChosenSecondPoint(quint32 id, const QString &toolTip) } else { - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(line, &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); } @@ -314,6 +333,15 @@ void DialogAlongLine::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogAlongLine::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->labelEqual->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSecondPointId set id second point of line @@ -413,8 +441,8 @@ void DialogAlongLine::SetFirstPointId(quint32 value) */ void DialogAlongLine::SetFormula(const QString &value) { - m_formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_formula.length() > 80) { diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.h b/src/libs/vtools/dialogs/tools/dialogalongline.h index 4ae23e5d4..44f9a165d 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.h +++ b/src/libs/vtools/dialogs/tools/dialogalongline.h @@ -95,6 +95,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -129,6 +130,8 @@ private: void ChosenSecondPoint(quint32 id, const QString &toolTip); void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.ui b/src/libs/vtools/dialogs/tools/dialogalongline.ui index 5fd9797d6..b6a653803 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.ui +++ b/src/libs/vtools/dialogs/tools/dialogalongline.ui @@ -102,11 +102,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -122,7 +122,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogarc.cpp b/src/libs/vtools/dialogs/tools/dialogarc.cpp index cb17dad3a..be0326049 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarc.cpp @@ -28,7 +28,6 @@ #include "dialogarc.h" -#include #include #include #include @@ -36,20 +35,21 @@ #include #include #include -#include +#include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolarc.h" #include "../../visualization/visualization.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/varc.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogarc.h" -#include "../vgeometry/varc.h" -#include "../qmuparser/qmudef.h" -#include "../vwidgets/vabstractmainwindow.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/global.h" +#include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogarc.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -58,14 +58,16 @@ * @param parent parent widget */ DialogArc::DialogArc(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogArc), - m_timerRadius(new QTimer(this)), - m_timerF1(new QTimer(this)), - m_timerF2(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogArc), + m_timerRadius(new QTimer(this)), + m_timerF1(new QTimer(this)), + m_timerF2(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); this->m_formulaBaseHeight = ui->plainTextEditFormula->height(); @@ -89,26 +91,22 @@ DialogArc::DialogArc(const VContainer *data, quint32 toolId, QWidget *parent) FillComboBoxPoints(ui->comboBoxBasePoint); FillComboBoxLineColors(ui->comboBoxColor); - FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + CurvePenStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text))); connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, &DialogArc::FXRadius); connect(ui->toolButtonExprF1, &QPushButton::clicked, this, &DialogArc::FXF1); connect(ui->toolButtonExprF2, &QPushButton::clicked, this, &DialogArc::FXF2); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerRadius->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerRadius->start(formulaTimerTimeout); }); - connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerF1->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, + [this]() { m_timerF1->start(formulaTimerTimeout); }); - connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerF2->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, + [this]() { m_timerF2->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogArc::DeployFormulaTextEdit); connect(ui->pushButtonGrowLengthF1, &QPushButton::clicked, this, &DialogArc::DeployF1TextEdit); @@ -167,8 +165,8 @@ void DialogArc::SetCenter(const quint32 &value) */ void DialogArc::SetF2(const QString &value) { - m_f2 = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_f2 = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_f2.length() > 80) { @@ -287,8 +285,8 @@ void DialogArc::ShowDialog(bool click) if (m_stageRadius) { - //Radius of point circle, but little bigger. Need handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } @@ -324,8 +322,8 @@ void DialogArc::ShowDialog(bool click) */ void DialogArc::SetF1(const QString &value) { - m_f1 = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_f1 = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_f1.length() > 80) { @@ -347,8 +345,8 @@ void DialogArc::SetF1(const QString &value) */ void DialogArc::SetRadius(const QString &value) { - m_radius = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_radius = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_radius.length() > 80) { @@ -371,7 +369,7 @@ void DialogArc::SetRadius(const QString &value) */ void DialogArc::ChosenObject(quint32 id, const SceneObject &type) { - if (not prepare)// After first choose we ignore all objects + if (not prepare) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -379,8 +377,8 @@ void DialogArc::ChosenObject(quint32 id, const SceneObject &type) { if (vis != nullptr) { - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); @@ -432,6 +430,24 @@ void DialogArc::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogArc::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogArc::ValidateAlias() { @@ -557,6 +573,22 @@ void DialogArc::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogArc::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprRadius->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprF1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprF2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_2->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_5->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetCenter return id of center point diff --git a/src/libs/vtools/dialogs/tools/dialogarc.h b/src/libs/vtools/dialogs/tools/dialogarc.h index bab247059..7a13ddfee 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.h +++ b/src/libs/vtools/dialogs/tools/dialogarc.h @@ -102,6 +102,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -161,6 +162,8 @@ private: void EvalF(); void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogarc.ui b/src/libs/vtools/dialogs/tools/dialogarc.ui index 0314113ac..7db722a60 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.ui +++ b/src/libs/vtools/dialogs/tools/dialogarc.ui @@ -102,11 +102,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -122,7 +122,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -282,11 +282,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -302,7 +302,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -462,11 +462,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -482,7 +482,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp index b4a025126..8a29cb222 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp @@ -28,7 +28,6 @@ #include "dialogarcwithlength.h" -#include #include #include #include @@ -36,31 +35,34 @@ #include #include #include -#include +#include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolarcwithlength.h" +#include "../../visualization/visualization.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/varc.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "../../visualization/visualization.h" -#include "ui_dialogarcwithlength.h" -#include "../vgeometry/varc.h" -#include "../qmuparser/qmudef.h" -#include "../vwidgets/vabstractmainwindow.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/global.h" +#include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogarcwithlength.h" //--------------------------------------------------------------------------------------------------------------------- DialogArcWithLength::DialogArcWithLength(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogArcWithLength), - m_timerRadius(new QTimer(this)), - m_timerF1(new QTimer(this)), - m_timerLength(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogArcWithLength), + m_timerRadius(new QTimer(this)), + m_timerF1(new QTimer(this)), + m_timerLength(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + this->m_formulaBaseHeightRadius = ui->plainTextEditRadius->height(); this->m_formulaBaseHeightF1 = ui->plainTextEditF1->height(); this->m_formulaBaseHeightLength = ui->plainTextEditLength->height(); @@ -82,7 +84,9 @@ DialogArcWithLength::DialogArcWithLength(const VContainer *data, quint32 toolId, FillComboBoxPoints(ui->comboBoxCenter); FillComboBoxLineColors(ui->comboBoxColor); - FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + CurvePenStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text))); ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); @@ -90,20 +94,14 @@ DialogArcWithLength::DialogArcWithLength(const VContainer *data, quint32 toolId, connect(ui->toolButtonExprF1, &QPushButton::clicked, this, &DialogArcWithLength::FXF1); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogArcWithLength::FXLength); - connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerRadius->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, + [this]() { m_timerRadius->start(formulaTimerTimeout); }); - connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerF1->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, + [this]() { m_timerF1->start(formulaTimerTimeout); }); - connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerLength->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, + [this]() { m_timerLength->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLengthRadius, &QPushButton::clicked, this, &DialogArcWithLength::DeployRadiusTextEdit); connect(ui->pushButtonGrowLengthF1, &QPushButton::clicked, this, &DialogArcWithLength::DeployF1TextEdit); @@ -147,8 +145,8 @@ auto DialogArcWithLength::GetRadius() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::SetRadius(const QString &value) { - m_radius = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_radius = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_radius.length() > 80) { @@ -172,8 +170,8 @@ auto DialogArcWithLength::GetF1() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::SetF1(const QString &value) { - m_f1 = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_f1 = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_f1.length() > 80) { @@ -197,8 +195,8 @@ auto DialogArcWithLength::GetLength() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::SetLength(const QString &value) { - m_length = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_length = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_length.length() > 80) { @@ -314,8 +312,8 @@ void DialogArcWithLength::ShowDialog(bool click) if (m_stageRadius) { - //Radius of point circle, but little bigger. Need handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } @@ -355,7 +353,7 @@ void DialogArcWithLength::ShowDialog(bool click) //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::ChosenObject(quint32 id, const SceneObject &type) { - if (not prepare)// After first choose we ignore all objects + if (not prepare) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -363,8 +361,8 @@ void DialogArcWithLength::ChosenObject(quint32 id, const SceneObject &type) { if (vis != nullptr) { - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); @@ -476,6 +474,24 @@ void DialogArcWithLength::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogArcWithLength::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::ValidateAlias() { @@ -550,3 +566,19 @@ void DialogArcWithLength::FinishCreating() setModal(true); show(); } + +//--------------------------------------------------------------------------------------------------------------------- +void DialogArcWithLength::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprRadius->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprF1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_6->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_9->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_10->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h index 9c6221c5f..7ecf62134 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h @@ -98,6 +98,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -150,6 +151,8 @@ private: void EvalF(); void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.ui b/src/libs/vtools/dialogs/tools/dialogarcwithlength.ui index b6790d8c6..1a7f3ed89 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.ui +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -279,11 +279,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -299,7 +299,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -459,11 +459,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -479,7 +479,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.cpp b/src/libs/vtools/dialogs/tools/dialogbisector.cpp index a53866211..19b5dc93a 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.cpp +++ b/src/libs/vtools/dialogs/tools/dialogbisector.cpp @@ -44,14 +44,15 @@ #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "../vpatterndb/vtranslatevars.h" #include "../vpatterndb/vcontainer.h" -#include "ui_dialogbisector.h" -#include "../vwidgets/vabstractmainwindow.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.h" -#include "../vgeometry/vpointf.h" +#include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogbisector.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -60,19 +61,21 @@ * @param parent parent widget */ DialogBisector::DialogBisector(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogBisector), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogBisector), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogBisector::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -80,27 +83,25 @@ DialogBisector::DialogBisector(const VContainer *data, quint32 toolId, QWidget * FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxPoints(ui->comboBoxThirdPoint); FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogBisector::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogBisector::DeployFormulaTextEdit); - connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, - this, &DialogBisector::PointNameChanged); - connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, - this, &DialogBisector::PointNameChanged); - connect(ui->comboBoxThirdPoint, &QComboBox::currentTextChanged, - this, &DialogBisector::PointNameChanged); + connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, this, &DialogBisector::PointNameChanged); + connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, this, &DialogBisector::PointNameChanged); + connect(ui->comboBoxThirdPoint, &QComboBox::currentTextChanged, this, &DialogBisector::PointNameChanged); vis = new VisToolBisector(data); @@ -193,7 +194,7 @@ auto DialogBisector::GetPointName() const -> QString */ void DialogBisector::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -261,8 +262,8 @@ void DialogBisector::SetTypeLine(const QString &value) */ void DialogBisector::SetFormula(const QString &value) { - m_formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_formula.length() > 80) { @@ -368,8 +369,7 @@ void DialogBisector::ShowDialog(bool click) const QSharedPointer p2 = data->GeometricObject(GetSecondPointId()); const QSharedPointer p3 = data->GeometricObject(GetThirdPointId()); - qreal angle = VToolBisector::BisectorAngle(static_cast(*p1), - static_cast(*p2), + qreal angle = VToolBisector::BisectorAngle(static_cast(*p1), static_cast(*p2), static_cast(*p3)); QLineF baseLine(static_cast(*p2), static_cast(*p3)); @@ -414,6 +414,24 @@ void DialogBisector::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogBisector::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogBisector::ChosenThirdPoint(quint32 id) { @@ -426,8 +444,7 @@ void DialogBisector::ChosenThirdPoint(quint32 id) { if (SetObject(id, ui->comboBoxThirdPoint, QString())) { - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) auto *line = qobject_cast(vis); @@ -456,6 +473,15 @@ void DialogBisector::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogBisector::InitIcons() +{ + QString resource = QStringLiteral("icon"); + + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetTypeLine return type of line diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.h b/src/libs/vtools/dialogs/tools/dialogbisector.h index 5b9292ef3..1ae225d51 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.h +++ b/src/libs/vtools/dialogs/tools/dialogbisector.h @@ -97,6 +97,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -126,6 +127,8 @@ private: void ChosenThirdPoint(quint32 id); void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.ui b/src/libs/vtools/dialogs/tools/dialogbisector.ui index 485374cf2..0cbcf1567 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.ui +++ b/src/libs/vtools/dialogs/tools/dialogbisector.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp b/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp index 1a3c1f366..bc1987da0 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp @@ -37,19 +37,19 @@ #include "../../visualization/path/vistoolcubicbezier.h" #include "../../visualization/visualization.h" +#include "../qmuparser/qmudef.h" #include "../vgeometry/vpointf.h" #include "../vpatterndb/vcontainer.h" #include "dialogtool.h" #include "ui_dialogcubicbezier.h" -#include "../qmuparser/qmudef.h" //--------------------------------------------------------------------------------------------------------------------- DialogCubicBezier::DialogCubicBezier(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogCubicBezier), - spl(), - newDuplicate(-1), - flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCubicBezier), + spl(), + newDuplicate(-1), + flagError(false) { ui->setupUi(this); InitOkCancelApply(ui); @@ -59,18 +59,16 @@ DialogCubicBezier::DialogCubicBezier(const VContainer *data, quint32 toolId, QWi FillComboBoxPoints(ui->comboBoxP3); FillComboBoxPoints(ui->comboBoxP4); FillComboBoxLineColors(ui->comboBoxColor); - FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + CurvePenStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text))); ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); - connect(ui->comboBoxP1, &QComboBox::currentTextChanged, - this, &DialogCubicBezier::PointNameChanged); - connect(ui->comboBoxP2, &QComboBox::currentTextChanged, - this, &DialogCubicBezier::PointNameChanged); - connect(ui->comboBoxP3, &QComboBox::currentTextChanged, - this, &DialogCubicBezier::PointNameChanged); - connect(ui->comboBoxP4, &QComboBox::currentTextChanged, - this, &DialogCubicBezier::PointNameChanged); + connect(ui->comboBoxP1, &QComboBox::currentTextChanged, this, &DialogCubicBezier::PointNameChanged); + connect(ui->comboBoxP2, &QComboBox::currentTextChanged, this, &DialogCubicBezier::PointNameChanged); + connect(ui->comboBoxP3, &QComboBox::currentTextChanged, this, &DialogCubicBezier::PointNameChanged); + connect(ui->comboBoxP4, &QComboBox::currentTextChanged, this, &DialogCubicBezier::PointNameChanged); connect(ui->lineEditAlias, &QLineEdit::textEdited, this, &DialogCubicBezier::ValidateAlias); @@ -124,7 +122,7 @@ void DialogCubicBezier::SetSpline(const VCubicBezier &spline) //--------------------------------------------------------------------------------------------------------------------- void DialogCubicBezier::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare == false)// After first choose we ignore all objects + if (prepare == false) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -249,7 +247,7 @@ void DialogCubicBezier::SaveData() spl.SetColor(GetComboBoxCurrentData(ui->comboBoxColor, ColorBlack)); spl.SetAliasSuffix(ui->lineEditAlias->text()); - const quint32 d = spl.GetDuplicate();//Save previous value + const quint32 d = spl.GetDuplicate(); // Save previous value newDuplicate <= -1 ? spl.SetDuplicate(d) : spl.SetDuplicate(static_cast(newDuplicate)); auto *path = qobject_cast(vis); diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp index 48e55485f..8d3f147f8 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp @@ -41,7 +41,6 @@ #include #include #include -#include #include #include "../../visualization/path/vistoolcubicbezierpath.h" @@ -51,21 +50,21 @@ #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) +#include "../qmuparser/qmudef.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/vabstractmainwindow.h" #include "dialogtool.h" #include "ui_dialogcubicbezierpath.h" -#include "../qmuparser/qmudef.h" class QWidget; //--------------------------------------------------------------------------------------------------------------------- DialogCubicBezierPath::DialogCubicBezierPath(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogCubicBezierPath), - path(), - newDuplicate(-1), - flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCubicBezierPath), + path(), + newDuplicate(-1), + flagError(false) { ui->setupUi(this); @@ -74,13 +73,15 @@ DialogCubicBezierPath::DialogCubicBezierPath(const VContainer *data, quint32 too FillComboBoxPoints(ui->comboBoxPoint); FillComboBoxLineColors(ui->comboBoxColor); - FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + CurvePenStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text))); ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogCubicBezierPath::PointChanged); - connect(ui->comboBoxPoint, QOverload::of(&QComboBox::currentIndexChanged), - this, &DialogCubicBezierPath::currentPointChanged); + connect(ui->comboBoxPoint, QOverload::of(&QComboBox::currentIndexChanged), this, + &DialogCubicBezierPath::currentPointChanged); connect(ui->lineEditAlias, &QLineEdit::textEdited, this, &DialogCubicBezierPath::ValidateAlias); @@ -159,7 +160,7 @@ void DialogCubicBezierPath::ChosenObject(quint32 id, const SceneObject &type) { visPath->VisualMode(NULL_ID); VAbstractMainWindow *window = - qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(visPath, &VisToolCubicBezierPath::ToolTip, window, &VAbstractMainWindow::ShowToolTip); } @@ -179,7 +180,7 @@ void DialogCubicBezierPath::ShowDialog(bool click) if (size >= 7) { if (size - VCubicBezierPath::SubSplPointsCount(path.CountSubSpl()) == 0) - {// Accept only if all subpaths are completed + { // Accept only if all subpaths are completed emit ToolTip(QString()); if (not data->IsUnique(path.name())) @@ -202,7 +203,7 @@ void DialogCubicBezierPath::ShowVisualization() //--------------------------------------------------------------------------------------------------------------------- void DialogCubicBezierPath::SaveData() { - const quint32 d = path.GetDuplicate();//Save previous value + const quint32 d = path.GetDuplicate(); // Save previous value SavePath(); newDuplicate <= -1 ? path.SetDuplicate(d) : path.SetDuplicate(static_cast(newDuplicate)); @@ -237,7 +238,7 @@ void DialogCubicBezierPath::currentPointChanged(int index) try { - QListWidgetItem *item = ui->listWidget->item( ui->listWidget->currentRow() ); + QListWidgetItem *item = ui->listWidget->item(ui->listWidget->currentRow()); const auto point = data->GeometricObject(id); DataPoint(*point); item->setData(Qt::UserRole, QVariant::fromValue(*point)); @@ -280,7 +281,7 @@ void DialogCubicBezierPath::ValidateAlias() //--------------------------------------------------------------------------------------------------------------------- void DialogCubicBezierPath::NewItem(const VPointF &point) { - auto* item = new QListWidgetItem(point.name()); + auto *item = new QListWidgetItem(point.name()); item->setFont(NodeFont(item->font())); item->setData(Qt::UserRole, QVariant::fromValue(point)); @@ -320,12 +321,12 @@ auto DialogCubicBezierPath::AllPathBackboneIds() const -> QSet } QSet ids; - const auto count = VCubicBezierPath::CountSubSpl(points.size());// Count subpaths + const auto count = VCubicBezierPath::CountSubSpl(points.size()); // Count subpaths for (qint32 i = 1; i <= count; ++i) { const auto base = VCubicBezierPath::SubSplOffset(i); - ids.insert(points.at(base));// The first subpath's point - ids.insert(points.at(base + 3));// The last subpath's point + ids.insert(points.at(base)); // The first subpath's point + ids.insert(points.at(base + 3)); // The last subpath's point } return ids; @@ -371,9 +372,9 @@ void DialogCubicBezierPath::ValidatePath() color = OkColor(this); auto first = qvariant_cast(ui->listWidget->item(0)->data(Qt::UserRole)); - auto last = qvariant_cast(ui->listWidget->item(ui->listWidget->count()-1)->data(Qt::UserRole)); + auto last = qvariant_cast(ui->listWidget->item(ui->listWidget->count() - 1)->data(Qt::UserRole)); - if (first.id() == path.at(0).id() && last.id() == path.at(path.CountPoints()-1).id()) + if (first.id() == path.at(0).id() && last.id() == path.at(path.CountPoints() - 1).id()) { newDuplicate = -1; ui->lineEditSplPathName->setText(VAbstractApplication::VApp()->TrVars()->VarToUser(path.name())); diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index 22acd06dc..a35c2d6f1 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -40,42 +40,45 @@ #include #include -#include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" -#include "../vpatterndb/vtranslatevars.h" -#include "../vwidgets/vmaingraphicsscene.h" -#include "../vwidgets/vabstractmainwindow.h" #include "../../visualization/line/vistoolcurveintersectaxis.h" #include "../../visualization/visualization.h" +#include "../dialogtoolbox.h" #include "../ifc/xml/vabstractpattern.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "../qmuparser/qmudef.h" -#include "../dialogtoolbox.h" -#include "ui_dialogcurveintersectaxis.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/global.h" +#include "../vwidgets/vabstractmainwindow.h" +#include "../vwidgets/vmaingraphicsscene.h" +#include "ui_dialogcurveintersectaxis.h" //--------------------------------------------------------------------------------------------------------------------- DialogCurveIntersectAxis::DialogCurveIntersectAxis(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogCurveIntersectAxis), - formulaAngle(), - formulaBaseHeightAngle(0), - pointName(), - m_firstRelease(false), - timerFormula(new QTimer(this)), - flagFormula(false), - flagName(true) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCurveIntersectAxis), + formulaAngle(), + formulaBaseHeightAngle(0), + pointName(), + m_firstRelease(false), + timerFormula(new QTimer(this)), + flagFormula(false), + flagName(true) { ui->setupUi(this); + InitIcons(); + timerFormula->setSingleShot(true); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); formulaBaseHeightAngle = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -83,19 +86,19 @@ DialogCurveIntersectAxis::DialogCurveIntersectAxis(const VContainer *data, quint FillComboBoxPoints(ui->comboBoxAxisPoint); FillComboBoxCurves(ui->comboBoxCurve); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogCurveIntersectAxis::FXAngle); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLengthAngle, &QPushButton::clicked, this, &DialogCurveIntersectAxis::DeployAngleTextEdit); connect(timerFormula, &QTimer::timeout, this, &DialogCurveIntersectAxis::EvalAngle); connect(ui->lineEditAlias1, &QLineEdit::textEdited, this, &DialogCurveIntersectAxis::ValidateAlias); @@ -148,8 +151,8 @@ auto DialogCurveIntersectAxis::GetAngle() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::SetAngle(const QString &value) { - formulaAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (formulaAngle.length() > 80) @@ -230,8 +233,8 @@ void DialogCurveIntersectAxis::ShowDialog(bool click) const QSharedPointer point = data->GeometricObject(GetBasePointId()); QLineF line = QLineF(static_cast(*point), scene->getScenePos()); - //Radius of point circle, but little bigger. Need handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } @@ -239,17 +242,17 @@ void DialogCurveIntersectAxis::ShowDialog(bool click) auto *line = qobject_cast(vis); SCASSERT(line != nullptr) - SetAngle(line->Angle());//Show in dialog angle what user choose + SetAngle(line->Angle()); // Show in dialog angle what user choose emit ToolTip(QString()); - DialogAccepted();// Just set default values and don't show dialog + DialogAccepted(); // Just set default values and don't show dialog } } //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare == false)// After first choose we ignore all objects + if (prepare == false) // After first choose we ignore all objects { auto *line = qobject_cast(vis); SCASSERT(line != nullptr) @@ -257,20 +260,17 @@ void DialogCurveIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) switch (number) { case (0): - if (type == SceneObject::Spline - || type == SceneObject::Arc - || type == SceneObject::ElArc - || type == SceneObject::SplinePath) + if (type == SceneObject::Spline || type == SceneObject::Arc || type == SceneObject::ElArc || + type == SceneObject::SplinePath) { if (SetObject(id, ui->comboBoxCurve, tr("Select axis point"))) { number++; line->VisualMode(id); VAbstractMainWindow *window = - qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(line, &VisToolCurveIntersectAxis::ToolTip, window, &VAbstractMainWindow::ShowToolTip); - } } break; @@ -362,6 +362,24 @@ void DialogCurveIntersectAxis::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCurveIntersectAxis::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::ValidateAlias() { @@ -370,11 +388,9 @@ void DialogCurveIntersectAxis::ValidateAlias() const QSharedPointer curve = data->GeometricObject(getCurveId()); QPair alias = SegmentAliases(curve->getType(), GetAliasSuffix1(), GetAliasSuffix2()); - if (not GetAliasSuffix1().isEmpty() && (not rx.match(alias.first).hasMatch() || - (originAliasSuffix1 != GetAliasSuffix1() && not data->IsUnique(alias.first)) || - alias.first == alias.second)) + (originAliasSuffix1 != GetAliasSuffix1() && not data->IsUnique(alias.first)) || alias.first == alias.second)) { flagAlias1 = false; ChangeColor(ui->labelAlias1, errorColor); @@ -387,8 +403,7 @@ void DialogCurveIntersectAxis::ValidateAlias() if (not GetAliasSuffix2().isEmpty() && (not rx.match(alias.second).hasMatch() || - (originAliasSuffix2 != GetAliasSuffix2() && not data->IsUnique(alias.second)) || - alias.first == alias.second)) + (originAliasSuffix2 != GetAliasSuffix2() && not data->IsUnique(alias.second)) || alias.first == alias.second)) { flagAlias2 = false; ChangeColor(ui->labelAlias2, errorColor); @@ -402,6 +417,15 @@ void DialogCurveIntersectAxis::ValidateAlias() CheckState(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCurveIntersectAxis::InitIcons() +{ + QString resource = QStringLiteral("icon"); + + ui->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::SetNotes(const QString ¬es) { diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h index 83d02b16f..d579d15bd 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h @@ -92,6 +92,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -120,6 +121,8 @@ private: /** @brief number number of handled objects */ qint32 number{0}; + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.ui b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.ui index bd4cc72c3..ff0afd3ae 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.ui +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp index 71df49e32..e59c5719d 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp @@ -36,18 +36,19 @@ #include #include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolcutarc.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/varc.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogcutarc.h" -#include "../vgeometry/varc.h" -#include "../qmuparser/qmudef.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogcutarc.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -56,19 +57,21 @@ * @param parent parent widget */ DialogCutArc::DialogCutArc(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogCutArc), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCutArc), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogCutArc::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -77,15 +80,15 @@ DialogCutArc::DialogCutArc(const VContainer *data, quint32 toolId, QWidget *pare FillComboBoxArcs(ui->comboBoxArc); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutArc::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogCutArc::DeployFormulaTextEdit); connect(ui->comboBoxArc, &QComboBox::currentTextChanged, this, &DialogCutArc::ArcChanged); @@ -159,7 +162,7 @@ auto DialogCutArc::GetPointName() const -> QString */ void DialogCutArc::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -207,10 +210,28 @@ void DialogCutArc::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutArc::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutArc::ArcChanged() { - CurrentCurveLength(getArcId(), const_cast (data)); + CurrentCurveLength(getArcId(), const_cast(data)); } //--------------------------------------------------------------------------------------------------------------------- @@ -265,6 +286,15 @@ void DialogCutArc::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutArc::InitIcons() +{ + QString resource = QStringLiteral("icon"); + + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_4->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief setArcId set id of arc @@ -286,8 +316,8 @@ void DialogCutArc::setArcId(quint32 value) */ void DialogCutArc::SetFormula(const QString &value) { - m_formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_formula.length() > 80) { diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.h b/src/libs/vtools/dialogs/tools/dialogcutarc.h index 831d09e39..0c180f6f2 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.h +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.h @@ -90,6 +90,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -121,6 +122,8 @@ private: bool m_firstRelease{false}; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.ui b/src/libs/vtools/dialogs/tools/dialogcutarc.ui index b8c52e344..60c6bb9f8 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.ui +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp index 8544020a0..a94f3e531 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp @@ -36,18 +36,19 @@ #include #include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolcutspline.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vspline.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogcutspline.h" -#include "../vgeometry/vspline.h" -#include "../qmuparser/qmudef.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogcutspline.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -56,19 +57,21 @@ * @param parent parent widget */ DialogCutSpline::DialogCutSpline(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogCutSpline), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCutSpline), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogCutSpline::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -77,15 +80,15 @@ DialogCutSpline::DialogCutSpline(const VContainer *data, quint32 toolId, QWidget FillComboBoxSplines(ui->comboBoxSpline); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutSpline::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogCutSpline::DeployFormulaTextEdit); connect(ui->comboBoxSpline, &QComboBox::currentTextChanged, this, &DialogCutSpline::SplineChanged); @@ -128,8 +131,8 @@ void DialogCutSpline::SetPointName(const QString &value) */ void DialogCutSpline::SetFormula(const QString &value) { - m_formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (m_formula.length() > 80) @@ -167,7 +170,7 @@ void DialogCutSpline::setSplineId(quint32 value) */ void DialogCutSpline::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -215,10 +218,28 @@ void DialogCutSpline::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSpline::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSpline::SplineChanged() { - CurrentCurveLength(getSplineId(), const_cast (data)); + CurrentCurveLength(getSplineId(), const_cast(data)); } //--------------------------------------------------------------------------------------------------------------------- @@ -273,6 +294,15 @@ void DialogCutSpline::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSpline::InitIcons() +{ + QString resource = QStringLiteral("icon"); + + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_4->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSpline::DeployFormulaTextEdit() { diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.h b/src/libs/vtools/dialogs/tools/dialogcutspline.h index 6a0db64fe..df582c5d0 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.h +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.h @@ -89,6 +89,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -122,6 +123,8 @@ private: bool m_firstRelease{false}; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.ui b/src/libs/vtools/dialogs/tools/dialogcutspline.ui index be57637e1..55b83480c 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.ui +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp index 98b12fc38..ac604bceb 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp @@ -36,18 +36,19 @@ #include #include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolcutsplinepath.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vsplinepath.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogcutsplinepath.h" -#include "../vgeometry/vsplinepath.h" -#include "../qmuparser/qmudef.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogcutsplinepath.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -56,19 +57,21 @@ * @param parent parent widget */ DialogCutSplinePath::DialogCutSplinePath(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogCutSplinePath), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCutSplinePath), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogCutSplinePath::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -77,15 +80,15 @@ DialogCutSplinePath::DialogCutSplinePath(const VContainer *data, quint32 toolId, FillComboBoxSplinesPath(ui->comboBoxSplinePath); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutSplinePath::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogCutSplinePath::DeployFormulaTextEdit); connect(ui->comboBoxSplinePath, &QComboBox::currentTextChanged, this, &DialogCutSplinePath::SplinePathChanged); @@ -128,8 +131,8 @@ void DialogCutSplinePath::SetPointName(const QString &value) */ void DialogCutSplinePath::SetFormula(const QString &value) { - m_formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (m_formula.length() > 80) @@ -167,7 +170,7 @@ void DialogCutSplinePath::setSplinePathId(quint32 value) */ void DialogCutSplinePath::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -215,10 +218,28 @@ void DialogCutSplinePath::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSplinePath::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSplinePath::SplinePathChanged() { - CurrentCurveLength(getSplinePathId(), const_cast (data)); + CurrentCurveLength(getSplinePathId(), const_cast(data)); } //--------------------------------------------------------------------------------------------------------------------- @@ -273,6 +294,15 @@ void DialogCutSplinePath::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSplinePath::InitIcons() +{ + QString resource = QStringLiteral("icon"); + + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_4->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSplinePath::DeployFormulaTextEdit() { diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h index 1e96d581e..d5fea4538 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h @@ -89,6 +89,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -121,6 +122,8 @@ private: bool m_firstRelease{false}; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui index 01e0e0278..49048c140 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp b/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp index 698b1f98d..43d12ac6a 100644 --- a/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp @@ -28,7 +28,6 @@ #include "dialogellipticalarc.h" -#include #include #include #include @@ -36,20 +35,21 @@ #include #include #include -#include +#include -#include "../vpatterndb/vtranslatevars.h" #include "../../visualization/path/vistoolellipticalarc.h" #include "../../visualization/visualization.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vellipticalarc.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogellipticalarc.h" -#include "../vgeometry/vellipticalarc.h" -#include "../qmuparser/qmudef.h" #include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/global.h" #include "../vwidgets/vabstractmainwindow.h" +#include "ui_dialogellipticalarc.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -58,16 +58,18 @@ * @param parent parent widget */ DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogEllipticalArc), - m_timerRadius1(new QTimer(this)), - m_timerRadius2(new QTimer(this)), - m_timerF1(new QTimer(this)), - m_timerF2(new QTimer(this)), - m_timerRotationAngle(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogEllipticalArc), + m_timerRadius1(new QTimer(this)), + m_timerRadius2(new QTimer(this)), + m_timerF1(new QTimer(this)), + m_timerF2(new QTimer(this)), + m_timerRotationAngle(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + this->m_formulaBaseHeightRadius1 = ui->plainTextEditRadius1->height(); this->m_formulaBaseHeightRadius2 = ui->plainTextEditRadius2->height(); this->m_formulaBaseHeightF1 = ui->plainTextEditF1->height(); @@ -99,7 +101,9 @@ DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, quint32 toolId, FillComboBoxPoints(ui->comboBoxBasePoint); FillComboBoxLineColors(ui->comboBoxColor); - FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + CurvePenStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text))); connect(ui->toolButtonExprRadius1, &QPushButton::clicked, this, &DialogEllipticalArc::FXRadius1); connect(ui->toolButtonExprRadius2, &QPushButton::clicked, this, &DialogEllipticalArc::FXRadius2); @@ -107,37 +111,27 @@ DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, quint32 toolId, connect(ui->toolButtonExprF2, &QPushButton::clicked, this, &DialogEllipticalArc::FXF2); connect(ui->toolButtonExprRotationAngle, &QPushButton::clicked, this, &DialogEllipticalArc::FXRotationAngle); - connect(ui->plainTextEditRadius1, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerRadius1->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditRadius1, &QPlainTextEdit::textChanged, this, + [this]() { m_timerRadius1->start(formulaTimerTimeout); }); - connect(ui->plainTextEditRadius2, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerRadius2->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditRadius2, &QPlainTextEdit::textChanged, this, + [this]() { m_timerRadius2->start(formulaTimerTimeout); }); - connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerF1->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, + [this]() { m_timerF1->start(formulaTimerTimeout); }); - connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerF2->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, + [this]() { m_timerF2->start(formulaTimerTimeout); }); - connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerRotationAngle->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, this, + [this]() { m_timerRotationAngle->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLengthRadius1, &QPushButton::clicked, this, &DialogEllipticalArc::DeployRadius1TextEdit); connect(ui->pushButtonGrowLengthRadius2, &QPushButton::clicked, this, &DialogEllipticalArc::DeployRadius2TextEdit); connect(ui->pushButtonGrowLengthF1, &QPushButton::clicked, this, &DialogEllipticalArc::DeployF1TextEdit); connect(ui->pushButtonGrowLengthF2, &QPushButton::clicked, this, &DialogEllipticalArc::DeployF2TextEdit); - connect(ui->pushButtonGrowLengthRotationAngle, &QPushButton::clicked, - this, &DialogEllipticalArc::DeployRotationAngleTextEdit); + connect(ui->pushButtonGrowLengthRotationAngle, &QPushButton::clicked, this, + &DialogEllipticalArc::DeployRotationAngleTextEdit); connect(ui->lineEditAlias, &QLineEdit::textEdited, this, &DialogEllipticalArc::ValidateAlias); @@ -194,8 +188,8 @@ auto DialogEllipticalArc::GetRadius1() const -> QString */ void DialogEllipticalArc::SetRadius1(const QString &value) { - m_radius1 = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_radius1 = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_radius1.length() > 80) { @@ -227,8 +221,8 @@ auto DialogEllipticalArc::GetRadius2() const -> QString */ void DialogEllipticalArc::SetRadius2(const QString &value) { - m_radius2 = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_radius2 = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_radius2.length() > 80) { @@ -260,8 +254,8 @@ auto DialogEllipticalArc::GetF1() const -> QString */ void DialogEllipticalArc::SetF1(const QString &value) { - m_f1 = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_f1 = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_f1.length() > 80) { @@ -293,8 +287,8 @@ auto DialogEllipticalArc::GetF2() const -> QString */ void DialogEllipticalArc::SetF2(const QString &value) { - m_f2 = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_f2 = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_f2.length() > 80) { @@ -316,7 +310,8 @@ void DialogEllipticalArc::SetF2(const QString &value) */ auto DialogEllipticalArc::GetRotationAngle() const -> QString { - return VTranslateVars::TryFormulaFromUser(m_rotationAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VTranslateVars::TryFormulaFromUser(m_rotationAngle, + VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } //--------------------------------------------------------------------------------------------------------------------- @@ -326,8 +321,8 @@ auto DialogEllipticalArc::GetRotationAngle() const -> QString */ void DialogEllipticalArc::SetRotationAngle(const QString &value) { - m_rotationAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_rotationAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_rotationAngle.length() > 80) { @@ -454,6 +449,26 @@ void DialogEllipticalArc::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEllipticalArc::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprRadius1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprRadius2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprF1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprF2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprRotationAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_1->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_7->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_8->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_9->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_12->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::FXRadius1() { @@ -593,8 +608,8 @@ void DialogEllipticalArc::ShowDialog(bool click) if (m_stage == 0) // radius 1 { - //Radius of point circle, but little bigger. Need to handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need to handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } @@ -611,8 +626,8 @@ void DialogEllipticalArc::ShowDialog(bool click) QPointF p = VGObject::ClosestPoint(radius2Line, scene->getScenePos()); line = QLineF(static_cast(*center), p); - //Radius of point circle, but little bigger. Need to handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need to handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } @@ -656,7 +671,7 @@ void DialogEllipticalArc::ShowDialog(bool click) */ void DialogEllipticalArc::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -724,6 +739,24 @@ void DialogEllipticalArc::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEllipticalArc::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::ValidateAlias() { diff --git a/src/libs/vtools/dialogs/tools/dialogellipticalarc.h b/src/libs/vtools/dialogs/tools/dialogellipticalarc.h index 2c6c9e345..f4a6be789 100644 --- a/src/libs/vtools/dialogs/tools/dialogellipticalarc.h +++ b/src/libs/vtools/dialogs/tools/dialogellipticalarc.h @@ -109,6 +109,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -188,6 +189,8 @@ private: void EvalAngles(); void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogellipticalarc.ui b/src/libs/vtools/dialogs/tools/dialogellipticalarc.ui index ccbace2bd..d145f15bf 100644 --- a/src/libs/vtools/dialogs/tools/dialogellipticalarc.ui +++ b/src/libs/vtools/dialogs/tools/dialogellipticalarc.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -285,11 +285,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -305,7 +305,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -471,11 +471,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -491,7 +491,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -657,11 +657,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -677,7 +677,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -843,11 +843,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -863,7 +863,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index 010c7f485..adc699fa8 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -40,19 +40,20 @@ #include #include -#include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" -#include "../vpatterndb/vtranslatevars.h" -#include "../vwidgets/vmaingraphicsscene.h" -#include "../vwidgets/vabstractmainwindow.h" #include "../../visualization/line/vistoolendline.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogendline.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/global.h" +#include "../vwidgets/vabstractmainwindow.h" +#include "../vwidgets/vmaingraphicsscene.h" +#include "ui_dialogendline.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -61,29 +62,31 @@ * @param parent parent widget */ DialogEndLine::DialogEndLine(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogEndLine), - formulaLength(), - formulaAngle(), - formulaBaseHeight(0), - formulaBaseHeightAngle(0), - pointName(), - m_firstRelease(false), - timerFormulaLength(new QTimer(this)), - timerFormulaAngle(new QTimer(this)), - flagFormula(false), - flagError(false), - flagName(true) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogEndLine), + formulaLength(), + formulaAngle(), + formulaBaseHeight(0), + formulaBaseHeightAngle(0), + pointName(), + m_firstRelease(false), + timerFormulaLength(new QTimer(this)), + timerFormulaAngle(new QTimer(this)), + flagFormula(false), + flagError(false), + flagName(true) { ui->setupUi(this); + InitIcons(); + timerFormulaLength->setSingleShot(true); timerFormulaAngle->setSingleShot(true); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->formulaBaseHeight = ui->plainTextEditFormula->height(); this->formulaBaseHeightAngle = ui->plainTextEditAngle->height(); @@ -94,27 +97,25 @@ DialogEndLine::DialogEndLine(const VContainer *data, quint32 toolId, QWidget *pa flagFormula = false; FillComboBoxPoints(ui->comboBoxBasePoint); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogEndLine::FXLength); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogEndLine::FXAngle); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); - CheckState(); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - timerFormulaLength->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { timerFormulaLength->start(formulaTimerTimeout); }); - connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, [this]() - { - timerFormulaAngle->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, + [this]() { timerFormulaAngle->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogEndLine::DeployFormulaTextEdit); connect(ui->pushButtonGrowLengthAngle, &QPushButton::clicked, this, &DialogEndLine::DeployAngleTextEdit); @@ -207,7 +208,7 @@ void DialogEndLine::FXLength() */ void DialogEndLine::ChosenObject(quint32 id, const SceneObject &type) { - if (not prepare)// After first choose we ignore all objects + if (not prepare) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -260,8 +261,8 @@ void DialogEndLine::SetTypeLine(const QString &value) */ void DialogEndLine::SetFormula(const QString &value) { - formulaLength = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaLength = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (formulaLength.length() > 80) @@ -284,8 +285,8 @@ void DialogEndLine::SetFormula(const QString &value) */ void DialogEndLine::SetAngle(const QString &value) { - formulaAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (formulaAngle.length() > 80) @@ -352,15 +353,15 @@ void DialogEndLine::ShowDialog(bool click) const QSharedPointer point = data->GeometricObject(GetBasePointId()); QLineF line = QLineF(static_cast(*point), scene->getScenePos()); - //Radius of point circle, but little bigger. Need handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } } auto *line = qobject_cast(vis); SCASSERT(line != nullptr) - SetAngle(line->Angle());//Show in dialog angle what user choose + SetAngle(line->Angle()); // Show in dialog angle what user choose SetFormula(line->Length()); FinishCreating(); @@ -398,6 +399,24 @@ void DialogEndLine::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEndLine::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogEndLine::FinishCreating() { @@ -407,6 +426,20 @@ void DialogEndLine::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEndLine::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_4->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_5->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- DialogEndLine::~DialogEndLine() { @@ -436,7 +469,8 @@ auto DialogEndLine::GetTypeLine() const -> QString */ auto DialogEndLine::GetFormula() const -> QString { - return VTranslateVars::TryFormulaFromUser(formulaLength, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VTranslateVars::TryFormulaFromUser(formulaLength, + VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogendline.h b/src/libs/vtools/dialogs/tools/dialogendline.h index f59f575bc..b6125e5ff 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.h +++ b/src/libs/vtools/dialogs/tools/dialogendline.h @@ -96,6 +96,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -126,6 +127,8 @@ private: bool flagName; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogendline.ui b/src/libs/vtools/dialogs/tools/dialogendline.ui index e27cb3fe2..0102dce13 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.ui +++ b/src/libs/vtools/dialogs/tools/dialogendline.ui @@ -117,11 +117,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -143,7 +143,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -312,11 +312,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -338,7 +338,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp index 8f6402450..dff10cee4 100644 --- a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp @@ -42,32 +42,31 @@ #include #include #include -#include #include -#include "../../visualization/visualization.h" #include "../../visualization/line/operation/vistoolflippingbyaxis.h" +#include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../ifc/xml/vdomdocument.h" #include "../qmuparser/qmudef.h" #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) +#include "../../tools/drawTools/operation/vabstractoperation.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsview.h" #include "ui_dialogflippingbyaxis.h" -#include "../../tools/drawTools/operation/vabstractoperation.h" //--------------------------------------------------------------------------------------------------------------------- DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogFlippingByAxis), - stage1(true), - m_suffix(), - flagName(true), - flagGroupName(true), - flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogFlippingByAxis), + stage1(true), + m_suffix(), + flagName(true), + flagGroupName(true), + flagError(false) { ui->setupUi(this); @@ -77,15 +76,17 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolI FillComboBoxPoints(ui->comboBoxOriginPoint); FillComboBoxAxisType(ui->comboBoxAxisType); - FillComboBoxTypeLine(ui->comboBoxPenStyle, OperationLineStylesPics(), TypeLineDefault); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + OperationLineStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text)), + TypeLineDefault); FillComboBoxLineColors(ui->comboBoxColor, VAbstractOperation::OperationColorsList()); ui->comboBoxOriginPoint->setCurrentIndex(-1); connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByAxis::SuffixChanged); connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogFlippingByAxis::GroupNameChanged); - connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged, - this, &DialogFlippingByAxis::PointChanged); + connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged, this, &DialogFlippingByAxis::PointChanged); connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogFlippingByAxis::ShowSourceDetails); connect(ui->lineEditAlias, &QLineEdit::textEdited, this, &DialogFlippingByAxis::AliasChanged); @@ -94,7 +95,6 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolI connect(ui->comboBoxColor, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogFlippingByAxis::ColorChanged); - vis = new VisToolFlippingByAxis(data); ui->tabWidget->setCurrentIndex(0); @@ -211,7 +211,7 @@ void DialogFlippingByAxis::ShowDialog(bool click) stage1 = false; VMainGraphicsScene *scene = - qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); + qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); SCASSERT(scene != nullptr) scene->clearSelection(); @@ -265,7 +265,7 @@ void DialogFlippingByAxis::SetSourceObjects(const QVector &value) //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByAxis::ChosenObject(quint32 id, const SceneObject &type) { - if (not stage1 && not prepare)// After first choose we ignore all objects + if (not stage1 && not prepare) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -321,7 +321,7 @@ void DialogFlippingByAxis::SelectedObject(bool selected, quint32 object, quint32 //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByAxis::SuffixChanged() { - QLineEdit* edit = qobject_cast(sender()); + QLineEdit *edit = qobject_cast(sender()); if (edit) { const QString suffix = edit->text(); @@ -361,7 +361,7 @@ void DialogFlippingByAxis::SuffixChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByAxis::GroupNameChanged() { - QLineEdit* edit = qobject_cast(sender()); + QLineEdit *edit = qobject_cast(sender()); if (edit) { const QString name = edit->text(); @@ -445,7 +445,8 @@ void DialogFlippingByAxis::ShowSourceDetails(int row) { const QSharedPointer curve = data->GeometricObject(sourceItem.id); int index = ui->comboBoxColor->currentIndex(); - ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->iconSize().height(), curve->GetColor())); + ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->palette().color(QPalette::Text), + ui->comboBoxColor->iconSize().height(), curve->GetColor())); } ui->comboBoxPenStyle->setEnabled(true); @@ -526,7 +527,7 @@ void DialogFlippingByAxis::SaveData() sourceObjects.clear(); sourceObjects.reserve(ui->listWidget->count()); - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { @@ -620,7 +621,7 @@ void DialogFlippingByAxis::FillSourceList() //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByAxis::ValidateSourceAliases() { - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp b/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp index 242f62c69..fcdf6a3b9 100644 --- a/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp @@ -42,37 +42,36 @@ #include #include #include -#include #include -#include "../../visualization/visualization.h" #include "../../visualization/line/operation/vistoolflippingbyline.h" +#include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../ifc/xml/vdomdocument.h" #include "../qmuparser/qmudef.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/compatibility.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "../vmisc/compatibility.h" #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) +#include "../../tools/drawTools/operation/vabstractoperation.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/vabstractmainwindow.h" #include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsview.h" #include "ui_dialogflippingbyline.h" -#include "../../tools/drawTools/operation/vabstractoperation.h" //--------------------------------------------------------------------------------------------------------------------- DialogFlippingByLine::DialogFlippingByLine(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogFlippingByLine), - stage1(true), - m_suffix(), - flagName(true), - flagGroupName(true), - flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogFlippingByLine), + stage1(true), + m_suffix(), + flagName(true), + flagGroupName(true), + flagError(false) { ui->setupUi(this); @@ -82,15 +81,16 @@ DialogFlippingByLine::DialogFlippingByLine(const VContainer *data, quint32 toolI FillComboBoxPoints(ui->comboBoxFirstLinePoint); FillComboBoxPoints(ui->comboBoxSecondLinePoint); - FillComboBoxTypeLine(ui->comboBoxPenStyle, OperationLineStylesPics(), TypeLineDefault); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + OperationLineStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text)), + TypeLineDefault); FillComboBoxLineColors(ui->comboBoxColor, VAbstractOperation::OperationColorsList()); connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByLine::SuffixChanged); connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogFlippingByLine::GroupNameChanged); - connect(ui->comboBoxFirstLinePoint, &QComboBox::currentTextChanged, - this, &DialogFlippingByLine::PointChanged); - connect(ui->comboBoxSecondLinePoint, &QComboBox::currentTextChanged, - this, &DialogFlippingByLine::PointChanged); + connect(ui->comboBoxFirstLinePoint, &QComboBox::currentTextChanged, this, &DialogFlippingByLine::PointChanged); + connect(ui->comboBoxSecondLinePoint, &QComboBox::currentTextChanged, this, &DialogFlippingByLine::PointChanged); connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogFlippingByLine::ShowSourceDetails); connect(ui->lineEditAlias, &QLineEdit::textEdited, this, &DialogFlippingByLine::AliasChanged); @@ -210,7 +210,7 @@ void DialogFlippingByLine::ShowDialog(bool click) stage1 = false; VMainGraphicsScene *scene = - qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); + qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); SCASSERT(scene != nullptr) scene->clearSelection(); @@ -263,7 +263,7 @@ void DialogFlippingByLine::SetSourceObjects(const QVector &value) //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByLine::ChosenObject(quint32 id, const SceneObject &type) { - if (not stage1 && not prepare)// After first choose we ignore all objects + if (not stage1 && not prepare) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -348,7 +348,7 @@ void DialogFlippingByLine::SelectedObject(bool selected, quint32 object, quint32 //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByLine::SuffixChanged() { - QLineEdit* edit = qobject_cast(sender()); + QLineEdit *edit = qobject_cast(sender()); if (edit) { const QString suffix = edit->text(); @@ -388,7 +388,7 @@ void DialogFlippingByLine::SuffixChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByLine::GroupNameChanged() { - QLineEdit* edit = qobject_cast(sender()); + QLineEdit *edit = qobject_cast(sender()); if (edit) { const QString name = edit->text(); @@ -461,7 +461,8 @@ void DialogFlippingByLine::ShowSourceDetails(int row) SetValue(ui->comboBoxPenStyle, sourceItem.penStyle, TypeLineDefault); if (sourceItem.penStyle.isEmpty() || sourceItem.penStyle == TypeLineDefault) - {; + { + ; int index = ui->comboBoxPenStyle->currentIndex(); ui->comboBoxPenStyle->setItemText(index, '<' + tr("Default") + '>'); } @@ -472,7 +473,8 @@ void DialogFlippingByLine::ShowSourceDetails(int row) { const QSharedPointer curve = data->GeometricObject(sourceItem.id); int index = ui->comboBoxColor->currentIndex(); - ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->iconSize().height(), curve->GetColor())); + ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->palette().color(QPalette::Text), + ui->comboBoxColor->iconSize().height(), curve->GetColor())); } ui->comboBoxPenStyle->setEnabled(true); @@ -553,7 +555,7 @@ void DialogFlippingByLine::SaveData() sourceObjects.clear(); sourceObjects.reserve(ui->listWidget->count()); - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { @@ -593,7 +595,7 @@ void DialogFlippingByLine::PointChanged() quint32 id1 = getCurrentObjectId(ui->comboBoxFirstLinePoint); auto obj1 = std::find_if(sourceObjects.begin(), sourceObjects.end(), - [id1](const SourceItem &sItem) { return sItem.id == id1; }); + [id1](const SourceItem &sItem) { return sItem.id == id1; }); quint32 id2 = getCurrentObjectId(ui->comboBoxSecondLinePoint); auto obj2 = std::find_if(sourceObjects.begin(), sourceObjects.end(), @@ -658,7 +660,7 @@ void DialogFlippingByLine::FillSourceList() //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByLine::ValidateSourceAliases() { - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { diff --git a/src/libs/vtools/dialogs/tools/dialogheight.cpp b/src/libs/vtools/dialogs/tools/dialogheight.cpp index cfd221539..4e77c6d0b 100644 --- a/src/libs/vtools/dialogs/tools/dialogheight.cpp +++ b/src/libs/vtools/dialogs/tools/dialogheight.cpp @@ -40,9 +40,9 @@ #include #include +#include "../../visualization/line/visline.h" #include "../../visualization/line/vistoolheight.h" #include "../../visualization/visualization.h" -#include "../../visualization/line/visline.h" #include "../ifc/xml/vabstractpattern.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" @@ -57,34 +57,34 @@ * @param parent parent widget */ DialogHeight::DialogHeight(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogHeight) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogHeight) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); InitOkCancelApply(ui); FillComboBoxPoints(ui->comboBoxBasePoint); FillComboBoxPoints(ui->comboBoxP1Line); FillComboBoxPoints(ui->comboBoxP2Line); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxLineColors(ui->comboBoxLineColor); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->comboBoxBasePoint, &QComboBox::currentTextChanged, - this, &DialogHeight::PointNameChanged); - connect(ui->comboBoxP1Line, &QComboBox::currentTextChanged, - this, &DialogHeight::PointNameChanged); - connect(ui->comboBoxP2Line, &QComboBox::currentTextChanged, - this, &DialogHeight::PointNameChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->comboBoxBasePoint, &QComboBox::currentTextChanged, this, &DialogHeight::PointNameChanged); + connect(ui->comboBoxP1Line, &QComboBox::currentTextChanged, this, &DialogHeight::PointNameChanged); + connect(ui->comboBoxP2Line, &QComboBox::currentTextChanged, this, &DialogHeight::PointNameChanged); vis = new VisToolHeight(data); @@ -188,7 +188,7 @@ void DialogHeight::SetLineColor(const QString &value) */ void DialogHeight::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -236,7 +236,7 @@ void DialogHeight::ChosenObject(quint32 id, const SceneObject &type) } } } - break; + break; default: break; } diff --git a/src/libs/vtools/dialogs/tools/dialogline.cpp b/src/libs/vtools/dialogs/tools/dialogline.cpp index a1a5ac95f..fc6af1992 100644 --- a/src/libs/vtools/dialogs/tools/dialogline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogline.cpp @@ -36,8 +36,8 @@ #include #include -#include "../../visualization/visualization.h" #include "../../visualization/line/vistoolline.h" +#include "../../visualization/visualization.h" #include "../ifc/ifcdef.h" #include "dialogtool.h" #include "ui_dialogline.h" @@ -49,9 +49,9 @@ * @param parent parent widget */ DialogLine::DialogLine(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogLine), - flagError(true) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogLine), + flagError(true) { ui->setupUi(this); InitOkCancelApply(ui); @@ -60,16 +60,15 @@ DialogLine::DialogLine(const VContainer *data, quint32 toolId, QWidget *parent) FillComboBoxPoints(ui->comboBoxSecondPoint); FillComboBoxLineColors(ui->comboBoxLineColor); - QMap stylesPics = LineStylesPics(); - stylesPics.remove(TypeLineNone);// Prevent hiding line + QMap stylesPics = LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text)); + stylesPics.remove(TypeLineNone); // Prevent hiding line FillComboBoxTypeLine(ui->comboBoxLineType, stylesPics); number = 0; - connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, - this, &DialogLine::PointNameChanged); - connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, - this, &DialogLine::PointNameChanged); + connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, this, &DialogLine::PointNameChanged); + connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, this, &DialogLine::PointNameChanged); vis = new VisToolLine(data); @@ -179,7 +178,7 @@ void DialogLine::SaveData() */ void DialogLine::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare == false)// After first choose we ignore all objects + if (prepare == false) // After first choose we ignore all objects { if (type == SceneObject::Point) { diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index 3e41f9a98..f2a4466b5 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -44,41 +44,44 @@ #include #include -#include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" -#include "../vpatterndb/vtranslatevars.h" -#include "../vwidgets/vmaingraphicsscene.h" -#include "../vwidgets/vabstractmainwindow.h" -#include "../vwidgets/global.h" #include "../../visualization/line/vistoollineintersectaxis.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" +#include "../vwidgets/global.h" +#include "../vwidgets/vabstractmainwindow.h" +#include "../vwidgets/vmaingraphicsscene.h" #include "ui_dialoglineintersectaxis.h" //--------------------------------------------------------------------------------------------------------------------- DialogLineIntersectAxis::DialogLineIntersectAxis(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogLineIntersectAxis), - formulaAngle(), - formulaBaseHeightAngle(0), - pointName(), - m_firstRelease(false), - timerFormula(new QTimer(this)), - flagFormula(false), - flagError(true), - flagName(true) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogLineIntersectAxis), + formulaAngle(), + formulaBaseHeightAngle(0), + pointName(), + m_firstRelease(false), + timerFormula(new QTimer(this)), + flagFormula(false), + flagError(true), + flagName(true) { ui->setupUi(this); + InitIcons(); + timerFormula->setSingleShot(true); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->formulaBaseHeightAngle = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -87,27 +90,26 @@ DialogLineIntersectAxis::DialogLineIntersectAxis(const VContainer *data, quint32 FillComboBoxPoints(ui->comboBoxAxisPoint); FillComboBoxPoints(ui->comboBoxFirstLinePoint); FillComboBoxPoints(ui->comboBoxSecondLinePoint); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogLineIntersectAxis::FXAngle); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLengthAngle, &QPushButton::clicked, this, &DialogLineIntersectAxis::DeployAngleTextEdit); connect(timerFormula, &QTimer::timeout, this, &DialogLineIntersectAxis::EvalAngle); - connect(ui->comboBoxFirstLinePoint, &QComboBox::currentTextChanged, - this, &DialogLineIntersectAxis::PointNameChanged); - connect(ui->comboBoxSecondLinePoint, &QComboBox::currentTextChanged, - this, &DialogLineIntersectAxis::PointNameChanged); - connect(ui->comboBoxAxisPoint, &QComboBox::currentTextChanged, - this, &DialogLineIntersectAxis::PointNameChanged); + connect(ui->comboBoxFirstLinePoint, &QComboBox::currentTextChanged, this, + &DialogLineIntersectAxis::PointNameChanged); + connect(ui->comboBoxSecondLinePoint, &QComboBox::currentTextChanged, this, + &DialogLineIntersectAxis::PointNameChanged); + connect(ui->comboBoxAxisPoint, &QComboBox::currentTextChanged, this, &DialogLineIntersectAxis::PointNameChanged); vis = new VisToolLineIntersectAxis(data); @@ -156,8 +158,8 @@ auto DialogLineIntersectAxis::GetAngle() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogLineIntersectAxis::SetAngle(const QString &value) { - formulaAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (formulaAngle.length() > 80) @@ -254,8 +256,8 @@ void DialogLineIntersectAxis::ShowDialog(bool click) const QSharedPointer point = data->GeometricObject(GetBasePointId()); QLineF line = QLineF(static_cast(*point), scene->getScenePos()); - //Radius of point circle, but little bigger. Need handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } @@ -263,18 +265,18 @@ void DialogLineIntersectAxis::ShowDialog(bool click) auto *line = qobject_cast(vis); SCASSERT(line != nullptr) - SetAngle(line->Angle());//Show in dialog angle what user choose + SetAngle(line->Angle()); // Show in dialog angle what user choose line->SetMode(Mode::Show); emit ToolTip(QString()); - DialogAccepted();// Just set default values and don't show dialog + DialogAccepted(); // Just set default values and don't show dialog } } //--------------------------------------------------------------------------------------------------------------------- void DialogLineIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare == false)// After first choose we ignore all objects + if (prepare == false) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -329,7 +331,7 @@ void DialogLineIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) } } } - break; + break; default: break; } @@ -426,6 +428,33 @@ void DialogLineIntersectAxis::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogLineIntersectAxis::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogLineIntersectAxis::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogLineIntersectAxis::SetNotes(const QString ¬es) { diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h index bdf086139..a73bb5417 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h @@ -90,6 +90,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -111,6 +112,8 @@ private: /** @brief number number of handled objects */ qint32 number{0}; + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.ui b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.ui index 1ca3ed8cb..d16958a32 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.ui +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogmove.cpp b/src/libs/vtools/dialogs/tools/dialogmove.cpp index 85b523930..3fd40ba62 100644 --- a/src/libs/vtools/dialogs/tools/dialogmove.cpp +++ b/src/libs/vtools/dialogs/tools/dialogmove.cpp @@ -45,55 +45,55 @@ #include #include #include -#include #include -#include "../../visualization/visualization.h" +#include "../../tools/drawTools/operation/vabstractoperation.h" #include "../../visualization/line/operation/vistoolmove.h" +#include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" -#include "../ifc/xml/vdomdocument.h" #include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" -#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "../vmisc/compatibility.h" -#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../vmisc/backport/qoverload.h" -#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" #include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsview.h" #include "ui_dialogmove.h" -#include "../../tools/drawTools/operation/vabstractoperation.h" + +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) +#include "../vmisc/backport/qoverload.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) //--------------------------------------------------------------------------------------------------------------------- DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogMove), - timerAngle(new QTimer(this)), - timerRotationAngle(new QTimer(this)), - timerLength(new QTimer(this)), - formulaAngle(), - formulaRotationAngle(), - formulaLength(), - formulaBaseHeightAngle(0), - formulaBaseHeightRotationAngle(0), - formulaBaseHeightLength(0), - stage1(true), - stage2(false), - m_suffix(), - optionalRotationOrigin(false), - flagAngle(false), - flagRotationAngle(false), - flagLength(false), - flagName(true), - flagGroupName(true) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogMove), + timerAngle(new QTimer(this)), + timerRotationAngle(new QTimer(this)), + timerLength(new QTimer(this)), + formulaAngle(), + formulaRotationAngle(), + formulaLength(), + formulaBaseHeightAngle(0), + formulaBaseHeightRotationAngle(0), + formulaBaseHeightLength(0), + stage1(true), + stage2(false), + m_suffix(), + optionalRotationOrigin(false), + flagAngle(false), + flagRotationAngle(false), + flagLength(false), + flagName(true), + flagGroupName(true) { ui->setupUi(this); + InitIcons(); + this->formulaBaseHeightAngle = ui->plainTextEditAngle->height(); ui->plainTextEditAngle->installEventFilter(this); @@ -116,7 +116,10 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent) InitOkCancelApply(ui); - FillComboBoxTypeLine(ui->comboBoxPenStyle, OperationLineStylesPics(), TypeLineDefault); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + OperationLineStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text)), + TypeLineDefault); FillComboBoxLineColors(ui->comboBoxColor, VAbstractOperation::OperationColorsList()); FillComboBoxPoints(ui->comboBoxRotationOriginPoint); @@ -129,20 +132,14 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent) connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogMove::FXAngle); connect(ui->toolButtonExprRotationAngle, &QPushButton::clicked, this, &DialogMove::FXRotationAngle); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogMove::FXLength); - connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, [this]() - { - timerAngle->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, + [this]() { timerAngle->start(formulaTimerTimeout); }); - connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, this, [this]() - { - timerRotationAngle->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, this, + [this]() { timerRotationAngle->start(formulaTimerTimeout); }); - connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, [this]() - { - timerLength->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, + [this]() { timerLength->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowAngle, &QPushButton::clicked, this, &DialogMove::DeployAngleTextEdit); connect(ui->pushButtonGrowRotationAngle, &QPushButton::clicked, this, &DialogMove::DeployRotationAngleTextEdit); @@ -177,8 +174,8 @@ auto DialogMove::GetAngle() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogMove::SetAngle(const QString &value) { - formulaAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (formulaAngle.length() > 80) { @@ -186,7 +183,7 @@ void DialogMove::SetAngle(const QString &value) } ui->plainTextEditAngle->setPlainText(formulaAngle); - VisToolMove *operation = qobject_cast(vis); + auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) operation->SetAngle(formulaAngle); @@ -196,14 +193,15 @@ void DialogMove::SetAngle(const QString &value) //--------------------------------------------------------------------------------------------------------------------- auto DialogMove::GetLength() const -> QString { - return VTranslateVars::TryFormulaFromUser(formulaLength, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VTranslateVars::TryFormulaFromUser(formulaLength, + VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } //--------------------------------------------------------------------------------------------------------------------- void DialogMove::SetLength(const QString &value) { - formulaLength = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaLength = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (formulaLength.length() > 80) { @@ -211,7 +209,7 @@ void DialogMove::SetLength(const QString &value) } ui->plainTextEditLength->setPlainText(formulaLength); - VisToolMove *operation = qobject_cast(vis); + auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) operation->SetLength(formulaLength); @@ -221,14 +219,15 @@ void DialogMove::SetLength(const QString &value) //--------------------------------------------------------------------------------------------------------------------- auto DialogMove::GetRotationAngle() const -> QString { - return VTranslateVars::TryFormulaFromUser(formulaRotationAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VTranslateVars::TryFormulaFromUser(formulaRotationAngle, + VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } //--------------------------------------------------------------------------------------------------------------------- void DialogMove::SetRotationAngle(const QString &value) { - formulaRotationAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaRotationAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (formulaRotationAngle.length() > 80) { @@ -236,7 +235,7 @@ void DialogMove::SetRotationAngle(const QString &value) } ui->plainTextEditRotationAngle->setPlainText(formulaRotationAngle); - VisToolMove *operation = qobject_cast(vis); + auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) operation->SetRotationAngle(formulaRotationAngle); @@ -266,7 +265,7 @@ auto DialogMove::GetRotationOrigPointId() const -> quint32 void DialogMove::SetRotationOrigPointId(const quint32 &value) { ChangeCurrentData(ui->comboBoxRotationOriginPoint, value); - VisToolMove *operation = qobject_cast(vis); + auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) operation->SetRotationOriginPointId(value); } @@ -361,10 +360,10 @@ void DialogMove::ShowDialog(bool click) if (operation->LengthValue() > 0) { - formulaAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(operation->Angle(), VAbstractApplication::VApp()->Settings()->GetOsSeparator()); - formulaLength = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(operation->Length(), VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + operation->Angle(), VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaLength = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + operation->Length(), VAbstractApplication::VApp()->Settings()->GetOsSeparator()); operation->SetAngle(formulaAngle); operation->SetLength(formulaLength); operation->RefreshGeometry(); @@ -389,10 +388,10 @@ void DialogMove::ShowDialog(bool click) } else { - SetAngle(VAbstractApplication::VApp()->TrVars() - ->FormulaFromUser(formulaAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); - SetLength(VAbstractApplication::VApp()->TrVars() - ->FormulaFromUser(formulaLength, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + SetAngle(VAbstractApplication::VApp()->TrVars()->FormulaFromUser( + formulaAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + SetLength(VAbstractApplication::VApp()->TrVars()->FormulaFromUser( + formulaLength, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); SetRotationAngle(operation->RotationAngle()); setModal(true); emit ToolTip(QString()); @@ -407,7 +406,7 @@ void DialogMove::ShowDialog(bool click) //--------------------------------------------------------------------------------------------------------------------- void DialogMove::ChosenObject(quint32 id, const SceneObject &type) { - if (not stage1 && stage2 && prepare)// After first choose we ignore all objects + if (not stage1 && stage2 && prepare) // After first choose we ignore all objects { if (type == SceneObject::Point && QGuiApplication::keyboardModifiers() == Qt::ControlModifier) { @@ -434,7 +433,7 @@ void DialogMove::SelectedObject(bool selected, quint32 object, quint32 tool) [object](const SourceItem &sItem) { return sItem.id == object; }); if (selected) { - if (obj == sourceObjects.cend()) + if (obj == sourceObjects.end()) { SourceItem item; item.id = object; @@ -443,7 +442,7 @@ void DialogMove::SelectedObject(bool selected, quint32 object, quint32 tool) } else { - if (obj != sourceObjects.cend()) + if (obj != sourceObjects.end()) { sourceObjects.erase(obj); } @@ -460,7 +459,8 @@ void DialogMove::DeployAngleTextEdit() //--------------------------------------------------------------------------------------------------------------------- void DialogMove::DeployRotationAngleTextEdit() { - DeployFormula(this, ui->plainTextEditRotationAngle, ui->pushButtonGrowRotationAngle, formulaBaseHeightRotationAngle); + DeployFormula(this, ui->plainTextEditRotationAngle, ui->pushButtonGrowRotationAngle, + formulaBaseHeightRotationAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -472,7 +472,7 @@ void DialogMove::DeployLengthTextEdit() //--------------------------------------------------------------------------------------------------------------------- void DialogMove::FXAngle() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit angle")); dialog->SetFormula(GetAngle()); dialog->setPostfix(degreeSymbol); @@ -486,7 +486,7 @@ void DialogMove::FXAngle() //--------------------------------------------------------------------------------------------------------------------- void DialogMove::FXRotationAngle() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit rotation angle")); dialog->SetFormula(GetRotationAngle()); dialog->setPostfix(degreeSymbol); @@ -500,7 +500,7 @@ void DialogMove::FXRotationAngle() //--------------------------------------------------------------------------------------------------------------------- void DialogMove::FXLength() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit length")); dialog->SetFormula(GetLength()); dialog->setPostfix(UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true)); @@ -514,7 +514,7 @@ void DialogMove::FXLength() //--------------------------------------------------------------------------------------------------------------------- void DialogMove::SuffixChanged() { - QLineEdit* edit = qobject_cast(sender()); + auto *edit = qobject_cast(sender()); if (edit) { const QString suffix = edit->text(); @@ -531,7 +531,7 @@ void DialogMove::SuffixChanged() { QRegularExpression rx(NameRegExp()); const QStringList uniqueNames = data->AllUniqueNames(); - for (auto &uniqueName : uniqueNames) + for (const auto &uniqueName : uniqueNames) { const QString name = uniqueName + suffix; if (not rx.match(name).hasMatch() || not data->IsUnique(name)) @@ -554,7 +554,7 @@ void DialogMove::SuffixChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogMove::GroupNameChanged() { - QLineEdit* edit = qobject_cast(sender()); + auto *edit = qobject_cast(sender()); if (edit) { const QString name = edit->text(); @@ -639,7 +639,8 @@ void DialogMove::ShowSourceDetails(int row) { const QSharedPointer curve = data->GeometricObject(sourceItem.id); int index = ui->comboBoxColor->currentIndex(); - ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->iconSize().height(), curve->GetColor())); + ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->palette().color(QPalette::Text), + ui->comboBoxColor->iconSize().height(), curve->GetColor())); } ui->comboBoxPenStyle->setEnabled(true); @@ -723,7 +724,7 @@ void DialogMove::SaveData() sourceObjects.clear(); sourceObjects.reserve(ui->listWidget->count()); - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { @@ -732,7 +733,7 @@ void DialogMove::SaveData() } } - VisToolMove *operation = qobject_cast(vis); + auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) operation->SetObjects(SourceToObjects(sourceObjects)); @@ -776,7 +777,7 @@ void DialogMove::SetSourceObjects(const QVector &value) sourceObjects = value; FillSourceList(); - VisToolMove *operation = qobject_cast(vis); + auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) operation->SetObjects(SourceToObjects(sourceObjects)); } @@ -870,7 +871,7 @@ void DialogMove::FillSourceList() //--------------------------------------------------------------------------------------------------------------------- void DialogMove::ValidateSourceAliases() { - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { @@ -913,6 +914,22 @@ void DialogMove::SetAliasValid(quint32 id, bool valid) } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogMove::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprRotationAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_2->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_4->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogMove::SetNotes(const QString ¬es) { diff --git a/src/libs/vtools/dialogs/tools/dialogmove.h b/src/libs/vtools/dialogs/tools/dialogmove.h index cd8a92f35..c04b8f51c 100644 --- a/src/libs/vtools/dialogs/tools/dialogmove.h +++ b/src/libs/vtools/dialogs/tools/dialogmove.h @@ -163,6 +163,8 @@ private: void ValidateSourceAliases(); void SetAliasValid(quint32 id, bool valid); + + void InitIcons(); }; #endif // DIALOGMOVING_H diff --git a/src/libs/vtools/dialogs/tools/dialogmove.ui b/src/libs/vtools/dialogs/tools/dialogmove.ui index 0b49b2d83..55244831f 100644 --- a/src/libs/vtools/dialogs/tools/dialogmove.ui +++ b/src/libs/vtools/dialogs/tools/dialogmove.ui @@ -187,11 +187,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -207,7 +207,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -367,11 +367,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -387,7 +387,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -547,11 +547,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -567,7 +567,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialognormal.cpp b/src/libs/vtools/dialogs/tools/dialognormal.cpp index 797758115..3abdfd120 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.cpp +++ b/src/libs/vtools/dialogs/tools/dialognormal.cpp @@ -41,17 +41,18 @@ #include #include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" #include "../../visualization/line/vistoolnormal.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialognormal.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" -#include "../vgeometry/vpointf.h" +#include "ui_dialognormal.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -60,19 +61,21 @@ * @param parent parent widget */ DialogNormal::DialogNormal(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogNormal), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogNormal), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogNormal::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -80,34 +83,36 @@ DialogNormal::DialogNormal(const VContainer *data, quint32 toolId, QWidget *pare FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxLineColors(ui->comboBoxLineColor); - connect(ui->toolButtonArrowDown, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(270);}); - connect(ui->toolButtonArrowUp, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(90);}); - connect(ui->toolButtonArrowLeft, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(180);}); - connect(ui->toolButtonArrowRight, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(0);}); - connect(ui->toolButtonArrowLeftUp, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(135);}); - connect(ui->toolButtonArrowLeftDown, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(225);}); - connect(ui->toolButtonArrowRightUp, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(45);}); + connect(ui->toolButtonArrowDown, &QPushButton::clicked, this, [this]() { ui->doubleSpinBoxAngle->setValue(270); }); + connect(ui->toolButtonArrowUp, &QPushButton::clicked, this, [this]() { ui->doubleSpinBoxAngle->setValue(90); }); + connect(ui->toolButtonArrowLeft, &QPushButton::clicked, this, [this]() { ui->doubleSpinBoxAngle->setValue(180); }); + connect(ui->toolButtonArrowRight, &QPushButton::clicked, this, [this]() { ui->doubleSpinBoxAngle->setValue(0); }); + connect(ui->toolButtonArrowLeftUp, &QPushButton::clicked, this, + [this]() { ui->doubleSpinBoxAngle->setValue(135); }); + connect(ui->toolButtonArrowLeftDown, &QPushButton::clicked, this, + [this]() { ui->doubleSpinBoxAngle->setValue(225); }); + connect(ui->toolButtonArrowRightUp, &QPushButton::clicked, this, + [this]() { ui->doubleSpinBoxAngle->setValue(45); }); connect(ui->toolButtonArrowRightDown, &QPushButton::clicked, this, - [this](){ui->doubleSpinBoxAngle->setValue(315);}); + [this]() { ui->doubleSpinBoxAngle->setValue(315); }); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogNormal::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogNormal::DeployFormulaTextEdit); - connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, - this, &DialogNormal::PointNameChanged); - connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, - this, &DialogNormal::PointNameChanged); + connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, this, &DialogNormal::PointNameChanged); + connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, this, &DialogNormal::PointNameChanged); vis = new VisToolNormal(data); @@ -193,7 +198,7 @@ auto DialogNormal::GetPointName() const -> QString */ void DialogNormal::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -221,8 +226,8 @@ void DialogNormal::ChosenObject(quint32 id, const SceneObject &type) line->RefreshGeometry(); prepare = true; - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(line, &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); @@ -264,6 +269,24 @@ void DialogNormal::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogNormal::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogNormal::FinishCreating() { @@ -274,6 +297,15 @@ void DialogNormal::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogNormal::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSecondPointId set id of second point @@ -336,8 +368,8 @@ void DialogNormal::SetAngle(qreal value) */ void DialogNormal::SetFormula(const QString &value) { - m_formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_formula.length() > 80) { diff --git a/src/libs/vtools/dialogs/tools/dialognormal.h b/src/libs/vtools/dialogs/tools/dialognormal.h index 606be300d..2ac96a45c 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.h +++ b/src/libs/vtools/dialogs/tools/dialognormal.h @@ -96,6 +96,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -127,6 +128,8 @@ private: qint32 m_number{0}; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialognormal.ui b/src/libs/vtools/dialogs/tools/dialognormal.ui index eb7dfaaa4..2068cdda7 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.ui +++ b/src/libs/vtools/dialogs/tools/dialognormal.ui @@ -102,11 +102,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -122,7 +122,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -311,7 +311,7 @@ - ... + @@ -350,7 +350,7 @@ - ... + @@ -367,7 +367,7 @@ - ... + @@ -390,7 +390,7 @@ - ... + @@ -407,7 +407,7 @@ - ... + @@ -424,7 +424,7 @@ - ... + @@ -441,7 +441,7 @@ - ... + @@ -458,7 +458,7 @@ - ... + diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp index 197d6f7b0..f95801edf 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp @@ -28,7 +28,6 @@ #include "dialogpointfromcircleandtangent.h" -#include #include #include #include @@ -39,31 +38,34 @@ #include #include #include -#include +#include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" -#include "../../visualization/visualization.h" #include "../../visualization/line/vistoolpointfromcircleandtangent.h" +#include "../../visualization/visualization.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogpointfromcircleandtangent.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" -#include "../vgeometry/vpointf.h" +#include "ui_dialogpointfromcircleandtangent.h" //--------------------------------------------------------------------------------------------------------------------- DialogPointFromCircleAndTangent::DialogPointFromCircleAndTangent(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogPointFromCircleAndTangent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointFromCircleAndTangent) { ui->setupUi(this); + InitIcons(); + ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeightCircleRadius = ui->plainTextEditRadius->height(); @@ -78,21 +80,20 @@ DialogPointFromCircleAndTangent::DialogPointFromCircleAndTangent(const VContaine FillComboBoxPoints(ui->comboBoxTangentPoint); FillComboBoxCrossCirclesPoints(ui->comboBoxResult); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->comboBoxCircleCenter, &QComboBox::currentTextChanged, - this, &DialogPointFromCircleAndTangent::PointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->comboBoxCircleCenter, &QComboBox::currentTextChanged, this, + &DialogPointFromCircleAndTangent::PointChanged); - connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, - &DialogPointFromCircleAndTangent::FXCircleRadius); + connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, &DialogPointFromCircleAndTangent::FXCircleRadius); - connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerCircleRadius->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, + [this]() { m_timerCircleRadius->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowRadius, &QPushButton::clicked, this, &DialogPointFromCircleAndTangent::DeployCircleRadiusTextEdit); @@ -148,8 +149,8 @@ auto DialogPointFromCircleAndTangent::GetCircleRadius() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::SetCircleRadius(const QString &value) { - const QString formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + const QString formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (formula.length() > 80) { @@ -233,7 +234,7 @@ void DialogPointFromCircleAndTangent::ShowDialog(bool click) //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -257,8 +258,8 @@ void DialogPointFromCircleAndTangent::ChosenObject(quint32 id, const SceneObject { if (SetObject(id, ui->comboBoxCircleCenter, QString())) { - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); @@ -370,6 +371,24 @@ void DialogPointFromCircleAndTangent::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointFromCircleAndTangent::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::FinishCreating() { @@ -382,6 +401,15 @@ void DialogPointFromCircleAndTangent::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointFromCircleAndTangent::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->toolButtonExprRadius->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::SetNotes(const QString ¬es) { diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h index 332e8f1d1..84c454995 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h @@ -86,6 +86,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -105,6 +106,8 @@ private: bool m_firstRelease{false}; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.ui b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.ui index 7359668d6..9987da0d3 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.ui +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp index 4f15d202f..768843d9b 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp @@ -40,17 +40,18 @@ #include #include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" -#include "../../visualization/visualization.h" #include "../../visualization/line/vistoolpointofcontact.h" +#include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogpointofcontact.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" -#include "../vgeometry/vpointf.h" +#include "ui_dialogpointofcontact.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -59,19 +60,21 @@ * @param parent parent widget */ DialogPointOfContact::DialogPointOfContact(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogPointOfContact), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointOfContact), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogPointOfContact::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -82,22 +85,19 @@ DialogPointOfContact::DialogPointOfContact(const VContainer *data, quint32 toolI FillComboBoxPoints(ui->comboBoxCenter); connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, &DialogPointOfContact::FXRadius); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogPointOfContact::DeployFormulaTextEdit); - connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, - this, &DialogPointOfContact::PointNameChanged); - connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, - this, &DialogPointOfContact::PointNameChanged); - connect(ui->comboBoxCenter, &QComboBox::currentTextChanged, - this, &DialogPointOfContact::PointNameChanged); + connect(ui->comboBoxFirstPoint, &QComboBox::currentTextChanged, this, &DialogPointOfContact::PointNameChanged); + connect(ui->comboBoxSecondPoint, &QComboBox::currentTextChanged, this, &DialogPointOfContact::PointNameChanged); + connect(ui->comboBoxCenter, &QComboBox::currentTextChanged, this, &DialogPointOfContact::PointNameChanged); vis = new VisToolPointOfContact(data); @@ -220,7 +220,7 @@ void DialogPointOfContact::ShowDialog(bool click) */ void DialogPointOfContact::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -264,8 +264,8 @@ void DialogPointOfContact::ChosenObject(quint32 id, const SceneObject &type) { if (SetObject(id, ui->comboBoxCenter, QString())) { - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(line, &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); @@ -280,7 +280,7 @@ void DialogPointOfContact::ChosenObject(quint32 id, const SceneObject &type) } } } - break; + break; default: break; } @@ -309,6 +309,24 @@ void DialogPointOfContact::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointOfContact::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfContact::FinishCreating() { @@ -321,6 +339,15 @@ void DialogPointOfContact::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointOfContact::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->toolButtonExprRadius->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSecondPoint set id second point @@ -370,8 +397,8 @@ void DialogPointOfContact::SetCenter(quint32 value) */ void DialogPointOfContact::SetRadius(const QString &value) { - m_radius = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_radius = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_radius.length() > 80) { diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.h b/src/libs/vtools/dialogs/tools/dialogpointofcontact.h index a0bf18659..57666e3a6 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.h @@ -90,6 +90,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -118,6 +119,8 @@ private: bool m_firstRelease{false}; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.ui b/src/libs/vtools/dialogs/tools/dialogpointofcontact.ui index 4b90f4560..0f7065bcd 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.ui +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.ui @@ -102,11 +102,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -122,7 +122,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp index 7221c331e..5b99abcd6 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp @@ -28,7 +28,6 @@ #include "dialogpointofintersectioncircles.h" -#include #include #include #include @@ -39,33 +38,36 @@ #include #include #include -#include +#include -#include "../vpatterndb/vtranslatevars.h" -#include "../vpatterndb/vcontainer.h" -#include "../../visualization/visualization.h" #include "../../visualization/line/vistoolpointofintersectioncircles.h" +#include "../../visualization/visualization.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogpointofintersectioncircles.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" -#include "../vgeometry/vpointf.h" +#include "ui_dialogpointofintersectioncircles.h" //--------------------------------------------------------------------------------------------------------------------- DialogPointOfIntersectionCircles::DialogPointOfIntersectionCircles(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogPointOfIntersectionCircles), - m_timerCircle1Radius(new QTimer(this)), - m_timerCircle2Radius(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointOfIntersectionCircles), + m_timerCircle1Radius(new QTimer(this)), + m_timerCircle2Radius(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); this->m_formulaBaseHeightCircle1Radius = ui->plainTextEditCircle1Radius->height(); this->m_formulaBaseHeightCircle2Radius = ui->plainTextEditCircle2Radius->height(); @@ -85,30 +87,28 @@ DialogPointOfIntersectionCircles::DialogPointOfIntersectionCircles(const VContai FillComboBoxPoints(ui->comboBoxCircle2Center); FillComboBoxCrossCirclesPoints(ui->comboBoxResult); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->comboBoxCircle1Center, &QComboBox::currentTextChanged, - this, &DialogPointOfIntersectionCircles::PointChanged); - connect(ui->comboBoxCircle2Center, &QComboBox::currentTextChanged, - this, &DialogPointOfIntersectionCircles::PointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->comboBoxCircle1Center, &QComboBox::currentTextChanged, this, + &DialogPointOfIntersectionCircles::PointChanged); + connect(ui->comboBoxCircle2Center, &QComboBox::currentTextChanged, this, + &DialogPointOfIntersectionCircles::PointChanged); connect(ui->toolButtonExprCircle1Radius, &QPushButton::clicked, this, &DialogPointOfIntersectionCircles::FXCircle1Radius); connect(ui->toolButtonExprCircle2Radius, &QPushButton::clicked, this, &DialogPointOfIntersectionCircles::FXCircle2Radius); - connect(ui->plainTextEditCircle1Radius, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerCircle1Radius->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditCircle1Radius, &QPlainTextEdit::textChanged, this, + [this]() { m_timerCircle1Radius->start(formulaTimerTimeout); }); - connect(ui->plainTextEditCircle2Radius, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerCircle2Radius->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditCircle2Radius, &QPlainTextEdit::textChanged, this, + [this]() { m_timerCircle2Radius->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowCircle1Radius, &QPushButton::clicked, this, &DialogPointOfIntersectionCircles::DeployCircle1RadiusTextEdit); @@ -182,8 +182,8 @@ auto DialogPointOfIntersectionCircles::GetFirstCircleRadius() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::SetFirstCircleRadius(const QString &value) { - const QString formula = VAbstractValApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + const QString formula = VAbstractValApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (formula.length() > 80) { @@ -208,8 +208,8 @@ auto DialogPointOfIntersectionCircles::GetSecondCircleRadius() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::SetSecondCircleRadius(const QString &value) { - const QString formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + const QString formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (formula.length() > 80) { @@ -265,8 +265,8 @@ void DialogPointOfIntersectionCircles::ShowDialog(bool click) auto *scene = qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); SCASSERT(scene != nullptr) - QSharedPointer center = data->GeometricObject(m_stage == 1 ? GetFirstCircleCenterId() - : GetSecondCircleCenterId()); + QSharedPointer center = + data->GeometricObject(m_stage == 1 ? GetFirstCircleCenterId() : GetSecondCircleCenterId()); QLineF line(static_cast(*center), scene->getScenePos()); @@ -297,7 +297,7 @@ void DialogPointOfIntersectionCircles::ShowDialog(bool click) //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare)// After first choose we ignore all objects + if (prepare) // After first choose we ignore all objects { return; } @@ -322,8 +322,8 @@ void DialogPointOfIntersectionCircles::ChosenObject(quint32 id, const SceneObjec else { ++m_stage; - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); } @@ -375,13 +375,15 @@ void DialogPointOfIntersectionCircles::PointChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::DeployCircle1RadiusTextEdit() { - DeployFormula(this, ui->plainTextEditCircle1Radius, ui->pushButtonGrowCircle1Radius, m_formulaBaseHeightCircle1Radius); + DeployFormula(this, ui->plainTextEditCircle1Radius, ui->pushButtonGrowCircle1Radius, + m_formulaBaseHeightCircle1Radius); } //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::DeployCircle2RadiusTextEdit() { - DeployFormula(this, ui->plainTextEditCircle2Radius, ui->pushButtonGrowCircle2Radius, m_formulaBaseHeightCircle2Radius); + DeployFormula(this, ui->plainTextEditCircle2Radius, ui->pushButtonGrowCircle2Radius, + m_formulaBaseHeightCircle2Radius); } //--------------------------------------------------------------------------------------------------------------------- @@ -488,6 +490,24 @@ void DialogPointOfIntersectionCircles::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointOfIntersectionCircles::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::FinishCreating() { @@ -500,6 +520,20 @@ void DialogPointOfIntersectionCircles::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointOfIntersectionCircles::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprCircle1Radius->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprCircle2Radius->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_2->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::SetNotes(const QString ¬es) { diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h index 7c4277f44..937980542 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h @@ -94,6 +94,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -123,6 +124,8 @@ private: qint32 m_stage{0}; void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.ui b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.ui index 820b3a0f3..fa464ed2a 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.ui +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -279,11 +279,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -299,7 +299,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 2eb83e47b..66f41eb62 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -45,47 +45,49 @@ #include #include #include -#include #include -#include "../../visualization/visualization.h" +#include "../../tools/drawTools/operation/vabstractoperation.h" #include "../../visualization/line/operation/vistoolrotation.h" +#include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" -#include "../ifc/xml/vdomdocument.h" #include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../vmisc/backport/qoverload.h" -#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vtranslatevars.h" +#include "../vwidgets/global.h" #include "../vwidgets/vabstractmainwindow.h" #include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsview.h" -#include "../vwidgets/global.h" #include "ui_dialogrotation.h" -#include "../../tools/drawTools/operation/vabstractoperation.h" + +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) +#include "../vmisc/backport/qoverload.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) //--------------------------------------------------------------------------------------------------------------------- DialogRotation::DialogRotation(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogRotation), - timerAngle(new QTimer(this)), - formulaAngle(), - formulaBaseHeightAngle(0), - stage1(true), - m_suffix(), - m_firstRelease(false), - flagAngle(false), - flagName(true), - flagGroupName(true), - flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogRotation), + timerAngle(new QTimer(this)), + formulaAngle(), + formulaBaseHeightAngle(0), + stage1(true), + m_suffix(), + m_firstRelease(false), + flagAngle(false), + flagName(true), + flagGroupName(true), + flagError(false) { ui->setupUi(this); + InitIcons(); + this->formulaBaseHeightAngle = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); @@ -97,19 +99,19 @@ DialogRotation::DialogRotation(const VContainer *data, quint32 toolId, QWidget * InitOkCancelApply(ui); FillComboBoxPoints(ui->comboBoxOriginPoint); - FillComboBoxTypeLine(ui->comboBoxPenStyle, OperationLineStylesPics(), TypeLineDefault); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + OperationLineStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text)), + TypeLineDefault); FillComboBoxLineColors(ui->comboBoxColor, VAbstractOperation::OperationColorsList()); connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogRotation::SuffixChanged); connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogRotation::GroupNameChanged); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogRotation::FXAngle); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - timerAngle->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { timerAngle->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogRotation::DeployAngleTextEdit); - connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged, - this, &DialogRotation::PointChanged); + connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged, this, &DialogRotation::PointChanged); connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogRotation::ShowSourceDetails); connect(ui->lineEditAlias, &QLineEdit::textEdited, this, &DialogRotation::AliasChanged); @@ -140,7 +142,7 @@ auto DialogRotation::GetOrigPointId() const -> quint32 void DialogRotation::SetOrigPointId(quint32 value) { ChangeCurrentData(ui->comboBoxOriginPoint, value); - VisToolRotation *operation = qobject_cast(vis); + auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) operation->SetOriginPointId(value); } @@ -154,8 +156,8 @@ auto DialogRotation::GetAngle() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::SetAngle(const QString &value) { - formulaAngle = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formulaAngle = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (formulaAngle.length() > 80) { @@ -281,8 +283,8 @@ void DialogRotation::ShowDialog(bool click) const QSharedPointer point = data->GeometricObject(GetOrigPointId()); const QLineF line = QLineF(static_cast(*point), scene->getScenePos()); - //Radius of point circle, but little bigger. Need handle with hover sizes. - if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5) + // Radius of point circle, but little bigger. Need handle with hover sizes. + if (line.length() <= ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5) { return; } @@ -295,7 +297,7 @@ void DialogRotation::ShowDialog(bool click) auto *operation = qobject_cast(vis); SCASSERT(operation != nullptr) - SetAngle(operation->Angle());//Show in dialog angle that a user choose + SetAngle(operation->Angle()); // Show in dialog angle that a user choose setModal(true); emit ToolTip(QString()); timerAngle->start(); @@ -323,7 +325,7 @@ void DialogRotation::SetSourceObjects(const QVector &value) //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::ChosenObject(quint32 id, const SceneObject &type) { - if (not stage1 && not prepare)// After first choose we ignore all objects + if (not stage1 && not prepare) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -333,7 +335,7 @@ void DialogRotation::ChosenObject(quint32 id, const SceneObject &type) auto obj = std::find_if(sourceObjects.begin(), sourceObjects.end(), [id](const SourceItem &sItem) { return sItem.id == id; }); - if (obj != sourceObjects.cend()) + if (obj != sourceObjects.end()) { if (sourceObjects.size() > 1) { @@ -374,7 +376,7 @@ void DialogRotation::SelectedObject(bool selected, quint32 object, quint32 tool) [object](const SourceItem &sItem) { return sItem.id == object; }); if (selected) { - if (obj == sourceObjects.cend()) + if (obj == sourceObjects.end()) { SourceItem item; item.id = object; @@ -383,7 +385,7 @@ void DialogRotation::SelectedObject(bool selected, quint32 object, quint32 tool) } else { - if (obj != sourceObjects.cend()) + if (obj != sourceObjects.end()) { sourceObjects.erase(obj); } @@ -414,7 +416,7 @@ void DialogRotation::FXAngle() //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::SuffixChanged() { - auto* edit = qobject_cast(sender()); + auto *edit = qobject_cast(sender()); if (edit) { const QString suffix = edit->text(); @@ -454,7 +456,7 @@ void DialogRotation::SuffixChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::GroupNameChanged() { - auto* edit = qobject_cast(sender()); + auto *edit = qobject_cast(sender()); if (edit) { const QString name = edit->text(); @@ -488,7 +490,7 @@ void DialogRotation::SaveData() sourceObjects.clear(); sourceObjects.reserve(ui->listWidget->count()); - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { @@ -525,6 +527,24 @@ void DialogRotation::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::PointChanged() { @@ -534,7 +554,7 @@ void DialogRotation::PointChanged() [id](const SourceItem &sItem) { return sItem.id == id; }); QColor color; - if (obj != sourceObjects.cend()) + if (obj != sourceObjects.end()) { flagError = false; color = errorColor; @@ -582,7 +602,7 @@ void DialogRotation::FillSourceList() //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::ValidateSourceAliases() { - for (int i=0; ilistWidget->count(); ++i) + for (int i = 0; i < ui->listWidget->count(); ++i) { if (const QListWidgetItem *item = ui->listWidget->item(i)) { @@ -625,6 +645,15 @@ void DialogRotation::SetAliasValid(quint32 id, bool valid) } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogRotation::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_2->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::EvalAngle() { @@ -709,7 +738,8 @@ void DialogRotation::ShowSourceDetails(int row) { const QSharedPointer curve = data->GeometricObject(sourceItem.id); int index = ui->comboBoxColor->currentIndex(); - ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->iconSize().height(), curve->GetColor())); + ui->comboBoxColor->setItemIcon(index, LineColor(ui->comboBoxColor->palette().color(QPalette::Text), + ui->comboBoxColor->iconSize().height(), curve->GetColor())); } ui->comboBoxPenStyle->setEnabled(true); diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.h b/src/libs/vtools/dialogs/tools/dialogrotation.h index ff93a6d02..f6d8888b8 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.h +++ b/src/libs/vtools/dialogs/tools/dialogrotation.h @@ -103,6 +103,7 @@ protected: /** @brief SaveData Put dialog data in local variables */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -142,6 +143,8 @@ private: void ValidateSourceAliases(); void SetAliasValid(quint32 id, bool valid); + + void InitIcons(); }; #endif // DIALOGROTATION_H diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.ui b/src/libs/vtools/dialogs/tools/dialogrotation.ui index 16f6e0c6c..c316d76cf 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.ui +++ b/src/libs/vtools/dialogs/tools/dialogrotation.ui @@ -180,11 +180,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -200,7 +200,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp index a0e09d774..3d3f5b8af 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp @@ -40,17 +40,18 @@ #include #include -#include "../vpatterndb/vtranslatevars.h" -#include "../../visualization/visualization.h" #include "../../visualization/line/vistoolshoulderpoint.h" +#include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../support/dialogeditwrongformula.h" +#include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#include "ui_dialogshoulderpoint.h" #include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" -#include "../vgeometry/vpointf.h" +#include "ui_dialogshoulderpoint.h" //--------------------------------------------------------------------------------------------------------------------- /** @@ -59,47 +60,47 @@ * @param parent parent widget */ DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogShoulderPoint), - m_timerFormula(new QTimer(this)) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogShoulderPoint), + m_timerFormula(new QTimer(this)) { ui->setupUi(this); + InitIcons(); + m_timerFormula->setSingleShot(true); connect(m_timerFormula, &QTimer::timeout, this, &DialogShoulderPoint::EvalFormula); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText( - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); m_formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); + FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics(ui->comboBoxLineType->palette().color(QPalette::Base), + ui->comboBoxLineType->palette().color(QPalette::Text))); FillComboBoxPoints(ui->comboBoxP1Line); FillComboBoxPoints(ui->comboBoxP2Line); FillComboBoxPoints(ui->comboBoxP3); FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogShoulderPoint::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() - { - CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, m_flagName); - CheckState(); - }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerFormula->start(formulaTimerTimeout); - }); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, + [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, m_pointName, this->data, + m_flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, + [this]() { m_timerFormula->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogShoulderPoint::DeployFormulaTextEdit); - connect(ui->comboBoxP1Line, &QComboBox::currentTextChanged, - this, &DialogShoulderPoint::PointNameChanged); - connect(ui->comboBoxP2Line, &QComboBox::currentTextChanged, - this, &DialogShoulderPoint::PointNameChanged); - connect(ui->comboBoxP3, &QComboBox::currentTextChanged, - this, &DialogShoulderPoint::PointNameChanged); + connect(ui->comboBoxP1Line, &QComboBox::currentTextChanged, this, &DialogShoulderPoint::PointNameChanged); + connect(ui->comboBoxP2Line, &QComboBox::currentTextChanged, this, &DialogShoulderPoint::PointNameChanged); + connect(ui->comboBoxP3, &QComboBox::currentTextChanged, this, &DialogShoulderPoint::PointNameChanged); vis = new VisToolShoulderPoint(data); @@ -254,6 +255,24 @@ void DialogShoulderPoint::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogShoulderPoint::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogShoulderPoint::ChosenThirdPoint(quint32 id) { @@ -266,8 +285,7 @@ void DialogShoulderPoint::ChosenThirdPoint(quint32 id) { if (SetObject(id, ui->comboBoxP2Line, QString())) { - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); + auto *window = qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) auto *line = qobject_cast(vis); @@ -296,6 +314,15 @@ void DialogShoulderPoint::FinishCreating() show(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogShoulderPoint::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, QStringLiteral("24x24/fx.png"))); + ui->label_3->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("24x24/equal.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief setPShoulder set id shoulder point @@ -357,8 +384,8 @@ void DialogShoulderPoint::SetP1Line(const quint32 &value) */ void DialogShoulderPoint::SetFormula(const QString &value) { - m_formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + m_formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (m_formula.length() > 80) { diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h index 975d8ebd4..ce7316ce3 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h @@ -96,6 +96,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private: @@ -126,6 +127,8 @@ private: void ChosenThirdPoint(quint32 id); void FinishCreating(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.ui b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.ui index 6c26a65d9..64658d7ca 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.ui +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.ui @@ -102,11 +102,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -122,7 +122,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogspline.cpp b/src/libs/vtools/dialogs/tools/dialogspline.cpp index 79b745acf..9dd242fe4 100644 --- a/src/libs/vtools/dialogs/tools/dialogspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogspline.cpp @@ -48,6 +48,7 @@ #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" #include "../vmisc/def.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vcommonsettings.h" #include "../vpatterndb/vcontainer.h" @@ -71,6 +72,8 @@ DialogSpline::DialogSpline(const VContainer *data, quint32 toolId, QWidget *pare { ui->setupUi(this); + InitIcons(); + formulaBaseHeightAngle1 = ui->plainTextEditAngle1F->height(); formulaBaseHeightAngle2 = ui->plainTextEditAngle2F->height(); formulaBaseHeightLength1 = ui->plainTextEditLength1F->height(); @@ -96,7 +99,9 @@ DialogSpline::DialogSpline(const VContainer *data, quint32 toolId, QWidget *pare FillComboBoxPoints(ui->comboBoxP1); FillComboBoxPoints(ui->comboBoxP4); FillComboBoxLineColors(ui->comboBoxColor); - FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + CurvePenStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text))); ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); @@ -225,6 +230,24 @@ void DialogSpline::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogSpline::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::DeployAngle1TextEdit() { @@ -470,6 +493,24 @@ auto DialogSpline::CurrentSpline() const -> VSpline return spline; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogSpline::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprLength1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAngle1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprLength2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAngle2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_5->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_8->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_9->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_10->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::PointNameChanged() { diff --git a/src/libs/vtools/dialogs/tools/dialogspline.h b/src/libs/vtools/dialogs/tools/dialogspline.h index 30e508942..6723be266 100644 --- a/src/libs/vtools/dialogs/tools/dialogspline.h +++ b/src/libs/vtools/dialogs/tools/dialogspline.h @@ -73,6 +73,7 @@ protected: */ void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -133,6 +134,8 @@ private: auto GetP4() const -> const QSharedPointer; auto CurrentSpline() const -> VSpline; + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogspline.ui b/src/libs/vtools/dialogs/tools/dialogspline.ui index c0a0123ef..b0bb6a1a2 100644 --- a/src/libs/vtools/dialogs/tools/dialogspline.ui +++ b/src/libs/vtools/dialogs/tools/dialogspline.ui @@ -141,11 +141,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -161,7 +161,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -321,11 +321,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -341,7 +341,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -539,11 +539,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -559,7 +559,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -719,11 +719,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -739,7 +739,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp index 6485a9252..488ee97f8 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp @@ -44,27 +44,27 @@ #include #include #include -#include #include -#include "../../visualization/visualization.h" #include "../../visualization/path/vistoolsplinepath.h" -#include "../ifc/xml/vdomdocument.h" +#include "../../visualization/visualization.h" +#include "../qmuparser/qmudef.h" #include "../support/dialogeditwrongformula.h" #include "../vgeometry/../ifc/ifcdef.h" #include "../vgeometry/vpointf.h" #include "../vgeometry/vsplinepoint.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" -#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../vmisc/backport/qoverload.h" -#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/vabstractmainwindow.h" #include "../vwidgets/vmaingraphicsscene.h" #include "ui_dialogsplinepath.h" -#include "../vpatterndb/vtranslatevars.h" -#include "../qmuparser/qmudef.h" + +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) +#include "../vmisc/backport/qoverload.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) //--------------------------------------------------------------------------------------------------------------------- /** @@ -73,22 +73,24 @@ * @param parent parent widget */ DialogSplinePath::DialogSplinePath(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogSplinePath), - path(), - newDuplicate(-1), - formulaBaseHeightAngle1(0), - formulaBaseHeightAngle2(0), - formulaBaseHeightLength1(0), - formulaBaseHeightLength2(0), - flagAngle1(), - flagAngle2(), - flagLength1(), - flagLength2(), - flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogSplinePath), + path(), + newDuplicate(-1), + formulaBaseHeightAngle1(0), + formulaBaseHeightAngle2(0), + formulaBaseHeightLength1(0), + formulaBaseHeightLength2(0), + flagAngle1(), + flagAngle2(), + flagLength1(), + flagLength2(), + flagError(false) { ui->setupUi(this); + InitIcons(); + formulaBaseHeightAngle1 = ui->plainTextEditAngle1F->height(); formulaBaseHeightAngle2 = ui->plainTextEditAngle2F->height(); formulaBaseHeightLength1 = ui->plainTextEditLength1F->height(); @@ -104,13 +106,15 @@ DialogSplinePath::DialogSplinePath(const VContainer *data, quint32 toolId, QWidg FillComboBoxPoints(ui->comboBoxPoint); FillComboBoxLineColors(ui->comboBoxColor); - FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenStyle, + CurvePenStylesPics(ui->comboBoxPenStyle->palette().color(QPalette::Base), + ui->comboBoxPenStyle->palette().color(QPalette::Text))); ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogSplinePath::PointChanged); - connect(ui->comboBoxPoint, QOverload::of(&QComboBox::currentIndexChanged), - this, &DialogSplinePath::currentPointChanged); + connect(ui->comboBoxPoint, QOverload::of(&QComboBox::currentIndexChanged), this, + &DialogSplinePath::currentPointChanged); connect(ui->toolButtonExprAngle1, &QPushButton::clicked, this, &DialogSplinePath::FXAngle1); connect(ui->toolButtonExprAngle2, &QPushButton::clicked, this, &DialogSplinePath::FXAngle2); @@ -217,7 +221,7 @@ void DialogSplinePath::ChosenObject(quint32 id, const SceneObject &type) { visPath->VisualMode(NULL_ID); VAbstractMainWindow *window = - qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(visPath, &VisToolSplinePath::ToolTip, window, &VAbstractMainWindow::ShowToolTip); @@ -236,7 +240,7 @@ void DialogSplinePath::ChosenObject(quint32 id, const SceneObject &type) */ void DialogSplinePath::SaveData() { - const quint32 d = path.GetDuplicate();//Save previous value + const quint32 d = path.GetDuplicate(); // Save previous value SavePath(); newDuplicate <= -1 ? path.SetDuplicate(d) : path.SetDuplicate(static_cast(newDuplicate)); @@ -257,6 +261,24 @@ void DialogSplinePath::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogSplinePath::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::DeployAngle1TextEdit() { @@ -298,20 +320,18 @@ void DialogSplinePath::Angle1Changed() const QString angle1F = ui->plainTextEditAngle1F->toPlainText(); const qreal angle1 = Visualization::FindValFromUser(angle1F, data->DataVariables()); - p.SetAngle1(angle1, - VTranslateVars::TryFormulaFromUser(angle1F, - VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + p.SetAngle1(angle1, VTranslateVars::TryFormulaFromUser( + angle1F, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); item->setData(Qt::UserRole, QVariant::fromValue(p)); EvalAngle1(); - if (row != ui->listWidget->count()-1) + if (row != ui->listWidget->count() - 1) { ui->plainTextEditAngle2F->blockSignals(true); - ui->plainTextEditAngle2F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Angle2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditAngle2F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Angle2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); EvalAngle2(); ui->plainTextEditAngle2F->blockSignals(false); } @@ -327,7 +347,7 @@ void DialogSplinePath::Angle2Changed() return; } - if (row != ui->listWidget->count()-1) + if (row != ui->listWidget->count() - 1) { QListWidgetItem *item = ui->listWidget->item(row); SCASSERT(item != nullptr) @@ -335,9 +355,8 @@ void DialogSplinePath::Angle2Changed() const QString angle2F = ui->plainTextEditAngle2F->toPlainText(); const qreal angle2 = Visualization::FindValFromUser(angle2F, data->DataVariables()); - p.SetAngle2(angle2, - VTranslateVars::TryFormulaFromUser(angle2F, - VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + p.SetAngle2(angle2, VTranslateVars::TryFormulaFromUser( + angle2F, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); item->setData(Qt::UserRole, QVariant::fromValue(p)); @@ -346,9 +365,8 @@ void DialogSplinePath::Angle2Changed() if (row != 0) { ui->plainTextEditAngle1F->blockSignals(true); - ui->plainTextEditAngle1F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Angle1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditAngle1F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Angle1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); EvalAngle1(); ui->plainTextEditAngle1F->blockSignals(false); } @@ -372,9 +390,8 @@ void DialogSplinePath::Length1Changed() const QString length1F = ui->plainTextEditLength1F->toPlainText(); const qreal length1 = Visualization::FindLengthFromUser(length1F, data->DataVariables()); - p.SetLength1(length1, - VTranslateVars::TryFormulaFromUser(length1F, - VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + p.SetLength1(length1, VTranslateVars::TryFormulaFromUser( + length1F, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); item->setData(Qt::UserRole, QVariant::fromValue(p)); @@ -391,7 +408,7 @@ void DialogSplinePath::Length2Changed() return; } - if (row != ui->listWidget->count()-1) + if (row != ui->listWidget->count() - 1) { QListWidgetItem *item = ui->listWidget->item(row); SCASSERT(item != nullptr) @@ -399,9 +416,8 @@ void DialogSplinePath::Length2Changed() const QString length2F = ui->plainTextEditLength2F->toPlainText(); const qreal length2 = Visualization::FindLengthFromUser(length2F, data->DataVariables()); - p.SetLength2(length2, - VTranslateVars::TryFormulaFromUser(length2F, - VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + p.SetLength2(length2, VTranslateVars::TryFormulaFromUser( + length2F, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); item->setData(Qt::UserRole, QVariant::fromValue(p)); @@ -412,7 +428,7 @@ void DialogSplinePath::Length2Changed() //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::FXAngle1() { - auto* dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit first control point angle")); QString angle1F = VTranslateVars::TryFormulaFromUser(ui->plainTextEditAngle1F->toPlainText(), @@ -438,7 +454,7 @@ void DialogSplinePath::FXAngle1() //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::FXAngle2() { - auto* dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit second control point angle")); QString angle2F = VTranslateVars::TryFormulaFromUser(ui->plainTextEditAngle2F->toPlainText(), @@ -464,7 +480,7 @@ void DialogSplinePath::FXAngle2() //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::FXLength1() { - auto* dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit first control point length")); QString length1F = VTranslateVars::TryFormulaFromUser(ui->plainTextEditLength1F->toPlainText(), @@ -490,7 +506,7 @@ void DialogSplinePath::FXLength1() //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::FXLength2() { - auto* dialog = new DialogEditWrongFormula(data, toolId, this); + auto *dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit second control point length")); QString length2F = VTranslateVars::TryFormulaFromUser(ui->plainTextEditLength2F->toPlainText(), @@ -671,7 +687,7 @@ void DialogSplinePath::currentPointChanged(int index) try { - QListWidgetItem *item = ui->listWidget->item( ui->listWidget->currentRow() ); + QListWidgetItem *item = ui->listWidget->item(ui->listWidget->currentRow()); VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); const auto point = data->GeometricObject(id); @@ -694,9 +710,10 @@ void DialogSplinePath::currentPointChanged(int index) color = OkColor(this); auto first = qvariant_cast(ui->listWidget->item(0)->data(Qt::UserRole)); - auto last = qvariant_cast(ui->listWidget->item(ui->listWidget->count()-1)->data(Qt::UserRole)); + auto last = + qvariant_cast(ui->listWidget->item(ui->listWidget->count() - 1)->data(Qt::UserRole)); - if (first.P().id() == path.at(0).P().id() && last.P().id() == path.at(path.CountPoints()-1).P().id()) + if (first.P().id() == path.at(0).P().id() && last.P().id() == path.at(path.CountPoints() - 1).P().id()) { newDuplicate = -1; ui->lineEditSplPathName->setText(VAbstractApplication::VApp()->TrVars()->VarToUser(path.name())); @@ -771,7 +788,7 @@ void DialogSplinePath::NewItem(const VSplinePoint &point) flagAngle2.append(true); flagLength2.append(true); - auto* item = new QListWidgetItem(point.P().name()); + auto *item = new QListWidgetItem(point.P().name()); item->setFont(NodeFont(item->font())); item->setData(Qt::UserRole, QVariant::fromValue(point)); @@ -829,18 +846,16 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ui->plainTextEditAngle2F->blockSignals(true); ui->plainTextEditLength2F->blockSignals(true); - ui->plainTextEditAngle2F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Angle2Formula(),VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditAngle2F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Angle2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); EvalAngle2(); - ui->plainTextEditLength2F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Length2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditLength2F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Length2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); EvalLength2(); ui->plainTextEditAngle2F->blockSignals(false); ui->plainTextEditLength2F->blockSignals(false); } - else if (row == ui->listWidget->count()-1) + else if (row == ui->listWidget->count() - 1) { ui->toolButtonExprAngle2->setEnabled(false); ui->labelResultAngle2->setText(emptyRes); @@ -868,13 +883,11 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ui->plainTextEditAngle1F->blockSignals(true); ui->plainTextEditLength1F->blockSignals(true); - ui->plainTextEditAngle1F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Angle1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditAngle1F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Angle1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); EvalAngle1(); - ui->plainTextEditLength1F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Length1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditLength1F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Length1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); EvalLength1(); ui->plainTextEditAngle1F->blockSignals(false); ui->plainTextEditLength1F->blockSignals(false); @@ -896,18 +909,14 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ui->plainTextEditAngle2F->blockSignals(true); ui->plainTextEditLength2F->blockSignals(true); - ui->plainTextEditAngle1F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Angle1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); - ui->plainTextEditAngle2F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Angle2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); - ui->plainTextEditLength1F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Length1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); - ui->plainTextEditLength2F->setPlainText( - VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(p.Length2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditAngle1F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Angle1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditAngle2F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Angle2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditLength1F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Length1Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + ui->plainTextEditLength2F->setPlainText(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + p.Length2Formula(), VAbstractApplication::VApp()->Settings()->GetOsSeparator())); EvalAngle1(); EvalLength1(); @@ -980,14 +989,32 @@ void DialogSplinePath::ShowPointIssue(const QString &pName) if (flagAngle1.at(row) && flagAngle2.at(row) && flagLength1.at(row) && flagLength2.at(row)) { - item->setText(pName); + item->setText(pName); } else { - item->setText(pName + QLatin1String("(!)")); + item->setText(pName + QLatin1String("(!)")); } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogSplinePath::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprLength1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAngle1->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprLength2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAngle2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_8->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_9->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_10->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_11->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- auto DialogSplinePath::IsValid() const -> bool { @@ -1007,8 +1034,8 @@ auto DialogSplinePath::IsValid() const -> bool //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::showEvent(QShowEvent *event) { - QDialog::showEvent( event ); // NOLINT(bugprone-parent-virtual-call) - if ( event->spontaneous() ) + QDialog::showEvent(event); // NOLINT(bugprone-parent-virtual-call) + if (event->spontaneous()) { return; } @@ -1024,7 +1051,7 @@ void DialogSplinePath::showEvent(QShowEvent *event) resize(sz); } - isInitialized = true;//first show windows are held + isInitialized = true; // first show windows are held ShowVisualization(); CheckState(); diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.h b/src/libs/vtools/dialogs/tools/dialogsplinepath.h index acca8c78a..1e3aab4bf 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.h +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.h @@ -71,6 +71,7 @@ protected: void ShowVisualization() override; void SaveData() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; void showEvent(QShowEvent *event) override; void resizeEvent(QResizeEvent *event) override; @@ -135,6 +136,8 @@ private: auto IsPathValid() const -> bool; auto ExtractPath() const -> VSplinePath; void ShowPointIssue(const QString &pName); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.ui b/src/libs/vtools/dialogs/tools/dialogsplinepath.ui index e5efb482e..3f8199f39 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.ui +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.ui @@ -143,11 +143,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -163,7 +163,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -323,11 +323,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -343,7 +343,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -516,11 +516,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -536,7 +536,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -696,11 +696,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -716,7 +716,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp index b9313472e..0caf2b5b6 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp @@ -28,9 +28,7 @@ #include "dialogtool.h" -#include -#include -#include +#include #include #include #include @@ -55,19 +53,20 @@ #include #include #include -#include #include +#include #include -#include +#include +#include +#include "../../tools/vabstracttool.h" +#include "../ifc/xml/vabstractpattern.h" #include "../ifc/xml/vdomdocument.h" +#include "../vgeometry/vabstractcurve.h" +#include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" #include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vpiecenode.h" -#include "../../tools/vabstracttool.h" -#include "../ifc/xml/vabstractpattern.h" -#include "../vgeometry/vabstractcurve.h" -#include "../vgeometry/vgobject.h" template class QSharedPointer; @@ -86,21 +85,18 @@ QT_WARNING_POP * @param parent parent widget */ DialogTool::DialogTool(const VContainer *data, quint32 toolId, QWidget *parent) - : QDialog(parent), - data(data), - isInitialized(false), - bOk(nullptr), - bApply(nullptr), - associatedTool(nullptr), - toolId(toolId), - prepare(false), - vis(nullptr) -{ - SCASSERT(data != nullptr) -} + : QDialog(parent), + data(data), + isInitialized(false), + bOk(nullptr), + bApply(nullptr), + associatedTool(nullptr), + toolId(toolId), + prepare(false), + vis(nullptr){SCASSERT(data != nullptr)} -//--------------------------------------------------------------------------------------------------------------------- -DialogTool::~DialogTool() + //--------------------------------------------------------------------------------------------------------------------- + DialogTool::~DialogTool() { emit ToolTip(QString()); @@ -128,8 +124,8 @@ void DialogTool::closeEvent(QCloseEvent *event) */ void DialogTool::showEvent(QShowEvent *event) { - QDialog::showEvent( event ); - if ( event->spontaneous() ) + QDialog::showEvent(event); + if (event->spontaneous()) { return; } @@ -142,7 +138,7 @@ void DialogTool::showEvent(QShowEvent *event) setMaximumSize(size()); setMinimumSize(size()); - isInitialized = true;//first show windows are held + isInitialized = true; // first show windows are held ShowVisualization(); CheckState(); @@ -159,7 +155,7 @@ void DialogTool::keyPressEvent(QKeyEvent *event) default: break; } - QDialog::keyPressEvent ( event ); + QDialog::keyPressEvent(event); } //--------------------------------------------------------------------------------------------------------------------- @@ -199,7 +195,7 @@ void DialogTool::FillComboBoxSplines(QComboBox *box) const box->blockSignals(true); const auto *const objs = data->CalculationGObjects(); - QHash >::const_iterator i; + QHash>::const_iterator i; QMap list; for (i = objs->constBegin(); i != objs->constEnd(); ++i) { @@ -223,7 +219,7 @@ void DialogTool::FillComboBoxSplinesPath(QComboBox *box) const box->blockSignals(true); const auto *const objs = data->CalculationGObjects(); - QHash >::const_iterator i; + QHash>::const_iterator i; QMap list; for (i = objs->constBegin(); i != objs->constEnd(); ++i) { @@ -246,18 +242,15 @@ void DialogTool::FillComboBoxCurves(QComboBox *box) const SCASSERT(box != nullptr) const auto *const objs = data->CalculationGObjects(); QMap list; - QHash >::const_iterator i; + QHash>::const_iterator i; for (i = objs->constBegin(); i != objs->constEnd(); ++i) { if (i.key() != toolId) { QSharedPointer obj = i.value(); - if (obj->getType() == GOType::Arc - || obj->getType() == GOType::EllipticalArc - || obj->getType() == GOType::Spline - || obj->getType() == GOType::SplinePath - || obj->getType() == GOType::CubicBezier - || obj->getType() == GOType::CubicBezierPath) + if (obj->getType() == GOType::Arc || obj->getType() == GOType::EllipticalArc || + obj->getType() == GOType::Spline || obj->getType() == GOType::SplinePath || + obj->getType() == GOType::CubicBezier || obj->getType() == GOType::CubicBezierPath) { PrepareList(list, i.key()); } @@ -304,7 +297,8 @@ void DialogTool::FillComboBoxLineColors(QComboBox *box, const QMap::const_iterator i = lineColors.constBegin(); while (i != lineColors.constEnd()) { - box->addItem(LineColor(box->iconSize().height(), i.key()), i.value(), QVariant(i.key())); + box->addItem(LineColor(box->palette().color(QPalette::Text), box->iconSize().height(), i.key()), i.value(), + QVariant(i.key())); ++i; } } @@ -408,31 +402,31 @@ void DialogTool::NewNodeItem(QListWidget *listWidget, const VPieceNode &node, bo name = GetNodeName(data, node, showPassmark); break; default: - qDebug()<<"Got wrong tools. Ignore."; + qDebug() << "Got wrong tools. Ignore."; return; } bool canAddNewPoint = false; - if(listWidget->count() == 0) + if (listWidget->count() == 0) { canAddNewPoint = true; } else { - if(RowNode(listWidget, listWidget->count()-1).GetId() != node.GetId()) + if (RowNode(listWidget, listWidget->count() - 1).GetId() != node.GetId()) { canAddNewPoint = true; } } - if(canAddNewPoint) + if (canAddNewPoint) { QListWidgetItem *item = new QListWidgetItem(name); item->setFont(NodeFont(item->font(), showExclusion ? node.IsExcluded() : false)); item->setData(Qt::UserRole, QVariant::fromValue(node)); listWidget->addItem(item); - listWidget->setCurrentRow(listWidget->count()-1); + listWidget->setCurrentRow(listWidget->count() - 1); } } @@ -502,7 +496,7 @@ void DialogTool::MoveListRowBottom(QListWidget *list) if (QListWidgetItem *currentItem = list->takeItem(currentIndex)) { list->insertItem(list->count(), currentItem); - list->setCurrentRow(list->count()-1); + list->setCurrentRow(list->count() - 1); } } @@ -525,8 +519,8 @@ auto DialogTool::Eval(const FormulaData &formulaData, bool &flag) -> qreal } //--------------------------------------------------------------------------------------------------------------------- -void DialogTool::setCurrentPointId(QComboBox *box, const quint32 &value, FillComboBox rule, - const quint32 &ch1, const quint32 &ch2) const +void DialogTool::setCurrentPointId(QComboBox *box, const quint32 &value, FillComboBox rule, const quint32 &ch1, + const quint32 &ch2) const { SCASSERT(box != nullptr) @@ -553,8 +547,8 @@ void DialogTool::setCurrentSplineId(QComboBox *box, const quint32 &value) const /** * @brief setCurrentArcId */ -void DialogTool::setCurrentArcId(QComboBox *box, const quint32 &value, FillComboBox rule, - const quint32 &ch1, const quint32 &ch2) const +void DialogTool::setCurrentArcId(QComboBox *box, const quint32 &value, FillComboBox rule, const quint32 &ch1, + const quint32 &ch2) const { SCASSERT(box != nullptr) FillComboBoxArcs(box, rule, ch1, ch2); @@ -605,7 +599,7 @@ auto DialogTool::SetObject(const quint32 &id, QComboBox *box, const QString &too { SCASSERT(box != nullptr) const qint32 index = box->findData(id); - if ( index != -1 ) + if (index != -1) { // -1 for not found box->setCurrentIndex(index); emit ToolTip(toolTip); @@ -637,8 +631,7 @@ void DialogTool::FillList(QComboBox *box, const QMap &list) co } //--------------------------------------------------------------------------------------------------------------------- -template -void DialogTool::PrepareList(QMap &list, quint32 id) const +template void DialogTool::PrepareList(QMap &list, quint32 id) const { const auto obj = data->GeometricObject(id); SCASSERT(obj != nullptr) @@ -660,7 +653,7 @@ void DialogTool::CheckState() SCASSERT(bOk != nullptr) bOk->setEnabled(IsValid()); // In case dialog hasn't apply button - if ( bApply != nullptr) + if (bApply != nullptr) { bApply->setEnabled(bOk->isEnabled()); } @@ -784,8 +777,8 @@ void DialogTool::FillCombo(QComboBox *box, GOType gType, FillComboBox rule, cons SCASSERT(box != nullptr) box->blockSignals(true); - const QHash > *objs = data->CalculationGObjects(); - QHash >::const_iterator i; + const QHash> *objs = data->CalculationGObjects(); + QHash>::const_iterator i; QMap list; for (i = objs->constBegin(); i != objs->constEnd(); ++i) { @@ -793,7 +786,7 @@ void DialogTool::FillCombo(QComboBox *box, GOType gType, FillComboBox rule, cons { if (i.key() != toolId && i.value()->getIdTool() != toolId && i.key() != ch1 && i.key() != ch2) { - QSharedPointer obj = i.value(); + const QSharedPointer &obj = i.value(); if (obj->getType() == gType) { PrepareList(list, i.key()); @@ -804,7 +797,7 @@ void DialogTool::FillCombo(QComboBox *box, GOType gType, FillComboBox rule, cons { if (i.key() != toolId && i.value()->getIdTool() != toolId) { - QSharedPointer obj = i.value(); + const QSharedPointer &obj = i.value(); if (obj->getType() == gType && obj->getMode() == Draw::Calculation) { PrepareList(list, i.key()); diff --git a/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp b/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp index 8e6233bcb..af3f3a339 100644 --- a/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp @@ -37,10 +37,9 @@ #include #include #include -#include -#include "../../visualization/visualization.h" #include "../../visualization/line/vistooltruedarts.h" +#include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" #include "../qmuparser/qmudef.h" #include "../vpatterndb/vcontainer.h" @@ -49,15 +48,15 @@ //--------------------------------------------------------------------------------------------------------------------- DialogTrueDarts::DialogTrueDarts(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogTrueDarts), - d1PointName(), - d2PointName(), - ch1(NULL_ID), - ch2(NULL_ID), - flagName1(true), - flagName2(true), - flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogTrueDarts), + d1PointName(), + d2PointName(), + ch1(NULL_ID), + ch2(NULL_ID), + flagName1(true), + flagName2(true), + flagError(false) { ui->setupUi(this); @@ -66,7 +65,7 @@ DialogTrueDarts::DialogTrueDarts(const VContainer *data, quint32 toolId, QWidget const QString name1 = VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel); const QString name2 = - VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel, name1); + VAbstractValApplication::VApp()->getCurrentDocument()->GenerateLabel(LabelType::NewLabel, name1); ui->lineEditFirstNewDartPoint->setText(name1); ui->lineEditSecondNewDartPoint->setText(name2); @@ -76,16 +75,11 @@ DialogTrueDarts::DialogTrueDarts(const VContainer *data, quint32 toolId, QWidget connect(ui->lineEditFirstNewDartPoint, &QLineEdit::textChanged, this, &DialogTrueDarts::NameDartPoint1Changed); connect(ui->lineEditSecondNewDartPoint, &QLineEdit::textChanged, this, &DialogTrueDarts::NameDartPoint2Changed); - connect(ui->comboBoxFirstBasePoint, &QComboBox::currentTextChanged, - this, &DialogTrueDarts::PointNameChanged); - connect(ui->comboBoxSecondBasePoint, &QComboBox::currentTextChanged, - this, &DialogTrueDarts::PointNameChanged); - connect(ui->comboBoxFirstDartPoint, &QComboBox::currentTextChanged, - this, &DialogTrueDarts::PointNameChanged); - connect(ui->comboBoxSecondDartPoint, &QComboBox::currentTextChanged, - this, &DialogTrueDarts::PointNameChanged); - connect(ui->comboBoxThirdDartPoint, &QComboBox::currentTextChanged, - this, &DialogTrueDarts::PointNameChanged); + connect(ui->comboBoxFirstBasePoint, &QComboBox::currentTextChanged, this, &DialogTrueDarts::PointNameChanged); + connect(ui->comboBoxSecondBasePoint, &QComboBox::currentTextChanged, this, &DialogTrueDarts::PointNameChanged); + connect(ui->comboBoxFirstDartPoint, &QComboBox::currentTextChanged, this, &DialogTrueDarts::PointNameChanged); + connect(ui->comboBoxSecondDartPoint, &QComboBox::currentTextChanged, this, &DialogTrueDarts::PointNameChanged); + connect(ui->comboBoxThirdDartPoint, &QComboBox::currentTextChanged, this, &DialogTrueDarts::PointNameChanged); vis = new VisToolTrueDarts(data); @@ -127,9 +121,9 @@ void DialogTrueDarts::SetNewDartPointNames(const QString &firstPoint, const QStr ui->lineEditFirstNewDartPoint->blockSignals(false); CheckName(ui->lineEditFirstNewDartPoint, ui->labelFirstNewDartPoint, d1PointName, d2PointName, - ui->lineEditSecondNewDartPoint, flagName1); + ui->lineEditSecondNewDartPoint, flagName1); CheckName(ui->lineEditSecondNewDartPoint, ui->labelSecondNewDartPoint, d1PointName, d2PointName, - ui->lineEditFirstNewDartPoint, flagName2); + ui->lineEditFirstNewDartPoint, flagName2); } //--------------------------------------------------------------------------------------------------------------------- @@ -223,7 +217,7 @@ void DialogTrueDarts::SetChildrenId(const quint32 &ch1, const quint32 &ch2) //--------------------------------------------------------------------------------------------------------------------- void DialogTrueDarts::ChosenObject(quint32 id, const SceneObject &type) { - if (prepare == false)// After first choose we ignore all objects + if (prepare == false) // After first choose we ignore all objects { if (type == SceneObject::Point) { @@ -381,11 +375,11 @@ void DialogTrueDarts::SaveData() //--------------------------------------------------------------------------------------------------------------------- void DialogTrueDarts::NameChanged(QLabel *labelEditNamePoint, const QString &pointD1Name, const QString &pointD2Name, - QLineEdit* secondPointName, bool &flagName) + QLineEdit *secondPointName, bool &flagName) { SCASSERT(labelEditNamePoint != nullptr) SCASSERT(secondPointName != nullptr) - QLineEdit* edit = qobject_cast(sender()); + QLineEdit *edit = qobject_cast(sender()); if (edit) { CheckName(edit, labelEditNamePoint, pointD1Name, pointD2Name, secondPointName, flagName); @@ -414,10 +408,9 @@ void DialogTrueDarts::CheckName(QLineEdit *edit, QLabel *labelEditNamePoint, con const QString name = edit->text(); const QString secondName = secondPointName->text(); QRegularExpression rx(NameRegExp()); - if (name.isEmpty() - || secondName == name - || (pointD1Name != name && pointD2Name != name && data->IsUnique(name) == false) - || rx.match(name).hasMatch() == false) + if (name.isEmpty() || secondName == name || + (pointD1Name != name && pointD2Name != name && data->IsUnique(name) == false) || + rx.match(name).hasMatch() == false) { flagName = false; ChangeColor(labelEditNamePoint, errorColor); diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp index 9c7ea8101..e8eb8708d 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp @@ -30,6 +30,7 @@ #include "../../../tools/vtoolseamallowance.h" #include "../../../visualization/path/vistoolpiecepath.h" #include "../../support/dialogeditwrongformula.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vmodifierkey.h" #include "../vpatterndb/variables/vincrement.h" #include "../vpatterndb/vpiecenode.h" @@ -78,6 +79,8 @@ DialogPiecePath::DialogPiecePath(const VContainer *data, quint32 toolId, QWidget ui->setupUi(this); InitOkCancel(ui); + InitIcons(); + InitPathTab(); InitSeamAllowanceTab(); InitPassmarksTab(); @@ -310,6 +313,24 @@ void DialogPiecePath::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPiecePath::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::ShowContextMenu(const QPoint &pos) { @@ -1137,7 +1158,8 @@ void DialogPiecePath::InitPathTab() { ui->lineEditName->setClearButtonEnabled(true); - FillComboBoxTypeLine(ui->comboBoxPenType, CurvePenStylesPics()); + FillComboBoxTypeLine(ui->comboBoxPenType, CurvePenStylesPics(ui->comboBoxPenType->palette().color(QPalette::Base), + ui->comboBoxPenType->palette().color(QPalette::Text))); connect(ui->lineEditName, &QLineEdit::textChanged, this, &DialogPiecePath::NameChanged); @@ -2202,3 +2224,24 @@ void DialogPiecePath::InitPassmarkAngleType(const VPieceNode &node) break; } } + +//--------------------------------------------------------------------------------------------------------------------- +void DialogPiecePath::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprWidth->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprBefore->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAfter->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprWidth_2->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprVisible->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_2->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_6->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_10->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_5->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h index f5325e5dd..5e1f91921 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h @@ -33,12 +33,13 @@ namespace Ui { - class DialogPiecePath; +class DialogPiecePath; } class DialogPiecePath : public DialogTool { Q_OBJECT // NOLINT + public: explicit DialogPiecePath(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); ~DialogPiecePath() override; @@ -65,6 +66,7 @@ protected: void CheckState() final; void ShowVisualization() override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; private slots: @@ -203,6 +205,8 @@ private: void InitPassmarkAngleFormula(const VPieceNode &node); void InitPassmarkShapeType(const VPieceNode &node); void InitPassmarkAngleType(const VPieceNode &node); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui index 8c87181f9..c47863d4d 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.ui @@ -127,7 +127,7 @@ Move on top - ... + @@ -144,7 +144,7 @@ Move up - ... + @@ -161,7 +161,7 @@ Move down - ... + @@ -178,7 +178,7 @@ Move on bottom - ... + @@ -308,11 +308,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -328,7 +328,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -544,11 +544,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -564,7 +564,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -743,11 +743,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -763,7 +763,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -1313,7 +1313,7 @@ - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -1538,7 +1538,7 @@ - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -1763,7 +1763,7 @@ - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -2003,11 +2003,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -2023,7 +2023,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp index 93d8d715d..b9c44bbd9 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp @@ -30,45 +30,46 @@ #include "../../../visualization/line/vistoolspecialpoint.h" #include "../../support/dialogeditwrongformula.h" +#include "../vmisc/theme/vtheme.h" +#include "../vpatterndb/vcontainer.h" + #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) -#include "../vpatterndb/vcontainer.h" #include //--------------------------------------------------------------------------------------------------------------------- DialogPlaceLabel::DialogPlaceLabel(const VContainer *data, quint32 toolId, QWidget *parent) - : DialogTool(data, toolId, parent), - ui(new Ui::DialogPlaceLabel), - m_showMode(false), - m_formulaBaseHeightWidth(0), - m_formulaBaseHeightHeight(0), - m_formulaBaseHeightAngle(0), - m_formulaBaseVisible(0), - timerAngle(new QTimer(this)), - timerWidth(new QTimer(this)), - timerHeight(new QTimer(this)), - m_timerVisible(new QTimer(this)), - m_flagPoint(false), - m_flagWidth(false), - m_flagHeight(false), - m_flagAngle(false), - m_flagFormulaVisible(false), - m_flagError(false) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPlaceLabel), + m_showMode(false), + m_formulaBaseHeightWidth(0), + m_formulaBaseHeightHeight(0), + m_formulaBaseHeightAngle(0), + m_formulaBaseVisible(0), + timerAngle(new QTimer(this)), + timerWidth(new QTimer(this)), + timerHeight(new QTimer(this)), + m_timerVisible(new QTimer(this)), + m_flagPoint(false), + m_flagWidth(false), + m_flagHeight(false), + m_flagAngle(false), + m_flagFormulaVisible(false), + m_flagError(false) { ui->setupUi(this); InitOkCancel(ui); + InitIcons(); + InitPlaceLabelTab(); InitControlTab(); EvalVisible(); - connect(ui->comboBoxPiece, QOverload::of(&QComboBox::currentIndexChanged), this, [this]() - { - CheckPieces(); - }); + connect(ui->comboBoxPiece, QOverload::of(&QComboBox::currentIndexChanged), this, [this]() { CheckPieces(); }); vis = new VisToolSpecialPoint(data); } @@ -134,8 +135,8 @@ auto DialogPlaceLabel::GetWidth() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::SetWidth(const QString &value) { - const QString formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + const QString formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (formula.length() > 80) @@ -144,9 +145,9 @@ void DialogPlaceLabel::SetWidth(const QString &value) } ui->plainTextEditFormulaWidth->setPlainText(formula); -// VisToolPlaceLabel *point = qobject_cast(vis); -// SCASSERT(point != nullptr) -// point->SetPointId(id); + // VisToolPlaceLabel *point = qobject_cast(vis); + // SCASSERT(point != nullptr) + // point->SetPointId(id); MoveCursorToEnd(ui->plainTextEditFormulaWidth); } @@ -161,8 +162,8 @@ auto DialogPlaceLabel::GetHeight() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::SetHeight(const QString &value) { - const QString formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + const QString formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (formula.length() > 80) @@ -171,9 +172,9 @@ void DialogPlaceLabel::SetHeight(const QString &value) } ui->plainTextEditFormulaHeight->setPlainText(formula); -// VisToolPlaceLabel *point = qobject_cast(vis); -// SCASSERT(point != nullptr) -// point->SetPointId(id); + // VisToolPlaceLabel *point = qobject_cast(vis); + // SCASSERT(point != nullptr) + // point->SetPointId(id); MoveCursorToEnd(ui->plainTextEditFormulaHeight); } @@ -188,8 +189,8 @@ auto DialogPlaceLabel::GetAngle() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::SetAngle(const QString &value) { - const QString formula = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + const QString formula = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + value, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. TODO : see if I can get the max number of caracters in one line // of this PlainTextEdit to change 80 to this value if (formula.length() > 80) @@ -198,9 +199,9 @@ void DialogPlaceLabel::SetAngle(const QString &value) } ui->plainTextEditFormulaAngle->setPlainText(formula); -// VisToolPlaceLabel *point = qobject_cast(vis); -// SCASSERT(point != nullptr) -// point->SetPointId(id); + // VisToolPlaceLabel *point = qobject_cast(vis); + // SCASSERT(point != nullptr) + // point->SetPointId(id); MoveCursorToEnd(ui->plainTextEditFormulaAngle); } @@ -290,6 +291,24 @@ void DialogPlaceLabel::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPlaceLabel::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::DeployFormulaWidthEdit() { @@ -437,28 +456,22 @@ void DialogPlaceLabel::InitPlaceLabelTab() ui->plainTextEditFormulaAngle->installEventFilter(this); ui->plainTextEditFormulaWidth->setPlainText( - QString::number(UnitConvertor(1, Unit::Cm, VAbstractValApplication::VApp()->patternUnits()))); + QString::number(UnitConvertor(1, Unit::Cm, VAbstractValApplication::VApp()->patternUnits()))); ui->plainTextEditFormulaHeight->setPlainText( - QString::number(UnitConvertor(1, Unit::Cm, VAbstractValApplication::VApp()->patternUnits()))); + QString::number(UnitConvertor(1, Unit::Cm, VAbstractValApplication::VApp()->patternUnits()))); connect(ui->toolButtonExprWidth, &QPushButton::clicked, this, &DialogPlaceLabel::FXWidth); connect(ui->toolButtonExprHeight, &QPushButton::clicked, this, &DialogPlaceLabel::FXHeight); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogPlaceLabel::FXAngle); - connect(ui->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, [this]() - { - timerWidth->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, + [this]() { timerWidth->start(formulaTimerTimeout); }); - connect(ui->plainTextEditFormulaHeight, &QPlainTextEdit::textChanged, this, [this]() - { - timerHeight->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditFormulaHeight, &QPlainTextEdit::textChanged, this, + [this]() { timerHeight->start(formulaTimerTimeout); }); - connect(ui->plainTextEditFormulaAngle, &QPlainTextEdit::textChanged, this, [this]() - { - timerAngle->start(formulaTimerTimeout); - }); + connect(ui->plainTextEditFormulaAngle, &QPlainTextEdit::textChanged, this, + [this]() { timerAngle->start(formulaTimerTimeout); }); connect(ui->pushButtonGrowWidth, &QPushButton::clicked, this, &DialogPlaceLabel::DeployFormulaWidthEdit); connect(ui->pushButtonGrowHeight, &QPushButton::clicked, this, &DialogPlaceLabel::DeployFormulaHeightEdit); @@ -488,12 +501,9 @@ void DialogPlaceLabel::InitControlTab() connect(m_timerVisible, &QTimer::timeout, this, &DialogPlaceLabel::EvalVisible); connect(ui->toolButtonExprVisible, &QPushButton::clicked, this, &DialogPlaceLabel::FXVisible); - connect(ui->plainTextEditFormulaVisible, &QPlainTextEdit::textChanged, this, [this]() - { - m_timerVisible->start(formulaTimerTimeout); - }); - connect(ui->pushButtonGrowVisible, &QPushButton::clicked, this, - &DialogPlaceLabel::DeployVisibleFormulaTextEdit); + connect(ui->plainTextEditFormulaVisible, &QPlainTextEdit::textChanged, this, + [this]() { m_timerVisible->start(formulaTimerTimeout); }); + connect(ui->pushButtonGrowVisible, &QPushButton::clicked, this, &DialogPlaceLabel::DeployVisibleFormulaTextEdit); } //--------------------------------------------------------------------------------------------------------------------- @@ -547,6 +557,24 @@ void DialogPlaceLabel::CheckPoint() CheckState(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPlaceLabel::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + ui->toolButtonExprWidth->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprHeight->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + ui->toolButtonExprVisible->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + ui->label_4->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_5->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_6->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + ui->label_8->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); +} + //--------------------------------------------------------------------------------------------------------------------- auto DialogPlaceLabel::GetFormulaVisible() const -> QString { @@ -557,8 +585,8 @@ auto DialogPlaceLabel::GetFormulaVisible() const -> QString //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::SetFormulaVisible(const QString &formula) { - const QString f = VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(formula, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + const QString f = VAbstractApplication::VApp()->TrVars()->FormulaToUser( + formula, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); // increase height if needed. if (f.length() > 80) { diff --git a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h index e92e4fa8b..12ccdd2c3 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h @@ -32,7 +32,7 @@ namespace Ui { - class DialogPlaceLabel; +class DialogPlaceLabel; } class VPlaceLabelItem; @@ -43,40 +43,41 @@ class DialogPlaceLabel : public DialogTool public: explicit DialogPlaceLabel(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); - virtual ~DialogPlaceLabel(); + ~DialogPlaceLabel() override; void EnbleShowMode(bool disable); auto GetCenterPoint() const -> quint32; - void SetCenterPoint(quint32 id); + void SetCenterPoint(quint32 id); auto GetLabelType() const -> PlaceLabelType; - void SetLabelType(PlaceLabelType type); + void SetLabelType(PlaceLabelType type); auto GetWidth() const -> QString; - void SetWidth(const QString &value); + void SetWidth(const QString &value); auto GetHeight() const -> QString; - void SetHeight(const QString &value); + void SetHeight(const QString &value); auto GetAngle() const -> QString; - void SetAngle(const QString &value); + void SetAngle(const QString &value); auto GetPieceId() const -> quint32; - void SetPieceId(quint32 id); + void SetPieceId(quint32 id); auto GetFormulaVisible() const -> QString; - void SetFormulaVisible(const QString &formula); + void SetFormulaVisible(const QString &formula); - virtual void SetPiecesList(const QVector &list) override; + void SetPiecesList(const QVector &list) override; public slots: - virtual void ChosenObject(quint32 id, const SceneObject &type) override; + void ChosenObject(quint32 id, const SceneObject &type) override; protected: - virtual void ShowVisualization() override; - virtual void closeEvent(QCloseEvent *event) override; - virtual auto IsValid() const -> bool final; + void ShowVisualization() override; + void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent *event) override; + auto IsValid() const -> bool final; private slots: void DeployFormulaWidthEdit(); @@ -124,6 +125,8 @@ private: void CheckPieces(); void CheckPoint(); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.ui b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.ui index 259a54727..20e796d71 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.ui +++ b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.ui @@ -99,11 +99,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -119,7 +119,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -282,11 +282,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -302,7 +302,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -465,11 +465,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -485,7 +485,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -698,11 +698,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -718,7 +718,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp index c252f4e48..7d6a767ba 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp @@ -36,6 +36,7 @@ #include "../../support/dialogeditlabel.h" #include "../../support/dialogeditwrongformula.h" #include "../vgeometry/vplacelabelitem.h" +#include "../vmisc/theme/vtheme.h" #include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vmodifierkey.h" #include "../vmisc/vvalentinasettings.h" @@ -50,6 +51,7 @@ #include "dialogpatternmaterials.h" #include "dialogpiecepath.h" #include "dialogplacelabel.h" +#include "qstringliteral.h" #include "ui_dialogseamallowance.h" #include "ui_tabgrainline.h" #include "ui_tablabels.h" @@ -182,6 +184,8 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, quint32 toolId, InitPassmarksTab(); InitPlaceLabelsTab(); + InitIcons(); + ChangeColor(uiTabPaths->labelEditName, OkColor(this)); flagMainPathIsValid = MainPathIsValid(); @@ -693,6 +697,24 @@ void DialogSeamAllowance::resizeEvent(QResizeEvent *event) DialogTool::resizeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogSeamAllowance::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } + + if (event->type() == QEvent::PaletteChange) + { + InitIcons(); + InitDialogButtonBoxIcons(ui->buttonBox); + } + + // remember to call base class implementation + DialogTool::changeEvent(event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::SetPatternDoc(VAbstractPattern *doc) { @@ -4434,6 +4456,43 @@ void DialogSeamAllowance::InitPassmarkAngleType(const VPieceNode &node) } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogSeamAllowance::InitIcons() +{ + const QString resource = QStringLiteral("icon"); + + const QString fxIcon = QStringLiteral("24x24/fx.png"); + uiTabGrainline->pushButtonRot->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabGrainline->pushButtonLen->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabLabels->pushButtonDLWidth->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabLabels->pushButtonDLHeight->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabLabels->pushButtonDLAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabLabels->pushButtonPLWidth->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabLabels->pushButtonPLHeight->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabLabels->pushButtonPLAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabPassmarks->toolButtonExprLength->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabPassmarks->toolButtonExprWidth->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabPassmarks->toolButtonExprAngle->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabPaths->toolButtonExprWidth->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabPaths->toolButtonExprBefore->setIcon(VTheme::GetIconResource(resource, fxIcon)); + uiTabPaths->toolButtonExprAfter->setIcon(VTheme::GetIconResource(resource, fxIcon)); + + const QString equalIcon = QStringLiteral("24x24/equal.png"); + uiTabGrainline->labelEqual->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabGrainline->labelEqual_2->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabLabels->labelEqual_3->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabLabels->labelEqual_4->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabLabels->labelEqual_5->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabLabels->labelEqual_7->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabLabels->labelEqual_6->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabLabels->labelEqual_8->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabPaths->label_2->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabPaths->label_6->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + uiTabPaths->label_10->setPixmap(VTheme::GetPixmapResource(resource, equalIcon)); + + uiTabPaths->label_3->setPixmap(VTheme::GetPixmapResource(resource, QStringLiteral("32x32/clockwise.png"))); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::SetMoveControls() { diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h index 0c7f223f6..57509c0f1 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h @@ -78,6 +78,7 @@ protected: void closeEvent(QCloseEvent *event) override; void showEvent(QShowEvent *event) override; void resizeEvent(QResizeEvent *event) override; + void changeEvent(QEvent *event) override; auto IsValid() const -> bool final; void SetPatternDoc(VAbstractPattern *doc) final; @@ -343,6 +344,8 @@ private: void InitPassmarkAngleFormula(const VPieceNode &node); void InitPassmarkShapeType(const VPieceNode &node); void InitPassmarkAngleType(const VPieceNode &node); + + void InitIcons(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/piece/tabs/tabgrainline.ui b/src/libs/vtools/dialogs/tools/piece/tabs/tabgrainline.ui index 98bf02fe3..25bef8c5f 100644 --- a/src/libs/vtools/dialogs/tools/piece/tabs/tabgrainline.ui +++ b/src/libs/vtools/dialogs/tools/piece/tabs/tabgrainline.ui @@ -116,11 +116,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -136,7 +136,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -305,11 +305,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -325,7 +325,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/piece/tabs/tablabels.ui b/src/libs/vtools/dialogs/tools/piece/tabs/tablabels.ui index a9a2fe3da..0c5b905d5 100644 --- a/src/libs/vtools/dialogs/tools/piece/tabs/tablabels.ui +++ b/src/libs/vtools/dialogs/tools/piece/tabs/tablabels.ui @@ -36,7 +36,7 @@ - 0 + 1 @@ -548,11 +548,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -568,7 +568,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -737,11 +737,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -757,7 +757,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -984,11 +984,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -1004,7 +1004,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -1226,11 +1226,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -1246,7 +1246,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -1415,11 +1415,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -1435,7 +1435,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -1662,11 +1662,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -1682,7 +1682,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui b/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui index 4f4aac3d2..86bbf5b0e 100644 --- a/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui +++ b/src/libs/vtools/dialogs/tools/piece/tabs/tabpassmarks.ui @@ -437,7 +437,7 @@ - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -662,7 +662,7 @@ - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -890,7 +890,7 @@ - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png diff --git a/src/libs/vtools/dialogs/tools/piece/tabs/tabpaths.ui b/src/libs/vtools/dialogs/tools/piece/tabs/tabpaths.ui index b5657ab83..82ad9654f 100644 --- a/src/libs/vtools/dialogs/tools/piece/tabs/tabpaths.ui +++ b/src/libs/vtools/dialogs/tools/piece/tabs/tabpaths.ui @@ -57,7 +57,7 @@ - :/icon/32x32/clockwise.png + :/icon/light/32x32/clockwise.png @@ -111,7 +111,7 @@ Move on top - ... + @@ -128,7 +128,7 @@ Move up - ... + @@ -145,7 +145,7 @@ Move down - ... + @@ -162,7 +162,7 @@ Move on bottom - ... + @@ -457,11 +457,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -477,7 +477,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -696,11 +696,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -716,7 +716,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png @@ -886,11 +886,11 @@ Formula wizard - ... + - :/icon/24x24/fx.png:/icon/24x24/fx.png + :/icon/light/24x24/fx.png:/icon/light/24x24/fx.png @@ -906,7 +906,7 @@ - :/icon/24x24/equal.png + :/icon/light/24x24/equal.png diff --git a/src/libs/vtools/tools/backgroundimage/vbackgroundimagecontrols.cpp b/src/libs/vtools/tools/backgroundimage/vbackgroundimagecontrols.cpp index 758a98ccd..1e82684aa 100644 --- a/src/libs/vtools/tools/backgroundimage/vbackgroundimagecontrols.cpp +++ b/src/libs/vtools/tools/backgroundimage/vbackgroundimagecontrols.cpp @@ -36,14 +36,16 @@ #include #include -#include "../ifc/xml/vabstractpattern.h" -#include "vbackgroundimageitem.h" -#include "../vwidgets/global.h" -#include "../vmisc/vabstractvalapplication.h" -#include "../../undocommands/image/scalebackgroundimage.h" #include "../../undocommands/image/rotatebackgroundimage.h" +#include "../../undocommands/image/scalebackgroundimage.h" +#include "../ifc/xml/vabstractpattern.h" +#include "../vmisc/vabstractvalapplication.h" #include "../vmisc/vmath.h" +#include "../vwidgets/global.h" #include "../vwidgets/vmaingraphicsview.h" +#include "qstringliteral.h" +#include "theme/vtheme.h" +#include "vbackgroundimageitem.h" namespace { @@ -51,7 +53,7 @@ namespace auto RectTopPoint(const QRectF &rect) -> QPointF { QLineF edge(rect.topLeft(), rect.topRight()); - edge.setLength(edge.length()/2.); + edge.setLength(edge.length() / 2.); return edge.p2(); } @@ -59,7 +61,7 @@ auto RectTopPoint(const QRectF &rect) -> QPointF auto RectRightPoint(const QRectF &rect) -> QPointF { QLineF edge(rect.topRight(), rect.bottomRight()); - edge.setLength(edge.length()/2.); + edge.setLength(edge.length() / 2.); return edge.p2(); } @@ -67,7 +69,7 @@ auto RectRightPoint(const QRectF &rect) -> QPointF auto RectBottomPoint(const QRectF &rect) -> QPointF { QLineF edge(rect.bottomLeft(), rect.bottomRight()); - edge.setLength(edge.length()/2.); + edge.setLength(edge.length() / 2.); return edge.p2(); } @@ -75,15 +77,15 @@ auto RectBottomPoint(const QRectF &rect) -> QPointF auto RectLeftPoint(const QRectF &rect) -> QPointF { QLineF edge(rect.bottomLeft(), rect.topLeft()); - edge.setLength(edge.length()/2.); + edge.setLength(edge.length() / 2.); return edge.p2(); } -} // namespace +} // namespace //--------------------------------------------------------------------------------------------------------------------- -VBackgroundImageControls::VBackgroundImageControls(VAbstractPattern *doc, QGraphicsItem * parent) - : QGraphicsObject(parent), - m_doc(doc) +VBackgroundImageControls::VBackgroundImageControls(VAbstractPattern *doc, QGraphicsItem *parent) + : QGraphicsObject(parent), + m_doc(doc) { SCASSERT(doc != nullptr) setVisible(false); @@ -103,7 +105,6 @@ VBackgroundImageControls::VBackgroundImageControls(VAbstractPattern *doc, QGraph #endif } - //--------------------------------------------------------------------------------------------------------------------- void VBackgroundImageControls::ActivateControls(const QUuid &id) { @@ -156,9 +157,8 @@ void VBackgroundImageControls::DeactivateControls(QGraphicsItem *item) return; } - if (item->type() == type() || - item->type() == UserType + static_cast(Tool::BackgroundPixmapImage) || - item->type() == UserType + static_cast(Tool::BackgroundSVGImage)) + if (item->type() == type() || item->type() == UserType + static_cast(Tool::BackgroundPixmapImage) || + item->type() == UserType + static_cast(Tool::BackgroundSVGImage)) { return; } @@ -178,7 +178,7 @@ void VBackgroundImageControls::UpdateControls() prepareGeometryChange(); m_image = m_doc->GetBackgroundImage(m_id); - if(not m_customOrigin) + if (not m_customOrigin) { m_originPos = m_image.BoundingRect().center(); } @@ -199,21 +199,16 @@ auto VBackgroundImageControls::boundingRect() const -> QRectF { HandlerBoundingRect(BIHandleCorner::TopLeft, BIHandleCornerType::ScaleTopLeftBottomRight, TopLeftHandlerPosition()); - HandlerBoundingRect(BIHandleCorner::Top, BIHandleCornerType::ScaleTopBottom, - TopHandlerPosition()); + HandlerBoundingRect(BIHandleCorner::Top, BIHandleCornerType::ScaleTopBottom, TopHandlerPosition()); HandlerBoundingRect(BIHandleCorner::TopRight, BIHandleCornerType::ScaleTopRightBottomLeft, TopRightHandlerPosition()); - HandlerBoundingRect(BIHandleCorner::Right, BIHandleCornerType::ScaleRightLeft, - RightHandlerPosition()); + HandlerBoundingRect(BIHandleCorner::Right, BIHandleCornerType::ScaleRightLeft, RightHandlerPosition()); HandlerBoundingRect(BIHandleCorner::BottomRight, BIHandleCornerType::ScaleTopLeftBottomRight, BottomRightHandlerPosition()); - HandlerBoundingRect(BIHandleCorner::Bottom, BIHandleCornerType::ScaleTopBottom, - BottomHandlerPosition()); + HandlerBoundingRect(BIHandleCorner::Bottom, BIHandleCornerType::ScaleTopBottom, BottomHandlerPosition()); HandlerBoundingRect(BIHandleCorner::BottomLeft, BIHandleCornerType::ScaleTopRightBottomLeft, BottomLeftHandlerPosition()); - HandlerBoundingRect(BIHandleCorner::Left, BIHandleCornerType::ScaleRightLeft, - LeftHandlerPosition()); - + HandlerBoundingRect(BIHandleCorner::Left, BIHandleCornerType::ScaleRightLeft, LeftHandlerPosition()); } else if (m_tranformationType == BITransformationType::Rotate) { @@ -249,48 +244,42 @@ void VBackgroundImageControls::paint(QPainter *painter, const QStyleOptionGraphi { if (m_tranformationType == BITransformationType::Scale) { - painter->drawPixmap(TopLeftHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::TopLeft, - BIHandleCornerType::ScaleTopLeftBottomRight)); - painter->drawPixmap(TopHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::Top, - BIHandleCornerType::ScaleTopBottom)); + painter->drawPixmap(TopLeftHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::TopLeft, + BIHandleCornerType::ScaleTopLeftBottomRight)); + painter->drawPixmap(TopHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::Top, + BIHandleCornerType::ScaleTopBottom)); painter->drawPixmap(TopRightHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::TopRight, BIHandleCornerType::ScaleTopRightBottomLeft)); - painter->drawPixmap(RightHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::Right, - BIHandleCornerType::ScaleRightLeft)); + painter->drawPixmap(RightHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::Right, + BIHandleCornerType::ScaleRightLeft)); painter->drawPixmap(BottomRightHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::BottomRight, BIHandleCornerType::ScaleTopLeftBottomRight)); - painter->drawPixmap(BottomHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::Bottom, - BIHandleCornerType::ScaleTopBottom)); + painter->drawPixmap(BottomHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::Bottom, + BIHandleCornerType::ScaleTopBottom)); painter->drawPixmap(BottomLeftHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::BottomLeft, BIHandleCornerType::ScaleTopRightBottomLeft)); - painter->drawPixmap(LeftHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::Left, - BIHandleCornerType::ScaleRightLeft)); + painter->drawPixmap(LeftHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::Left, + BIHandleCornerType::ScaleRightLeft)); } else if (m_tranformationType == BITransformationType::Rotate) { - painter->drawPixmap(TopLeftHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::TopLeft, - BIHandleCornerType::RotateTopLeft)); + painter->drawPixmap(TopLeftHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::TopLeft, + BIHandleCornerType::RotateTopLeft)); - painter->drawPixmap(TopRightHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::TopRight, - BIHandleCornerType::RotateTopRight)); + painter->drawPixmap( + TopRightHandlerPosition(), + HandlerPixmap(m_handleCornerHover == BIHandleCorner::TopRight, BIHandleCornerType::RotateTopRight)); painter->drawPixmap(BottomRightHandlerPosition(), HandlerPixmap(m_handleCornerHover == BIHandleCorner::BottomRight, BIHandleCornerType::RotateBottomRight)); - painter->drawPixmap(BottomLeftHandlerPosition(), - HandlerPixmap(m_handleCornerHover == BIHandleCorner::BottomLeft, - BIHandleCornerType::RotateBottomLeft)); + painter->drawPixmap( + BottomLeftHandlerPosition(), + HandlerPixmap(m_handleCornerHover == BIHandleCorner::BottomLeft, BIHandleCornerType::RotateBottomLeft)); } } @@ -301,7 +290,7 @@ void VBackgroundImageControls::paint(QPainter *painter, const QStyleOptionGraphi painter->setPen(pen); QRectF rect = m_image.BoundingRect(); - rect = QRectF(rect.topLeft()*sceneScale, rect.bottomRight()*sceneScale); + rect = QRectF(rect.topLeft() * sceneScale, rect.bottomRight() * sceneScale); painter->drawRect(rect.adjusted(-pen.width(), -pen.width(), pen.width(), pen.width())); painter->restore(); @@ -323,7 +312,7 @@ void VBackgroundImageControls::paint(QPainter *painter, const QStyleOptionGraphi //--------------------------------------------------------------------------------------------------------------------- void VBackgroundImageControls::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if(event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) + if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) { m_transformationApplied = true; m_controlsVisible = false; @@ -348,13 +337,13 @@ void VBackgroundImageControls::mousePressEvent(QGraphicsSceneMouseEvent *event) const qreal sceneScale = SceneScale(scene()); m_imageBoundingRect = m_image.BoundingRect(); - m_imageScreenBoundingRect = QRectF(m_imageBoundingRect.topLeft()*sceneScale, - QSizeF(m_imageBoundingRect.width()*sceneScale, - m_imageBoundingRect.height()*sceneScale)); + m_imageScreenBoundingRect = + QRectF(m_imageBoundingRect.topLeft() * sceneScale, + QSizeF(m_imageBoundingRect.width() * sceneScale, m_imageBoundingRect.height() * sceneScale)); m_originalMatrix = m_image.Matrix(); - switch(m_handleCornerHover) + switch (m_handleCornerHover) { case BIHandleCorner::TopLeft: m_scaleDiff = event->pos() - m_imageScreenBoundingRect.topLeft(); @@ -413,7 +402,7 @@ void VBackgroundImageControls::mouseMoveEvent(QGraphicsSceneMouseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void VBackgroundImageControls::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - if(event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton) { if (SelectedHandleCorner(event->pos()) != BIHandleCorner::Invalid) { @@ -495,43 +484,35 @@ void VBackgroundImageControls::InitPixmaps() m_handleDisabledPixmaps.clear(); m_handlePaths.clear(); - auto InitPixmap = [this](BIHandleCornerType type, const QString &fileName) + auto InitPixmap = [this](BIHandleCornerType type, const QString &imageName) { - const QFileInfo fileInfo(fileName); - const QString imageName = fileInfo.baseName(); + const QString fileName = QStringLiteral("32x32/%1.png").arg(imageName); + const QString fileNameHover = QStringLiteral("32x32/%1-hover.png").arg(imageName); + const QString fileNameDisabled = QStringLiteral("32x32/%1-disabled.png").arg(imageName); - const QString fileNameHover = QStringLiteral("%1/%2-hover.%3") - .arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); - - const QString fileNameDisabled = QStringLiteral("%1/%2-disabled.%3") - .arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); + const QString resource = QStringLiteral("icon"); #if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) - if (QGuiApplication::primaryScreen()->devicePixelRatio() >= 2 ) + if (QGuiApplication::primaryScreen()->devicePixelRatio() >= 2) { - const QString fileName2x = QStringLiteral("%1/%2@2x.%3") - .arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); + const QString fileName2x = QStringLiteral("32x32/%1@2x.png").arg(imageName); + const QString fileName2xHover = QStringLiteral("32x32/%1-hover@2x.png").arg(imageName); + const QString fileName2xDisabled = QStringLiteral("32x32/%1-disabled@2x.png").arg(imageName); - const QString fileName2xHover = QStringLiteral("%1/%2-hover@2x.%3") - .arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); - - const QString fileName2xDisabled = QStringLiteral("%1/%2-disabled@2x.%3") - .arg(fileInfo.absolutePath(), imageName, fileInfo.suffix()); - - m_handlePixmaps.insert(type, QPixmap(fileName2x)); - m_handleHoverPixmaps.insert(type, QPixmap(fileName2xHover)); - m_handleDisabledPixmaps.insert(type, QPixmap(fileName2xDisabled)); + m_handlePixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName2x)); + m_handleHoverPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName2xHover)); + m_handleDisabledPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName2xDisabled)); } else { - m_handlePixmaps.insert(type, QPixmap(fileName)); - m_handleHoverPixmaps.insert(type, QPixmap(fileNameHover)); - m_handleDisabledPixmaps.insert(type, QPixmap(fileNameDisabled)); + m_handlePixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName)); + m_handleHoverPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileNameHover)); + m_handleDisabledPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileNameDisabled)); } #else - m_handlePixmaps.insert(type, QPixmap(fileName)); - m_handleHoverPixmaps.insert(type, QPixmap(fileNameHover)); - m_handleDisabledPixmaps.insert(type, QPixmap(fileNameDisabled)); + m_handlePixmaps.insert(type, VTheme::GetPixmapResource(resource, fileName)); + m_handleHoverPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileNameHover)); + m_handleDisabledPixmaps.insert(type, VTheme::GetPixmapResource(resource, fileNameDisabled)); #endif QPainterPath p = PixmapToPainterPath(m_handlePixmaps.value(type)); p.setFillRule(Qt::WindingFill); @@ -539,14 +520,14 @@ void VBackgroundImageControls::InitPixmaps() m_handlePaths.insert(type, p); }; - InitPixmap(BIHandleCornerType::ScaleTopLeftBottomRight, QStringLiteral("://icon/32x32/expand2.png")); - InitPixmap(BIHandleCornerType::ScaleTopBottom, QStringLiteral("://icon/32x32/double-arrow-vertical.png")); - InitPixmap(BIHandleCornerType::ScaleTopRightBottomLeft, QStringLiteral("://icon/32x32/expand1.png")); - InitPixmap(BIHandleCornerType::ScaleRightLeft, QStringLiteral("://icon/32x32/double-arrow-horizontal.png")); - InitPixmap(BIHandleCornerType::RotateTopLeft, QStringLiteral("://icon/32x32/rotate-top-left.png")); - InitPixmap(BIHandleCornerType::RotateTopRight, QStringLiteral("://icon/32x32/rotate-top-right.png")); - InitPixmap(BIHandleCornerType::RotateBottomRight, QStringLiteral("://icon/32x32/rotate-bottom-right.png")); - InitPixmap(BIHandleCornerType::RotateBottomLeft, QStringLiteral("://icon/32x32/rotate-bottom-left.png")); + InitPixmap(BIHandleCornerType::ScaleTopLeftBottomRight, QStringLiteral("expand2")); + InitPixmap(BIHandleCornerType::ScaleTopBottom, QStringLiteral("double-arrow-vertical")); + InitPixmap(BIHandleCornerType::ScaleTopRightBottomLeft, QStringLiteral("expand1")); + InitPixmap(BIHandleCornerType::ScaleRightLeft, QStringLiteral("double-arrow-horizontal")); + InitPixmap(BIHandleCornerType::RotateTopLeft, QStringLiteral("rotate-top-left")); + InitPixmap(BIHandleCornerType::RotateTopRight, QStringLiteral("rotate-top-right")); + InitPixmap(BIHandleCornerType::RotateBottomRight, QStringLiteral("rotate-bottom-right")); + InitPixmap(BIHandleCornerType::RotateBottomLeft, QStringLiteral("rotate-bottom-left")); } //--------------------------------------------------------------------------------------------------------------------- @@ -561,7 +542,7 @@ auto VBackgroundImageControls::TopHandlerPosition() const -> QPointF QRectF rect = ControllersRect(); QPixmap handler = m_handlePixmaps.value(BIHandleCornerType::ScaleTopBottom); QSize size = handler.size() / handler.devicePixelRatio(); - return {rect.topLeft().x() + (rect.width()/2. - size.width()/2.), rect.topLeft().y()}; + return {rect.topLeft().x() + (rect.width() / 2. - size.width() / 2.), rect.topLeft().y()}; } //--------------------------------------------------------------------------------------------------------------------- @@ -580,7 +561,7 @@ auto VBackgroundImageControls::RightHandlerPosition() const -> QPointF QPixmap handler = m_handlePixmaps.value(BIHandleCornerType::ScaleRightLeft); QSize size = handler.size() / handler.devicePixelRatio(); return {rect.topLeft().x() + (rect.width() - size.width()), - rect.topLeft().y() + (rect.height()/2. - size.height()/2.)}; + rect.topLeft().y() + (rect.height() / 2. - size.height() / 2.)}; } //--------------------------------------------------------------------------------------------------------------------- @@ -589,8 +570,7 @@ auto VBackgroundImageControls::BottomRightHandlerPosition() const -> QPointF QRectF rect = ControllersRect(); QPixmap handler = m_handlePixmaps.value(BIHandleCornerType::ScaleTopLeftBottomRight); QSize size = handler.size() / handler.devicePixelRatio(); - return {rect.topLeft().x() + (rect.width() - size.width()), - rect.topLeft().y() + (rect.height() - size.height())}; + return {rect.topLeft().x() + (rect.width() - size.width()), rect.topLeft().y() + (rect.height() - size.height())}; } //--------------------------------------------------------------------------------------------------------------------- @@ -599,8 +579,8 @@ auto VBackgroundImageControls::BottomHandlerPosition() const -> QPointF QRectF rect = ControllersRect(); QPixmap handler = m_handlePixmaps.value(BIHandleCornerType::ScaleTopBottom); QSize size = handler.size() / handler.devicePixelRatio(); - return {rect.topLeft().x() + (rect.width()/2. - size.width()/2.), - rect.topLeft().y() + (rect.height() - size.height())}; + return {rect.topLeft().x() + (rect.width() / 2. - size.width() / 2.), + rect.topLeft().y() + (rect.height() - size.height())}; } //--------------------------------------------------------------------------------------------------------------------- @@ -618,7 +598,7 @@ auto VBackgroundImageControls::LeftHandlerPosition() const -> QPointF QRectF rect = ControllersRect(); QPixmap handler = m_handlePixmaps.value(BIHandleCornerType::ScaleRightLeft); QSize size = handler.size() / handler.devicePixelRatio(); - return {rect.topLeft().x(), rect.topLeft().y() + (rect.height()/2. - size.height()/2.)}; + return {rect.topLeft().x(), rect.topLeft().y() + (rect.height() / 2. - size.height() / 2.)}; } //--------------------------------------------------------------------------------------------------------------------- @@ -776,7 +756,7 @@ auto VBackgroundImageControls::ScaleByTopLeft(QGraphicsSceneMouseEvent *event) c if (newScalePoint.y() > rect.bottomRight().y()) { - newScalePoint.ry() = rect.bottomRight().y()- (newScalePoint.y() - rect.bottomRight().y()); + newScalePoint.ry() = rect.bottomRight().y() - (newScalePoint.y() - rect.bottomRight().y()); } diff = newScalePoint - rect.topLeft(); @@ -784,10 +764,10 @@ auto VBackgroundImageControls::ScaleByTopLeft(QGraphicsSceneMouseEvent *event) c nowRect = QRectF(newScalePoint, rect.bottomRight()); } - qreal scaleX = nowRect.width()/rect.width(); - qreal scaleY = nowRect.height()/rect.height(); + qreal scaleX = nowRect.width() / rect.width(); + qreal scaleY = nowRect.height() / rect.height(); - if (not (event->modifiers() & Qt::ControlModifier)) + if (not(event->modifiers() & Qt::ControlModifier)) { if (diff.x() > 0 && diff.x() >= diff.y()) { @@ -808,8 +788,8 @@ auto VBackgroundImageControls::ScaleByTopLeft(QGraphicsSceneMouseEvent *event) c QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : rectOriginal.bottomRight(); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : rectOriginal.bottomRight(); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); @@ -882,8 +862,8 @@ auto VBackgroundImageControls::ScaleByTop(QGraphicsSceneMouseEvent *event) const nowRect = QRectF(QPointF(rect.topLeft().x(), newScalePoint.y()), rect.bottomRight()); } - qreal scaleX = nowRect.height()/rect.height(); - qreal scaleY = nowRect.height()/rect.height(); + qreal scaleX = nowRect.height() / rect.height(); + qreal scaleY = nowRect.height() / rect.height(); if (event->modifiers() & Qt::ControlModifier) { @@ -894,8 +874,8 @@ auto VBackgroundImageControls::ScaleByTop(QGraphicsSceneMouseEvent *event) const QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : RectBottomPoint(rectOriginal); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : RectBottomPoint(rectOriginal); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); m.scale(scaleX, scaleY); @@ -994,14 +974,14 @@ auto VBackgroundImageControls::ScaleByTopRight(QGraphicsSceneMouseEvent *event) diff = newScalePoint - rect.topRight(); - nowRect = QRectF(QPointF(rect.topLeft().x(), newScalePoint.y()), - QPointF(newScalePoint.x(), rect.bottomRight().y())); + nowRect = + QRectF(QPointF(rect.topLeft().x(), newScalePoint.y()), QPointF(newScalePoint.x(), rect.bottomRight().y())); } - qreal scaleX = nowRect.width()/rect.width(); - qreal scaleY = nowRect.height()/rect.height(); + qreal scaleX = nowRect.width() / rect.width(); + qreal scaleY = nowRect.height() / rect.height(); - if (not (event->modifiers() & Qt::ControlModifier)) + if (not(event->modifiers() & Qt::ControlModifier)) { if (diff.x() < 0 && qAbs(diff.x()) >= qAbs(diff.y())) { @@ -1021,8 +1001,8 @@ auto VBackgroundImageControls::ScaleByTopRight(QGraphicsSceneMouseEvent *event) QPointF newScalePoint = pos - m_scaleDiff; QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : rectOriginal.bottomLeft(); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : rectOriginal.bottomLeft(); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); m.scale(scaleX, scaleY); @@ -1095,8 +1075,8 @@ auto VBackgroundImageControls::ScaleByRight(QGraphicsSceneMouseEvent *event) con nowRect = QRectF(rect.topLeft(), QPointF(newScalePoint.x(), rect.bottomRight().y())); } - qreal scaleX = nowRect.width()/rect.width(); - qreal scaleY = nowRect.width()/rect.width(); + qreal scaleX = nowRect.width() / rect.width(); + qreal scaleY = nowRect.width() / rect.width(); if (event->modifiers() & Qt::ControlModifier) { @@ -1107,8 +1087,8 @@ auto VBackgroundImageControls::ScaleByRight(QGraphicsSceneMouseEvent *event) con QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : RectLeftPoint(rectOriginal); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : RectLeftPoint(rectOriginal); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); m.scale(scaleX, scaleY); @@ -1205,10 +1185,10 @@ auto VBackgroundImageControls::ScaleByBottomRight(QGraphicsSceneMouseEvent *even nowRect = QRectF(rect.topLeft(), newScalePoint); } - qreal scaleX = nowRect.width()/rect.width(); - qreal scaleY = nowRect.height()/rect.height(); + qreal scaleX = nowRect.width() / rect.width(); + qreal scaleY = nowRect.height() / rect.height(); - if (not (event->modifiers() & Qt::ControlModifier)) + if (not(event->modifiers() & Qt::ControlModifier)) { if (diff.x() < 0 && diff.x() <= diff.y()) { @@ -1230,8 +1210,8 @@ auto VBackgroundImageControls::ScaleByBottomRight(QGraphicsSceneMouseEvent *even QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : rectOriginal.topLeft(); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : rectOriginal.topLeft(); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); @@ -1304,8 +1284,8 @@ auto VBackgroundImageControls::ScaleByBottom(QGraphicsSceneMouseEvent *event) co nowRect = QRectF(rect.topLeft(), QPointF(rect.bottomRight().x(), newScalePoint.y())); } - qreal scaleX = nowRect.height()/rect.height(); - qreal scaleY = nowRect.height()/rect.height(); + qreal scaleX = nowRect.height() / rect.height(); + qreal scaleY = nowRect.height() / rect.height(); if (event->modifiers() & Qt::ControlModifier) { @@ -1316,8 +1296,8 @@ auto VBackgroundImageControls::ScaleByBottom(QGraphicsSceneMouseEvent *event) co QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : RectTopPoint(rectOriginal); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : RectTopPoint(rectOriginal); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); m.scale(scaleX, scaleY); @@ -1394,7 +1374,7 @@ auto VBackgroundImageControls::ScaleByBottomLeft(QGraphicsSceneMouseEvent *event } else { - move = diff.y()*-1; + move = diff.y() * -1; } } qDebug() << move; @@ -1417,14 +1397,14 @@ auto VBackgroundImageControls::ScaleByBottomLeft(QGraphicsSceneMouseEvent *event diff = newScalePoint - rect.topRight(); - nowRect = QRectF(QPointF(newScalePoint.x(), rect.topLeft().y()), - QPointF(rect.bottomRight().x(), newScalePoint.y())); + nowRect = + QRectF(QPointF(newScalePoint.x(), rect.topLeft().y()), QPointF(rect.bottomRight().x(), newScalePoint.y())); } - qreal scaleX = nowRect.width()/rect.width(); - qreal scaleY = nowRect.height()/rect.height(); + qreal scaleX = nowRect.width() / rect.width(); + qreal scaleY = nowRect.height() / rect.height(); - if (not (event->modifiers() & Qt::ControlModifier)) + if (not(event->modifiers() & Qt::ControlModifier)) { if (diff.x() > 0 && diff.x() >= diff.y()) { @@ -1444,8 +1424,8 @@ auto VBackgroundImageControls::ScaleByBottomLeft(QGraphicsSceneMouseEvent *event QPointF newScalePoint = pos - m_scaleDiff; QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : rectOriginal.topRight(); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : rectOriginal.topRight(); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); m.scale(scaleX, scaleY); @@ -1517,8 +1497,8 @@ auto VBackgroundImageControls::ScaleByLeft(QGraphicsSceneMouseEvent *event) cons nowRect = QRectF(QPointF(newScalePoint.x(), rect.topLeft().y()), rect.bottomRight()); } - qreal scaleX = nowRect.width()/rect.width(); - qreal scaleY = nowRect.width()/rect.width(); + qreal scaleX = nowRect.width() / rect.width(); + qreal scaleY = nowRect.width() / rect.width(); if (event->modifiers() & Qt::ControlModifier) { @@ -1529,8 +1509,8 @@ auto VBackgroundImageControls::ScaleByLeft(QGraphicsSceneMouseEvent *event) cons QTransform m; - QPointF scaleCenterOriginal = (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() - : RectRightPoint(rectOriginal); + QPointF scaleCenterOriginal = + (event->modifiers() & Qt::ShiftModifier) ? rectOriginal.center() : RectRightPoint(rectOriginal); m.translate(scaleCenterOriginal.x(), scaleCenterOriginal.y()); m.scale(scaleX, scaleY); @@ -1581,7 +1561,7 @@ auto VBackgroundImageControls::ControllersRect() const -> QRectF QPixmap handler = m_handlePixmaps.value(BIHandleCornerType::ScaleTopLeftBottomRight); QRectF imageRect = m_image.BoundingRect(); - imageRect = QRectF(imageRect.topLeft()*scale, QSizeF(imageRect.width()*scale, imageRect.height()*scale)); + imageRect = QRectF(imageRect.topLeft() * scale, QSizeF(imageRect.width() * scale, imageRect.height() * scale)); QRectF rect = imageRect; if (imageRect.width() < handler.width()) @@ -1597,7 +1577,7 @@ auto VBackgroundImageControls::ControllersRect() const -> QRectF } const qreal gap = 2; - rect.adjust(- (handler.width() + gap), - (handler.height() + gap), handler.width() + gap, handler.height() + gap); + rect.adjust(-(handler.width() + gap), -(handler.height() + gap), handler.width() + gap, handler.height() + gap); return rect; } @@ -1614,22 +1594,16 @@ auto VBackgroundImageControls::SelectedHandleCorner(const QPointF &pos) const -> if (m_tranformationType == BITransformationType::Scale) { - corners = - { - {BIHandleCorner::TopLeft, ScaleTopLeftControl()}, - {BIHandleCorner::Top, ScaleTopControl()}, - {BIHandleCorner::TopRight, ScaleTopRightControl()}, - {BIHandleCorner::Right, ScaleRightControl()}, - {BIHandleCorner::BottomRight, ScaleBottomRightControl()}, - {BIHandleCorner::Bottom, ScaleBottomControl()}, - {BIHandleCorner::BottomLeft, ScaleBottomLeftControl()}, - {BIHandleCorner::Left, ScaleLeftControl()}, + corners = { + {BIHandleCorner::TopLeft, ScaleTopLeftControl()}, {BIHandleCorner::Top, ScaleTopControl()}, + {BIHandleCorner::TopRight, ScaleTopRightControl()}, {BIHandleCorner::Right, ScaleRightControl()}, + {BIHandleCorner::BottomRight, ScaleBottomRightControl()}, {BIHandleCorner::Bottom, ScaleBottomControl()}, + {BIHandleCorner::BottomLeft, ScaleBottomLeftControl()}, {BIHandleCorner::Left, ScaleLeftControl()}, }; } else if (m_tranformationType == BITransformationType::Rotate) { - corners = - { + corners = { {BIHandleCorner::TopLeft, RotateTopLeftControl()}, {BIHandleCorner::TopRight, RotateTopRightControl()}, {BIHandleCorner::BottomRight, RotateBottomRightControl()}, @@ -1638,12 +1612,10 @@ auto VBackgroundImageControls::SelectedHandleCorner(const QPointF &pos) const -> } QPainterPath circle; - circle.addEllipse(pos.x()-4, pos.y()-4, 8, 8); + circle.addEllipse(pos.x() - 4, pos.y() - 4, 8, 8); auto CheckCorner = [circle](const QPainterPath &handler) - { - return handler.intersects(circle) || handler.contains(circle); - }; + { return handler.intersects(circle) || handler.contains(circle); }; auto i = corners.constBegin(); while (i != corners.constEnd()) @@ -1684,7 +1656,7 @@ auto VBackgroundImageControls::OriginCircle1() const -> QPainterPath QPainterPath path; const qreal sceneScale = SceneScale(scene()); QPointF screeOrigin = m_originPos * sceneScale; - path.addEllipse({screeOrigin.x()-radius1, screeOrigin.y()-radius1, radius1*2., radius1*2.}); + path.addEllipse({screeOrigin.x() - radius1, screeOrigin.y() - radius1, radius1 * 2., radius1 * 2.}); return path; } @@ -1695,7 +1667,7 @@ auto VBackgroundImageControls::OriginCircle2() const -> QPainterPath QPainterPath path; const qreal sceneScale = SceneScale(scene()); QPointF screeOrigin = m_originPos * sceneScale; - path.addEllipse({screeOrigin.x()-radius2, screeOrigin.y()-radius2, radius2*2., radius2*2.}); + path.addEllipse({screeOrigin.x() - radius2, screeOrigin.y() - radius2, radius2 * 2., radius2 * 2.}); return path; } @@ -1719,46 +1691,38 @@ void VBackgroundImageControls::ScaleImage(QGraphicsSceneMouseEvent *event) QTransform imageMatrix = m_originalMatrix; const bool shiftModifier = event->modifiers() & Qt::ShiftModifier; - switch(m_handleCornerHover) + switch (m_handleCornerHover) { case BIHandleCorner::TopLeft: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : m_imageBoundingRect.bottomRight()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : m_imageBoundingRect.bottomRight()); imageMatrix *= ScaleByTopLeft(event); break; case BIHandleCorner::Top: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : RectBottomPoint(m_imageBoundingRect)); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : RectBottomPoint(m_imageBoundingRect)); imageMatrix *= ScaleByTop(event); break; case BIHandleCorner::TopRight: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : m_imageBoundingRect.bottomLeft()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : m_imageBoundingRect.bottomLeft()); imageMatrix *= ScaleByTopRight(event); break; case BIHandleCorner::Right: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : RectLeftPoint(m_imageBoundingRect)); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : RectLeftPoint(m_imageBoundingRect)); imageMatrix *= ScaleByRight(event); break; case BIHandleCorner::BottomRight: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : m_imageBoundingRect.topLeft()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : m_imageBoundingRect.topLeft()); imageMatrix *= ScaleByBottomRight(event); break; case BIHandleCorner::Bottom: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : RectTopPoint(m_imageBoundingRect)); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : RectTopPoint(m_imageBoundingRect)); imageMatrix *= ScaleByBottom(event); break; case BIHandleCorner::BottomLeft: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : m_imageBoundingRect.topRight()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : m_imageBoundingRect.topRight()); imageMatrix *= ScaleByBottomLeft(event); break; case BIHandleCorner::Left: - ShowOrigin(shiftModifier ? m_imageBoundingRect.center() - : RectRightPoint(m_imageBoundingRect)); + ShowOrigin(shiftModifier ? m_imageBoundingRect.center() : RectRightPoint(m_imageBoundingRect)); imageMatrix *= ScaleByLeft(event); break; case BIHandleCorner::Invalid: @@ -1779,23 +1743,19 @@ void VBackgroundImageControls::RotateImage(QGraphicsSceneMouseEvent *event) { const bool shiftModifier = event->modifiers() & Qt::ShiftModifier; - switch(m_handleCornerHover) + switch (m_handleCornerHover) { case BIHandleCorner::TopLeft: - ShowOrigin(shiftModifier ? m_imageBoundingRect.bottomRight() - : m_imageBoundingRect.center()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.bottomRight() : m_imageBoundingRect.center()); break; case BIHandleCorner::TopRight: - ShowOrigin(shiftModifier ? m_imageBoundingRect.bottomLeft() - : m_imageBoundingRect.center()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.bottomLeft() : m_imageBoundingRect.center()); break; case BIHandleCorner::BottomRight: - ShowOrigin(shiftModifier ? m_imageBoundingRect.topLeft() - : m_imageBoundingRect.center()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.topLeft() : m_imageBoundingRect.center()); break; case BIHandleCorner::BottomLeft: - ShowOrigin(shiftModifier ? m_imageBoundingRect.topRight() - : m_imageBoundingRect.center()); + ShowOrigin(shiftModifier ? m_imageBoundingRect.topRight() : m_imageBoundingRect.center()); break; default: break; @@ -1805,7 +1765,7 @@ void VBackgroundImageControls::RotateImage(QGraphicsSceneMouseEvent *event) { QPointF rotationNewPoint = event->pos(); const qreal sceneScale = SceneScale(scene()); - QPointF screenOriginPos = m_originPos*sceneScale; + QPointF screenOriginPos = m_originPos * sceneScale; QLineF initPosition(screenOriginPos, m_rotationStartPoint); QLineF initRotationPosition(screenOriginPos, rotationNewPoint); diff --git a/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.h b/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.h index e31b6cf29..9c742ce53 100644 --- a/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.h +++ b/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.h @@ -35,54 +35,55 @@ struct VToolFlippingByAxisInitData : VAbstractOperationInitData { - VToolFlippingByAxisInitData() - : VAbstractOperationInitData(), - originPointId(NULL_ID), - axisType(AxisType::VerticalAxis) - {} - - quint32 originPointId; - AxisType axisType; + quint32 originPointId{NULL_ID}; + AxisType axisType{AxisType::VerticalAxis}; }; class VToolFlippingByAxis : public VAbstractFlipping { Q_OBJECT // NOLINT + public: - virtual ~VToolFlippingByAxis() = default; - virtual void SetDialog() override; + ~VToolFlippingByAxis() override = default; + + void SetDialog() override; + static auto Create(const QPointer &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data) -> VToolFlippingByAxis *; static auto Create(VToolFlippingByAxisInitData initData) -> VToolFlippingByAxis *; static const QString ToolType; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::FlippingByAxis)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::FlippingByAxis) + }; auto GetAxisType() const -> AxisType; - void SetAxisType(AxisType value); + void SetAxisType(AxisType value); auto OriginPointName() const -> QString; - virtual void ShowVisualization(bool show) override; + void ShowVisualization(bool show) override; + protected slots: - virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) override; + void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id = NULL_ID) override; + protected: - virtual void SetVisualization() override; - virtual void SaveDialog(QDomElement &domElement, QList &oldDependencies, - QList &newDependencies) override; - virtual void ReadToolAttributes(const QDomElement &domElement) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual auto MakeToolTip() const -> QString override; + void SetVisualization() override; + void SaveDialog(QDomElement &domElement, QList &oldDependencies, QList &newDependencies) override; + void ReadToolAttributes(const QDomElement &domElement) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + auto MakeToolTip() const -> QString override; private: Q_DISABLE_COPY_MOVE(VToolFlippingByAxis) // NOLINT - quint32 m_originPointId; + quint32 m_originPointId; AxisType m_axisType; - VToolFlippingByAxis(const VToolFlippingByAxisInitData &initData, QGraphicsItem *parent = nullptr); + explicit VToolFlippingByAxis(const VToolFlippingByAxisInitData &initData, QGraphicsItem *parent = nullptr); }; #endif // VTOOLFLIPPINGBYAXIS_H diff --git a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp index cae04227e..aa6ef1374 100644 --- a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp @@ -27,15 +27,15 @@ *************************************************************************/ #include "vabstractoperation.h" +#include "../../../undocommands/deltool.h" #include "../../../undocommands/label/operationmovelabel.h" #include "../../../undocommands/label/operationshowlabel.h" #include "../../../undocommands/savetooloptions.h" #include "../../../undocommands/undogroup.h" -#include "../../../undocommands/deltool.h" #include "../vgeometry/vpointf.h" -const QString VAbstractOperation::TagItem = QStringLiteral("item"); -const QString VAbstractOperation::TagSource = QStringLiteral("source"); +const QString VAbstractOperation::TagItem = QStringLiteral("item"); +const QString VAbstractOperation::TagSource = QStringLiteral("source"); const QString VAbstractOperation::TagDestination = QStringLiteral("destination"); namespace @@ -60,12 +60,11 @@ auto VisibilityGroupDataFromSource(const VContainer *data, const QVector QString @@ -111,13 +110,13 @@ void VAbstractOperation::GroupVisibility(quint32 object, bool visible) VAbstractSimple *obj = operatedObjects.value(object); if (obj && obj->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(obj); + auto *item = qobject_cast(obj); SCASSERT(item != nullptr) item->setVisible(visible); } else { - VSimpleCurve *item = qobject_cast(obj); + auto *item = qobject_cast(obj); SCASSERT(item != nullptr) item->setVisible(visible); } @@ -140,7 +139,7 @@ void VAbstractOperation::ChangeLabelPosition(quint32 id, const QPointF &pos) VAbstractSimple *obj = operatedObjects.value(id); if (obj && obj->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(obj); + auto *item = qobject_cast(obj); SCASSERT(item != nullptr) QSharedPointer point = VAbstractTool::data.GeometricObject(id); point->setMx(pos.x()); @@ -178,7 +177,7 @@ void VAbstractOperation::SetLabelVisible(quint32 id, bool visible) VAbstractSimple *obj = operatedObjects.value(id); if (obj && obj->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(obj); + auto *item = qobject_cast(obj); SCASSERT(item != nullptr) const QSharedPointer point = VAbstractTool::data.GeometricObject(id); point->SetShowLabel(visible); @@ -247,10 +246,10 @@ auto VAbstractOperation::ExtractDestinationData(const QDomElement &domElement) - { DestinationItem d; d.id = VDomDocument::GetParametrUInt(element, AttrIdObject, NULL_ID_STR); - d.mx = VAbstractValApplication::VApp() - ->toPixel(VDomDocument::GetParametrDouble(element, AttrMx, QChar('1'))); - d.my = VAbstractValApplication::VApp() - ->toPixel(VDomDocument::GetParametrDouble(element, AttrMy, QChar('1'))); + d.mx = VAbstractValApplication::VApp()->toPixel( + VDomDocument::GetParametrDouble(element, AttrMx, QChar('1'))); + d.my = VAbstractValApplication::VApp()->toPixel( + VDomDocument::GetParametrDouble(element, AttrMy, QChar('1'))); d.showLabel = VDomDocument::GetParametrBool(element, AttrShowLabel, trueStr); destination.append(d); } @@ -281,14 +280,14 @@ void VAbstractOperation::FullUpdateFromFile() i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setToolTip(ComplexPointToolTip(i.key())); item->RefreshPointGeometry(*VAbstractTool::data.GeometricObject(i.key())); } else { - VSimpleCurve *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setToolTip(ComplexCurveToolTip(i.key())); item->RefreshGeometry(VAbstractTool::data.GeometricObject(i.key())); @@ -306,13 +305,13 @@ void VAbstractOperation::AllowHover(bool enabled) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setAcceptHoverEvents(enabled); } else { - VSimpleCurve *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setAcceptHoverEvents(enabled); } @@ -328,13 +327,13 @@ void VAbstractOperation::AllowSelecting(bool enabled) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setFlag(QGraphicsItem::ItemIsSelectable, enabled); } else { - VSimpleCurve *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setFlag(QGraphicsItem::ItemIsSelectable, enabled); } @@ -350,7 +349,7 @@ void VAbstractOperation::EnableToolMove(bool move) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->EnableToolMove(move); } @@ -366,7 +365,7 @@ void VAbstractOperation::AllowPointHover(bool enabled) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setAcceptHoverEvents(enabled); } @@ -382,7 +381,7 @@ void VAbstractOperation::AllowPointSelecting(bool enabled) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setFlag(QGraphicsItem::ItemIsSelectable, enabled); } @@ -398,7 +397,7 @@ void VAbstractOperation::AllowPointLabelHover(bool enabled) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->AllowLabelHover(enabled); } @@ -414,7 +413,7 @@ void VAbstractOperation::AllowPointLabelSelecting(bool enabled) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->AllowLabelSelecting(enabled); } @@ -483,7 +482,7 @@ void VAbstractOperation::ToolSelectionType(const SelectionType &type) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->ToolSelectionType(selectionType); } @@ -502,13 +501,13 @@ void VAbstractOperation::Disable(bool disable, const QString &namePP) i.next(); if (i.value()->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->SetEnabled(enabled); } else { - VSimpleCurve *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) item->setEnabled(enabled); } @@ -528,10 +527,10 @@ void VAbstractOperation::DeleteFromLabel() { DeleteToolWithConfirm(); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } } @@ -543,7 +542,7 @@ void VAbstractOperation::LabelChangePosition(const QPointF &pos, quint32 labelId VAbstractSimple *obj = operatedObjects.value(labelId); if (obj && obj->GetType() == GOType::Point) { - VSimplePoint *item = qobject_cast(obj); + auto *item = qobject_cast(obj); SCASSERT(item != nullptr) UpdateNamePosition(labelId, pos - item->pos()); } @@ -552,33 +551,33 @@ void VAbstractOperation::LabelChangePosition(const QPointF &pos, quint32 labelId //--------------------------------------------------------------------------------------------------------------------- VAbstractOperation::VAbstractOperation(const VAbstractOperationInitData &initData, QGraphicsItem *parent) - : VDrawTool(initData.doc, initData.data, initData.id, initData.notes), - QGraphicsLineItem(parent), - suffix(initData.suffix), - source(initData.source), - destination(initData.destination), - operatedObjects() + : VDrawTool(initData.doc, initData.data, initData.id, initData.notes), + QGraphicsLineItem(parent), + suffix(initData.suffix), + source(initData.source), + destination(initData.destination) { - connect(initData.doc, &VAbstractPattern::UpdateToolTip, this, [this]() - { - QMapIterator i(operatedObjects); - while (i.hasNext()) - { - i.next(); - if (i.value()->GetType() == GOType::Point) + connect(initData.doc, &VAbstractPattern::UpdateToolTip, this, + [this]() { - VSimplePoint *item = qobject_cast(i.value()); - SCASSERT(item != nullptr) - item->setToolTip(ComplexPointToolTip(i.key())); - } - else - { - VSimpleCurve *item = qobject_cast(i.value()); - SCASSERT(item != nullptr) - item->setToolTip(ComplexCurveToolTip(i.key())); - } - } - }); + QMapIterator i(operatedObjects); + while (i.hasNext()) + { + i.next(); + if (i.value()->GetType() == GOType::Point) + { + auto *item = qobject_cast(i.value()); + SCASSERT(item != nullptr) + item->setToolTip(ComplexPointToolTip(i.key())); + } + else + { + auto *item = qobject_cast(i.value()); + SCASSERT(item != nullptr) + item->setToolTip(ComplexCurveToolTip(i.key())); + } + } + }); } //--------------------------------------------------------------------------------------------------------------------- @@ -599,8 +598,8 @@ void VAbstractOperation::ChangeLabelVisibility(quint32 id, bool visible) if (obj && obj->GetType() == GOType::Point) { auto dItem = std::find_if(destination.begin(), destination.end(), - [id](const DestinationItem &dItem) { return dItem.id == id; }); - if (dItem != destination.cend()) + [id](const DestinationItem &dItem) { return dItem.id == id; }); + if (dItem != destination.end()) { dItem->showLabel = visible; } @@ -624,8 +623,8 @@ void VAbstractOperation::ApplyToolOptions(const QList &oldDependencies, if (updateToolOptions) { - SaveToolOptions *saveOptions = new SaveToolOptions(oldDomElement, newDomElement, oldDependencies, - newDependencies, doc, m_id); + auto *saveOptions = + new SaveToolOptions(oldDomElement, newDomElement, oldDependencies, newDependencies, doc, m_id); connect(saveOptions, &SaveToolOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); VAbstractApplication::VApp()->getUndoStack()->push(saveOptions); } @@ -638,7 +637,7 @@ void VAbstractOperation::ApplyToolOptions(const QList &oldDependencies, { if (group != null_id) { - ChangeGroupOptions *groupOptions = new ChangeGroupOptions(doc, group, groupName, groupTags); + auto *groupOptions = new ChangeGroupOptions(doc, group, groupName, groupTags); connect(groupOptions, &ChangeGroupOptions::UpdateGroups, doc, &VAbstractPattern::UpdateVisiblityGroups); VAbstractApplication::VApp()->getUndoStack()->push(groupOptions); } @@ -658,7 +657,7 @@ void VAbstractOperation::ApplyToolOptions(const QList &oldDependencies, } else { - DelGroup *delGroup = new DelGroup(doc, group); + auto *delGroup = new DelGroup(doc, group); connect(delGroup, &DelGroup::UpdateGroups, doc, &VAbstractPattern::UpdateVisiblityGroups); VAbstractApplication::VApp()->getUndoStack()->push(delGroup); } @@ -682,13 +681,13 @@ void VAbstractOperation::PerformDelete() VAbstractApplication::VApp()->getUndoStack()->beginMacro(tr("delete operation")); qCDebug(vTool, "Deleting the linked group."); - DelGroup *delGroup = new DelGroup(doc, group); + auto *delGroup = new DelGroup(doc, group); connect(delGroup, &DelGroup::UpdateGroups, doc, &VAbstractPattern::UpdateVisiblityGroups); VAbstractApplication::VApp()->getUndoStack()->push(delGroup); } qCDebug(vTool, "Deleting the tool."); - DelTool *delTool = new DelTool(doc, m_id); + auto *delTool = new DelTool(doc, m_id); connect(delTool, &DelTool::NeedFullParsing, doc, &VAbstractPattern::NeedFullParsing); VAbstractApplication::VApp()->getUndoStack()->push(delTool); @@ -727,7 +726,7 @@ void VAbstractOperation::UpdateNamePosition(quint32 id, const QPointF &pos) if (obj && obj->GetType() == GOType::Point) { auto dItem = std::find_if(destination.begin(), destination.end(), - [id](const DestinationItem &dItem) { return dItem.id == id; }); + [id](const DestinationItem &dItem) { return dItem.id == id; }); if (dItem != destination.end()) { dItem->mx = pos.x(); @@ -744,17 +743,17 @@ void VAbstractOperation::SaveSourceDestination(QDomElement &tag) VAbstractPattern::RemoveAllChildren(tag); QDomElement tagObjects = doc->createElement(TagSource); - for (const auto& sItem : qAsConst(source)) + for (const auto &sItem : qAsConst(source)) { QDomElement item = doc->createElement(TagItem); doc->SetAttribute(item, AttrIdObject, sItem.id); doc->SetAttributeOrRemoveIf(item, AttrAlias, sItem.alias, - [](const QString &alias) noexcept {return alias.isEmpty();}); + [](const QString &alias) noexcept { return alias.isEmpty(); }); doc->SetAttributeOrRemoveIf(item, AttrPenStyle, sItem.penStyle, [](const QString &penStyle) noexcept - {return penStyle == TypeLineDefault;}); + { return penStyle == TypeLineDefault; }); doc->SetAttributeOrRemoveIf(item, AttrColor, sItem.color, - [](const QString &color) noexcept {return color == ColorDefault;}); + [](const QString &color) noexcept { return color == ColorDefault; }); tagObjects.appendChild(item); } tag.appendChild(tagObjects); @@ -769,20 +768,20 @@ void VAbstractOperation::SaveSourceDestination(QDomElement &tag) doc->SetAttributeOrRemoveIf(item, AttrMx, VAbstractValApplication::VApp()->fromPixel(dItem.mx), [obj](double value) noexcept - { - Q_UNUSED(value) - return obj && obj->GetType() != GOType::Point; - }); + { + Q_UNUSED(value) + return obj && obj->GetType() != GOType::Point; + }); doc->SetAttributeOrRemoveIf(item, AttrMy, VAbstractValApplication::VApp()->fromPixel(dItem.my), - [obj](double value ) noexcept - { - Q_UNUSED(value) - return obj && obj->GetType() != GOType::Point; - }); + [obj](double value) noexcept + { + Q_UNUSED(value) + return obj && obj->GetType() != GOType::Point; + }); doc->SetAttributeOrRemoveIf(item, AttrShowLabel, dItem.showLabel, - [](bool showLabel) noexcept {return showLabel;}); + [](bool showLabel) noexcept { return showLabel; }); tagObjects.appendChild(item); } @@ -793,19 +792,14 @@ void VAbstractOperation::SaveSourceDestination(QDomElement &tag) void VAbstractOperation::InitCurve(quint32 id, VContainer *data, GOType curveType, SceneObject sceneType) { const QSharedPointer initCurve = data->GeometricObject(id); - VSimpleCurve *curve = new VSimpleCurve(id, initCurve); + auto *curve = new VSimpleCurve(id, initCurve); curve->setParentItem(this); curve->SetType(curveType); curve->setToolTip(ComplexCurveToolTip(id)); connect(curve, &VSimpleCurve::Selected, this, &VAbstractOperation::ObjectSelected); - connect(curve, &VSimpleCurve::ShowContextMenu, this, [this](QGraphicsSceneContextMenuEvent * event, quint32 id) - { - ShowContextMenu(event, id); - }); - connect(curve, &VSimpleCurve::Choosed, this, [this, sceneType](quint32 id) - { - emit ChoosedTool(id, sceneType); - }); + connect(curve, &VSimpleCurve::ShowContextMenu, this, + [this](QGraphicsSceneContextMenuEvent *event, quint32 id) { ShowContextMenu(event, id); }); + connect(curve, &VSimpleCurve::Choosed, this, [this, sceneType](quint32 id) { emit ChoosedTool(id, sceneType); }); connect(curve, &VSimpleCurve::Delete, this, &VAbstractOperation::DeleteFromLabel); curve->RefreshGeometry(VAbstractTool::data.GeometricObject(id)); operatedObjects.insert(id, curve); @@ -820,7 +814,7 @@ void VAbstractOperation::AllowCurveHover(bool enabled, GOType type) i.next(); if (i.value()->GetType() != GOType::Point) { - VSimpleCurve *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) if (item->GetType() == type) { @@ -839,7 +833,7 @@ void VAbstractOperation::AllowCurveSelecting(bool enabled, GOType type) i.next(); if (i.value()->GetType() != GOType::Point) { - VSimpleCurve *item = qobject_cast(i.value()); + auto *item = qobject_cast(i.value()); SCASSERT(item != nullptr) if (item->GetType() == type) { @@ -886,26 +880,21 @@ void VAbstractOperation::InitOperatedObjects() // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 8, "Not all objects were handled."); -QT_WARNING_PUSH -QT_WARNING_DISABLE_GCC("-Wswitch-default") - switch(static_cast(obj->getType())) + QT_WARNING_PUSH + QT_WARNING_DISABLE_GCC("-Wswitch-default") + switch (static_cast(obj->getType())) { case GOType::Point: { - auto *point = new VSimplePoint(object.id, QColor(Qt::black)); + auto *point = new VSimplePoint(object.id, VColorRole::PatternColor); point->setParentItem(this); point->SetType(GOType::Point); point->setToolTip(ComplexPointToolTip(object.id)); - connect(point, &VSimplePoint::Choosed, this, [this](quint32 id) - { - emit ChoosedTool(id, SceneObject::Point); - }); + connect(point, &VSimplePoint::Choosed, this, + [this](quint32 id) { emit ChoosedTool(id, SceneObject::Point); }); connect(point, &VSimplePoint::Selected, this, &VAbstractOperation::ObjectSelected); - connect(point, &VSimplePoint::ShowContextMenu, - this, [this](QGraphicsSceneContextMenuEvent * event, quint32 id) - { - ShowContextMenu(event, id); - }); + connect(point, &VSimplePoint::ShowContextMenu, this, + [this](QGraphicsSceneContextMenuEvent *event, quint32 id) { ShowContextMenu(event, id); }); connect(point, &VSimplePoint::Delete, this, &VAbstractOperation::DeleteFromLabel); connect(point, &VSimplePoint::NameChangedPosition, this, &VAbstractOperation::LabelChangePosition); point->RefreshPointGeometry(*VAbstractTool::data.GeometricObject(object.id)); @@ -931,7 +920,7 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") Q_UNREACHABLE(); break; } -QT_WARNING_POP + QT_WARNING_POP } } @@ -942,7 +931,7 @@ auto VAbstractOperation::ComplexPointToolTip(quint32 itemId) const -> QString " %1: %2 " "%3" "") - .arg(tr("Label"), VAbstractTool::data.GetGObject(itemId)->name(), MakeToolTip()); + .arg(tr("Label"), VAbstractTool::data.GetGObject(itemId)->name(), MakeToolTip()); } //--------------------------------------------------------------------------------------------------------------------- @@ -955,9 +944,9 @@ auto VAbstractOperation::ComplexCurveToolTip(quint32 itemId) const -> QString " %3: %4 %5 " "%6" "") - .arg(tr("Label"), curve->ObjectName(), tr("Length")) - .arg(VAbstractValApplication::VApp()->fromPixel(curve->GetLength())) - .arg(UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true), MakeToolTip()); + .arg(tr("Label"), curve->ObjectName(), tr("Length")) + .arg(VAbstractValApplication::VApp()->fromPixel(curve->GetLength())) + .arg(UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true), MakeToolTip()); return toolTip; } @@ -968,10 +957,10 @@ auto VAbstractOperation::VisibilityGroupToolTip() const -> QString if (group != null_id) { return QStringLiteral(" %1: %2 ") - .arg(tr("Visibility group"), doc->GetGroupName(group)); // 1, 2 + .arg(tr("Visibility group"), doc->GetGroupName(group)); // 1, 2 } - return QString(); + return {}; } //--------------------------------------------------------------------------------------------------------------------- @@ -988,10 +977,8 @@ void VAbstractOperation::CreateVisibilityGroup(const VAbstractOperationInitData initData.visibilityGroupTags, groupData, initData.id); if (not group.isNull()) { - AddGroup *addGroup = new AddGroup(group, initData.doc); + auto *addGroup = new AddGroup(group, initData.doc); connect(addGroup, &AddGroup::UpdateGroups, initData.doc, &VAbstractPattern::UpdateVisiblityGroups); VAbstractApplication::VApp()->getUndoStack()->push(addGroup); } - - return; } diff --git a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h index 35f063cdf..23188c162 100644 --- a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h +++ b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.h @@ -76,39 +76,40 @@ class VAbstractOperation : public VDrawTool, public QGraphicsLineItem Q_INTERFACES(QGraphicsItem) public: - virtual ~VAbstractOperation() = default; + ~VAbstractOperation() override = default; static const QString TagItem; static const QString TagSource; static const QString TagDestination; - virtual auto getTagName() const -> QString override; + auto getTagName() const -> QString override; auto Suffix() const -> QString; void SetSuffix(const QString &suffix); - virtual void SetNotes(const QString ¬es) override; + void SetNotes(const QString ¬es) override; auto SourceItems() const -> QVector; - virtual void GroupVisibility(quint32 object, bool visible) override; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; - virtual void ChangeLabelPosition(quint32 id, const QPointF &pos) override; + void GroupVisibility(quint32 object, bool visible) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; + void ChangeLabelPosition(quint32 id, const QPointF &pos) override; - virtual auto IsLabelVisible(quint32 id) const -> bool override; - virtual void SetLabelVisible(quint32 id, bool visible) override; + auto IsLabelVisible(quint32 id) const -> bool override; + void SetLabelVisible(quint32 id, bool visible) override; static void ExtractData(const QDomElement &domElement, VAbstractOperationInitData &initData); static auto ExtractSourceData(const QDomElement &domElement) -> QVector; static auto ExtractDestinationData(const QDomElement &domElement) -> QVector; static auto OperationColorsList() -> QMap; -public slots: - virtual void FullUpdateFromFile() override; - virtual void AllowHover(bool enabled) override; - virtual void AllowSelecting(bool enabled) override; - virtual void EnableToolMove(bool move) override; +public slots: + void FullUpdateFromFile() override; + + void AllowHover(bool enabled) override; + void AllowSelecting(bool enabled) override; + void EnableToolMove(bool move) override; void AllowPointHover(bool enabled); void AllowPointSelecting(bool enabled); @@ -128,8 +129,8 @@ public slots: void AllowElArcHover(bool enabled); void AllowElArcSelecting(bool enabled); - virtual void ToolSelectionType(const SelectionType &type) override; - virtual void Disable(bool disable, const QString &namePP) override; + void ToolSelectionType(const SelectionType &type) override; + void Disable(bool disable, const QString &namePP) override; void ObjectSelected(bool selected, quint32 objId); void DeleteFromLabel(); void LabelChangePosition(const QPointF &pos, quint32 labelId); @@ -140,7 +141,7 @@ protected: QVector source; QVector destination; - QMap operatedObjects; + QMap operatedObjects{}; bool hasLinkedGroup{false}; QString groupName{}; @@ -148,15 +149,15 @@ protected: explicit VAbstractOperation(const VAbstractOperationInitData &initData, QGraphicsItem *parent = nullptr); - virtual void AddToFile() override; - virtual void ChangeLabelVisibility(quint32 id, bool visible) override; - virtual void ApplyToolOptions(const QList &oldDependencies, const QList &newDependencies, - const QDomElement &oldDomElement, const QDomElement &newDomElement) override; - virtual void PerformDelete() override; - virtual void ReadToolAttributes(const QDomElement &domElement) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + void AddToFile() override; + void ChangeLabelVisibility(quint32 id, bool visible) override; + void ApplyToolOptions(const QList &oldDependencies, const QList &newDependencies, + const QDomElement &oldDomElement, const QDomElement &newDomElement) override; + void PerformDelete() override; + void ReadToolAttributes(const QDomElement &domElement) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual void UpdateNamePosition(quint32 id, const QPointF &pos) override; + void UpdateNamePosition(quint32 id, const QPointF &pos) override; void SaveSourceDestination(QDomElement &tag); template void ShowToolVisualization(bool show); diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolmove.h b/src/libs/vtools/tools/drawTools/operation/vtoolmove.h index e0b613eb0..127a9a534 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolmove.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolmove.h @@ -29,7 +29,6 @@ #ifndef VTOOLMOVING_H #define VTOOLMOVING_H - #include #include #include @@ -37,10 +36,10 @@ #include #include -#include "vabstractoperation.h" +#include "../ifc/xml/vabstractpattern.h" #include "../vgeometry/vgeometrydef.h" #include "../vmisc/def.h" -#include "../ifc/xml/vabstractpattern.h" +#include "vabstractoperation.h" template class QSharedPointer; class VFormula; @@ -48,12 +47,13 @@ class VFormula; struct VToolMoveInitData : VAbstractOperationInitData { VToolMoveInitData() - : VAbstractOperationInitData(), - formulaAngle(), - formulaRotationAngle(), - formulaLength(), - rotationOrigin(NULL_ID) - {} + : VAbstractOperationInitData(), + formulaAngle(), + formulaRotationAngle(), + formulaLength(), + rotationOrigin(NULL_ID) + { + } QString formulaAngle; QString formulaRotationAngle; @@ -64,39 +64,46 @@ struct VToolMoveInitData : VAbstractOperationInitData class VToolMove : public VAbstractOperation { Q_OBJECT // NOLINT + public: - virtual ~VToolMove() = default; - virtual void SetDialog() override; + ~VToolMove() override = default; + + void SetDialog() override; + static auto Create(const QPointer &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data) -> VToolMove *; static auto Create(VToolMoveInitData &initData) -> VToolMove *; static const QString ToolType; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::Move)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::Move) + }; auto GetFormulaAngle() const -> VFormula; - void SetFormulaAngle(const VFormula &value); + void SetFormulaAngle(const VFormula &value); auto GetFormulaRotationAngle() const -> VFormula; - void SetFormulaRotationAngle(const VFormula &value); + void SetFormulaRotationAngle(const VFormula &value); auto GetFormulaLength() const -> VFormula; - void SetFormulaLength(const VFormula &value); + void SetFormulaLength(const VFormula &value); auto OriginPointName() const -> QString; - virtual void ShowVisualization(bool show) override; + void ShowVisualization(bool show) override; + protected slots: - virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) override; + void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id = NULL_ID) override; + protected: - virtual void SetVisualization() override; - virtual void SaveDialog(QDomElement &domElement, QList &oldDependencies, - QList &newDependencies) override; - virtual void ReadToolAttributes(const QDomElement &domElement) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual auto MakeToolTip() const -> QString override; + void SetVisualization() override; + void SaveDialog(QDomElement &domElement, QList &oldDependencies, QList &newDependencies) override; + void ReadToolAttributes(const QDomElement &domElement) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + auto MakeToolTip() const -> QString override; private: Q_DISABLE_COPY_MOVE(VToolMove) // NOLINT diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp index 8900d9f0b..7cd102316 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp @@ -28,8 +28,6 @@ #include "vtoolrotation.h" -#include -#include #include #include #include @@ -37,36 +35,35 @@ #include #include #include +#include #include -#include "../../../dialogs/tools/dialogtool.h" #include "../../../dialogs/tools/dialogrotation.h" +#include "../../../dialogs/tools/dialogtool.h" #include "../../../visualization/line/operation/vistoolrotation.h" #include "../../../visualization/visualization.h" -#include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" -#include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vcubicbezier.h" #include "../vgeometry/vcubicbezierpath.h" +#include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" #include "../vgeometry/vsplinepath.h" -#include "../vpatterndb/vtranslatevars.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" +#include "../vpatterndb/vtranslatevars.h" #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) #include "../vmisc/diagnostic.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) -#include "../vpatterndb/vcontainer.h" -#include "../vpatterndb/vformula.h" -#include "../ifc/ifcdef.h" -#include "../ifc/exception/vexception.h" -#include "../vwidgets/vabstractsimple.h" -#include "../vwidgets/vmaingraphicsscene.h" #include "../../vabstracttool.h" #include "../../vdatatool.h" +#include "../ifc/exception/vexception.h" +#include "../ifc/ifcdef.h" #include "../vdrawtool.h" +#include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/vformula.h" +#include "../vwidgets/vmaingraphicsscene.h" class QDomElement; class QGraphicsSceneContextMenuEvent; @@ -79,9 +76,9 @@ const QString VToolRotation::ToolType = QStringLiteral("rotation"); //--------------------------------------------------------------------------------------------------------------------- VToolRotation::VToolRotation(const VToolRotationInitData &initData, QGraphicsItem *parent) - : VAbstractOperation(initData, parent), - origPointId(initData.origin), - formulaAngle(initData.angle) + : VAbstractOperation(initData, parent), + origPointId(initData.origin), + formulaAngle(initData.angle) { InitOperatedObjects(); ToolCreation(initData.typeCreation); @@ -125,7 +122,7 @@ auto VToolRotation::Create(const QPointer &dialog, VMainGraphicsScen initData.typeCreation = Source::FromGui; initData.notes = dialogTool->GetNotes(); - VToolRotation* operation = Create(initData); + VToolRotation *operation = Create(initData); if (operation != nullptr) { operation->m_dialog = dialog; @@ -145,57 +142,55 @@ auto VToolRotation::Create(VToolRotationInitData &initData) -> VToolRotation * if (initData.typeCreation == Source::FromGui) { - initData.destination.clear();// Try to avoid mistake, value must be empty + initData.destination.clear(); // Try to avoid mistake, value must be empty - initData.id = initData.data->getNextId();//Just reserve id for tool + initData.id = initData.data->getNextId(); // Just reserve id for tool - for (auto object : qAsConst(initData.source)) + for (const auto &object : qAsConst(initData.source)) { const QSharedPointer obj = initData.data->GetGObject(object.id); // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 8, "Not all objects were handled."); -QT_WARNING_PUSH -QT_WARNING_DISABLE_GCC("-Wswitch-default") - switch(static_cast(obj->getType())) + QT_WARNING_PUSH + QT_WARNING_DISABLE_GCC("-Wswitch-default") + switch (static_cast(obj->getType())) { case GOType::Point: - initData.destination.append(CreatePoint(initData.id, object, oPoint, calcAngle, initData.suffix, - initData.data)); + initData.destination.append( + CreatePoint(initData.id, object, oPoint, calcAngle, initData.suffix, initData.data)); break; case GOType::Arc: - initData.destination.append(CreateArc(initData.id, object, oPoint, calcAngle, - initData.suffix, initData.data)); + initData.destination.append( + CreateArc(initData.id, object, oPoint, calcAngle, initData.suffix, initData.data)); break; case GOType::EllipticalArc: initData.destination.append(CreateArc(initData.id, object, oPoint, calcAngle, initData.suffix, initData.data)); break; case GOType::Spline: - initData.destination.append(CreateCurve(initData.id, object, oPoint, calcAngle, - initData.suffix, initData.data)); + initData.destination.append( + CreateCurve(initData.id, object, oPoint, calcAngle, initData.suffix, initData.data)); break; case GOType::SplinePath: - initData.destination.append(CreateCurveWithSegments(initData.id, object, oPoint, - calcAngle, initData.suffix, - initData.data)); + initData.destination.append(CreateCurveWithSegments( + initData.id, object, oPoint, calcAngle, initData.suffix, initData.data)); break; case GOType::CubicBezier: initData.destination.append(CreateCurve(initData.id, object, oPoint, calcAngle, initData.suffix, initData.data)); break; case GOType::CubicBezierPath: - initData.destination.append(CreateCurveWithSegments(initData.id, object, oPoint, - calcAngle, initData.suffix, - initData.data)); + initData.destination.append(CreateCurveWithSegments( + initData.id, object, oPoint, calcAngle, initData.suffix, initData.data)); break; case GOType::Unknown: case GOType::PlaceLabel: Q_UNREACHABLE(); break; } -QT_WARNING_POP + QT_WARNING_POP } } else @@ -208,9 +203,9 @@ QT_WARNING_POP // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 8, "Not all objects were handled."); -QT_WARNING_PUSH -QT_WARNING_DISABLE_GCC("-Wswitch-default") - switch(static_cast(obj->getType())) + QT_WARNING_PUSH + QT_WARNING_DISABLE_GCC("-Wswitch-default") + switch (static_cast(obj->getType())) { case GOType::Point: { @@ -247,7 +242,7 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") Q_UNREACHABLE(); break; } -QT_WARNING_POP + QT_WARNING_POP } if (initData.parse != Document::FullParse) { @@ -263,12 +258,12 @@ QT_WARNING_POP } VAbstractTool::AddRecord(initData.id, Tool::Rotation, initData.doc); - VToolRotation *tool = new VToolRotation(initData); + auto *tool = new VToolRotation(initData); initData.scene->addItem(tool); InitOperationToolConnections(initData.scene, tool); VAbstractPattern::AddTool(initData.id, tool); initData.doc->IncrementReferens(originPoint.getIdTool()); - for (auto object : qAsConst(initData.source)) + for (const auto &object : qAsConst(initData.source)) { initData.doc->IncrementReferens(initData.data->GetGObject(object.id)->getIdTool()); } @@ -304,7 +299,7 @@ auto VToolRotation::GetFormulaAngle() const -> VFormula //--------------------------------------------------------------------------------------------------------------------- void VToolRotation::SetFormulaAngle(const VFormula &value) { - if (value.error() == false) + if (!value.error()) { formulaAngle = value.GetFormula(FormulaType::FromUser); @@ -326,10 +321,10 @@ void VToolRotation::ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint { ContextMenu(event, id); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } } @@ -343,8 +338,8 @@ void VToolRotation::SetVisualization() visual->SetObjects(SourceToObjects(source)); visual->SetOriginPointId(origPointId); - visual->SetAngle(VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(formulaAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); + visual->SetAngle(VAbstractApplication::VApp()->TrVars()->FormulaToUser( + formulaAngle, VAbstractApplication::VApp()->Settings()->GetOsSeparator())); visual->SetMode(Mode::Show); visual->RefreshGeometry(); } @@ -365,7 +360,7 @@ void VToolRotation::SaveDialog(QDomElement &domElement, QList &oldDepen doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle()); doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix()); doc->SetAttributeOrRemoveIf(domElement, AttrNotes, dialogTool->GetNotes(), - [](const QString ¬es) noexcept {return notes.isEmpty();}); + [](const QString ¬es) noexcept { return notes.isEmpty(); }); source = dialogTool->GetSourceObjects(); SaveSourceDestination(domElement); @@ -399,9 +394,9 @@ auto VToolRotation::MakeToolTip() const -> QString return QStringLiteral(" %1: %2 " " %3: %4° " "%5") - .arg(tr("Origin point"), OriginPointName(), tr("Rotation angle")) // 1, 2, 3 - .arg(GetFormulaAngle().getDoubleValue()) // 4 - .arg(VisibilityGroupToolTip()); // 5 + .arg(tr("Origin point"), OriginPointName(), tr("Rotation angle")) // 1, 2, 3 + .arg(GetFormulaAngle().getDoubleValue()) // 4 + .arg(VisibilityGroupToolTip()); // 5 } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h index b9586ee06..87e0f89fd 100644 --- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h +++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.h @@ -29,7 +29,6 @@ #ifndef VTOOLROTATION_H #define VTOOLROTATION_H - #include #include #include @@ -37,10 +36,10 @@ #include #include -#include "vabstractoperation.h" +#include "../ifc/xml/vabstractpattern.h" #include "../vgeometry/vgeometrydef.h" #include "../vmisc/def.h" -#include "../ifc/xml/vabstractpattern.h" +#include "vabstractoperation.h" template class QSharedPointer; class VFormula; @@ -48,10 +47,11 @@ class VFormula; struct VToolRotationInitData : VAbstractOperationInitData { VToolRotationInitData() - : VAbstractOperationInitData(), - origin(NULL_ID), - angle() - {} + : VAbstractOperationInitData(), + origin(NULL_ID), + angle() + { + } quint32 origin; QString angle; @@ -60,40 +60,47 @@ struct VToolRotationInitData : VAbstractOperationInitData class VToolRotation : public VAbstractOperation { Q_OBJECT // NOLINT + public: - virtual ~VToolRotation() = default; - virtual void SetDialog() override; + ~VToolRotation() override = default; + + void SetDialog() override; + static auto Create(const QPointer &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data) -> VToolRotation *; static auto Create(VToolRotationInitData &initData) -> VToolRotation *; static const QString ToolType; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::Rotation)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::Rotation) + }; auto OriginPointName() const -> QString; auto GetFormulaAngle() const -> VFormula; - void SetFormulaAngle(const VFormula &value); + void SetFormulaAngle(const VFormula &value); + + void ShowVisualization(bool show) override; - virtual void ShowVisualization(bool show) override; protected slots: - virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) override; + void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id = NULL_ID) override; + protected: - virtual void SetVisualization() override; - virtual void SaveDialog(QDomElement &domElement, QList &oldDependencies, - QList &newDependencies) override; - virtual void ReadToolAttributes(const QDomElement &domElement) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual auto MakeToolTip() const -> QString override; + void SetVisualization() override; + void SaveDialog(QDomElement &domElement, QList &oldDependencies, QList &newDependencies) override; + void ReadToolAttributes(const QDomElement &domElement) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + auto MakeToolTip() const -> QString override; private: Q_DISABLE_COPY_MOVE(VToolRotation) // NOLINT quint32 origPointId; QString formulaAngle; - VToolRotation(const VToolRotationInitData &initData, QGraphicsItem *parent = nullptr); + explicit VToolRotation(const VToolRotationInitData &initData, QGraphicsItem *parent = nullptr); static auto CreatePoint(quint32 idTool, const SourceItem &sItem, const QPointF &origin, qreal angle, const QString &suffix, VContainer *data) -> DestinationItem; diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp index 04bf64ad1..9b48f68c3 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp @@ -49,6 +49,7 @@ #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/global.h" @@ -93,7 +94,9 @@ void VAbstractSpline::paint(QPainter *painter, const QStyleOptionGraphicsItem *o SceneScale(scene())); const QSharedPointer curve = VAbstractTool::data.GeometricObject(m_id); - setPen(QPen(CorrectColor(this, curve->GetColor()), width, LineStyleToPenStyle(curve->GetPenStyle()), Qt::RoundCap)); + QColor penColor = + VSceneStylesheet::CorrectToolColor(this, VSceneStylesheet::CorrectToolColorForDarkTheme(curve->GetColor())); + setPen(QPen(penColor, width, LineStyleToPenStyle(curve->GetPenStyle()), Qt::RoundCap)); auto PaintSpline = [this, curve](QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp index 99c71d5a4..f231501da 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolarcwithlength.cpp @@ -30,7 +30,6 @@ #include #include -#include #include #include "../../../dialogs/tools/dialogarcwithlength.h" diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp index 6e30d709a..dcc54c3b6 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezier.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include "../../../dialogs/tools/dialogcubicbezier.h" diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp index c56404aea..158f2b89f 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolcubicbezierpath.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include "../../../dialogs/tools/dialogcubicbezierpath.h" diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp index 2656a566f..11206e134 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolellipticalarc.cpp @@ -30,7 +30,6 @@ #include #include -#include #include #include "../../../dialogs/tools/dialogellipticalarc.h" diff --git a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp index b74c39397..a6799b046 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp @@ -34,36 +34,35 @@ #include #include #include -#include #include #include "../../../../undocommands/label/movedoublelabel.h" #include "../../../../undocommands/label/showdoublelabel.h" +#include "../../../vabstracttool.h" +#include "../../../vdatatool.h" +#include "../../vdrawtool.h" #include "../ifc/exception/vexception.h" -#include "../ifc/exception/vexceptionbadid.h" #include "../ifc/xml/vabstractpattern.h" +#include "../vabstractpoint.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/theme/themeDef.h" #include "../vmisc/vabstractapplication.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/../ifc/ifcdef.h" #include "../vwidgets/vsimplepoint.h" -#include "../../../vabstracttool.h" -#include "../../../vdatatool.h" -#include "../../vdrawtool.h" -#include "../vabstractpoint.h" //--------------------------------------------------------------------------------------------------------------------- VToolDoublePoint::VToolDoublePoint(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 p1id, quint32 p2id, const QString ¬es, QGraphicsItem *parent) - :VAbstractPoint(doc, data, id, notes), - QGraphicsPathItem(parent), - firstPoint(nullptr), - secondPoint(nullptr), - p1id(p1id), - p2id(p2id) + : VAbstractPoint(doc, data, id, notes), + QGraphicsPathItem(parent), + firstPoint(nullptr), + secondPoint(nullptr), + p1id(p1id), + p2id(p2id) { - firstPoint = new VSimplePoint(p1id, QColor(Qt::black)); + firstPoint = new VSimplePoint(p1id, VColorRole::PatternColor); firstPoint->setParentItem(this); firstPoint->setToolTip(ComplexToolTip(p1id)); connect(firstPoint, &VSimplePoint::Choosed, this, &VToolDoublePoint::Point1Choosed); @@ -73,7 +72,7 @@ VToolDoublePoint::VToolDoublePoint(VAbstractPattern *doc, VContainer *data, quin connect(firstPoint, &VSimplePoint::NameChangedPosition, this, &VToolDoublePoint::Label1ChangePosition); firstPoint->RefreshPointGeometry(*VAbstractTool::data.GeometricObject(p1id)); - secondPoint = new VSimplePoint(p2id, QColor(Qt::black)); + secondPoint = new VSimplePoint(p2id, VColorRole::PatternColor); secondPoint->setParentItem(this); secondPoint->setToolTip(ComplexToolTip(p2id)); connect(secondPoint, &VSimplePoint::Choosed, this, &VToolDoublePoint::Point2Choosed); @@ -302,16 +301,16 @@ void VToolDoublePoint::ToolSelectionType(const SelectionType &type) //--------------------------------------------------------------------------------------------------------------------- void VToolDoublePoint::UpdateNamePosition(quint32 id, const QPointF &pos) -{ +{ if (id == p1id) { VAbstractApplication::VApp()->getUndoStack()->push( - new MoveDoubleLabel(doc, pos, MoveDoublePoint::FirstPoint, m_id, p1id)); + new MoveDoubleLabel(doc, pos, MoveDoublePoint::FirstPoint, m_id, p1id)); } else if (id == p2id) { VAbstractApplication::VApp()->getUndoStack()->push( - new MoveDoubleLabel(doc, pos, MoveDoublePoint::SecondPoint, m_id, p2id)); + new MoveDoubleLabel(doc, pos, MoveDoublePoint::SecondPoint, m_id, p2id)); } } @@ -354,16 +353,16 @@ void VToolDoublePoint::keyReleaseEvent(QKeyEvent *event) { DeleteToolWithConfirm(); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } break; default: break; } - QGraphicsPathItem::keyReleaseEvent ( event ); + QGraphicsPathItem::keyReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- @@ -432,12 +431,12 @@ void VToolDoublePoint::ChangeLabelVisibility(quint32 id, bool visible) if (id == p1id) { VAbstractApplication::VApp()->getUndoStack()->push( - new ShowDoubleLabel(doc, m_id, p1id, visible, ShowDoublePoint::FirstPoint)); + new ShowDoubleLabel(doc, m_id, p1id, visible, ShowDoublePoint::FirstPoint)); } else if (id == p2id) { VAbstractApplication::VApp()->getUndoStack()->push( - new ShowDoubleLabel(doc, m_id, p2id, visible, ShowDoublePoint::SecondPoint)); + new ShowDoubleLabel(doc, m_id, p2id, visible, ShowDoublePoint::SecondPoint)); } } @@ -450,6 +449,6 @@ auto VToolDoublePoint::ComplexToolTip(quint32 itemId) const -> QString " %1: %2 " "%3" "") - .arg(tr("Label"), point->name(), MakeToolTip()); + .arg(tr("Label"), point->name(), MakeToolTip()); return toolTip; } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.h index b9e58bbdc..53c35de61 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.h @@ -29,7 +29,6 @@ #ifndef VTOOLDOUBLEPOINT_H #define VTOOLDOUBLEPOINT_H - #include #include #include @@ -44,60 +43,65 @@ class VSimplePoint; -class VToolDoublePoint: public VAbstractPoint, public QGraphicsPathItem +class VToolDoublePoint : public VAbstractPoint, public QGraphicsPathItem { Q_OBJECT // NOLINT + public: VToolDoublePoint(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 p1id, quint32 p2id, - const QString ¬es, QGraphicsItem * parent = nullptr); - virtual ~VToolDoublePoint() = default; + const QString ¬es, QGraphicsItem *parent = nullptr); + ~VToolDoublePoint() override = default; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::DoublePoint)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::DoublePoint) + }; auto nameP1() const -> QString; - void setNameP1(const QString &name); + void setNameP1(const QString &name); auto nameP2() const -> QString; - void setNameP2(const QString &name); + void setNameP2(const QString &name); void SetNotes(const QString ¬es) override; - virtual void GroupVisibility(quint32 object, bool visible) override; - virtual void ChangeLabelPosition(quint32 id, const QPointF &pos) override; + void GroupVisibility(quint32 object, bool visible) override; + void ChangeLabelPosition(quint32 id, const QPointF &pos) override; + + auto IsLabelVisible(quint32 id) const -> bool override; + void SetLabelVisible(quint32 id, bool visible) override; - virtual auto IsLabelVisible(quint32 id) const -> bool override; - virtual void SetLabelVisible(quint32 id, bool visible) override; public slots: - void Label1ChangePosition(const QPointF &pos); - void Label2ChangePosition(const QPointF &pos); - virtual void Disable(bool disable, const QString &namePP) override; - virtual void EnableToolMove(bool move) override; - void Point1Choosed(); - void Point2Choosed(); - void Point1Selected(bool selected); - void Point2Selected(bool selected); - virtual void FullUpdateFromFile() override; - virtual void AllowHover(bool enabled) override; - virtual void AllowSelecting(bool enabled) override; - void AllowLabelHover(bool enabled); - void AllowLabelSelecting(bool enabled); + void Label1ChangePosition(const QPointF &pos); + void Label2ChangePosition(const QPointF &pos); + void Disable(bool disable, const QString &namePP) override; + void EnableToolMove(bool move) override; + void Point1Choosed(); + void Point2Choosed(); + void Point1Selected(bool selected); + void Point2Selected(bool selected); + void FullUpdateFromFile() override; + void AllowHover(bool enabled) override; + void AllowSelecting(bool enabled) override; + void AllowLabelHover(bool enabled); + void AllowLabelSelecting(bool enabled); virtual void ToolSelectionType(const SelectionType &type) override; protected: VSimplePoint *firstPoint; VSimplePoint *secondPoint; - quint32 p1id; - quint32 p2id; + quint32 p1id; + quint32 p2id; - virtual void UpdateNamePosition(quint32 id, const QPointF &pos) override; - virtual auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; - virtual void keyReleaseEvent(QKeyEvent * event) override; - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual void AddToFile() override; - virtual void ChangeLabelVisibility(quint32 id, bool visible) override; + void UpdateNamePosition(quint32 id, const QPointF &pos) override; + auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; + void keyReleaseEvent(QKeyEvent *event) override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + void AddToFile() override; + void ChangeLabelVisibility(quint32 id, bool visible) override; auto ComplexToolTip(quint32 itemId) const -> QString; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp index cf9c34f6f..9f48f676b 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.cpp @@ -44,9 +44,9 @@ #include "../ifc/xml/vdomdocument.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vpatterndb/vcontainer.h" #include "../vtoolsinglepoint.h" -#include "../vwidgets/global.h" #include "../vwidgets/scalesceneitems.h" template class QSharedPointer; @@ -71,7 +71,6 @@ VToolLinePoint::VToolLinePoint(VAbstractPattern *doc, VContainer *data, const qu formulaLength(formula), angle(angle), basePointId(basePointId), - mainLine(nullptr), lineColor(lineColor) { this->m_lineType = typeLine; @@ -79,7 +78,7 @@ VToolLinePoint::VToolLinePoint(VAbstractPattern *doc, VContainer *data, const qu QPointF point1 = static_cast(*data->GeometricObject(basePointId)); QPointF point2 = static_cast(*data->GeometricObject(id)); QLineF line(point1 - point2, QPointF()); - mainLine = new VScaledLine(line, this); + mainLine = new VScaledLine(line, VColorRole::CustomColor, this); mainLine->SetBoldLine(false); mainLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true); mainLine->setVisible(not line.isNull()); @@ -95,7 +94,7 @@ VToolLinePoint::~VToolLinePoint() void VToolLinePoint::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QPen mPen = mainLine->pen(); - mPen.setColor(CorrectColor(this, lineColor)); + mPen.setColor(VSceneStylesheet::CorrectToolColor(this, VSceneStylesheet::CorrectToolColorForDarkTheme(lineColor))); mPen.setStyle(LineStyleToPenStyle(m_lineType)); mainLine->setPen(mPen); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h index 3e08ca142..664c6f19f 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollinepoint.h @@ -29,24 +29,24 @@ #ifndef VTOOLLINEPOINT_H #define VTOOLLINEPOINT_H - #include #include #include #include #include +#include "../vmisc/def.h" #include "../vpatterndb/vformula.h" #include "../vtoolsinglepoint.h" -#include "../vmisc/def.h" template class QSharedPointer; struct VToolLinePointInitData : VToolSinglePointInitData { VToolLinePointInitData() - : VToolSinglePointInitData() - {} + : VToolSinglePointInitData() + { + } QString typeLine{TypeLineLine}; QString lineColor{ColorBlack}; @@ -58,52 +58,56 @@ struct VToolLinePointInitData : VToolSinglePointInitData class VToolLinePoint : public VToolSinglePoint { Q_OBJECT // NOLINT + public: - VToolLinePoint(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, const - QString &lineColor, const QString &formula, const quint32 &basePointId, const qreal &angle, - const QString ¬es, QGraphicsItem * parent = nullptr); + VToolLinePoint(VAbstractPattern *doc, VContainer *data, const quint32 &id, const QString &typeLine, + const QString &lineColor, const QString &formula, const quint32 &basePointId, const qreal &angle, + const QString ¬es, QGraphicsItem *parent = nullptr); virtual ~VToolLinePoint() override; virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::LinePoint)}; + enum + { + Type = UserType + static_cast(Tool::LinePoint) + }; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, - QWidget *widget = nullptr) override; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; auto GetFormulaLength() const -> VFormula; - void SetFormulaLength(const VFormula &value); + void SetFormulaLength(const VFormula &value); auto BasePointName() const -> QString; auto GetAngle() const -> qreal; - void SetAngle(const qreal &value); + void SetAngle(const qreal &value); auto GetLineColor() const -> QString; - void SetLineColor(const QString &value); + void SetLineColor(const QString &value); public slots: - virtual void Disable(bool disable, const QString &namePP) override; - virtual void FullUpdateFromFile() override; + virtual void Disable(bool disable, const QString &namePP) override; + virtual void FullUpdateFromFile() override; + protected: /** @brief formula string with length formula. */ - QString formulaLength; + QString formulaLength; /** @brief angle line angle. */ - qreal angle; + qreal angle; /** @brief basePointId id base line point. */ - quint32 basePointId; + quint32 basePointId; /** @brief mainLine line item. */ - VScaledLine *mainLine; + VScaledLine *mainLine{nullptr}; /** @brief lineColor color of a line. */ - QString lineColor; + QString lineColor; - virtual void RefreshGeometry(); - virtual void RemoveReferens() override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + virtual void RefreshGeometry(); + virtual void RemoveReferens() override; + virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; virtual auto MakeToolTip() const -> QString override; private: diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp index 27bf855f8..a08ba771b 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp @@ -45,11 +45,14 @@ #include #include -#include "../../../../dialogs/tools/dialogtool.h" #include "../../../../dialogs/tools/dialogsinglepoint.h" +#include "../../../../dialogs/tools/dialogtool.h" #include "../../../../undocommands/addpatternpiece.h" #include "../../../../undocommands/deletepatternpiece.h" #include "../../../../undocommands/movespoint.h" +#include "../../../vabstracttool.h" +#include "../../../vdatatool.h" +#include "../../vdrawtool.h" #include "../ifc/exception/vexception.h" #include "../ifc/ifcdef.h" #include "../vgeometry/vgobject.h" @@ -59,9 +62,6 @@ #include "../vwidgets/vgraphicssimpletextitem.h" #include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsview.h" -#include "../../../vabstracttool.h" -#include "../../../vdatatool.h" -#include "../../vdrawtool.h" #include "vtoolsinglepoint.h" const QString VToolBasePoint::ToolType = QStringLiteral("single"); @@ -72,13 +72,13 @@ const QString VToolBasePoint::ToolType = QStringLiteral("single"); * @param initData init data. * @param parent parent object. */ -VToolBasePoint::VToolBasePoint (const VToolBasePointInitData &initData, QGraphicsItem * parent ) - :VToolSinglePoint(initData.doc, initData.data, initData.id, initData.notes, parent), - namePP(initData.nameActivPP) +VToolBasePoint::VToolBasePoint(const VToolBasePointInitData &initData, QGraphicsItem *parent) + : VToolSinglePoint(initData.doc, initData.data, initData.id, initData.notes, parent), + namePP(initData.nameActivPP) { - m_baseColor = Qt::red; - this->setFlag(QGraphicsItem::ItemIsMovable, true); - this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); + SetColorRole(VColorRole::BasePointColor); + setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); m_namePoint->setBrush(Qt::black); ToolCreation(initData.typeCreation); } @@ -131,7 +131,7 @@ auto VToolBasePoint::Create(VToolBasePointInitData initData) -> VToolBasePoint * //--------------------------------------------------------------------------------------------------------------------- void VToolBasePoint::ShowVisualization(bool show) { - Q_UNUSED(show) //don't have any visualization for base point yet + Q_UNUSED(show) // don't have any visualization for base point yet } //--------------------------------------------------------------------------------------------------------------------- @@ -148,7 +148,7 @@ void VToolBasePoint::AddToFile() QSharedPointer obj = VAbstractTool::data.GetGObject(m_id); SaveOptions(sPoint, obj); - //Create pattern piece structure + // Create pattern piece structure QDomElement patternPiece = doc->createElement(VAbstractPattern::TagDraw); doc->SetAttribute(patternPiece, AttrName, namePP); @@ -272,7 +272,7 @@ void VToolBasePoint::SaveDialog(QDomElement &domElement, QList &oldDepe doc->SetAttribute(domElement, AttrX, QString().setNum(VAbstractValApplication::VApp()->fromPixel(p.x()))); doc->SetAttribute(domElement, AttrY, QString().setNum(VAbstractValApplication::VApp()->fromPixel(p.y()))); doc->SetAttributeOrRemoveIf(domElement, AttrNotes, dialogTool->GetNotes(), - [](const QString ¬es) noexcept {return notes.isEmpty();}); + [](const QString ¬es) noexcept { return notes.isEmpty(); }); } //--------------------------------------------------------------------------------------------------------------------- @@ -334,7 +334,7 @@ auto VToolBasePoint::MakeToolTip() const -> QString const QString toolTip = QString("" "" "
%1: %2
") - .arg(tr("Label"), point->name()); + .arg(tr("Label"), point->name()); return toolTip; } @@ -360,11 +360,11 @@ void VToolBasePoint::ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quin ContextMenu(event, id, RemoveOption::Disable); } } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { qCDebug(vTool, "Tool was deleted. Immediately leave method."); Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } qCDebug(vTool, "Context menu closed. Tool was not deleted."); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h index 8eb383c39..3141f19b2 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.h @@ -29,18 +29,16 @@ #ifndef VTOOLBASEPOINT_H #define VTOOLBASEPOINT_H - #include #include #include #include #include #include -#include #include -#include "../vmisc/def.h" #include "../ifc/xml/vabstractpattern.h" +#include "../vmisc/def.h" #include "vtoolsinglepoint.h" template class QSharedPointer; @@ -48,11 +46,12 @@ template class QSharedPointer; struct VToolBasePointInitData : VToolSinglePointInitData { VToolBasePointInitData() - : VToolSinglePointInitData(), - nameActivPP(), - x(labelMX), - y(labelMY) - {} + : VToolSinglePointInitData(), + nameActivPP(), + x(labelMX), + y(labelMY) + { + } QString nameActivPP; qreal x; @@ -66,17 +65,21 @@ struct VToolBasePointInitData : VToolSinglePointInitData class VToolBasePoint : public VToolSinglePoint { Q_OBJECT // NOLINT + public: - virtual ~VToolBasePoint() =default; + virtual ~VToolBasePoint() = default; virtual void SetDialog() override; static auto Create(VToolBasePointInitData initData) -> VToolBasePoint *; static const QString ToolType; virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::BasePoint)}; + enum + { + Type = UserType + static_cast(Tool::BasePoint) + }; virtual void ShowVisualization(bool show) override; auto GetBasePointPos() const -> QPointF; - void SetBasePointPos(const QPointF &pos); + void SetBasePointPos(const QPointF &pos); public slots: virtual void FullUpdateFromFile() override; virtual void EnableToolMove(bool move) override; @@ -84,27 +87,29 @@ signals: /** * @brief FullUpdateTree handle if need update pattern file. */ - void LiteUpdateTree(); + void LiteUpdateTree(); + protected: virtual void AddToFile() override; virtual auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; virtual void DeleteToolWithConfirm(bool ask = true) override; virtual void SaveDialog(QDomElement &domElement, QList &oldDependencies, QList &newDependencies) override; - virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) override; - virtual void mousePressEvent( QGraphicsSceneMouseEvent * event ) override; - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) override; + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; virtual void SetVisualization() override {} virtual auto MakeToolTip() const -> QString override; private slots: - virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) override; + virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id = NULL_ID) override; + private: Q_DISABLE_COPY_MOVE(VToolBasePoint) // NOLINT QString namePP; - VToolBasePoint (const VToolBasePointInitData &initData, QGraphicsItem * parent = nullptr ); + VToolBasePoint(const VToolBasePointInitData &initData, QGraphicsItem *parent = nullptr); }; #endif // VTOOLBASEPOINT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h index e2cac7432..15ab3fb87 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h @@ -29,7 +29,6 @@ #ifndef VTOOLPOINTFROMARCANDTANGENT_H #define VTOOLPOINTFROMARCANDTANGENT_H - #include #include #include @@ -47,48 +46,51 @@ class VArc; struct VToolPointFromArcAndTangentInitData : VToolSinglePointInitData { - VToolPointFromArcAndTangentInitData() - : VToolSinglePointInitData(), - arcId(NULL_ID), - tangentPointId(NULL_ID), - crossPoint(CrossCirclesPoint::FirstPoint) - {} - - quint32 arcId; - quint32 tangentPointId; - CrossCirclesPoint crossPoint; + quint32 arcId{NULL_ID}; + quint32 tangentPointId{NULL_ID}; + CrossCirclesPoint crossPoint{CrossCirclesPoint::FirstPoint}; }; class VToolPointFromArcAndTangent : public VToolSinglePoint { Q_OBJECT // NOLINT + public: - virtual void SetDialog() override; + void SetDialog() override; + static auto Create(const QPointer &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data) -> VToolPointFromArcAndTangent *; static auto Create(VToolPointFromArcAndTangentInitData initData) -> VToolPointFromArcAndTangent *; + static auto FindPoint(const QPointF &p, const VArc *arc, const CrossCirclesPoint pType, QPointF *intersectionPoint) -> bool; + static const QString ToolType; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::PointFromArcAndTangent) }; + + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::PointFromArcAndTangent) + }; auto TangentPointName() const -> QString; auto ArcName() const -> QString; auto GetCrossCirclesPoint() const -> CrossCirclesPoint; - void SetCrossCirclesPoint(CrossCirclesPoint value); + void SetCrossCirclesPoint(CrossCirclesPoint value); + + void ShowVisualization(bool show) override; - virtual void ShowVisualization(bool show) override; protected slots: - virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) override; + void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id = NULL_ID) override; + protected: - virtual void RemoveReferens() override; - virtual void SaveDialog(QDomElement &domElement, QList &oldDependencies, - QList &newDependencies) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual void ReadToolAttributes(const QDomElement &domElement) override; - virtual void SetVisualization() override; + void RemoveReferens() override; + void SaveDialog(QDomElement &domElement, QList &oldDependencies, QList &newDependencies) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + void ReadToolAttributes(const QDomElement &domElement) override; + void SetVisualization() override; + private: Q_DISABLE_COPY_MOVE(VToolPointFromArcAndTangent) // NOLINT @@ -96,7 +98,8 @@ private: quint32 tangentPointId; CrossCirclesPoint crossPoint; - VToolPointFromArcAndTangent(const VToolPointFromArcAndTangentInitData &initData, QGraphicsItem *parent = nullptr); + explicit VToolPointFromArcAndTangent(const VToolPointFromArcAndTangentInitData &initData, + QGraphicsItem *parent = nullptr); }; #endif // VTOOLPOINTFROMARCANDTANGENT_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp index 9b553eba2..e29bb2638 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp @@ -34,8 +34,9 @@ #include "../../../../dialogs/tools/dialogpointofintersectioncurves.h" #include "../../../../dialogs/tools/dialogtool.h" -#include "../../../../visualization/path/../visualization.h" #include "../../../../visualization/path/vistoolpointofintersectioncurves.h" +#include "../../../vabstracttool.h" +#include "../../vdrawtool.h" #include "../ifc/exception/vexception.h" #include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/ifcdef.h" @@ -44,8 +45,6 @@ #include "../vgeometry/vpointf.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/vmaingraphicsscene.h" -#include "../../../vabstracttool.h" -#include "../../vdrawtool.h" #include "vtoolsinglepoint.h" template class QSharedPointer; @@ -55,17 +54,17 @@ const QString VToolPointOfIntersectionCurves::ToolType = QStringLiteral("pointOf //--------------------------------------------------------------------------------------------------------------------- VToolPointOfIntersectionCurves::VToolPointOfIntersectionCurves(const VToolPointOfIntersectionCurvesInitData &initData, QGraphicsItem *parent) - :VToolSinglePoint(initData.doc, initData.data, initData.id, initData.notes, parent), - firstCurveId(initData.firstCurveId), - secondCurveId(initData.secondCurveId), - vCrossPoint(initData.vCrossPoint), - hCrossPoint(initData.hCrossPoint), - m_curve1Segments(initData.curve1Segments), - m_curve2Segments(initData.curve2Segments), - m_curve1AliasSuffix1(initData.curve1AliasSuffix1), - m_curve1AliasSuffix2(initData.curve1AliasSuffix2), - m_curve2AliasSuffix1(initData.curve2AliasSuffix1), - m_curve2AliasSuffix2(initData.curve2AliasSuffix2) + : VToolSinglePoint(initData.doc, initData.data, initData.id, initData.notes, parent), + firstCurveId(initData.firstCurveId), + secondCurveId(initData.secondCurveId), + vCrossPoint(initData.vCrossPoint), + hCrossPoint(initData.hCrossPoint), + m_curve1Segments(initData.curve1Segments), + m_curve2Segments(initData.curve2Segments), + m_curve1AliasSuffix1(initData.curve1AliasSuffix1), + m_curve1AliasSuffix2(initData.curve1AliasSuffix2), + m_curve2AliasSuffix1(initData.curve2AliasSuffix1), + m_curve2AliasSuffix2(initData.curve2AliasSuffix2) { ToolCreation(initData.typeCreation); } @@ -95,7 +94,7 @@ auto VToolPointOfIntersectionCurves::Create(const QPointer &dialog, { SCASSERT(not dialog.isNull()) const QPointer dialogTool = - qobject_cast(dialog); + qobject_cast(dialog); SCASSERT(not dialogTool.isNull()) QT_WARNING_PUSH @@ -143,9 +142,10 @@ auto VToolPointOfIntersectionCurves::Create(VToolPointOfIntersectionCurvesInitDa if (not success) { const QString errorMsg = tr("Error calculating point '%1'. Curves '%2' and '%3' have no point of intersection") - .arg(initData.name, curve1->name(), curve2->name()); - VAbstractApplication::VApp()->IsPedantic() ? throw VExceptionObjectError(errorMsg) : - qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; + .arg(initData.name, curve1->name(), curve2->name()); + VAbstractApplication::VApp()->IsPedantic() + ? throw VExceptionObjectError(errorMsg) + : qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; } const qreal segLength1 = curve1->GetLengthByPoint(fPoint); @@ -158,39 +158,34 @@ auto VToolPointOfIntersectionCurves::Create(VToolPointOfIntersectionCurvesInitDa { initData.id = initData.data->AddGObject(p); - initData.curve1Segments = VToolSinglePoint::InitSegments(curve1->getType(), segLength1, p, - initData.firstCurveId, initData.data, - initData.curve1AliasSuffix1, - initData.curve1AliasSuffix2); - initData.curve2Segments = VToolSinglePoint::InitSegments(curve2->getType(), segLength2, p, - initData.secondCurveId, initData.data, - initData.curve2AliasSuffix1, - initData.curve2AliasSuffix2); + initData.curve1Segments = + VToolSinglePoint::InitSegments(curve1->getType(), segLength1, p, initData.firstCurveId, initData.data, + initData.curve1AliasSuffix1, initData.curve1AliasSuffix2); + initData.curve2Segments = + VToolSinglePoint::InitSegments(curve2->getType(), segLength2, p, initData.secondCurveId, initData.data, + initData.curve2AliasSuffix1, initData.curve2AliasSuffix2); } else { initData.data->UpdateGObject(initData.id, p); - initData.curve1Segments = VToolSinglePoint::InitSegments(curve1->getType(), segLength1, p, - initData.firstCurveId, initData.data, - initData.curve1AliasSuffix1, - initData.curve1AliasSuffix2); - initData.curve2Segments = VToolSinglePoint::InitSegments(curve2->getType(), segLength2, p, - initData.secondCurveId, initData.data, - initData.curve2AliasSuffix1, - initData.curve2AliasSuffix2); + initData.curve1Segments = + VToolSinglePoint::InitSegments(curve1->getType(), segLength1, p, initData.firstCurveId, initData.data, + initData.curve1AliasSuffix1, initData.curve1AliasSuffix2); + initData.curve2Segments = + VToolSinglePoint::InitSegments(curve2->getType(), segLength2, p, initData.secondCurveId, initData.data, + initData.curve2AliasSuffix1, initData.curve2AliasSuffix2); if (initData.parse != Document::FullParse) { initData.doc->UpdateToolData(initData.id, initData.data); - } } if (initData.parse == Document::FullParse) { VAbstractTool::AddRecord(initData.id, Tool::PointOfIntersectionCurves, initData.doc); - auto* point = new VToolPointOfIntersectionCurves(initData); + auto *point = new VToolPointOfIntersectionCurves(initData); initData.scene->addItem(point); InitToolConnections(initData.scene, point); VAbstractPattern::AddTool(initData.id, point); @@ -219,10 +214,10 @@ auto VToolPointOfIntersectionCurves::FindPoint(const QVector &curve1Poi } QVector intersections; - for ( auto i = 0; i < curve1Points.count()-1; ++i ) + for (auto i = 0; i < curve1Points.count() - 1; ++i) { intersections << VAbstractCurve::CurveIntersectLine(curve2Points, - QLineF(curve1Points.at(i), curve1Points.at(i+1))); + QLineF(curve1Points.at(i), curve1Points.at(i + 1))); } if (intersections.isEmpty()) @@ -242,7 +237,7 @@ auto VToolPointOfIntersectionCurves::FindPoint(const QVector &curve1Poi qreal minY = intersections.at(0).y(); vIntersections.append(intersections.at(0)); - for ( auto i = 1; i < intersections.count(); ++i ) + for (auto i = 1; i < intersections.count(); ++i) { const QPointF p = intersections.at(i); if (p.y() < minY) @@ -262,7 +257,7 @@ auto VToolPointOfIntersectionCurves::FindPoint(const QVector &curve1Poi qreal maxY = intersections.at(0).y(); vIntersections.append(intersections.at(0)); - for ( auto i = 1; i < intersections.count(); ++i ) + for (auto i = 1; i < intersections.count(); ++i) { const QPointF p = intersections.at(i); if (p.y() > maxY) @@ -295,7 +290,7 @@ auto VToolPointOfIntersectionCurves::FindPoint(const QVector &curve1Poi { qreal maxX = vIntersections.at(0).x(); - for ( auto i = 1; i < vIntersections.count(); ++i ) + for (auto i = 1; i < vIntersections.count(); ++i) { const QPointF p = vIntersections.at(i); if (p.x() > maxX) @@ -309,7 +304,7 @@ auto VToolPointOfIntersectionCurves::FindPoint(const QVector &curve1Poi { qreal minX = vIntersections.at(0).x(); - for ( auto i = 1; i < vIntersections.count(); ++i ) + for (auto i = 1; i < vIntersections.count(); ++i) { const QPointF p = vIntersections.at(i); if (p.x() < minX) @@ -379,10 +374,10 @@ void VToolPointOfIntersectionCurves::ShowContextMenu(QGraphicsSceneContextMenuEv { ContextMenu(event, id); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } } @@ -401,7 +396,7 @@ void VToolPointOfIntersectionCurves::SaveDialog(QDomElement &domElement, QList &newDependencies) { SCASSERT(not m_dialog.isNull()) - auto *dialogTool = qobject_cast(m_dialog); + auto *dialogTool = qobject_cast(m_dialog); SCASSERT(dialogTool != nullptr) AddDependence(oldDependencies, firstCurveId); @@ -415,15 +410,15 @@ void VToolPointOfIntersectionCurves::SaveDialog(QDomElement &domElement, QListSetAttribute(domElement, AttrVCrossPoint, QString().setNum(static_cast(dialogTool->GetVCrossPoint()))); doc->SetAttribute(domElement, AttrHCrossPoint, QString().setNum(static_cast(dialogTool->GetHCrossPoint()))); doc->SetAttributeOrRemoveIf(domElement, AttrCurve1Alias1, dialogTool->GetCurve1AliasSuffix1(), - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); doc->SetAttributeOrRemoveIf(domElement, AttrCurve1Alias2, dialogTool->GetCurve1AliasSuffix2(), - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); doc->SetAttributeOrRemoveIf(domElement, AttrCurve2Alias1, dialogTool->GetCurve2AliasSuffix1(), - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); doc->SetAttributeOrRemoveIf(domElement, AttrCurve2Alias2, dialogTool->GetCurve2AliasSuffix2(), - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); doc->SetAttributeOrRemoveIf(domElement, AttrNotes, dialogTool->GetNotes(), - [](const QString ¬es) noexcept {return notes.isEmpty();}); + [](const QString ¬es) noexcept { return notes.isEmpty(); }); } //--------------------------------------------------------------------------------------------------------------------- @@ -437,13 +432,13 @@ void VToolPointOfIntersectionCurves::SaveOptions(QDomElement &tag, QSharedPointe doc->SetAttribute(tag, AttrVCrossPoint, static_cast(vCrossPoint)); doc->SetAttribute(tag, AttrHCrossPoint, static_cast(hCrossPoint)); doc->SetAttributeOrRemoveIf(tag, AttrCurve1Alias1, m_curve1AliasSuffix1, - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); doc->SetAttributeOrRemoveIf(tag, AttrCurve1Alias2, m_curve1AliasSuffix2, - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); doc->SetAttributeOrRemoveIf(tag, AttrCurve2Alias1, m_curve2AliasSuffix1, - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); doc->SetAttributeOrRemoveIf(tag, AttrCurve2Alias2, m_curve2AliasSuffix2, - [](const QString &suffix) noexcept {return suffix.isEmpty();}); + [](const QString &suffix) noexcept { return suffix.isEmpty(); }); } //--------------------------------------------------------------------------------------------------------------------- @@ -453,10 +448,10 @@ void VToolPointOfIntersectionCurves::ReadToolAttributes(const QDomElement &domEl firstCurveId = VAbstractPattern::GetParametrUInt(domElement, AttrCurve1, NULL_ID_STR); secondCurveId = VAbstractPattern::GetParametrUInt(domElement, AttrCurve2, NULL_ID_STR); - vCrossPoint = static_cast(VAbstractPattern::GetParametrUInt(domElement, AttrVCrossPoint, - QChar('1'))); - hCrossPoint = static_cast(VAbstractPattern::GetParametrUInt(domElement, AttrHCrossPoint, - QChar('1'))); + vCrossPoint = + static_cast(VAbstractPattern::GetParametrUInt(domElement, AttrVCrossPoint, QChar('1'))); + hCrossPoint = + static_cast(VAbstractPattern::GetParametrUInt(domElement, AttrHCrossPoint, QChar('1'))); m_curve1AliasSuffix1 = VAbstractPattern::GetParametrEmptyString(domElement, AttrCurve1Alias1); m_curve1AliasSuffix2 = VAbstractPattern::GetParametrEmptyString(domElement, AttrCurve1Alias2); m_curve2AliasSuffix1 = VAbstractPattern::GetParametrEmptyString(domElement, AttrCurve2Alias1); @@ -492,11 +487,11 @@ auto VToolPointOfIntersectionCurves::MakeToolTip() const -> QString " %7: %8 " " %9: %10 " "") - .arg(tr("Label"), p->name(), /* 1, 2 */ - tr("Curve 1 segment 1"), m_curve1Segments.first, /* 3, 4 */ - tr("Curve 1 segment 2"), m_curve1Segments.second) /* 5, 6 */ - .arg(tr("Curve 2 segment 1"), m_curve2Segments.first, /* 7, 8 */ - tr("Curve 2 segment 2"), m_curve2Segments.second); /* 9, 10 */ + .arg(tr("Label"), p->name(), /* 1, 2 */ + tr("Curve 1 segment 1"), m_curve1Segments.first, /* 3, 4 */ + tr("Curve 1 segment 2"), m_curve1Segments.second) /* 5, 6 */ + .arg(tr("Curve 2 segment 1"), m_curve2Segments.first, /* 7, 8 */ + tr("Curve 2 segment 2"), m_curve2Segments.second); /* 9, 10 */ return toolTip; } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp index 93f5bf21b..9c896b900 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp @@ -40,30 +40,29 @@ #include #include #include -#include #include #include "../../../../undocommands/label/movelabel.h" #include "../../../../undocommands/label/showlabel.h" +#include "../../../vabstracttool.h" +#include "../../vdrawtool.h" #include "../ifc/exception/vexception.h" #include "../ifc/ifcdef.h" #include "../ifc/xml/vabstractpattern.h" +#include "../vabstractpoint.h" +#include "../vgeometry/vabstractcubicbezier.h" +#include "../vgeometry/vabstractcubicbezierpath.h" +#include "../vgeometry/varc.h" +#include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" -#include "../vgeometry/vabstractcubicbezierpath.h" -#include "../vgeometry/vabstractcubicbezier.h" #include "../vgeometry/vspline.h" #include "../vgeometry/vsplinepath.h" -#include "../vgeometry/vellipticalarc.h" -#include "../vgeometry/varc.h" #include "../vmisc/vabstractapplication.h" #include "../vpatterndb/vcontainer.h" -#include "../vwidgets/vgraphicssimpletextitem.h" -#include "../vwidgets/scalesceneitems.h" #include "../vwidgets/global.h" -#include "../../../vabstracttool.h" -#include "../../vdrawtool.h" -#include "../vabstractpoint.h" +#include "../vwidgets/scalesceneitems.h" +#include "../vwidgets/vgraphicssimpletextitem.h" #include "toolcut/vtoolcutsplinepath.h" QT_WARNING_PUSH @@ -84,8 +83,8 @@ QT_WARNING_POP */ VToolSinglePoint::VToolSinglePoint(VAbstractPattern *doc, VContainer *data, quint32 id, const QString ¬es, QGraphicsItem *parent) - : VAbstractPoint(doc, data, id, notes), - VScenePoint(parent) + : VAbstractPoint(doc, data, id, notes), + VScenePoint(VColorRole::PatternColor, parent) { connect(m_namePoint, &VGraphicsSimpleTextItem::ShowContextMenu, this, &VToolSinglePoint::contextMenuEvent); connect(m_namePoint, &VGraphicsSimpleTextItem::DeleteTool, this, &VToolSinglePoint::DeleteFromLabel); @@ -177,14 +176,15 @@ void VToolSinglePoint::mousePressEvent(QGraphicsSceneMouseEvent *event) VScenePoint::mousePressEvent(event); // Somehow clicking on notselectable object do not clean previous selections. - if (not (flags() & ItemIsSelectable) && scene()) + if (not(flags() & ItemIsSelectable) && scene()) { scene()->clearSelection(); } if (selectionType == SelectionType::ByMouseRelease) { - event->accept();// Special for not selectable item first need to call standard mousePressEvent then accept event + event + ->accept(); // Special for not selectable item first need to call standard mousePressEvent then accept event } else { @@ -297,16 +297,16 @@ void VToolSinglePoint::keyReleaseEvent(QKeyEvent *event) { DeleteToolWithConfirm(); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } break; default: break; } - VScenePoint::keyReleaseEvent ( event ); + VScenePoint::keyReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- @@ -393,10 +393,10 @@ void VToolSinglePoint::ToolSelectionType(const SelectionType &type) QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wswitch-default") auto VToolSinglePoint::InitSegments(GOType curveType, qreal segLength, const VPointF *p, quint32 curveId, - VContainer *data, const QString &alias1, - const QString &alias2) -> QPair + VContainer *data, const QString &alias1, const QString &alias2) + -> QPair { - switch(curveType) + switch (curveType) { case GOType::EllipticalArc: return InitArc(data, segLength, p, curveId, alias1, alias2); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h index c09fa9ee3..9db6ba237 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h @@ -29,7 +29,6 @@ #ifndef VTOOLSINGLEPOINT_H #define VTOOLSINGLEPOINT_H - #include #include #include @@ -46,66 +45,64 @@ template class QSharedPointer; struct VToolSinglePointInitData : VDrawToolInitData { - VToolSinglePointInitData() - : VDrawToolInitData(), - name(), - mx(labelMX), - my(labelMY), - showLabel(true) - {} - - QString name; - qreal mx; - qreal my; - bool showLabel; + QString name{}; + qreal mx{labelMX}; + qreal my{labelMY}; + bool showLabel{true}; }; /** * @brief The VToolSinglePoint class parent for all tools what create points. */ -class VToolSinglePoint: public VAbstractPoint, public VScenePoint +class VToolSinglePoint : public VAbstractPoint, public VScenePoint { Q_OBJECT // NOLINT + public: VToolSinglePoint(VAbstractPattern *doc, VContainer *data, quint32 id, const QString ¬es, - QGraphicsItem * parent = nullptr); - virtual ~VToolSinglePoint() = default; + QGraphicsItem *parent = nullptr); + ~VToolSinglePoint() override = default; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::SinglePoint)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::SinglePoint) + }; auto name() const -> QString; - void setName(const QString &name); + void setName(const QString &name); void SetEnabled(bool enabled); - virtual void GroupVisibility(quint32 object, bool visible) override; - virtual void ChangeLabelPosition(quint32 id, const QPointF &pos) override; + void GroupVisibility(quint32 object, bool visible) override; + void ChangeLabelPosition(quint32 id, const QPointF &pos) override; + + auto IsLabelVisible(quint32 id) const -> bool override; + void SetLabelVisible(quint32 id, bool visible) override; - virtual auto IsLabelVisible(quint32 id) const -> bool override; - virtual void SetLabelVisible(quint32 id, bool visible) override; public slots: - void NameChangePosition(const QPointF &pos); - virtual void Disable(bool disable, const QString &namePP) override; - virtual void EnableToolMove(bool move) override; - void PointChoosed(); - void PointSelected(bool selected); - virtual void FullUpdateFromFile() override; - virtual void AllowHover(bool enabled) override; - virtual void AllowSelecting(bool enabled) override; - void AllowLabelHover(bool enabled); - void AllowLabelSelecting(bool enabled); - virtual void ToolSelectionType(const SelectionType &type) override; + void NameChangePosition(const QPointF &pos); + void Disable(bool disable, const QString &namePP) override; + void EnableToolMove(bool move) override; + void PointChoosed(); + void PointSelected(bool selected); + void FullUpdateFromFile() override; + void AllowHover(bool enabled) override; + void AllowSelecting(bool enabled) override; + void AllowLabelHover(bool enabled); + void AllowLabelSelecting(bool enabled); + void ToolSelectionType(const SelectionType &type) override; + protected: - virtual void UpdateNamePosition(quint32 id, const QPointF &pos) override; - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) override; - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) override; - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; - virtual auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; - virtual void keyReleaseEvent(QKeyEvent * event) override; - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual void ChangeLabelVisibility(quint32 id, bool visible) override; + void UpdateNamePosition(quint32 id, const QPointF &pos) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; + void keyReleaseEvent(QKeyEvent *event) override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + void ChangeLabelVisibility(quint32 id, bool visible) override; template static auto InitArc(VContainer *data, qreal segLength, const VPointF *p, quint32 curveId, const QString &alias1, @@ -119,9 +116,8 @@ private: //--------------------------------------------------------------------------------------------------------------------- template -inline auto VToolSinglePoint::InitArc(VContainer *data, qreal segLength, const VPointF *p, - quint32 curveId, const QString &alias1, - const QString &alias2) -> QPair +inline auto VToolSinglePoint::InitArc(VContainer *data, qreal segLength, const VPointF *p, quint32 curveId, + const QString &alias1, const QString &alias2) -> QPair { QSharedPointer a1; QSharedPointer a2; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h index 456d9f8f6..ea4539cf3 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h @@ -35,7 +35,6 @@ #include #include #include -#include #include #include "../../../visualization/visualization.h" diff --git a/src/libs/vtools/tools/drawTools/vdrawtool.cpp b/src/libs/vtools/tools/drawTools/vdrawtool.cpp index d2cb47d22..ef7728d6d 100644 --- a/src/libs/vtools/tools/drawTools/vdrawtool.cpp +++ b/src/libs/vtools/tools/drawTools/vdrawtool.cpp @@ -34,18 +34,17 @@ #include #include #include -#include #include -#include "../ifc/ifcdef.h" -#include "../ifc/xml/vdomdocument.h" -#include "../ifc/xml/vabstractpattern.h" -#include "../ifc/exception/vexceptionwrongid.h" #include "../../undocommands/addtocalc.h" #include "../../undocommands/savetooloptions.h" +#include "../ifc/exception/vexceptionwrongid.h" +#include "../ifc/ifcdef.h" +#include "../ifc/xml/vabstractpattern.h" +#include "../ifc/xml/vdomdocument.h" #include "../qmuparser/qmuparsererror.h" -#include "../vpatterndb/vcontainer.h" #include "../vabstracttool.h" +#include "../vpatterndb/vcontainer.h" template class QSharedPointer; @@ -57,10 +56,10 @@ template class QSharedPointer; * @param id object id in container. */ VDrawTool::VDrawTool(VAbstractPattern *doc, VContainer *data, quint32 id, const QString ¬es, QObject *parent) - : VInteractiveTool(doc, data, id, parent), - nameActivDraw(doc->GetNameActivPP()), - m_lineType(TypeLineLine), - m_notes(notes) + : VInteractiveTool(doc, data, id, parent), + nameActivDraw(doc->GetNameActivPP()), + m_lineType(TypeLineLine), + m_notes(notes) { connect(this->doc, &VAbstractPattern::ChangedActivPP, this, &VDrawTool::ChangedActivDraw); connect(this->doc, &VAbstractPattern::ChangedNameDraw, this, &VDrawTool::ChangedNameDraw); @@ -125,12 +124,12 @@ void VDrawTool::SaveDialogChange(const QString &undoText) //--------------------------------------------------------------------------------------------------------------------- void VDrawTool::ApplyToolOptions(const QList &oldDependencies, const QList &newDependencies, - const QDomElement &oldDomElement, const QDomElement &newDomElement) + const QDomElement &oldDomElement, const QDomElement &newDomElement) { if (newDependencies != oldDependencies || not VDomDocument::Compare(newDomElement, oldDomElement)) { - SaveToolOptions *saveOptions = new SaveToolOptions(oldDomElement, newDomElement, oldDependencies, - newDependencies, doc, m_id); + SaveToolOptions *saveOptions = + new SaveToolOptions(oldDomElement, newDomElement, oldDependencies, newDependencies, doc, m_id); connect(saveOptions, &SaveToolOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); VAbstractApplication::VApp()->getUndoStack()->push(saveOptions); } @@ -159,8 +158,8 @@ void VDrawTool::SaveOption(QSharedPointer &obj) SaveOptions(newDomElement, obj); - SaveToolOptions *saveOptions = new SaveToolOptions(oldDomElement, newDomElement, QList(), - QList(), doc, m_id); + SaveToolOptions *saveOptions = + new SaveToolOptions(oldDomElement, newDomElement, QList(), QList(), doc, m_id); connect(saveOptions, &SaveToolOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); VAbstractApplication::VApp()->getUndoStack()->push(saveOptions); } @@ -177,7 +176,7 @@ void VDrawTool::SaveOptions(QDomElement &tag, QSharedPointer &obj) doc->SetAttribute(tag, VDomDocument::AttrId, m_id); doc->SetAttributeOrRemoveIf(tag, AttrNotes, m_notes, - [](const QString ¬es) noexcept {return notes.isEmpty();}); + [](const QString ¬es) noexcept { return notes.isEmpty(); }); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/vtoolline.cpp b/src/libs/vtools/tools/drawTools/vtoolline.cpp index 65bbe4e06..6484d212d 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.cpp +++ b/src/libs/vtools/tools/drawTools/vtoolline.cpp @@ -34,22 +34,22 @@ #include #include #include -#include #include #include #include "../../dialogs/tools/dialogline.h" #include "../../dialogs/tools/dialogtool.h" -#include "../../visualization/visualization.h" #include "../../visualization/line/vistoolline.h" +#include "../../visualization/visualization.h" #include "../ifc/exception/vexception.h" #include "../ifc/ifcdef.h" +#include "../vabstracttool.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vpatterndb/vcontainer.h" -#include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/global.h" -#include "../vabstracttool.h" +#include "../vwidgets/vmaingraphicsscene.h" #include "vdrawtool.h" template class QSharedPointer; @@ -61,18 +61,18 @@ template class QSharedPointer; * @param parent parent object. */ VToolLine::VToolLine(const VToolLineInitData &initData, QGraphicsItem *parent) - :VDrawTool(initData.doc, initData.data, initData.id, initData.notes), - VScaledLine(parent), - firstPoint(initData.firstPoint), - secondPoint(initData.secondPoint), - lineColor(initData.lineColor), - m_acceptHoverEvents(true) + : VDrawTool(initData.doc, initData.data, initData.id, initData.notes), + VScaledLine(VColorRole::CustomColor, parent), + firstPoint(initData.firstPoint), + secondPoint(initData.secondPoint), + lineColor(initData.lineColor), + m_acceptHoverEvents(true) { SetBoldLine(false); this->m_lineType = initData.typeLine; - //Line + // Line RefreshGeometry(); - this->setFlag(QGraphicsItem::ItemIsFocusable, true);// For keyboard input focus + this->setFlag(QGraphicsItem::ItemIsFocusable, true); // For keyboard input focus this->setAcceptHoverEvents(m_acceptHoverEvents); ToolCreation(initData.typeCreation); @@ -157,7 +157,7 @@ auto VToolLine::Create(VToolLineInitData initData) -> VToolLine * if (initData.parse == Document::FullParse) { VAbstractTool::AddRecord(initData.id, Tool::Line, initData.doc); - VToolLine *line = new VToolLine(initData); + auto *line = new VToolLine(initData); initData.scene->addItem(line); InitDrawToolConnections(initData.scene, line); connect(initData.scene, &VMainGraphicsScene::EnableLineItemSelection, line, &VToolLine::AllowSelecting); @@ -185,7 +185,7 @@ void VToolLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, { // Don't set pen width. Parent should take care of it. QPen lPen = pen(); - lPen.setColor(CorrectColor(this, lineColor)); + lPen.setColor(VSceneStylesheet::CorrectToolColor(this, VSceneStylesheet::CorrectToolColorForDarkTheme(lineColor))); lPen.setStyle(LineStyleToPenStyle(m_lineType)); setPen(lPen); @@ -254,10 +254,10 @@ void VToolLine::ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 i { ContextMenu(event); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } } @@ -278,7 +278,7 @@ void VToolLine::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) void VToolLine::AddToFile() { QDomElement domElement = doc->createElement(getTagName()); - QSharedPointer obj = QSharedPointer (); + QSharedPointer obj = QSharedPointer(); SaveOptions(domElement, obj); AddToCalculation(domElement); } @@ -360,24 +360,23 @@ void VToolLine::keyReleaseEvent(QKeyEvent *event) { DeleteToolWithConfirm(); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e) - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } break; default: break; } - QGraphicsItem::keyReleaseEvent ( event ); + QGraphicsItem::keyReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- /** * @brief SaveDialog save options into file after change in dialog. */ -void VToolLine::SaveDialog(QDomElement &domElement, QList &oldDependencies, - QList &newDependencies) +void VToolLine::SaveDialog(QDomElement &domElement, QList &oldDependencies, QList &newDependencies) { SCASSERT(not m_dialog.isNull()) const QPointer dialogTool = qobject_cast(m_dialog); @@ -393,7 +392,7 @@ void VToolLine::SaveDialog(QDomElement &domElement, QList &oldDependenc doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttributeOrRemoveIf(domElement, AttrNotes, dialogTool->GetNotes(), - [](const QString ¬es) noexcept {return notes.isEmpty();}); + [](const QString ¬es) noexcept { return notes.isEmpty(); }); } //--------------------------------------------------------------------------------------------------------------------- @@ -446,10 +445,10 @@ auto VToolLine::MakeToolTip() const -> QString " %1: %2 %3 " " %4: %5° " "") - .arg(tr("Length")) - .arg(VAbstractValApplication::VApp()->fromPixel(line.length())) - .arg(UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true), tr("Angle")) - .arg(line.angle()); + .arg(tr("Length")) + .arg(VAbstractValApplication::VApp()->fromPixel(line.length())) + .arg(UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true), tr("Angle")) + .arg(line.angle()); return toolTip; } @@ -483,7 +482,7 @@ void VToolLine::SetLineType(const QString &value) { m_lineType = value; - QSharedPointer obj;//We don't have object for line in data container. Just will send an empty object. + QSharedPointer obj; // We don't have object for line in data container. Just will send an empty object. SaveOption(obj); } @@ -498,7 +497,7 @@ void VToolLine::SetLineColor(const QString &value) { lineColor = value; - QSharedPointer obj;//We don't have object for line in data container. Just will send an empty object. + QSharedPointer obj; // We don't have object for line in data container. Just will send an empty object. SaveOption(obj); } @@ -507,7 +506,7 @@ void VToolLine::SetNotes(const QString ¬es) { m_notes = notes; - QSharedPointer obj;//We don't have object for line in data container. Just will send an empty object. + QSharedPointer obj; // We don't have object for line in data container. Just will send an empty object. SaveOption(obj); } diff --git a/src/libs/vtools/tools/drawTools/vtoolline.h b/src/libs/vtools/tools/drawTools/vtoolline.h index 235bf5f97..94880b764 100644 --- a/src/libs/vtools/tools/drawTools/vtoolline.h +++ b/src/libs/vtools/tools/drawTools/vtoolline.h @@ -29,7 +29,6 @@ #ifndef VTOOLLINE_H #define VTOOLLINE_H - #include #include #include @@ -39,92 +38,91 @@ #include "../ifc/xml/vabstractpattern.h" #include "../vmisc/def.h" -#include "vdrawtool.h" #include "../vwidgets/scalesceneitems.h" +#include "vdrawtool.h" template class QSharedPointer; struct VToolLineInitData : VDrawToolInitData { - VToolLineInitData() - : VDrawToolInitData(), - firstPoint(NULL_ID), - secondPoint(NULL_ID), - typeLine(TypeLineLine), - lineColor(ColorBlack) - {} - - quint32 firstPoint; - quint32 secondPoint; - QString typeLine; - QString lineColor; + quint32 firstPoint{NULL_ID}; + quint32 secondPoint{NULL_ID}; + QString typeLine{TypeLineLine}; + QString lineColor{ColorBlack}; }; /** * @brief The VToolLine class tool for creation line. */ -class VToolLine: public VDrawTool, public VScaledLine +class VToolLine : public VDrawTool, public VScaledLine { Q_OBJECT // NOLINT + public: - virtual void SetDialog() override; + ~VToolLine() override = default; + + void SetDialog() override; static auto Create(const QPointer &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data) -> VToolLine *; static auto Create(VToolLineInitData initData) -> VToolLine *; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::Line)}; - virtual auto getTagName() const -> QString override; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::Line) + }; + auto getTagName() const -> QString override; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, - QWidget *widget = nullptr) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; auto FirstPointName() const -> QString; auto SecondPointName() const -> QString; auto GetLineColor() const -> QString; - void SetLineColor(const QString &value); + void SetLineColor(const QString &value); - virtual void SetNotes(const QString ¬es) override; + void SetNotes(const QString ¬es) override; - virtual void ShowVisualization(bool show) override; + void ShowVisualization(bool show) override; + + void SetLineType(const QString &value) override; + void GroupVisibility(quint32 object, bool visible) override; - virtual void SetLineType(const QString &value) override; - virtual void GroupVisibility(quint32 object, bool visible) override; public slots: - virtual void FullUpdateFromFile() override; - virtual void ShowTool(quint32 id, bool enable) override; - virtual void Disable(bool disable, const QString &namePP) override; - virtual void AllowHover(bool enabled) override; - virtual void AllowSelecting(bool enabled) override; + void FullUpdateFromFile() override; + void ShowTool(quint32 id, bool enable) override; + void Disable(bool disable, const QString &namePP) override; + void AllowHover(bool enabled) override; + void AllowSelecting(bool enabled) override; + protected slots: - virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) override; + void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id = NULL_ID) override; + protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) override; - virtual void AddToFile() override; - virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) override; - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ) override; - virtual void RemoveReferens() override; - virtual auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; - virtual void keyReleaseEvent(QKeyEvent * event) override; - virtual void SaveDialog(QDomElement &domElement, QList &oldDependencies, - QList &newDependencies) override; - virtual void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; - virtual void ReadToolAttributes(const QDomElement &domElement) override; - virtual void SetVisualization() override; - virtual auto MakeToolTip() const -> QString override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void AddToFile() override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + void RemoveReferens() override; + auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; + void keyReleaseEvent(QKeyEvent *event) override; + void SaveDialog(QDomElement &domElement, QList &oldDependencies, QList &newDependencies) override; + void SaveOptions(QDomElement &tag, QSharedPointer &obj) override; + void ReadToolAttributes(const QDomElement &domElement) override; + void SetVisualization() override; + auto MakeToolTip() const -> QString override; private: Q_DISABLE_COPY_MOVE(VToolLine) // NOLINT /** @brief firstPoint id first line point. */ - quint32 firstPoint; + quint32 firstPoint; /** @brief secondPoint id second line point. */ - quint32 secondPoint; + quint32 secondPoint; /** @brief lineColor color of a line. */ - QString lineColor; + QString lineColor; bool m_acceptHoverEvents; diff --git a/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp b/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp index 0549de7a2..1202de16f 100644 --- a/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp +++ b/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp @@ -30,16 +30,15 @@ #include #include -#include +#include "../ifc/exception/vexceptionwrongid.h" #include "../ifc/ifcdef.h" #include "../ifc/xml/vabstractpattern.h" -#include "../ifc/exception/vexceptionwrongid.h" -#include "../vgeometry/vgobject.h" -#include "../vmisc/vabstractapplication.h" -#include "../vmisc/def.h" -#include "../vpatterndb/vcontainer.h" #include "../vabstracttool.h" +#include "../vgeometry/vgobject.h" +#include "../vmisc/def.h" +#include "../vmisc/vabstractapplication.h" +#include "../vpatterndb/vcontainer.h" const QString VAbstractNode::AttrIdTool = QStringLiteral("idTool"); @@ -55,12 +54,12 @@ const QString VAbstractNode::AttrIdTool = QStringLiteral("idTool"); */ VAbstractNode::VAbstractNode(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &idNode, const QString &drawName, const quint32 &idTool, QObject *parent) - : VAbstractTool(doc, data, id, parent), - parentType(ParentType::Item), - idNode(idNode), - idTool(idTool), - m_drawName(drawName), - m_exluded(false) + : VAbstractTool(doc, data, id, parent), + parentType(ParentType::Item), + idNode(idNode), + idTool(idTool), + m_drawName(drawName), + m_exluded(false) { _referens = 0; } diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp index 88c8bb5dc..50f140567 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp @@ -40,25 +40,26 @@ #include #include #include -#include #include #include "../../../vgeometry/vpointf.h" #include "../../../vwidgets/vgraphicssimpletextitem.h" -#include "../ifc/xml/vdomdocument.h" +#include "../../undocommands/label/movelabel.h" +#include "../../undocommands/label/showlabel.h" #include "../ifc/ifcdef.h" +#include "../ifc/xml/vdomdocument.h" +#include "../vabstracttool.h" +#include "../vdatatool.h" +#include "../vmisc/theme/themeDef.h" #include "../vmisc/vabstractapplication.h" #include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vpiecenode.h" +#include "../vtoolseamallowance.h" +#include "../vwidgets/global.h" +#include "../vwidgets/scalesceneitems.h" #include "../vwidgets/vmaingraphicsscene.h" #include "../vwidgets/vmaingraphicsview.h" -#include "../vwidgets/global.h" -#include "../vabstracttool.h" -#include "../vdatatool.h" #include "vabstractnode.h" -#include "../../undocommands/label/movelabel.h" -#include "../../undocommands/label/showlabel.h" -#include "../vtoolseamallowance.h" const QString VNodePoint::ToolType = QStringLiteral("modeling"); @@ -102,7 +103,7 @@ enum class ContextMenuOption : int TurnPoint, LAST_ONE_DO_NOT_USE }; -} +} // namespace //--------------------------------------------------------------------------------------------------------------------- /** @@ -111,18 +112,18 @@ enum class ContextMenuOption : int * @param parent parent object. */ VNodePoint::VNodePoint(const VAbstractNodeInitData &initData, QObject *qoParent, QGraphicsItem *parent) - : VAbstractNode(initData.doc, initData.data, initData.id, initData.idObject, initData.drawName, initData.idTool, - qoParent), - VScenePoint(parent) + : VAbstractNode(initData.doc, initData.data, initData.id, initData.idObject, initData.drawName, initData.idTool, + qoParent), + VScenePoint(VColorRole::PiecePointColor, parent) { + m_namePoint->SetTextColor(VColorRole::PieceNodeLabelColor); + m_namePoint->SetTextHoverColor(VColorRole::PieceNodeLabelHoverColor); m_namePoint->SetShowParentTooltip(false); connect(m_namePoint, &VGraphicsSimpleTextItem::PointChoosed, this, &VNodePoint::PointChoosed); connect(m_namePoint, &VGraphicsSimpleTextItem::NameChangePosition, this, &VNodePoint::NameChangePosition); - connect(m_namePoint, &VGraphicsSimpleTextItem::ShowContextMenu, - this, [this](QGraphicsSceneContextMenuEvent *event) - { - contextMenuEvent(event); - }); + connect(m_namePoint, &VGraphicsSimpleTextItem::ShowContextMenu, this, + [this](QGraphicsSceneContextMenuEvent *event) { contextMenuEvent(event); }); + m_lineName->SetColorRole(VColorRole::PieceNodeLabelLineColor); RefreshPointGeometry(*VAbstractTool::data.GeometricObject(initData.id)); ToolCreation(initData.typeCreation); setCursor(Qt::ArrowCursor); @@ -138,8 +139,8 @@ void VNodePoint::Create(const VAbstractNodeInitData &initData) if (initData.parse == Document::FullParse) { VAbstractTool::AddRecord(initData.id, Tool::NodePoint, initData.doc); - //TODO Need create garbage collector and remove all nodes, what we don't use. - //Better check garbage before each saving file. Check only modeling tags. + // TODO Need create garbage collector and remove all nodes, what we don't use. + // Better check garbage before each saving file. Check only modeling tags. auto *point = new VNodePoint(initData); connect(initData.scene, &VMainGraphicsScene::EnableToolMove, point, &VNodePoint::EnableToolMove); @@ -150,16 +151,16 @@ void VNodePoint::Create(const VAbstractNodeInitData &initData) VAbstractPattern::AddTool(initData.id, point); if (initData.idTool != NULL_ID) { - //Some nodes we don't show on scene. Tool that create this nodes must free memory. + // Some nodes we don't show on scene. Tool that create this nodes must free memory. VDataTool *tool = VAbstractPattern::getTool(initData.idTool); SCASSERT(tool != nullptr) - point->setParent(tool);// Adopted by a tool + point->setParent(tool); // Adopted by a tool } else { // Try to prevent memory leak - initData.scene->addItem(point);// First adopted by scene - point->hide();// If no one will use node, it will stay hidden + initData.scene->addItem(point); // First adopted by scene + point->hide(); // If no one will use node, it will stay hidden point->SetParentType(ParentType::Scene); } } @@ -259,12 +260,12 @@ void VNodePoint::mousePressEvent(QGraphicsSceneMouseEvent *event) VScenePoint::mousePressEvent(event); // Somehow clicking on notselectable object do not clean previous selections. - if (not (flags() & ItemIsSelectable) && scene()) + if (not(flags() & ItemIsSelectable) && scene()) { scene()->clearSelection(); } - event->accept();// Special for not selectable item first need to call standard mousePressEvent then accept event + event->accept(); // Special for not selectable item first need to call standard mousePressEvent then accept event } //--------------------------------------------------------------------------------------------------------------------- @@ -452,8 +453,8 @@ void VNodePoint::InitPassmarkAngleTypeMenu(QMenu *menu, vidtype pieceId, QHashsetVisible(false); } - auto InitPassmarkAngleAction = [passmarkAngleMenu, passmarkAngleCurType](const QString &name, - PassmarkAngleType checkType) + auto InitPassmarkAngleAction = + [passmarkAngleMenu, passmarkAngleCurType](const QString &name, PassmarkAngleType checkType) { QAction *action = passmarkAngleMenu->addAction(name); action->setCheckable(true); @@ -468,20 +469,20 @@ void VNodePoint::InitPassmarkAngleTypeMenu(QMenu *menu, vidtype pieceId, QHash(ContextMenuOption::Intersection), InitPassmarkAngleAction(tr("Intersection"), PassmarkAngleType::Intersection)); - contextMenu.insert(static_cast(ContextMenuOption::IntersectionOnlyLeft), - InitPassmarkAngleAction(tr("Intersection (only left)"), - PassmarkAngleType::IntersectionOnlyLeft)); - contextMenu.insert(static_cast(ContextMenuOption::IntersectionOnlyRight), - InitPassmarkAngleAction(tr("Intersection (only right)"), - PassmarkAngleType::IntersectionOnlyRight)); + contextMenu.insert( + static_cast(ContextMenuOption::IntersectionOnlyLeft), + InitPassmarkAngleAction(tr("Intersection (only left)"), PassmarkAngleType::IntersectionOnlyLeft)); + contextMenu.insert( + static_cast(ContextMenuOption::IntersectionOnlyRight), + InitPassmarkAngleAction(tr("Intersection (only right)"), PassmarkAngleType::IntersectionOnlyRight)); contextMenu.insert(static_cast(ContextMenuOption::Intersection2), InitPassmarkAngleAction(tr("Intersection 2"), PassmarkAngleType::Intersection2)); - contextMenu.insert(static_cast(ContextMenuOption::Intersection2OnlyLeft), - InitPassmarkAngleAction(tr("Intersection 2 (only left)"), - PassmarkAngleType::Intersection2OnlyLeft)); - contextMenu.insert(static_cast(ContextMenuOption::Intersection2OnlyRight), - InitPassmarkAngleAction(tr("Intersection 2 (only right)"), - PassmarkAngleType::Intersection2OnlyRight)); + contextMenu.insert( + static_cast(ContextMenuOption::Intersection2OnlyLeft), + InitPassmarkAngleAction(tr("Intersection 2 (only left)"), PassmarkAngleType::Intersection2OnlyLeft)); + contextMenu.insert( + static_cast(ContextMenuOption::Intersection2OnlyRight), + InitPassmarkAngleAction(tr("Intersection 2 (only right)"), PassmarkAngleType::Intersection2OnlyRight)); } //--------------------------------------------------------------------------------------------------------------------- @@ -504,8 +505,8 @@ void VNodePoint::InitPassmarkLineTypeMenu(QMenu *menu, vidtype pieceId, QHashsetVisible(false); } - auto InitPassmarkLineTypeAction = [passmarkLineTypeMenu, passmarkLineCurType](const QString &name, - PassmarkLineType checkType) + auto InitPassmarkLineTypeAction = + [passmarkLineTypeMenu, passmarkLineCurType](const QString &name, PassmarkLineType checkType) { QAction *action = passmarkLineTypeMenu->addAction(name); action->setCheckable(true); @@ -590,14 +591,14 @@ void VNodePoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) QAction *selectedAction = menu.exec(event->screenPos()); ContextMenuOption selectedOption = static_cast( - contextMenu.key(selectedAction, static_cast(ContextMenuOption::NoSelection))); + contextMenu.key(selectedAction, static_cast(ContextMenuOption::NoSelection))); Q_STATIC_ASSERT_X(static_cast(ContextMenuOption::LAST_ONE_DO_NOT_USE) == 34, "Not all options were handled."); QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wswitch-default") - switch(selectedOption) + switch (selectedOption) { case ContextMenuOption::LAST_ONE_DO_NOT_USE: Q_UNREACHABLE(); @@ -624,15 +625,15 @@ void VNodePoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { emit Delete(); } - catch(const VExceptionToolWasDeleted &e) + catch (const VExceptionToolWasDeleted &e) { Q_UNUSED(e); - return;//Leave this method immediately!!! + return; // Leave this method immediately!!! } - return;//Leave this method immediately after call!!! + return; // Leave this method immediately after call!!! case ContextMenuOption::ShowLabel: VAbstractApplication::VApp()->getUndoStack()->push( - new ShowLabel(doc, m_id, selectedAction->isChecked())); + new ShowLabel(doc, m_id, selectedAction->isChecked())); break; case ContextMenuOption::Exclude: emit ToggleExcludeState(m_id); diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.h b/src/libs/vtools/tools/nodeDetails/vnodepoint.h index 8192a088d..11203eab5 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.h +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.h @@ -29,7 +29,6 @@ #ifndef VNODEPOINT_H #define VNODEPOINT_H - #include #include #include @@ -39,25 +38,31 @@ #include #include "../vmisc/def.h" -#include "vabstractnode.h" #include "../vwidgets/vscenepoint.h" +#include "vabstractnode.h" /** * @brief The VNodePoint class point detail node. */ -class VNodePoint: public VAbstractNode, public VScenePoint +class VNodePoint : public VAbstractNode, public VScenePoint { Q_OBJECT // NOLINT + public: + ~VNodePoint() override = default; + static void Create(const VAbstractNodeInitData &initData); static const QString ToolType; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Tool::NodePoint)}; - virtual auto getTagName() const -> QString override; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Tool::NodePoint) + }; + auto getTagName() const -> QString override; - virtual void ChangeLabelPosition(quint32 id, const QPointF &pos) override; - virtual void SetLabelVisible(quint32 id, bool visible) override; + void ChangeLabelPosition(quint32 id, const QPointF &pos) override; + void SetLabelVisible(quint32 id, bool visible) override; signals: void ShowOptions(); void ToggleInLayout(bool checked); @@ -72,27 +77,30 @@ signals: void TogglePassmarkLineType(quint32 id, PassmarkLineType type); void ResetPieceLabelTemplate(); public slots: - virtual void FullUpdateFromFile() override; - void NameChangePosition(const QPointF &pos); - void PointChoosed(); - void EnableToolMove(bool move); - virtual void AllowHover(bool enabled) override; - virtual void AllowSelecting(bool enabled) override; - void AllowLabelHover(bool enabled); - void AllowLabelSelecting(bool enabled); + void FullUpdateFromFile() override; + void NameChangePosition(const QPointF &pos); + void PointChoosed(); + void EnableToolMove(bool move); + void AllowHover(bool enabled) override; + void AllowSelecting(bool enabled) override; + void AllowLabelHover(bool enabled); + void AllowLabelSelecting(bool enabled); + protected: - virtual void AddToFile() override; - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) override; - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) override; - virtual void ShowNode() override; - virtual void HideNode() override; - virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void AddToFile() override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void ShowNode() override; + void HideNode() override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(VNodePoint) // NOLINT - VNodePoint(const VAbstractNodeInitData &initData, QObject *qoParent = nullptr, QGraphicsItem *parent = nullptr); + explicit VNodePoint(const VAbstractNodeInitData &initData, QObject *qoParent = nullptr, + QGraphicsItem *parent = nullptr); auto InitContextMenu(QMenu *menu, vidtype pieceId, quint32 referens) -> QHash; void InitPassmarkMenu(QMenu *menu, vidtype pieceId, QHash &contextMenu); diff --git a/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp b/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp index f8683e15a..bc8458fbf 100644 --- a/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp +++ b/src/libs/vtools/tools/nodeDetails/vtoolpiecepath.cpp @@ -28,11 +28,12 @@ #include "vtoolpiecepath.h" #include "../../dialogs/tools/piece/dialogpiecepath.h" -#include "../vpatterndb/vpiecepath.h" -#include "../vpatterndb/vpiecenode.h" #include "../../undocommands/savepieceoptions.h" -#include "../vtoolseamallowance.h" #include "../ifc/xml/vabstractpattern.h" +#include "../vmisc/theme/vscenestylesheet.h" +#include "../vpatterndb/vpiecenode.h" +#include "../vpatterndb/vpiecepath.h" +#include "../vtoolseamallowance.h" #include "../vwidgets/global.h" //--------------------------------------------------------------------------------------------------------------------- @@ -77,17 +78,17 @@ auto VToolPiecePath::Create(VToolPiecePathInitData initData) -> VToolPiecePath * if (initData.parse == Document::FullParse) { VAbstractTool::AddRecord(initData.id, Tool::PiecePath, initData.doc); - //TODO Need create garbage collector and remove all nodes, that we don't use. - //Better check garbage before each saving file. Check only modeling tags. + // TODO Need create garbage collector and remove all nodes, that we don't use. + // Better check garbage before each saving file. Check only modeling tags. VToolPiecePath *pathTool = new VToolPiecePath(initData); VAbstractPattern::AddTool(initData.id, pathTool); if (initData.idTool != NULL_ID) { - //Some nodes we don't show on scene. Tool that create this nodes must free memory. + // Some nodes we don't show on scene. Tool that create this nodes must free memory. VDataTool *tool = VAbstractPattern::getTool(initData.idTool); SCASSERT(tool != nullptr); - pathTool->setParent(tool);// Adopted by a tool + pathTool->setParent(tool); // Adopted by a tool } else { @@ -95,7 +96,7 @@ auto VToolPiecePath::Create(VToolPiecePathInitData initData) -> VToolPiecePath * { // Seam allowance tool already initializated and can't init the path SCASSERT(initData.idObject > NULL_ID); VToolSeamAllowance *saTool = - qobject_cast(VAbstractPattern::getTool(initData.idObject)); + qobject_cast(VAbstractPattern::getTool(initData.idObject)); SCASSERT(saTool != nullptr); pathTool->setParentItem(saTool); pathTool->SetParentType(ParentType::Item); @@ -103,8 +104,8 @@ auto VToolPiecePath::Create(VToolPiecePathInitData initData) -> VToolPiecePath * else { // Try to prevent memory leak - initData.scene->addItem(pathTool);// First adopted by scene - pathTool->hide();// If no one will use node, it will stay hidden + initData.scene->addItem(pathTool); // First adopted by scene + pathTool->hide(); // If no one will use node, it will stay hidden pathTool->SetParentType(ParentType::Scene); } } @@ -127,11 +128,12 @@ void VToolPiecePath::paint(QPainter *painter, const QStyleOptionGraphicsItem *op const qreal scale = SceneScale(scene()); if (scale > 1) { - width = qMax(1., width/scale); + width = qMax(1., width / scale); } QPen toolPen = pen(); toolPen.setWidthF(width); + toolPen.setColor(VSceneStylesheet::PatternPieceStyle().PieceColor()); setPen(toolPen); @@ -289,9 +291,9 @@ void VToolPiecePath::ToolCreation(const Source &typeCreation) //--------------------------------------------------------------------------------------------------------------------- VToolPiecePath::VToolPiecePath(const VToolPiecePathInitData &initData, QObject *qoParent, QGraphicsItem *parent) - :VAbstractNode(initData.doc, initData.data, initData.id, NULL_ID, initData.drawName, initData.idTool, qoParent), - QGraphicsPathItem(parent), - m_pieceId(initData.idObject) + : VAbstractNode(initData.doc, initData.data, initData.id, NULL_ID, initData.drawName, initData.idTool, qoParent), + QGraphicsPathItem(parent), + m_pieceId(initData.idObject) { RefreshGeometry(); ToolCreation(initData.typeCreation); diff --git a/src/libs/vtools/tools/toolsdef.cpp b/src/libs/vtools/tools/toolsdef.cpp index 549e21b6b..a8211127e 100644 --- a/src/libs/vtools/tools/toolsdef.cpp +++ b/src/libs/vtools/tools/toolsdef.cpp @@ -36,14 +36,14 @@ #include #include #include -#include #include +#include -#include "../vgeometry/vgobject.h" #include "../qmuparser/qmudef.h" +#include "../vgeometry/vgobject.h" +#include "../vmisc/vabstractvalapplication.h" #include "../vpatterndb/vcontainer.h" #include "../vpropertyexplorer/checkablemessagebox.h" -#include "../vmisc/vabstractvalapplication.h" //--------------------------------------------------------------------------------------------------------------------- auto SourceToObjects(const QVector &source) -> QVector @@ -51,7 +51,7 @@ auto SourceToObjects(const QVector &source) -> QVector QVector ids; ids.reserve(source.size()); - for (auto s: source) + for (auto s : source) { ids.append(s.id); } @@ -81,8 +81,7 @@ auto SourceAliasValid(const SourceItem &item, const QSharedPointer &ob obj->SetAliasSuffix(oldAlias); } - if (not alias.isEmpty() && originAlias != alias && - (not rx.match(alias).hasMatch() || not data->IsUnique(alias))) + if (not alias.isEmpty() && originAlias != alias && (not rx.match(alias).hasMatch() || not data->IsUnique(alias))) { return false; } @@ -93,8 +92,7 @@ auto SourceAliasValid(const SourceItem &item, const QSharedPointer &ob //--------------------------------------------------------------------------------------------------------------------- auto OriginAlias(quint32 id, const QVector &source, const QSharedPointer &obj) -> QString { - auto item = std::find_if(source.begin(), source.end(), - [id](const SourceItem &sItem) { return sItem.id == id; }); + auto item = std::find_if(source.begin(), source.end(), [id](const SourceItem &sItem) { return sItem.id == id; }); if (item != source.end()) { if (obj->getType() == GOType::Point) @@ -113,9 +111,9 @@ auto OriginAlias(quint32 id, const QVector &source, const QSharedPoi } //--------------------------------------------------------------------------------------------------------------------- -auto OperationLineStylesPics() -> QMap +auto OperationLineStylesPics(QColor backgroundColor, QColor textColor) -> QMap { - QMap map = LineStylesPics(); + QMap map = LineStylesPics(backgroundColor, textColor); map.insert(TypeLineDefault, QIcon()); return map; } @@ -133,7 +131,7 @@ auto ConfirmDeletion() -> int msgBox.setText(QObject::tr("Do you really want to delete?")); msgBox.setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No); msgBox.setDefaultButton(QDialogButtonBox::No); - msgBox.setIconPixmap(QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion).pixmap(32, 32) ); + msgBox.setIconPixmap(QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion).pixmap(32, 32)); int dialogResult = msgBox.exec(); diff --git a/src/libs/vtools/tools/toolsdef.h b/src/libs/vtools/tools/toolsdef.h index 9125a04e2..578929892 100644 --- a/src/libs/vtools/tools/toolsdef.h +++ b/src/libs/vtools/tools/toolsdef.h @@ -28,8 +28,8 @@ #ifndef TOOLSDEF_H #define TOOLSDEF_H -#include #include +#include #include "../ifc/ifcdef.h" @@ -58,7 +58,7 @@ auto OriginAlias(quint32 id, const QVector &source, const QSharedPoi auto SourceAliasValid(const SourceItem &item, const QSharedPointer &obj, const VContainer *data, const QString &originAlias) -> bool; -auto OperationLineStylesPics() -> QMap; +auto OperationLineStylesPics(QColor backgroundColor, QColor textColor) -> QMap; auto ConfirmDeletion() -> int; diff --git a/src/libs/vtools/tools/vabstracttool.h b/src/libs/vtools/tools/vabstracttool.h index 9f349c528..51723c542 100644 --- a/src/libs/vtools/tools/vabstracttool.h +++ b/src/libs/vtools/tools/vabstracttool.h @@ -34,7 +34,6 @@ #include #include #include -#include #include #include "../ifc/xml/vabstractpattern.h" diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index e7a264105..759e041cb 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -42,6 +42,7 @@ #include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vplacelabelitem.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vpatterndb/calculator.h" #include "../vpatterndb/floatItemData/vpatternlabeldata.h" #include "../vpatterndb/floatItemData/vpiecelabeldata.h" @@ -53,6 +54,7 @@ #include "../vwidgets/vmaingraphicsview.h" #include "../vwidgets/vnobrushscalepathitem.h" #include "../vwidgets/vpiecegrainline.h" +#include "theme/themeDef.h" #include "toolsdef.h" #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #include "../vmisc/backport/qoverload.h" @@ -1015,6 +1017,7 @@ void VToolSeamAllowance::paint(QPainter *painter, const QStyleOptionGraphicsItem { QPen toolPen = pen(); toolPen.setWidthF(ScaleWidth(VAbstractApplication::VApp()->Settings()->WidthHairLine(), SceneScale(scene()))); + toolPen.setColor(VSceneStylesheet::PatternPieceStyle().PieceColor()); setPen(toolPen); m_seamAllowance->setPen(toolPen); @@ -1376,7 +1379,7 @@ VToolSeamAllowance::VToolSeamAllowance(const VToolSeamAllowanceInitData &initDat m_seamAllowance(new VNoBrushScalePathItem(this)), m_dataLabel(new VTextGraphicsItem(VTextGraphicsItem::ItemType::PieceLabel, this)), m_patternInfo(new VTextGraphicsItem(VTextGraphicsItem::ItemType::PatternLabel, this)), - m_grainLine(new VGrainlineItem(this)), + m_grainLine(new VGrainlineItem(VColorRole::PieceColor, this)), m_passmarks(new QGraphicsPathItem(this)), m_placeLabels(new QGraphicsPathItem(this)) { @@ -1470,7 +1473,7 @@ void VToolSeamAllowance::RefreshGeometry(bool updateChildren) not detail.IsSeamAllowance() || detail.IsSeamAllowanceBuiltIn()) { m_mainPath = QPainterPath(); - m_seamAllowance->setBrush(QBrush(Qt::Dense7Pattern)); + m_seamAllowance->setBrush(QBrush(VSceneStylesheet::PatternPieceStyle().PieceColor(), Qt::Dense7Pattern)); path = futurePath.result(); } else diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index 409567dca..e03d35b36 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -29,8 +29,6 @@ #ifndef VTOOLSEAMALLOWANCE_H #define VTOOLSEAMALLOWANCE_H - - #include #include #include @@ -54,6 +52,7 @@ struct VToolSeamAllowanceInitData : VAbstractToolInitData class VToolSeamAllowance : public VInteractiveTool, public QGraphicsPathItem { Q_OBJECT // NOLINT + public: ~VToolSeamAllowance() override = default; diff --git a/src/libs/vtools/visualization/line/operation/visoperation.cpp b/src/libs/vtools/visualization/line/operation/visoperation.cpp index 3c2ebcb48..ad837afe6 100644 --- a/src/libs/vtools/visualization/line/operation/visoperation.cpp +++ b/src/libs/vtools/visualization/line/operation/visoperation.cpp @@ -39,10 +39,8 @@ //--------------------------------------------------------------------------------------------------------------------- VisOperation::VisOperation(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - SetColor(VColor::SupportColor2, Qt::darkGreen); - SetColor(VColor::SupportColor3, Qt::darkBlue); } //--------------------------------------------------------------------------------------------------------------------- @@ -66,20 +64,20 @@ void VisOperation::VisualMode(quint32 id) } //--------------------------------------------------------------------------------------------------------------------- -auto VisOperation::GetPoint(quint32 i, const QColor &color) -> VScaledEllipse * +auto VisOperation::GetPoint(quint32 i, VColorRole role) -> VScaledEllipse * { - return GetPointItem(m_points, i, color, this); + return GetPointItem(m_points, i, role, this); } //--------------------------------------------------------------------------------------------------------------------- -auto VisOperation::GetCurve(quint32 i, const QColor &color) -> VCurvePathItem * +auto VisOperation::GetCurve(quint32 i, VColorRole role) -> VCurvePathItem * { if (!m_curves.isEmpty() && static_cast(m_curves.size() - 1) >= i) { return m_curves.at(static_cast(i)); } - auto *curve = InitItem(color, this); + auto *curve = InitItem(role, this); m_curves.append(curve); return curve; } @@ -98,23 +96,22 @@ void VisOperation::RefreshFlippedObjects(quint32 originPointId, const QPointF &f // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 8, "Not all objects were handled."); - switch(static_cast(obj->getType())) + switch (static_cast(obj->getType())) { case GOType::Point: { const QSharedPointer p = GetData()->GeometricObject(id); ++iPoint; - VScaledEllipse *point = GetPoint(static_cast(iPoint), Color(VColor::SupportColor2)); - DrawPoint(point, static_cast(*p), Color(VColor::SupportColor2)); + VScaledEllipse *point = GetPoint(static_cast(iPoint), VColorRole::VisSupportColor2); + DrawPoint(point, static_cast(*p)); ++iPoint; - point = GetPoint(static_cast(iPoint), Color(VColor::SupportColor)); + point = GetPoint(static_cast(iPoint), VColorRole::VisSupportColor); if (originPointId != NULL_ID) { - DrawPoint(point, static_cast(p->Flip(QLineF(firstPoint, secondPoint))), - Color(VColor::SupportColor)); + DrawPoint(point, static_cast(p->Flip(QLineF(firstPoint, secondPoint)))); } break; } diff --git a/src/libs/vtools/visualization/line/operation/visoperation.h b/src/libs/vtools/visualization/line/operation/visoperation.h index bda3ff318..cfb31b12d 100644 --- a/src/libs/vtools/visualization/line/operation/visoperation.h +++ b/src/libs/vtools/visualization/line/operation/visoperation.h @@ -37,6 +37,7 @@ class VisOperation : public VisLine { Q_OBJECT // NOLINT + public: explicit VisOperation(const VContainer *data, QGraphicsItem *parent = nullptr); ~VisOperation() override; @@ -44,12 +45,15 @@ public: void SetObjects(const QVector &objects); void VisualMode(quint32 id = NULL_ID) override; - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::ToolRotation)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ToolRotation) + }; protected: - auto GetPoint(quint32 i, const QColor &color) -> VScaledEllipse *; - auto GetCurve(quint32 i, const QColor &color) -> VCurvePathItem *; + auto GetPoint(quint32 i, VColorRole role) -> VScaledEllipse *; + auto GetCurve(quint32 i, VColorRole role) -> VCurvePathItem *; template auto AddFlippedCurve(quint32 originPointId, const QPointF &firstPoint, const QPointF &secondPoint, quint32 id, @@ -58,6 +62,7 @@ protected: void RefreshFlippedObjects(quint32 originPointId, const QPointF &firstPoint, const QPointF &secondPoint); auto Objects() const -> const QVector &; + private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(VisOperation) // NOLINT @@ -76,17 +81,15 @@ auto VisOperation::AddFlippedCurve(quint32 originPointId, const QPointF &firstPo const QSharedPointer curve = GetData()->template GeometricObject(id); ++i; - VCurvePathItem *path = GetCurve(static_cast(i), Color(VColor::SupportColor2)); - DrawPath(path, curve->GetPath(), curve->DirectionArrows(), Color(VColor::SupportColor2), Qt::SolidLine, - Qt::RoundCap); + VCurvePathItem *path = GetCurve(static_cast(i), VColorRole::VisSupportColor2); + DrawPath(path, curve->GetPath(), curve->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); ++i; - path = GetCurve(static_cast(i), Color(VColor::SupportColor)); + path = GetCurve(static_cast(i), VColorRole::VisSupportColor); if (originPointId != NULL_ID) { const Item flipped = curve->Flip(QLineF(firstPoint, secondPoint)); - DrawPath(path, flipped.GetPath(), flipped.DirectionArrows(), Color(VColor::SupportColor), Qt::SolidLine, - Qt::RoundCap); + DrawPath(path, flipped.GetPath(), flipped.DirectionArrows(), Qt::SolidLine, Qt::RoundCap); } return i; diff --git a/src/libs/vtools/visualization/line/operation/vistoolflippingbyaxis.cpp b/src/libs/vtools/visualization/line/operation/vistoolflippingbyaxis.cpp index e8ae81f9e..0258a0ab9 100644 --- a/src/libs/vtools/visualization/line/operation/vistoolflippingbyaxis.cpp +++ b/src/libs/vtools/visualization/line/operation/vistoolflippingbyaxis.cpp @@ -31,9 +31,11 @@ //--------------------------------------------------------------------------------------------------------------------- VisToolFlippingByAxis::VisToolFlippingByAxis(const VContainer *data, QGraphicsItem *parent) - : VisOperation(data, parent) + : VisOperation(data, parent) { - m_point1 = InitPoint(Color(VColor::SupportColor2), this); + SetColorRole(VColorRole::VisSupportColor2); + + m_point1 = InitPoint(VColorRole::VisSupportColor2, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -50,7 +52,7 @@ void VisToolFlippingByAxis::RefreshGeometry() if (m_originPointId != NULL_ID) { firstPoint = static_cast(*GetData()->GeometricObject(m_originPointId)); - DrawPoint(m_point1, firstPoint, Color(VColor::SupportColor2)); + DrawPoint(m_point1, firstPoint); if (m_axisType == AxisType::VerticalAxis) { @@ -61,7 +63,7 @@ void VisToolFlippingByAxis::RefreshGeometry() secondPoint = QPointF(firstPoint.x() + 100, firstPoint.y()); } - DrawLine(this, Axis(firstPoint, secondPoint), Color(VColor::SupportColor2), Qt::DashLine); + DrawLine(this, Axis(firstPoint, secondPoint), Qt::DashLine); } RefreshFlippedObjects(m_originPointId, firstPoint, secondPoint); diff --git a/src/libs/vtools/visualization/line/operation/vistoolflippingbyline.cpp b/src/libs/vtools/visualization/line/operation/vistoolflippingbyline.cpp index 6701d6c9d..3985bb264 100644 --- a/src/libs/vtools/visualization/line/operation/vistoolflippingbyline.cpp +++ b/src/libs/vtools/visualization/line/operation/vistoolflippingbyline.cpp @@ -31,10 +31,12 @@ //--------------------------------------------------------------------------------------------------------------------- VisToolFlippingByLine::VisToolFlippingByLine(const VContainer *data, QGraphicsItem *parent) - : VisOperation(data, parent) + : VisOperation(data, parent) { - m_point1 = InitPoint(Color(VColor::SupportColor2), this); - m_point2 = InitPoint(Color(VColor::SupportColor2), this); + SetColorRole(VColorRole::VisSupportColor2); + + m_point1 = InitPoint(VColorRole::VisSupportColor2, this); + m_point2 = InitPoint(VColorRole::VisSupportColor2, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -51,7 +53,7 @@ void VisToolFlippingByLine::RefreshGeometry() if (m_lineP1Id != NULL_ID) { firstPoint = static_cast(*GetData()->GeometricObject(m_lineP1Id)); - DrawPoint(m_point1, firstPoint, Color(VColor::SupportColor2)); + DrawPoint(m_point1, firstPoint); if (m_lineP2Id == NULL_ID) { @@ -60,10 +62,10 @@ void VisToolFlippingByLine::RefreshGeometry() else { secondPoint = static_cast(*GetData()->GeometricObject(m_lineP2Id)); - DrawPoint(m_point2, secondPoint, Color(VColor::SupportColor2)); + DrawPoint(m_point2, secondPoint); } - DrawLine(this, QLineF(firstPoint, secondPoint), Color(VColor::SupportColor2), Qt::DashLine); + DrawLine(this, QLineF(firstPoint, secondPoint), Qt::DashLine); } RefreshFlippedObjects(m_lineP1Id, firstPoint, secondPoint); diff --git a/src/libs/vtools/visualization/line/operation/vistoolmove.cpp b/src/libs/vtools/visualization/line/operation/vistoolmove.cpp index 1ee4cf7fd..d99e99ceb 100644 --- a/src/libs/vtools/visualization/line/operation/vistoolmove.cpp +++ b/src/libs/vtools/visualization/line/operation/vistoolmove.cpp @@ -28,22 +28,19 @@ #include "vistoolmove.h" -#include #include #include #include #include #include #include -#include #include +#include #include -#include "../ifc/xml/vdomdocument.h" #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) #include "../vmisc/diagnostic.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) -#include "../vmisc/vmodifierkey.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" #include "../vgeometry/vcubicbezier.h" @@ -54,22 +51,23 @@ #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" #include "../vgeometry/vsplinepath.h" -#include "../vgeometry/varc.h" -#include "../vmisc/vabstractapplication.h" +#include "../vmisc/vmodifierkey.h" #include "../vpatterndb/vcontainer.h" -#include "visoperation.h" #include "../vwidgets/global.h" +#include "visoperation.h" //--------------------------------------------------------------------------------------------------------------------- VisToolMove::VisToolMove(const VContainer *data, QGraphicsItem *parent) - : VisOperation(data, parent) + : VisOperation(data, parent) { - m_pointOrigin = InitPoint(Color(VColor::SupportColor2), this); - m_pointRotationOrigin = InitPoint(Color(VColor::SupportColor2), this); - m_pointFinish = InitPoint(Color(VColor::SupportColor), this); - m_angleArc = InitItem(Color(VColor::SupportColor3), this); - m_rotationLine = InitItem(Color(VColor::SupportColor3), this); - m_xAxis = InitItem(Color(VColor::SupportColor3), this); + SetColorRole(VColorRole::VisSupportColor2); + + m_pointOrigin = InitPoint(VColorRole::VisSupportColor2, this); + m_pointRotationOrigin = InitPoint(VColorRole::VisSupportColor2, this); + m_pointFinish = InitPoint(VColorRole::VisSupportColor, this); + m_angleArc = InitItem(VColorRole::VisSupportColor3, this); + m_rotationLine = InitItem(VColorRole::VisSupportColor3, this); + m_xAxis = InitItem(VColorRole::VisSupportColor3, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -86,7 +84,7 @@ void VisToolMove::RefreshGeometry() const QVector originObjects = CreateOriginObjects(iPoint, iCurve); QPointF origin = GetOriginPoint(originObjects); - DrawPoint(m_pointOrigin, origin, Color(VColor::SupportColor2)); + DrawPoint(m_pointOrigin, origin); qreal tempAngle = 0; qreal tempLength = 0; @@ -117,7 +115,7 @@ void VisToolMove::RefreshGeometry() if (m_rotationOriginId != NULL_ID) { origin = GetData()->GeometricObject(m_rotationOriginId)->toQPointF(); - DrawPoint(m_pointRotationOrigin, origin, Color(VColor::SupportColor2)); + DrawPoint(m_pointRotationOrigin, origin); } else { @@ -137,11 +135,11 @@ void VisToolMove::RefreshGeometry() qreal cursorLength = rLine.length(); rLine.setP2(Ray(origin, rLine.angle())); - //Radius of point circle, but little bigger. Need handle with hover sizes. - qreal minL = ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5; + // Radius of point circle, but little bigger. Need handle with hover sizes. + qreal minL = ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5; if (cursorLength > minL) { - tempRoationAngle = rLine.angle(); + tempRoationAngle = rLine.angle(); } else { @@ -154,15 +152,15 @@ void VisToolMove::RefreshGeometry() tempRoationAngle = m_rotationAngle; } - DrawLine(m_rotationLine, rLine, Color(VColor::SupportColor3), Qt::DashLine); - DrawLine(m_xAxis, QLineF(origin, Ray(origin, 0)), Color(VColor::SupportColor3), Qt::DashLine); + DrawLine(m_rotationLine, rLine, Qt::DashLine); + DrawLine(m_xAxis, QLineF(origin, Ray(origin, 0)), Qt::DashLine); - VArc arc(VPointF(origin), - ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*2, 0, tempRoationAngle); - DrawPath(m_angleArc, arc.GetPath(), Color(VColor::SupportColor3), Qt::SolidLine, Qt::RoundCap); + VArc arc(VPointF(origin), ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 2, 0, + tempRoationAngle); + DrawPath(m_angleArc, arc.GetPath(), Qt::SolidLine, Qt::RoundCap); } - DrawLine(this, line, Color(VColor::SupportColor2), Qt::DashLine); - DrawPoint(m_pointFinish, line.p2(), Color(VColor::SupportColor)); + DrawLine(this, line, Qt::DashLine); + DrawPoint(m_pointFinish, line.p2()); static const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); if (qFuzzyIsNull(m_length)) @@ -225,15 +223,13 @@ void VisToolMove::SetLength(const QString &expression) } //--------------------------------------------------------------------------------------------------------------------- -template -auto VisToolMove::AddOriginCurve(quint32 id, int &i) -> QGraphicsPathItem * +template auto VisToolMove::AddOriginCurve(quint32 id, int &i) -> QGraphicsPathItem * { const QSharedPointer curve = GetData()->template GeometricObject(id); ++i; - VCurvePathItem *path = GetCurve(static_cast(i), Color(VColor::SupportColor2)); - DrawPath(path, curve->GetPath(), curve->DirectionArrows(), Color(VColor::SupportColor2), Qt::SolidLine, - Qt::RoundCap); + VCurvePathItem *path = GetCurve(static_cast(i), VColorRole::VisSupportColor2); + DrawPath(path, curve->GetPath(), curve->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); return path; } @@ -246,9 +242,9 @@ auto VisToolMove::AddMovedRotatedCurve(qreal angle, qreal length, quint32 id, in const QSharedPointer curve = GetData()->template GeometricObject(id); ++i; - VCurvePathItem *path = GetCurve(static_cast(i), Color(VColor::SupportColor)); + VCurvePathItem *path = GetCurve(static_cast(i), VColorRole::VisSupportColor); const Item moved = curve->Move(length, angle).Rotate(rotationOrigin, rotationAngle); - DrawPath(path, moved.GetPath(), moved.DirectionArrows(), Color(VColor::SupportColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(path, moved.GetPath(), moved.DirectionArrows(), Qt::SolidLine, Qt::RoundCap); return i; } @@ -262,11 +258,11 @@ auto VisToolMove::GetOriginPoint(const QVector &objects) -> QPo if (object) { QRectF childrenRect = object->childrenBoundingRect(); - //map to scene coordinate. + // map to scene coordinate. childrenRect.translate(object->scenePos()); QRectF itemRect = object->boundingRect(); - //map to scene coordinate. + // map to scene coordinate. itemRect.translate(object->scenePos()); boundingRect = boundingRect.united(itemRect); @@ -293,15 +289,15 @@ auto VisToolMove::CreateOriginObjects(int &iPoint, int &iCurve) -> QVector(GOType::Unknown) == 8, "Not all objects were handled."); - switch(static_cast(obj->getType())) + switch (static_cast(obj->getType())) { case GOType::Point: { const QSharedPointer p = GetData()->GeometricObject(id); ++iPoint; - VScaledEllipse *point = GetPoint(static_cast(iPoint), Color(VColor::SupportColor2)); - DrawPoint(point, static_cast(*p), Color(VColor::SupportColor2)); + VScaledEllipse *point = GetPoint(static_cast(iPoint), VColorRole::VisSupportColor2); + DrawPoint(point, static_cast(*p)); originObjects.append(point); break; @@ -350,16 +346,15 @@ void VisToolMove::CreateMovedRotatedObjects(int &iPoint, int &iCurve, qreal leng // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 8, "Not all objects was handled."); - switch(static_cast(obj->getType())) + switch (static_cast(obj->getType())) { case GOType::Point: { const QSharedPointer p = GetData()->GeometricObject(id); ++iPoint; - VScaledEllipse *point = GetPoint(static_cast(iPoint), Color(VColor::SupportColor)); - DrawPoint(point, static_cast(p->Move(length, angle).Rotate(rotationOrigin, rotationAngle)), - Color(VColor::SupportColor)); + VScaledEllipse *point = GetPoint(static_cast(iPoint), VColorRole::VisSupportColor); + DrawPoint(point, static_cast(p->Move(length, angle).Rotate(rotationOrigin, rotationAngle))); break; } case GOType::Arc: @@ -378,8 +373,8 @@ void VisToolMove::CreateMovedRotatedObjects(int &iPoint, int &iCurve, qreal leng iCurve = AddMovedRotatedCurve(angle, length, id, iCurve, rotationAngle, rotationOrigin); break; case GOType::CubicBezierPath: - iCurve = AddMovedRotatedCurve(angle, length, id, iCurve, rotationAngle, - rotationOrigin); + iCurve = + AddMovedRotatedCurve(angle, length, id, iCurve, rotationAngle, rotationOrigin); break; case GOType::Unknown: case GOType::PlaceLabel: diff --git a/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp b/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp index f30d783a6..470b70579 100644 --- a/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp @@ -28,21 +28,19 @@ #include "vistoolrotation.h" -#include #include #include #include #include #include #include -#include #include +#include #include #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) #include "../vmisc/diagnostic.h" #endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) -#include "../vmisc/vmodifierkey.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" #include "../vgeometry/vcubicbezier.h" @@ -53,17 +51,20 @@ #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" #include "../vgeometry/vsplinepath.h" +#include "../vmisc/vmodifierkey.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/global.h" #include "visoperation.h" //--------------------------------------------------------------------------------------------------------------------- VisToolRotation::VisToolRotation(const VContainer *data, QGraphicsItem *parent) - : VisOperation(data, parent) + : VisOperation(data, parent) { - m_point = InitPoint(Color(VColor::SupportColor2), this); - m_angleArc = InitItem(Color(VColor::SupportColor2), this); - m_xAxis = InitItem(Color(VColor::SupportColor2), this); + SetColorRole(VColorRole::VisSupportColor2); + + m_point = InitPoint(VColorRole::VisSupportColor2, this); + m_angleArc = InitItem(VColorRole::VisSupportColor2, this); + m_xAxis = InitItem(VColorRole::VisSupportColor2, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -84,7 +85,7 @@ void VisToolRotation::RefreshGeometry() if (m_originPointId != NULL_ID) { origin = GetData()->GeometricObject(m_originPointId); - DrawPoint(m_point, static_cast(*origin), Color(VColor::SupportColor2)); + DrawPoint(m_point, static_cast(*origin)); QLineF rLine; if (VFuzzyComparePossibleNulls(m_angle, INT_MIN)) @@ -105,12 +106,12 @@ void VisToolRotation::RefreshGeometry() tempAngle = m_angle; } - DrawLine(this, rLine, Color(VColor::SupportColor2), Qt::DashLine); - DrawLine(m_xAxis, QLineF(static_cast(*origin), Ray(static_cast(*origin), 0)), - Color(VColor::SupportColor2), Qt::DashLine); + DrawLine(this, rLine, Qt::DashLine); + DrawLine(m_xAxis, QLineF(static_cast(*origin), Ray(static_cast(*origin), 0)), Qt::DashLine); - VArc arc(*origin, ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*2, 0, tempAngle); - DrawPath(m_angleArc, arc.GetPath(), Color(VColor::SupportColor2), Qt::SolidLine, Qt::RoundCap); + VArc arc(*origin, ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 2, 0, + tempAngle); + DrawPath(m_angleArc, arc.GetPath(), Qt::SolidLine, Qt::RoundCap); SetToolTip(tr("Rotating angle = %1°, %2 - sticking angle, " "Mouse click - finish creation") @@ -126,23 +127,22 @@ void VisToolRotation::RefreshGeometry() // This check helps to find missed objects in the switch Q_STATIC_ASSERT_X(static_cast(GOType::Unknown) == 8, "Not all objects was handled."); - switch(static_cast(obj->getType())) + switch (static_cast(obj->getType())) { case GOType::Point: { const QSharedPointer p = GetData()->GeometricObject(id); ++iPoint; - VScaledEllipse *point = GetPoint(static_cast(iPoint), Color(VColor::SupportColor2)); - DrawPoint(point, static_cast(*p), Color(VColor::SupportColor2)); + VScaledEllipse *point = GetPoint(static_cast(iPoint), VColorRole::VisSupportColor2); + DrawPoint(point, static_cast(*p)); ++iPoint; - point = GetPoint(static_cast(iPoint), Color(VColor::SupportColor)); + point = GetPoint(static_cast(iPoint), VColorRole::VisSupportColor); if (m_originPointId != NULL_ID) { - DrawPoint(point, static_cast(p->Rotate(static_cast(*origin), tempAngle)), - Color(VColor::SupportColor)); + DrawPoint(point, static_cast(p->Rotate(static_cast(*origin), tempAngle))); } break; } @@ -199,23 +199,20 @@ void VisToolRotation::SetAngle(const QString &expression) } //--------------------------------------------------------------------------------------------------------------------- -template -auto VisToolRotation::AddCurve(qreal angle, const QPointF &origin, quint32 id, int i) -> int +template auto VisToolRotation::AddCurve(qreal angle, const QPointF &origin, quint32 id, int i) -> int { const QSharedPointer curve = GetData()->template GeometricObject(id); ++i; - VCurvePathItem *path = GetCurve(static_cast(i), Color(VColor::SupportColor2)); - DrawPath(path, curve->GetPath(), curve->DirectionArrows(), Color(VColor::SupportColor2), Qt::SolidLine, - Qt::RoundCap); + VCurvePathItem *path = GetCurve(static_cast(i), VColorRole::VisSupportColor2); + DrawPath(path, curve->GetPath(), curve->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); ++i; - path = GetCurve(static_cast(i), Color(VColor::SupportColor)); + path = GetCurve(static_cast(i), VColorRole::VisSupportColor); if (m_originPointId != NULL_ID) { const Item rotated = curve->Rotate(origin, angle); - DrawPath(path, rotated.GetPath(), rotated.DirectionArrows(), Color(VColor::SupportColor), Qt::SolidLine, - Qt::RoundCap); + DrawPath(path, rotated.GetPath(), rotated.DirectionArrows(), Qt::SolidLine, Qt::RoundCap); } return i; diff --git a/src/libs/vtools/visualization/line/visline.cpp b/src/libs/vtools/visualization/line/visline.cpp index a0719581d..04d817f42 100644 --- a/src/libs/vtools/visualization/line/visline.cpp +++ b/src/libs/vtools/visualization/line/visline.cpp @@ -35,13 +35,15 @@ #include #include "../vgeometry/vgobject.h" +#include "../vmisc/theme/themeDef.h" #include "../vpatterndb/vcontainer.h" //--------------------------------------------------------------------------------------------------------------------- VisLine::VisLine(const VContainer *data, QGraphicsItem *parent) - :Visualization(data), VScaledLine(parent) + : Visualization(data), + VScaledLine(VColorRole::VisMainColor, parent) { - this->setZValue(1);// Show on top of a real tool + this->setZValue(1); // Show on top of a real tool VisLine::InitPen(); } @@ -51,10 +53,10 @@ auto VisLine::CorrectAngle(const qreal &angle) -> qreal qreal ang = angle; if (angle > 360) { - ang = angle - 360.0 * qFloor(angle/360); + ang = angle - 360.0 * qFloor(angle / 360); } - switch (qFloor((qAbs(ang)+22.5)/45)) + switch (qFloor((qAbs(ang) + 22.5) / 45)) { case 1: // <67.5 return 45; @@ -70,7 +72,7 @@ auto VisLine::CorrectAngle(const qreal &angle) -> qreal return 270; case 7: // <337.5 return 315; - case 0: // <22.5 + case 0: // <22.5 default: // <360 return 0; } @@ -83,12 +85,12 @@ auto VisLine::Ray(const QPointF &firstPoint, const qreal &angle) const -> QPoint { QLineF line = QLineF(firstPoint, ScenePos()); line.setAngle(angle); - return line.p2();// We can't find ray because item doesn't have scene. We will return cursor position on scene. + return line.p2(); // We can't find ray because item doesn't have scene. We will return cursor position on scene. } QRectF scRect = this->scene()->sceneRect(); - //Limit size of the scene rect. Axis that has same size as scene rect cause scene size growth. + // Limit size of the scene rect. Axis that has same size as scene rect cause scene size growth. QLineF line1 = QLineF(scRect.topLeft(), scRect.bottomRight()); line1.setLength(2); @@ -115,7 +117,7 @@ auto VisLine::Ray(const QPointF &firstPoint) const -> QPointF //--------------------------------------------------------------------------------------------------------------------- auto VisLine::Axis(const QPointF &p, const qreal &angle) const -> QLineF { - return {Ray(p, angle+180), Ray(p, angle)}; + return {Ray(p, angle + 180), Ray(p, angle)}; } //--------------------------------------------------------------------------------------------------------------------- @@ -129,9 +131,7 @@ auto VisLine::Axis(const QPointF &p1, const QPointF &p2) const -> QLineF void VisLine::InitPen() { QPen visPen = pen(); - visPen.setColor(Color(VColor::MainColor)); visPen.setStyle(LineStyle()); - setPen(visPen); } @@ -142,13 +142,12 @@ void VisLine::AddOnScene() } //--------------------------------------------------------------------------------------------------------------------- -void VisLine::DrawRay(VScaledLine *lineItem, const QPointF &p, const QPointF &pTangent, const QColor &color, - Qt::PenStyle style) +void VisLine::DrawRay(VScaledLine *lineItem, const QPointF &p, const QPointF &pTangent, Qt::PenStyle style) { - SCASSERT (lineItem != nullptr) + SCASSERT(lineItem != nullptr) const qreal angle = QLineF(p, pTangent).angle(); const QPointF endRay = Ray(p, angle); const QLineF tangent = VGObject::BuildLine(p, QLineF(p, endRay).length(), angle); - DrawLine(lineItem, tangent, color, style); + DrawLine(lineItem, tangent, style); } diff --git a/src/libs/vtools/visualization/line/visline.h b/src/libs/vtools/visualization/line/visline.h index f879ed785..f49272c19 100644 --- a/src/libs/vtools/visualization/line/visline.h +++ b/src/libs/vtools/visualization/line/visline.h @@ -29,7 +29,6 @@ #ifndef VISLINE_H #define VISLINE_H - #include #include #include @@ -38,24 +37,28 @@ #include #include #include -#include #include -#include "../vtools/visualization/visualization.h" #include "../vmisc/def.h" +#include "../vtools/visualization/visualization.h" #include "../vwidgets/scalesceneitems.h" -class VisLine: public Visualization, public VScaledLine +class VisLine : public Visualization, public VScaledLine { Q_OBJECT // NOLINT + public: explicit VisLine(const VContainer *data, QGraphicsItem *parent = nullptr); ~VisLine() override = default; - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::Line)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::Line) + }; static auto CorrectAngle(const qreal &angle) -> qreal; + protected: auto Ray(const QPointF &firstPoint, const qreal &angle) const -> QPointF; auto Ray(const QPointF &firstPoint) const -> QPointF; @@ -65,8 +68,8 @@ protected: void InitPen() override; void AddOnScene() override; - void DrawRay(VScaledLine *lineItem, const QPointF &p, const QPointF &pTangent, const QColor &color, - Qt::PenStyle style); + void DrawRay(VScaledLine *lineItem, const QPointF &p, const QPointF &pTangent, Qt::PenStyle style); + private: Q_DISABLE_COPY_MOVE(VisLine) // NOLINT }; diff --git a/src/libs/vtools/visualization/line/vistoolalongline.cpp b/src/libs/vtools/visualization/line/vistoolalongline.cpp index 8837bccf8..002f1580a 100644 --- a/src/libs/vtools/visualization/line/vistoolalongline.cpp +++ b/src/libs/vtools/visualization/line/vistoolalongline.cpp @@ -33,27 +33,25 @@ #include #include #include -#include #include #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolAlongLine::VisToolAlongLine(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - SetMainColor(Qt::red); - this->setZValue(2);// Show on top real tool + setZValue(2); // Show on top real tool - m_lineP1 = InitPoint(Color(VColor::SupportColor), this); - m_lineP2 = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_line = InitItem(Color(VColor::SupportColor), this); - m_point = InitPoint(Color(VColor::MainColor), this); + m_lineP1 = InitPoint(VColorRole::VisSupportColor, this); + m_lineP2 = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_line = InitItem(VColorRole::VisSupportColor, this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -68,37 +66,37 @@ void VisToolAlongLine::RefreshGeometry() if (m_point1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_point1Id); - DrawPoint(m_lineP1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_lineP1, static_cast(*first)); if (m_point2Id <= NULL_ID) { - QLineF cursorLine (static_cast(*first), ScenePos()); - DrawLine(m_line, cursorLine, Color(VColor::SupportColor)); + QLineF cursorLine(static_cast(*first), ScenePos()); + DrawLine(m_line, cursorLine); if (m_midPointMode) { - cursorLine.setLength(cursorLine.length()/2.0); - DrawPoint(m_point, cursorLine.p2(), Color(VColor::MainColor)); + cursorLine.setLength(cursorLine.length() / 2.0); + DrawPoint(m_point, cursorLine.p2()); } } else { const QSharedPointer second = GetData()->GeometricObject(m_point2Id); - DrawPoint(m_lineP2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_lineP2, static_cast(*second)); QLineF baseLine(static_cast(*first), static_cast(*second)); - DrawLine(m_line, baseLine, Color(VColor::SupportColor)); + DrawLine(m_line, baseLine); if (not qFuzzyIsNull(m_length)) { QLineF mainLine = VGObject::BuildLine(static_cast(*first), m_length, m_line->line().angle()); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); + DrawPoint(m_point, mainLine.p2()); } else if (GetMode() == Mode::Creation) { - QLineF cursorLine (static_cast(*first), ScenePos()); + QLineF cursorLine(static_cast(*first), ScenePos()); qreal len = cursorLine.length(); qreal angleTo = baseLine.angleTo(cursorLine); @@ -108,9 +106,9 @@ void VisToolAlongLine::RefreshGeometry() } QLineF mainLine = VGObject::BuildLine(static_cast(*first), len, m_line->line().angle()); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); + DrawPoint(m_point, mainLine.p2()); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Length = %1%2; " diff --git a/src/libs/vtools/visualization/line/vistoolbisector.cpp b/src/libs/vtools/visualization/line/vistoolbisector.cpp index c63138b15..fb8198601 100644 --- a/src/libs/vtools/visualization/line/vistoolbisector.cpp +++ b/src/libs/vtools/visualization/line/vistoolbisector.cpp @@ -37,23 +37,23 @@ #include "../../tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolBisector::VisToolBisector(const VContainer *data, QGraphicsItem *parent) - :VisLine(data, parent) + : VisLine(data, parent) { - m_line1P1 = InitPoint(Color(VColor::SupportColor), this); - m_line1P2 = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_line1 = InitItem(Color(VColor::SupportColor), this); + m_line1P1 = InitPoint(VColorRole::VisSupportColor, this); + m_line1P2 = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_line1 = InitItem(VColorRole::VisSupportColor, this); - m_line2P2 = InitPoint(Color(VColor::SupportColor), this); - m_line2 = InitItem(Color(VColor::SupportColor), this); + m_line2P2 = InitPoint(VColorRole::VisSupportColor, this); + m_line2 = InitItem(VColorRole::VisSupportColor, this); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -68,50 +68,46 @@ void VisToolBisector::RefreshGeometry() if (m_point1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_point1Id); - DrawPoint(m_line1P1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_line1P1, static_cast(*first)); if (m_point2Id <= NULL_ID) { - DrawLine(m_line1, QLineF(static_cast(*first), ScenePos()), Color(VColor::SupportColor)); + DrawLine(m_line1, QLineF(static_cast(*first), ScenePos())); } else { const QSharedPointer second = GetData()->GeometricObject(m_point2Id); - DrawPoint(m_line1P2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_line1P2, static_cast(*second)); - DrawLine(m_line1, QLineF(static_cast(*first), static_cast(*second)), - Color(VColor::SupportColor)); + DrawLine(m_line1, QLineF(static_cast(*first), static_cast(*second))); if (m_point3Id <= NULL_ID) { - DrawLine(m_line2, QLineF(static_cast(*second), ScenePos()), Color(VColor::SupportColor)); + DrawLine(m_line2, QLineF(static_cast(*second), ScenePos())); } else { const QSharedPointer third = GetData()->GeometricObject(m_point3Id); - DrawPoint(m_line2P2, static_cast(*third), Color(VColor::SupportColor)); + DrawPoint(m_line2P2, static_cast(*third)); - DrawLine(m_line2, QLineF(static_cast(*second), static_cast(*third)), - Color(VColor::SupportColor)); + DrawLine(m_line2, QLineF(static_cast(*second), static_cast(*third))); if (not qFuzzyIsNull(m_length)) { - qreal angle = VToolBisector::BisectorAngle(static_cast(*first), - static_cast(*second), - static_cast(*third)); + qreal angle = VToolBisector::BisectorAngle( + static_cast(*first), static_cast(*second), static_cast(*third)); QLineF mainLine = VGObject::BuildLine(static_cast(*second), m_length, angle); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); + DrawPoint(m_point, mainLine.p2()); } else if (GetMode() == Mode::Creation) { - QLineF cursorLine (static_cast(*second), ScenePos()); + QLineF cursorLine(static_cast(*second), ScenePos()); QLineF baseLine(static_cast(*second), static_cast(*third)); - qreal angle = VToolBisector::BisectorAngle(static_cast(*first), - static_cast(*second), - static_cast(*third)); + qreal angle = VToolBisector::BisectorAngle( + static_cast(*first), static_cast(*second), static_cast(*third)); baseLine.setAngle(angle); @@ -124,9 +120,9 @@ void VisToolBisector::RefreshGeometry() QLineF mainLine = VGObject::BuildLine(static_cast(*second), len, angle); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); + DrawPoint(m_point, mainLine.p2()); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Length = %1%2; " @@ -136,14 +132,12 @@ void VisToolBisector::RefreshGeometry() } else { - qreal angle = VToolBisector::BisectorAngle(static_cast(*first), - static_cast(*second), - static_cast(*third)); + qreal angle = VToolBisector::BisectorAngle( + static_cast(*first), static_cast(*second), static_cast(*third)); QPointF endRay = Ray(static_cast(*second), angle); - QLineF mainLine = VGObject::BuildLine(static_cast(*second), - QLineF(static_cast(*second), endRay).length(), - angle); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + QLineF mainLine = VGObject::BuildLine( + static_cast(*second), QLineF(static_cast(*second), endRay).length(), angle); + DrawLine(this, mainLine, LineStyle()); } } } diff --git a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp index 652e2ce22..c8b4a71bf 100644 --- a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp @@ -35,28 +35,25 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolCurveIntersectAxis::VisToolCurveIntersectAxis(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - SetMainColor(Qt::red); - - m_visCurve = InitItem(Qt::darkGreen, this); - m_basePoint = InitPoint(Color(VColor::SupportColor), this); - m_baseLine = InitItem(Color(VColor::SupportColor), this); - m_axisLine = InitItem(Color(VColor::SupportColor), this); //-V656 - m_point = InitPoint(Color(VColor::MainColor), this); + m_visCurve = InitItem(VColorRole::VisSupportColor2, this); + m_basePoint = InitPoint(VColorRole::VisSupportColor, this); + m_baseLine = InitItem(VColorRole::VisSupportColor, this); + m_axisLine = InitItem(VColorRole::VisSupportColor, this); //-V656 + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -65,8 +62,7 @@ void VisToolCurveIntersectAxis::RefreshGeometry() if (m_curveId > NULL_ID) { const QSharedPointer curve = GetData()->GeometricObject(m_curveId); - DrawPath(m_visCurve, curve->GetPath(), curve->DirectionArrows(), Color(VColor::SupportColor), Qt::SolidLine, - Qt::RoundCap); + DrawPath(m_visCurve, curve->GetPath(), curve->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); if (m_axisPointId > NULL_ID) { @@ -80,15 +76,15 @@ void VisToolCurveIntersectAxis::RefreshGeometry() { axis = Axis(static_cast(*first), m_angle); } - DrawPoint(m_basePoint, static_cast(*first), Color(VColor::MainColor)); - DrawLine(m_axisLine, axis, Color(VColor::SupportColor), Qt::DashLine); + DrawPoint(m_basePoint, static_cast(*first)); + DrawLine(m_axisLine, axis, Qt::DashLine); QPointF p; VToolCurveIntersectAxis::FindPoint(static_cast(*first), axis.angle(), curve->GetPoints(), &p); QLineF axis_line(static_cast(*first), p); - DrawLine(this, axis_line, Color(VColor::MainColor), LineStyle()); + DrawLine(this, axis_line, LineStyle()); - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); SetToolTip(tr("Intersection curve and axis: angle = %1°; %2 - " "sticking angle, %3 - finish creation") diff --git a/src/libs/vtools/visualization/line/vistoolendline.cpp b/src/libs/vtools/visualization/line/vistoolendline.cpp index a46353ed0..04cbfdf18 100644 --- a/src/libs/vtools/visualization/line/vistoolendline.cpp +++ b/src/libs/vtools/visualization/line/vistoolendline.cpp @@ -33,26 +33,22 @@ #include #include #include -#include #include #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" -#include "../vmisc/vabstractapplication.h" -#include "../vmisc/vcommonsettings.h" +#include "../visualization.h" #include "../vmisc/vmodifierkey.h" #include "../vpatterndb/vcontainer.h" -#include "../visualization.h" #include "visline.h" -#include "../vpatterndb/vtranslatevars.h" //--------------------------------------------------------------------------------------------------------------------- VisToolEndLine::VisToolEndLine(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - SetMainColor(Qt::red); + SetColorRole(VColorRole::VisMainColor); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -76,15 +72,15 @@ void VisToolEndLine::RefreshGeometry() } else { - DrawPoint(m_point, static_cast(*first), Color(VColor::MainColor)); + DrawPoint(m_point, static_cast(*first)); } } else { line = VGObject::BuildLine(static_cast(*first), m_length, m_angle); - DrawPoint(m_point, line.p2(), Color(VColor::MainColor)); + DrawPoint(m_point, line.p2()); } - DrawLine(this, line, Color(VColor::MainColor), LineStyle()); + DrawLine(this, line, LineStyle()); static const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Point at distance and angle: angle = %1°, length = %2%3; " "%4 - sticking angle, %5 - finish creation") diff --git a/src/libs/vtools/visualization/line/vistoolheight.cpp b/src/libs/vtools/visualization/line/vistoolheight.cpp index 12a1af460..0e956ca39 100644 --- a/src/libs/vtools/visualization/line/vistoolheight.cpp +++ b/src/libs/vtools/visualization/line/vistoolheight.cpp @@ -32,27 +32,26 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/compatibility.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolHeight::VisToolHeight(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - m_basePoint = InitPoint(Color(VColor::SupportColor), this); - m_lineP1 = InitPoint(Color(VColor::SupportColor), this); - m_lineP2 = InitPoint(Color(VColor::SupportColor), this); - m_line = InitItem(Color(VColor::SupportColor), this); - m_lineIntersection = InitItem(Color(VColor::SupportColor), this); //-V656 + m_basePoint = InitPoint(VColorRole::VisSupportColor, this); + m_lineP1 = InitPoint(VColorRole::VisSupportColor, this); + m_lineP2 = InitPoint(VColorRole::VisSupportColor, this); + m_line = InitItem(VColorRole::VisSupportColor, this); + m_lineIntersection = InitItem(VColorRole::VisSupportColor, this); //-V656 - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -61,38 +60,38 @@ void VisToolHeight::RefreshGeometry() if (m_basePointId > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_basePointId); - DrawPoint(m_basePoint, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_basePoint, static_cast(*first)); if (m_lineP1Id <= NULL_ID) { - DrawLine(this, QLineF(static_cast(*first), ScenePos()), Color(VColor::MainColor)); + DrawLine(this, QLineF(static_cast(*first), ScenePos())); } else { const QSharedPointer second = GetData()->GeometricObject(m_lineP1Id); - DrawPoint(m_lineP1, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_lineP1, static_cast(*second)); QLineF base_line; if (m_lineP2Id <= NULL_ID) { base_line = QLineF(static_cast(*second), ScenePos()); - DrawLine(m_line, base_line, Color(VColor::SupportColor)); + DrawLine(m_line, base_line); } else { const QSharedPointer third = GetData()->GeometricObject(m_lineP2Id); - DrawPoint(m_lineP2, static_cast(*third), Color(VColor::SupportColor)); + DrawPoint(m_lineP2, static_cast(*third)); base_line = QLineF(static_cast(*second), static_cast(*third)); } - DrawLine(m_line, base_line, Color(VColor::SupportColor)); + DrawLine(m_line, base_line); QPointF height = VToolHeight::FindPoint(base_line, static_cast(*first)); - DrawPoint(m_point, height, Color(VColor::MainColor)); + DrawPoint(m_point, height); QLineF height_line(static_cast(*first), height); - DrawLine(this, height_line, Color(VColor::MainColor), LineStyle()); + DrawLine(this, height_line, LineStyle()); ShowIntersection(height_line, base_line); } @@ -115,8 +114,7 @@ void VisToolHeight::ShowIntersection(const QLineF &height_line, const QLineF &ba if (intersect == QLineF::UnboundedIntersection) { m_lineIntersection->setVisible(true); - DrawLine(m_lineIntersection, QLineF(base_line.p1(), height_line.p2()), Color(VColor::SupportColor), - Qt::DashLine); + DrawLine(m_lineIntersection, QLineF(base_line.p1(), height_line.p2()), Qt::DashLine); } else if (intersect == QLineF::BoundedIntersection) { diff --git a/src/libs/vtools/visualization/line/vistoolline.cpp b/src/libs/vtools/visualization/line/vistoolline.cpp index 2ad6b9a6b..e4eae8b23 100644 --- a/src/libs/vtools/visualization/line/vistoolline.cpp +++ b/src/libs/vtools/visualization/line/vistoolline.cpp @@ -35,15 +35,14 @@ #include #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" +#include "../vpatterndb/vcontainer.h" #include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolLine::VisToolLine(const VContainer *data, QGraphicsItem *parent) - :VisLine(data, parent) + : VisLine(data, parent) { - SetMainColor(Qt::red); } //--------------------------------------------------------------------------------------------------------------------- @@ -60,7 +59,7 @@ void VisToolLine::RefreshGeometry() const QSharedPointer second = GetData()->GeometricObject(m_point2Id); line = QLineF(static_cast(*first), static_cast(*second)); } - DrawLine(this, line, Color(VColor::MainColor), LineStyle()); + DrawLine(this, line, LineStyle()); } //--------------------------------------------------------------------------------------------------------------------- @@ -71,12 +70,11 @@ void VisToolLine::VisualMode(quint32 id) } //--------------------------------------------------------------------------------------------------------------------- -void VisToolLine::DrawLine(VScaledLine *lineItem, const QLineF &line, const QColor &color, Qt::PenStyle style) +void VisToolLine::DrawLine(VScaledLine *lineItem, const QLineF &line, Qt::PenStyle style) { - SCASSERT (lineItem != nullptr) + SCASSERT(lineItem != nullptr) QPen visPen = lineItem->pen(); - visPen.setColor(color); visPen.setStyle(style); lineItem->setPen(visPen); diff --git a/src/libs/vtools/visualization/line/vistoolline.h b/src/libs/vtools/visualization/line/vistoolline.h index 28857390b..2346c9cc1 100644 --- a/src/libs/vtools/visualization/line/vistoolline.h +++ b/src/libs/vtools/visualization/line/vistoolline.h @@ -29,14 +29,12 @@ #ifndef VGRAPHICSLINEITEM_H #define VGRAPHICSLINEITEM_H - #include #include #include #include #include #include -#include #include #include "../vmisc/def.h" @@ -45,6 +43,7 @@ class VisToolLine : public VisLine { Q_OBJECT // NOLINT + public: explicit VisToolLine(const VContainer *data, QGraphicsItem *parent = nullptr); ~VisToolLine() override = default; @@ -55,11 +54,15 @@ public: void SetPoint1Id(quint32 value); void SetPoint2Id(quint32 value); - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::ToolLine)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ToolLine) + }; + protected: - void DrawLine(VScaledLine *lineItem, const QLineF &line, const QColor &color, - Qt::PenStyle style = Qt::SolidLine) override; + void DrawLine(VScaledLine *lineItem, const QLineF &line, Qt::PenStyle style = Qt::SolidLine) override; + private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(VisToolLine) // NOLINT diff --git a/src/libs/vtools/visualization/line/vistoollineintersect.cpp b/src/libs/vtools/visualization/line/vistoollineintersect.cpp index fca638b2f..3f14e90d9 100644 --- a/src/libs/vtools/visualization/line/vistoollineintersect.cpp +++ b/src/libs/vtools/visualization/line/vistoollineintersect.cpp @@ -36,23 +36,25 @@ #include #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/compatibility.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolLineIntersect::VisToolLineIntersect(const VContainer *data, QGraphicsItem *parent) - :VisLine(data, parent) + : VisLine(data, parent) { - m_line1P1 = InitPoint(Color(VColor::SupportColor), this); - m_line1P2 = InitPoint(Color(VColor::SupportColor), this); - m_line1 = InitItem(Color(VColor::SupportColor), this); + SetColorRole(VColorRole::VisSupportColor); - m_line2P1 = InitPoint(Color(VColor::SupportColor), this); - m_line2P2 = InitPoint(Color(VColor::SupportColor), this); + m_line1P1 = InitPoint(VColorRole::VisSupportColor, this); + m_line1P2 = InitPoint(VColorRole::VisSupportColor, this); + m_line1 = InitItem(VColorRole::VisSupportColor, this); - m_point = InitPoint(Color(VColor::MainColor), this); + m_line2P1 = InitPoint(VColorRole::VisSupportColor, this); + m_line2P2 = InitPoint(VColorRole::VisSupportColor, this); + + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -61,29 +63,27 @@ void VisToolLineIntersect::RefreshGeometry() if (m_line1P1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_line1P1Id); - DrawPoint(m_line1P1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_line1P1, static_cast(*first)); if (m_line1P2Id <= NULL_ID) { - DrawLine(m_line1, QLineF(static_cast(*first), ScenePos()), Color(VColor::SupportColor)); + DrawLine(m_line1, QLineF(static_cast(*first), ScenePos())); } else { const QSharedPointer second = GetData()->GeometricObject(m_line1P2Id); - DrawPoint(m_line1P2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_line1P2, static_cast(*second)); - DrawLine(m_line1, QLineF(static_cast(*first), static_cast(*second)), - Color(VColor::SupportColor)); + DrawLine(m_line1, QLineF(static_cast(*first), static_cast(*second))); if (m_line2P1Id > NULL_ID) { const QSharedPointer third = GetData()->GeometricObject(m_line2P1Id); - DrawPoint(m_line2P1, static_cast(*third), Color(VColor::SupportColor)); + DrawPoint(m_line2P1, static_cast(*third)); if (m_line2P2Id <= NULL_ID) { - DrawLine(this, QLineF(static_cast(*third), ScenePos()), - Color(VColor::SupportColor)); + DrawLine(this, QLineF(static_cast(*third), ScenePos())); QLineF l1(static_cast(*first), static_cast(*second)); QLineF l2(static_cast(*third), ScenePos()); @@ -92,16 +92,15 @@ void VisToolLineIntersect::RefreshGeometry() if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) { - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); } } else { const QSharedPointer forth = GetData()->GeometricObject(m_line2P2Id); - DrawPoint(m_line2P2, static_cast(*forth), Color(VColor::SupportColor)); + DrawPoint(m_line2P2, static_cast(*forth)); - DrawLine(this, QLineF(static_cast(*third), static_cast(*forth)), - Color(VColor::SupportColor)); + DrawLine(this, QLineF(static_cast(*third), static_cast(*forth))); QLineF l1(static_cast(*first), static_cast(*second)); QLineF l2(static_cast(*third), static_cast(*forth)); @@ -110,7 +109,7 @@ void VisToolLineIntersect::RefreshGeometry() if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) { - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); } } } diff --git a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp index b0d1d96c8..620d3171a 100644 --- a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp @@ -33,30 +33,27 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" -#include "../vmisc/vmodifierkey.h" #include "../vmisc/compatibility.h" +#include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolLineIntersectAxis::VisToolLineIntersectAxis(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - SetMainColor(Qt::red); - - m_lineP1 = InitPoint(Color(VColor::SupportColor), this); - m_lineP2 = InitPoint(Color(VColor::SupportColor), this); - m_basePoint = InitPoint(Color(VColor::SupportColor), this); - m_baseLine = InitItem(Color(VColor::SupportColor), this); - m_axisLine = InitItem(Color(VColor::SupportColor), this); - m_lineIntersection = InitItem(Color(VColor::SupportColor), this); - m_point = InitPoint(Color(VColor::MainColor), this); + m_lineP1 = InitPoint(VColorRole::VisSupportColor, this); + m_lineP2 = InitPoint(VColorRole::VisSupportColor, this); + m_basePoint = InitPoint(VColorRole::VisSupportColor, this); + m_baseLine = InitItem(VColorRole::VisSupportColor, this); + m_axisLine = InitItem(VColorRole::VisSupportColor, this); + m_lineIntersection = InitItem(VColorRole::VisSupportColor, this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -65,25 +62,25 @@ void VisToolLineIntersectAxis::RefreshGeometry() if (m_point1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_point1Id); - DrawPoint(m_lineP1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_lineP1, static_cast(*first)); if (m_point2Id <= NULL_ID) { - DrawLine(m_baseLine, QLineF(static_cast(*first), ScenePos()), Color(VColor::SupportColor)); + DrawLine(m_baseLine, QLineF(static_cast(*first), ScenePos())); } else { const QSharedPointer second = GetData()->GeometricObject(m_point2Id); - DrawPoint(m_lineP2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_lineP2, static_cast(*second)); const QLineF base_line(static_cast(*first), static_cast(*second)); - DrawLine(m_baseLine, base_line, Color(VColor::SupportColor)); + DrawLine(m_baseLine, base_line); if (m_axisPointId > NULL_ID) { QLineF axis; const QSharedPointer third = GetData()->GeometricObject(m_axisPointId); - DrawPoint(m_basePoint, static_cast(*third), Color(VColor::MainColor)); + DrawPoint(m_basePoint, static_cast(*third)); if (VFuzzyComparePossibleNulls(m_angle, -1)) { @@ -98,25 +95,25 @@ void VisToolLineIntersectAxis::RefreshGeometry() axis = Axis(static_cast(*third), m_angle); } - DrawLine(m_axisLine, axis, Color(VColor::SupportColor), Qt::DashLine); + DrawLine(m_axisLine, axis, Qt::DashLine); QPointF p; VToolLineIntersectAxis::FindPoint(axis, base_line, &p); QLineF axis_line(static_cast(*third), p); if (not axis_line.isNull()) { - DrawLine(this, axis_line, Color(VColor::MainColor), LineStyle()); + DrawLine(this, axis_line, LineStyle()); } - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); ShowIntersection(axis_line, base_line); if (GetMode() == Mode::Creation) { - SetToolTip(tr("Intersection line and axis: angle = %1°; %2 - " - "sticking angle, %3 - finish creation") - .arg(AngleToUser(this->line().angle()), VModifierKey::Shift(), - VModifierKey::EnterKey())); + SetToolTip( + tr("Intersection line and axis: angle = %1°; %2 - " + "sticking angle, %3 - finish creation") + .arg(AngleToUser(this->line().angle()), VModifierKey::Shift(), VModifierKey::EnterKey())); } } } @@ -151,7 +148,7 @@ void VisToolLineIntersectAxis::ShowIntersection(const QLineF &axis_line, const Q if (intersect == QLineF::UnboundedIntersection) { m_lineIntersection->setVisible(true); - DrawLine(m_lineIntersection, QLineF(base_line.p1(), axis_line.p2()), Color(VColor::SupportColor), Qt::DashLine); + DrawLine(m_lineIntersection, QLineF(base_line.p1(), axis_line.p2()), Qt::DashLine); } else if (intersect == QLineF::BoundedIntersection || intersect == QLineF::NoIntersection) { diff --git a/src/libs/vtools/visualization/line/vistoolnormal.cpp b/src/libs/vtools/visualization/line/vistoolnormal.cpp index e53a93ef9..b85b96b86 100644 --- a/src/libs/vtools/visualization/line/vistoolnormal.cpp +++ b/src/libs/vtools/visualization/line/vistoolnormal.cpp @@ -33,27 +33,24 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolNormal::VisToolNormal(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - SetMainColor(Qt::red); + m_lineP1 = InitPoint(VColorRole::VisSupportColor, this); + m_lineP2 = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_line = InitItem(VColorRole::VisSupportColor, this); - m_lineP1 = InitPoint(Color(VColor::SupportColor), this); - m_lineP2 = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_line = InitItem(Color(VColor::SupportColor), this); - - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -62,37 +59,37 @@ void VisToolNormal::RefreshGeometry() if (m_object1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_object1Id); - DrawPoint(m_lineP1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_lineP1, static_cast(*first)); if (m_object2Id <= NULL_ID) { QLineF line_mouse(static_cast(*first), ScenePos()); - DrawLine(m_line, line_mouse, Color(VColor::SupportColor)); + DrawLine(m_line, line_mouse); QLineF normal = line_mouse.normalVector(); QPointF endRay = Ray(normal.p1(), normal.angle()); - DrawLine(this, QLineF(normal.p1(), endRay), Color(VColor::MainColor)); + DrawLine(this, QLineF(normal.p1(), endRay)); } else { const QSharedPointer second = GetData()->GeometricObject(m_object2Id); - DrawPoint(m_lineP2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_lineP2, static_cast(*second)); QLineF line_mouse(static_cast(*first), static_cast(*second)); - DrawLine(m_line, line_mouse, Color(VColor::SupportColor)); + DrawLine(m_line, line_mouse); if (not qFuzzyIsNull(m_length)) { QPointF fPoint = VToolNormal::FindPoint(static_cast(*first), static_cast(*second), m_length, m_angle); QLineF mainLine = QLineF(static_cast(*first), fPoint); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); + DrawPoint(m_point, mainLine.p2()); } else if (GetMode() == Mode::Creation) { - QLineF cursorLine (static_cast(*first), ScenePos()); + QLineF cursorLine(static_cast(*first), ScenePos()); QLineF normal = line_mouse.normalVector(); qreal len = cursorLine.length(); @@ -102,12 +99,12 @@ void VisToolNormal::RefreshGeometry() len *= -1; } - QPointF fPoint = VToolNormal::FindPoint(static_cast(*first), static_cast(*second), - len, m_angle); + QPointF fPoint = + VToolNormal::FindPoint(static_cast(*first), static_cast(*second), len, m_angle); QLineF mainLine = QLineF(static_cast(*first), fPoint); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); + DrawPoint(m_point, mainLine.p2()); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Length = %1%2; " @@ -119,7 +116,7 @@ void VisToolNormal::RefreshGeometry() { QLineF normal = line_mouse.normalVector(); QPointF endRay = Ray(normal.p1(), normal.angle()); - DrawLine(this, QLineF(normal.p1(), endRay), Color(VColor::MainColor)); + DrawLine(this, QLineF(normal.p1(), endRay)); } } } diff --git a/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp b/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp index 8d3a1d32f..c101a57be 100644 --- a/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointfromarcandtangent.cpp @@ -33,7 +33,6 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h" @@ -41,37 +40,39 @@ #include "../vgeometry/varc.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" +#include "../vpatterndb/vcontainer.h" #include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPointFromArcAndTangent::VisToolPointFromArcAndTangent(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - m_arcPath = InitItem(Qt::darkGreen, this); - m_point = InitPoint(Color(VColor::MainColor), this); - m_tangent = InitPoint(Color(VColor::SupportColor), this); + SetColorRole(VColorRole::VisSupportColor); + + m_arcPath = InitItem(VColorRole::VisSupportColor2, this); + m_point = InitPoint(VColorRole::VisMainColor, this); + m_tangent = InitPoint(VColorRole::VisSupportColor, this); } //--------------------------------------------------------------------------------------------------------------------- void VisToolPointFromArcAndTangent::RefreshGeometry() { - if (m_pointId > NULL_ID)// tangent point + if (m_pointId > NULL_ID) // tangent point { const QSharedPointer tan = GetData()->GeometricObject(m_pointId); - DrawPoint(m_tangent, static_cast(*tan), Color(VColor::SupportColor)); + DrawPoint(m_tangent, static_cast(*tan)); - if (m_arcId > NULL_ID)// circle center + if (m_arcId > NULL_ID) // circle center { const QSharedPointer arc = GetData()->GeometricObject(m_arcId); - DrawPath(m_arcPath, arc->GetPath(), arc->DirectionArrows(), Qt::darkGreen, Qt::SolidLine, Qt::RoundCap); + DrawPath(m_arcPath, arc->GetPath(), arc->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); FindRays(static_cast(*tan), arc.data()); QPointF fPoint; VToolPointFromArcAndTangent::FindPoint(static_cast(*tan), arc.data(), m_crossPoint, &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); } } } @@ -89,17 +90,17 @@ void VisToolPointFromArcAndTangent::FindRays(const QPointF &p, const VArc *arc) QPointF p1, p2; const QPointF center = static_cast(arc->GetCenter()); const qreal radius = arc->GetRadius(); - const int res = VGObject::ContactPoints (p, center, radius, p1, p2); + const int res = VGObject::ContactPoints(p, center, radius, p1, p2); - switch(res) + switch (res) { case 2: { QLineF r1Arc(center, p1); - r1Arc.setLength(radius+10); + r1Arc.setLength(radius + 10); QLineF r2Arc(center, p2); - r2Arc.setLength(radius+10); + r2Arc.setLength(radius + 10); int localRes = 0; bool flagP1 = false; @@ -115,14 +116,13 @@ void VisToolPointFromArcAndTangent::FindRays(const QPointF &p, const VArc *arc) ++localRes; } - switch(localRes) + switch (localRes) { case 2: - DrawRay(this, p, m_crossPoint == CrossCirclesPoint::FirstPoint ? p1 : p2, - Color(VColor::SupportColor), Qt::DashLine); + DrawRay(this, p, m_crossPoint == CrossCirclesPoint::FirstPoint ? p1 : p2, Qt::DashLine); break; case 1: - DrawRay(this, p, flagP1 ? p1 : p2, Color(VColor::SupportColor), Qt::DashLine); + DrawRay(this, p, flagP1 ? p1 : p2, Qt::DashLine); break; case 0: default: @@ -133,7 +133,7 @@ void VisToolPointFromArcAndTangent::FindRays(const QPointF &p, const VArc *arc) break; } case 1: - DrawRay(this, p, p1, Color(VColor::SupportColor), Qt::DashLine); + DrawRay(this, p, p1, Qt::DashLine); break; case 3: case 0: diff --git a/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp b/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp index 822bd9422..19cf8a2a0 100644 --- a/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointfromcircleandtangent.cpp @@ -31,69 +31,70 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" -#include "../vwidgets/global.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "../vwidgets/global.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPointFromCircleAndTangent::VisToolPointFromCircleAndTangent(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - m_cPath = InitItem(Qt::darkGreen, this); + SetColorRole(VColorRole::VisSupportColor); + + m_cPath = InitItem(VColorRole::VisSupportColor2, this); m_cPath->SetPointMode(false); - m_point = InitPoint(Color(VColor::MainColor), this); - m_tangent = InitPoint(Color(VColor::SupportColor), this); - m_cCenter = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_tangent2 = InitItem(Color(VColor::SupportColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); + m_tangent = InitPoint(VColorRole::VisSupportColor, this); + m_cCenter = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_tangent2 = InitItem(VColorRole::VisSupportColor, this); } //--------------------------------------------------------------------------------------------------------------------- void VisToolPointFromCircleAndTangent::RefreshGeometry() { - if (m_pointId > NULL_ID)// tangent point + if (m_pointId > NULL_ID) // tangent point { const QSharedPointer tan = GetData()->GeometricObject(m_pointId); - DrawPoint(m_tangent, static_cast(*tan), Color(VColor::SupportColor)); + DrawPoint(m_tangent, static_cast(*tan)); - if (m_centerId > NULL_ID)// circle center + if (m_centerId > NULL_ID) // circle center { const QSharedPointer center = GetData()->GeometricObject(m_centerId); - DrawPoint(m_cCenter, static_cast(*center), Color(VColor::SupportColor)); + DrawPoint(m_cCenter, static_cast(*center)); if (m_cRadius > 0) { m_cPath->setRect(PointRect(m_cRadius)); - DrawPoint(m_cPath, static_cast(*center), Qt::darkGreen, Qt::DashLine); + DrawPoint(m_cPath, static_cast(*center), Qt::DashLine); FindRays(static_cast(*tan), static_cast(*center), m_cRadius); QPointF fPoint; VToolPointFromCircleAndTangent::FindPoint(static_cast(*tan), static_cast(*center), m_cRadius, m_crossPoint, &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); } else if (GetMode() == Mode::Creation) { - QLineF cursorLine (static_cast(*center), ScenePos()); + QLineF cursorLine(static_cast(*center), ScenePos()); qreal len = cursorLine.length(); m_cPath->setRect(PointRect(len)); - DrawPoint(m_cPath, static_cast(*center), Qt::darkGreen, Qt::DashLine); + DrawPoint(m_cPath, static_cast(*center), Qt::DashLine); FindRays(static_cast(*tan), static_cast(*center), len); QPointF fPoint; VToolPointFromCircleAndTangent::FindPoint(static_cast(*tan), static_cast(*center), len, m_crossPoint, &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Radius = %1%2; " @@ -122,16 +123,16 @@ void VisToolPointFromCircleAndTangent::SetCRadius(const QString &value) void VisToolPointFromCircleAndTangent::FindRays(const QPointF &p, const QPointF ¢er, qreal radius) { QPointF p1, p2; - const int res = VGObject::ContactPoints (p, center, radius, p1, p2); + const int res = VGObject::ContactPoints(p, center, radius, p1, p2); - switch(res) + switch (res) { case 2: - DrawRay(this, p, p1, Color(VColor::SupportColor), Qt::DashLine); - DrawRay(m_tangent2, p, p2, Color(VColor::SupportColor), Qt::DashLine); + DrawRay(this, p, p1, Qt::DashLine); + DrawRay(m_tangent2, p, p2, Qt::DashLine); break; case 1: - DrawRay(this, p, p1, Color(VColor::SupportColor), Qt::DashLine); + DrawRay(this, p, p1, Qt::DashLine); m_tangent2->setVisible(false); break; default: diff --git a/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp b/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp index b4fc89ab9..aca05e87c 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp @@ -32,28 +32,29 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" -#include "../vwidgets/global.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "../vwidgets/global.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPointOfContact::VisToolPointOfContact(const VContainer *data, QGraphicsItem *parent) - :VisLine(data, parent) + : VisLine(data, parent) { - m_arcPoint = InitPoint(Color(VColor::SupportColor), this); - m_lineP1 = InitPoint(Color(VColor::SupportColor), this); - m_lineP2 = InitPoint(Color(VColor::SupportColor), this); - m_circle = InitItem(Color(VColor::SupportColor), this); + SetColorRole(VColorRole::VisSupportColor); + + m_arcPoint = InitPoint(VColorRole::VisSupportColor, this); + m_lineP1 = InitPoint(VColorRole::VisSupportColor, this); + m_lineP2 = InitPoint(VColorRole::VisSupportColor, this); + m_circle = InitItem(VColorRole::VisSupportColor, this); m_circle->SetPointMode(false); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -62,46 +63,45 @@ void VisToolPointOfContact::RefreshGeometry() if (m_lineP1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_lineP1Id); - DrawPoint(m_lineP1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_lineP1, static_cast(*first)); if (m_lineP2Id <= NULL_ID) { - DrawLine(this, QLineF(static_cast(*first), ScenePos()), Color(VColor::SupportColor)); + DrawLine(this, QLineF(static_cast(*first), ScenePos())); } else { const QSharedPointer second = GetData()->GeometricObject(m_lineP2Id); - DrawPoint(m_lineP2, static_cast(*second), Color(VColor::SupportColor)); - DrawLine(this, QLineF(static_cast(*first), static_cast(*second)), - Color(VColor::SupportColor)); + DrawPoint(m_lineP2, static_cast(*second)); + DrawLine(this, QLineF(static_cast(*first), static_cast(*second))); if (m_radiusId > NULL_ID) { const QSharedPointer third = GetData()->GeometricObject(m_radiusId); - DrawPoint(m_arcPoint, static_cast(*third), Color(VColor::SupportColor)); + DrawPoint(m_arcPoint, static_cast(*third)); if (not qFuzzyIsNull(m_radius)) { QPointF fPoint; VToolPointOfContact::FindPoint(m_radius, static_cast(*third), static_cast(*first), static_cast(*second), &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); m_circle->setRect(PointRect(m_radius)); - DrawPoint(m_circle, static_cast(*third), Color(VColor::SupportColor), Qt::DashLine); + DrawPoint(m_circle, static_cast(*third), Qt::DashLine); } else if (GetMode() == Mode::Creation) { - QLineF cursorLine (static_cast(*third), ScenePos()); + QLineF cursorLine(static_cast(*third), ScenePos()); qreal radius = cursorLine.length(); QPointF fPoint; VToolPointOfContact::FindPoint(radius, static_cast(*third), static_cast(*first), static_cast(*second), &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); m_circle->setRect(PointRect(radius)); - DrawPoint(m_circle, static_cast(*third), Color(VColor::SupportColor), Qt::DashLine); + DrawPoint(m_circle, static_cast(*third), Qt::DashLine); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Radius = %1%2; " diff --git a/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp b/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp index ab0194e05..92cc1550f 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofintersection.cpp @@ -33,24 +33,25 @@ #include #include #include -#include #include #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/compatibility.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPointOfIntersection::VisToolPointOfIntersection(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - m_axisP1 = InitPoint(Color(VColor::SupportColor), this); - m_axisP2 = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_axis2 = InitItem(Color(VColor::SupportColor), this); + SetColorRole(VColorRole::VisSupportColor); - m_point = InitPoint(Color(VColor::MainColor), this); + m_axisP1 = InitPoint(VColorRole::VisSupportColor, this); + m_axisP2 = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_axis2 = InitItem(VColorRole::VisSupportColor, this); + + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -60,30 +61,30 @@ void VisToolPointOfIntersection::RefreshGeometry() if (m_point1Id <= NULL_ID) { axisL1 = Axis(ScenePos(), 90); - DrawLine(this, axisL1, Color(VColor::SupportColor), Qt::DashLine); + DrawLine(this, axisL1, Qt::DashLine); } else { const QSharedPointer first = GetData()->GeometricObject(m_point1Id); - DrawPoint(m_axisP1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_axisP1, static_cast(*first)); axisL1 = Axis(static_cast(*first), 90); - DrawLine(this, axisL1, Color(VColor::SupportColor), Qt::DashLine); + DrawLine(this, axisL1, Qt::DashLine); QLineF axisL2; if (m_point2Id <= NULL_ID) { axisL2 = Axis(ScenePos(), 180); - ShowIntersection(axisL1, axisL2, Color(VColor::SupportColor)); + ShowIntersection(axisL1, axisL2); } else { const QSharedPointer second = GetData()->GeometricObject(m_point2Id); - DrawPoint(m_axisP2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_axisP2, static_cast(*second)); axisL2 = Axis(static_cast(*second), 180); - ShowIntersection(axisL1, axisL2, Color(VColor::MainColor)); + ShowIntersection(axisL1, axisL2); } - DrawLine(m_axis2, axisL2, Color(VColor::SupportColor), Qt::DashLine); + DrawLine(m_axis2, axisL2, Qt::DashLine); } } @@ -95,7 +96,7 @@ void VisToolPointOfIntersection::VisualMode(quint32 id) } //--------------------------------------------------------------------------------------------------------------------- -void VisToolPointOfIntersection::ShowIntersection(const QLineF &axis1, const QLineF &axis2, const QColor &color) +void VisToolPointOfIntersection::ShowIntersection(const QLineF &axis1, const QLineF &axis2) { QPointF p; QLineF::IntersectType intersect = Intersects(axis1, axis2, &p); @@ -103,7 +104,7 @@ void VisToolPointOfIntersection::ShowIntersection(const QLineF &axis1, const QLi if (intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection) { m_point->setVisible(true); - DrawPoint(m_point, p, color); + DrawPoint(m_point, p); } else { diff --git a/src/libs/vtools/visualization/line/vistoolpointofintersection.h b/src/libs/vtools/visualization/line/vistoolpointofintersection.h index f567141a4..743933d37 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofintersection.h +++ b/src/libs/vtools/visualization/line/vistoolpointofintersection.h @@ -66,7 +66,7 @@ private: VScaledEllipse *m_axisP2{nullptr}; VScaledLine *m_axis2{nullptr};//axis1 is class themself - void ShowIntersection(const QLineF &axis1, const QLineF &axis2, const QColor &color); + void ShowIntersection(const QLineF &axis1, const QLineF &axis2); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/visualization/line/vistoolpointofintersectionarcs.cpp b/src/libs/vtools/visualization/line/vistoolpointofintersectionarcs.cpp index d6e75970d..4fcf631f3 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofintersectionarcs.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofintersectionarcs.cpp @@ -34,28 +34,27 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.h" +#include "../line/visline.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "../line/visline.h" +#include "../vpatterndb/vcontainer.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPointOfIntersectionArcs::VisToolPointOfIntersectionArcs(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { this->setPen(QPen(Qt::NoPen)); // don't use parent this time - m_arc1Path = InitItem(Qt::darkGreen, this); + m_arc1Path = InitItem(VColorRole::VisSupportColor2, this); m_arc1Path->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_arc2Path = InitItem(Qt::darkRed, this); + m_arc2Path = InitItem(VColorRole::VisSupportColor4, this); m_arc2Path->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); m_point->setZValue(2); m_point->setFlag(QGraphicsItem::ItemStacksBehindParent, false); } @@ -66,16 +65,16 @@ void VisToolPointOfIntersectionArcs::RefreshGeometry() if (m_arc1Id > NULL_ID) { const QSharedPointer arc1 = GetData()->GeometricObject(m_arc1Id); - DrawPath(m_arc1Path, arc1->GetPath(), arc1->DirectionArrows(), Qt::darkGreen, Qt::SolidLine, Qt::RoundCap); + DrawPath(m_arc1Path, arc1->GetPath(), arc1->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); if (m_arc2Id > NULL_ID) { const QSharedPointer arc2 = GetData()->GeometricObject(m_arc2Id); - DrawPath(m_arc2Path, arc2->GetPath(), arc2->DirectionArrows(), Qt::darkRed, Qt::SolidLine, Qt::RoundCap); + DrawPath(m_arc2Path, arc2->GetPath(), arc2->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); QPointF fPoint; VToolPointOfIntersectionArcs::FindPoint(arc1.data(), arc2.data(), m_crossPoint, &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + DrawPoint(m_point, fPoint); } } } diff --git a/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp b/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp index 842183756..d76beee68 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp @@ -32,34 +32,33 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.h" #include "../vgeometry/vpointf.h" +#include "../visualization.h" +#include "../vmisc/vmodifierkey.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/global.h" -#include "../visualization.h" #include "visline.h" -#include "../vmisc/vmodifierkey.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPointOfIntersectionCircles::VisToolPointOfIntersectionCircles(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { this->setPen(QPen(Qt::NoPen)); // don't use parent this time - m_c1Path = InitItem(Qt::darkGreen, this); + m_c1Path = InitItem(VColorRole::VisSupportColor2, this); m_c1Path->SetPointMode(false); - m_c2Path = InitItem(Qt::darkRed, this); + m_c2Path = InitItem(VColorRole::VisSupportColor4, this); m_c2Path->SetPointMode(false); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); m_point->setZValue(1); - m_c1Center = InitPoint(Color(VColor::SupportColor), this); - m_c2Center = InitPoint(Color(VColor::SupportColor), this); //-V656 + m_c1Center = InitPoint(VColorRole::VisSupportColor, this); + m_c2Center = InitPoint(VColorRole::VisSupportColor, this); //-V656 } //--------------------------------------------------------------------------------------------------------------------- @@ -68,42 +67,42 @@ void VisToolPointOfIntersectionCircles::RefreshGeometry() if (m_circle1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_circle1Id); - DrawPoint(m_c1Center, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_c1Center, static_cast(*first)); if (m_c1Radius > 0) { m_c1Path->setRect(PointRect(m_c1Radius)); - DrawPoint(m_c1Path, static_cast(*first), Qt::darkGreen, Qt::DashLine); + DrawPoint(m_c1Path, static_cast(*first), Qt::DashLine); if (m_circle2Id > NULL_ID) { const QSharedPointer second = GetData()->GeometricObject(m_circle2Id); - DrawPoint(m_c2Center, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_c2Center, static_cast(*second)); if (m_c2Radius > 0) { m_c2Path->setRect(PointRect(m_c2Radius)); - DrawPoint(m_c2Path, static_cast(*second), Qt::darkRed, Qt::DashLine); + DrawPoint(m_c2Path, static_cast(*second), Qt::DashLine); QPointF fPoint; VToolPointOfIntersectionCircles::FindPoint(static_cast(*first), - static_cast(*second), - m_c1Radius, m_c2Radius, m_crossPoint, &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + static_cast(*second), m_c1Radius, m_c2Radius, + m_crossPoint, &fPoint); + DrawPoint(m_point, fPoint); } else if (GetMode() == Mode::Creation) { - QLineF radiusLine (static_cast(*second), ScenePos()); + QLineF radiusLine(static_cast(*second), ScenePos()); const qreal length = radiusLine.length(); m_c2Path->setRect(PointRect(length)); - DrawPoint(m_c2Path, static_cast(*second), Qt::darkRed, Qt::DashLine); + DrawPoint(m_c2Path, static_cast(*second), Qt::DashLine); QPointF fPoint; VToolPointOfIntersectionCircles::FindPoint(static_cast(*first), - static_cast(*second), - m_c1Radius, length, m_crossPoint, &fPoint); - DrawPoint(m_point, fPoint, Color(VColor::MainColor)); + static_cast(*second), m_c1Radius, length, + m_crossPoint, &fPoint); + DrawPoint(m_point, fPoint); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Radius = %1%2; " @@ -115,11 +114,11 @@ void VisToolPointOfIntersectionCircles::RefreshGeometry() } else if (GetMode() == Mode::Creation && VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) { - QLineF radiusLine (static_cast(*first), ScenePos()); + QLineF radiusLine(static_cast(*first), ScenePos()); const qreal length = radiusLine.length(); m_c1Path->setRect(PointRect(length)); - DrawPoint(m_c1Path, static_cast(*first), Qt::darkGreen, Qt::DashLine); + DrawPoint(m_c1Path, static_cast(*first), Qt::DashLine); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Radius = %1%2; " diff --git a/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp b/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp index e5c505f4a..682be1c37 100644 --- a/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp +++ b/src/libs/vtools/visualization/line/vistoolshoulderpoint.cpp @@ -32,30 +32,29 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "visline.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolShoulderPoint::VisToolShoulderPoint(const VContainer *data, QGraphicsItem *parent) - :VisLine(data, parent) + : VisLine(data, parent) { - m_line1P1 = InitPoint(Color(VColor::SupportColor), this); - m_line1P2 = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_line1 = InitItem(Color(VColor::SupportColor), this); + m_line1P1 = InitPoint(VColorRole::VisSupportColor, this); + m_line1P2 = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_line1 = InitItem(VColorRole::VisSupportColor, this); - m_line2P2 = InitPoint(Color(VColor::SupportColor), this); - m_line2 = InitItem(Color(VColor::SupportColor), this); - m_line3 = InitItem(Color(VColor::SupportColor), this); //-V656 + m_line2P2 = InitPoint(VColorRole::VisSupportColor, this); + m_line2 = InitItem(VColorRole::VisSupportColor, this); + m_line3 = InitItem(VColorRole::VisSupportColor, this); //-V656 - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -64,58 +63,53 @@ void VisToolShoulderPoint::RefreshGeometry() if (m_point3Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_point3Id); - DrawPoint(m_line1P1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_line1P1, static_cast(*first)); if (m_lineP1Id <= NULL_ID) { - DrawLine(m_line1, QLineF(static_cast(*first), ScenePos()), Color(VColor::SupportColor)); + DrawLine(m_line1, QLineF(static_cast(*first), ScenePos())); } else { const QSharedPointer second = GetData()->GeometricObject(m_lineP1Id); - DrawPoint(m_line1P2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_line1P2, static_cast(*second)); - DrawLine(m_line1, QLineF(static_cast(*first), static_cast(*second)), - Color(VColor::SupportColor)); + DrawLine(m_line1, QLineF(static_cast(*first), static_cast(*second))); if (m_lineP2Id <= NULL_ID) { - DrawLine(m_line2, QLineF(static_cast(*second), ScenePos()), Color(VColor::SupportColor)); + DrawLine(m_line2, QLineF(static_cast(*second), ScenePos())); } else { const QSharedPointer third = GetData()->GeometricObject(m_lineP2Id); - DrawPoint(m_line2P2, static_cast(*third), Color(VColor::SupportColor)); + DrawPoint(m_line2P2, static_cast(*third)); - DrawLine(m_line2, QLineF(static_cast(*second), static_cast(*third)), - Color(VColor::SupportColor)); + DrawLine(m_line2, QLineF(static_cast(*second), static_cast(*third))); if (not qFuzzyIsNull(m_length)) { - QPointF fPoint = VToolShoulderPoint::FindPoint(static_cast(*second), - static_cast(*third), - static_cast(*first), m_length); + QPointF fPoint = + VToolShoulderPoint::FindPoint(static_cast(*second), static_cast(*third), + static_cast(*first), m_length); QLineF mainLine = QLineF(static_cast(*second), fPoint); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); - DrawLine(m_line3, QLineF(static_cast(*first), mainLine.p2()), Color(VColor::SupportColor), - Qt::DashLine); + DrawPoint(m_point, mainLine.p2()); + DrawLine(m_line3, QLineF(static_cast(*first), mainLine.p2()), Qt::DashLine); } else if (GetMode() == Mode::Creation) { - QLineF cursorLine (static_cast(*first), ScenePos()); + QLineF cursorLine(static_cast(*first), ScenePos()); qreal len = cursorLine.length(); - QPointF fPoint = VToolShoulderPoint::FindPoint(static_cast(*second), - static_cast(*third), - static_cast(*first), len); + QPointF fPoint = VToolShoulderPoint::FindPoint( + static_cast(*second), static_cast(*third), static_cast(*first), len); QLineF mainLine = QLineF(static_cast(*second), fPoint); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + DrawLine(this, mainLine, LineStyle()); - DrawPoint(m_point, mainLine.p2(), Color(VColor::MainColor)); - DrawLine(m_line3, QLineF(static_cast(*first), mainLine.p2()), Color(VColor::SupportColor), - Qt::DashLine); + DrawPoint(m_point, mainLine.p2()); + DrawLine(m_line3, QLineF(static_cast(*first), mainLine.p2()), Qt::DashLine); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Length = %1%2; " @@ -127,10 +121,9 @@ void VisToolShoulderPoint::RefreshGeometry() { qreal angle = QLineF(static_cast(*second), static_cast(*third)).angle(); QPointF endRay = Ray(static_cast(*second), angle); - QLineF mainLine = VGObject::BuildLine(static_cast(*second), - QLineF(static_cast(*second), endRay).length(), - angle); - DrawLine(this, mainLine, Color(VColor::MainColor), LineStyle()); + QLineF mainLine = VGObject::BuildLine( + static_cast(*second), QLineF(static_cast(*second), endRay).length(), angle); + DrawLine(this, mainLine, LineStyle()); } } } diff --git a/src/libs/vtools/visualization/line/vistoolspecialpoint.cpp b/src/libs/vtools/visualization/line/vistoolspecialpoint.cpp index 4e964bf01..19e30e1ef 100644 --- a/src/libs/vtools/visualization/line/vistoolspecialpoint.cpp +++ b/src/libs/vtools/visualization/line/vistoolspecialpoint.cpp @@ -27,19 +27,18 @@ *************************************************************************/ #include "vistoolspecialpoint.h" -#include "../vwidgets/vsimplepoint.h" #include "../vgeometry/vpointf.h" #include "../vpatterndb/vcontainer.h" +#include "../vwidgets/vsimplepoint.h" //--------------------------------------------------------------------------------------------------------------------- VisToolSpecialPoint::VisToolSpecialPoint(const VContainer *data, QGraphicsItem *parent) - : VisLine(data, parent) + : VisLine(data, parent) { - SetMainColor(Qt::red); - this->setZValue(2);// Show on top real tool - this->setPen(QPen(Qt::NoPen)); + setZValue(2); // Show on top real tool + setPen(QPen(Qt::NoPen)); - m_point = new VSimplePoint(NULL_ID, Color(VColor::MainColor)); + m_point = new VSimplePoint(NULL_ID, VColorRole::VisMainColor); m_point->SetPointHighlight(true); m_point->setParentItem(this); m_point->SetVisualizationMode(true); @@ -70,4 +69,3 @@ void VisToolSpecialPoint::VisualMode(quint32 id) m_pointId = id; StartVisualMode(); } - diff --git a/src/libs/vtools/visualization/line/vistooltriangle.cpp b/src/libs/vtools/visualization/line/vistooltriangle.cpp index 7f538efbf..1f86ecfc3 100644 --- a/src/libs/vtools/visualization/line/vistooltriangle.cpp +++ b/src/libs/vtools/visualization/line/vistooltriangle.cpp @@ -34,28 +34,30 @@ #include #include #include -#include #include +#include #include "../../tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" +#include "../vpatterndb/vcontainer.h" #include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolTriangle::VisToolTriangle(const VContainer *data, QGraphicsItem *parent) - :VisLine(data, parent) + : VisLine(data, parent) { - m_axisP1 = InitPoint(Color(VColor::SupportColor), this); - m_axisP2 = InitPoint(Color(VColor::SupportColor), this); - m_axis = InitItem(Color(VColor::SupportColor), this); - m_hypotenuseP1 = InitPoint(Color(VColor::SupportColor), this); - m_hypotenuseP2 = InitPoint(Color(VColor::SupportColor), this); - m_foot1 = InitItem(Color(VColor::SupportColor), this); - m_foot2 = InitItem(Color(VColor::SupportColor), this); //-V656 + SetColorRole(VColorRole::VisSupportColor); - m_point = InitPoint(Color(VColor::MainColor), this); + m_axisP1 = InitPoint(VColorRole::VisSupportColor, this); + m_axisP2 = InitPoint(VColorRole::VisSupportColor, this); + m_axis = InitItem(VColorRole::VisSupportColor, this); + m_hypotenuseP1 = InitPoint(VColorRole::VisSupportColor, this); + m_hypotenuseP2 = InitPoint(VColorRole::VisSupportColor, this); + m_foot1 = InitItem(VColorRole::VisSupportColor, this); + m_foot2 = InitItem(VColorRole::VisSupportColor, this); //-V656 + + m_point = InitPoint(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -64,56 +66,50 @@ void VisToolTriangle::RefreshGeometry() if (m_object1Id > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_object1Id); - DrawPoint(m_axisP1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_axisP1, static_cast(*first)); if (m_object2Id <= NULL_ID) { - DrawAimedAxis(m_axis, QLineF(static_cast(*first), ScenePos()), Color(VColor::SupportColor)); + DrawAimedAxis(m_axis, QLineF(static_cast(*first), ScenePos())); } else { const QSharedPointer second = GetData()->GeometricObject(m_object2Id); - DrawPoint(m_axisP2, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_axisP2, static_cast(*second)); - DrawAimedAxis(m_axis, QLineF(static_cast(*first), static_cast(*second)), - Color(VColor::SupportColor)); + DrawAimedAxis(m_axis, QLineF(static_cast(*first), static_cast(*second))); if (m_hypotenuseP1Id > NULL_ID) { const QSharedPointer third = GetData()->GeometricObject(m_hypotenuseP1Id); - DrawPoint(m_hypotenuseP1, static_cast(*third), Color(VColor::SupportColor)); + DrawPoint(m_hypotenuseP1, static_cast(*third)); if (m_hypotenuseP2Id <= NULL_ID) { - DrawLine(this, QLineF(static_cast(*third), ScenePos()), Color(VColor::SupportColor), - Qt::DashLine); + DrawLine(this, QLineF(static_cast(*third), ScenePos()), Qt::DashLine); QPointF trPoint; VToolTriangle::FindPoint(static_cast(*first), static_cast(*second), static_cast(*third), ScenePos(), &trPoint); - DrawPoint(m_point, trPoint, Color(VColor::MainColor)); + DrawPoint(m_point, trPoint); - DrawLine(m_foot1, QLineF(static_cast(*third), trPoint), Color(VColor::SupportColor), - Qt::DashLine); - DrawLine(m_foot2, QLineF(ScenePos(), trPoint), Color(VColor::SupportColor), Qt::DashLine); + DrawLine(m_foot1, QLineF(static_cast(*third), trPoint), Qt::DashLine); + DrawLine(m_foot2, QLineF(ScenePos(), trPoint), Qt::DashLine); } else { const QSharedPointer forth = GetData()->GeometricObject(m_hypotenuseP2Id); - DrawPoint(m_hypotenuseP2, static_cast(*forth), Color(VColor::SupportColor)); + DrawPoint(m_hypotenuseP2, static_cast(*forth)); - DrawLine(this, QLineF(static_cast(*third), static_cast(*forth)), - Color(VColor::SupportColor), Qt::DashLine); + DrawLine(this, QLineF(static_cast(*third), static_cast(*forth)), Qt::DashLine); QPointF trPoint; VToolTriangle::FindPoint(static_cast(*first), static_cast(*second), static_cast(*third), static_cast(*forth), &trPoint); - DrawPoint(m_point, trPoint, Color(VColor::MainColor)); + DrawPoint(m_point, trPoint); - DrawLine(m_foot1, QLineF(static_cast(*third), trPoint), Color(VColor::SupportColor), - Qt::DashLine); - DrawLine(m_foot2, QLineF(static_cast(*forth), trPoint), Color(VColor::SupportColor), - Qt::DashLine); + DrawLine(m_foot1, QLineF(static_cast(*third), trPoint), Qt::DashLine); + DrawLine(m_foot2, QLineF(static_cast(*forth), trPoint), Qt::DashLine); } } } @@ -128,13 +124,11 @@ void VisToolTriangle::VisualMode(quint32 id) } //--------------------------------------------------------------------------------------------------------------------- -void VisToolTriangle::DrawAimedAxis(VCurvePathItem *item, const QLineF &line, const QColor &color, - Qt::PenStyle style) +void VisToolTriangle::DrawAimedAxis(VCurvePathItem *item, const QLineF &line, Qt::PenStyle style) { - SCASSERT (item != nullptr) + SCASSERT(item != nullptr) QPen visPen = item->pen(); - visPen.setColor(color); visPen.setStyle(style); item->setPen(visPen); @@ -156,11 +150,11 @@ void VisToolTriangle::DrawAimedAxis(VCurvePathItem *item, const QLineF &line, co axis.setAngle(line.angle()); axis.setLength(arrow_step); - int steps = qFloor(line.length()/arrow_step); - for (int i=0; isetPath(path); item->setVisible(true); @@ -172,7 +166,7 @@ void VisToolTriangle::DrawArrow(const QLineF &axis, QPainterPath &path, const qr QLineF arrowPart1; arrowPart1.setP1(axis.p2()); arrowPart1.setLength(arrow_size); - arrowPart1.setAngle(axis.angle()+180+35); + arrowPart1.setAngle(axis.angle() + 180 + 35); path.moveTo(arrowPart1.p1()); path.lineTo(arrowPart1.p2()); @@ -180,7 +174,7 @@ void VisToolTriangle::DrawArrow(const QLineF &axis, QPainterPath &path, const qr QLineF arrowPart2; arrowPart2.setP1(axis.p2()); arrowPart2.setLength(arrow_size); - arrowPart2.setAngle(axis.angle()+180-35); + arrowPart2.setAngle(axis.angle() + 180 - 35); path.moveTo(arrowPart2.p1()); path.lineTo(arrowPart2.p2()); diff --git a/src/libs/vtools/visualization/line/vistooltriangle.h b/src/libs/vtools/visualization/line/vistooltriangle.h index bb66270b8..2e248265f 100644 --- a/src/libs/vtools/visualization/line/vistooltriangle.h +++ b/src/libs/vtools/visualization/line/vistooltriangle.h @@ -29,14 +29,12 @@ #ifndef VISTOOLTRIANGLE_H #define VISTOOLTRIANGLE_H - #include #include #include #include #include #include -#include #include #include "../vmisc/def.h" @@ -45,6 +43,7 @@ class VisToolTriangle : public VisLine { Q_OBJECT // NOLINT + public: explicit VisToolTriangle(const VContainer *data, QGraphicsItem *parent = nullptr); ~VisToolTriangle() override = default; @@ -57,26 +56,29 @@ public: void SetHypotenuseP1Id(quint32 value); void SetHypotenuseP2Id(quint32 value); - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::ToolTriangle)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ToolTriangle) + }; + private: // cppcheck-suppress unknownMacro Q_DISABLE_COPY_MOVE(VisToolTriangle) // NOLINT - quint32 m_object1Id{NULL_ID};//axis first point - quint32 m_object2Id{NULL_ID};//axis second point - quint32 m_hypotenuseP1Id{NULL_ID}; - quint32 m_hypotenuseP2Id{NULL_ID}; + quint32 m_object1Id{NULL_ID}; // axis first point + quint32 m_object2Id{NULL_ID}; // axis second point + quint32 m_hypotenuseP1Id{NULL_ID}; + quint32 m_hypotenuseP2Id{NULL_ID}; VScaledEllipse *m_point{nullptr}; VScaledEllipse *m_axisP1{nullptr}; VScaledEllipse *m_axisP2{nullptr}; VCurvePathItem *m_axis{nullptr}; VScaledEllipse *m_hypotenuseP1{nullptr}; VScaledEllipse *m_hypotenuseP2{nullptr}; - VScaledLine *m_foot1{nullptr}; - VScaledLine *m_foot2{nullptr}; + VScaledLine *m_foot1{nullptr}; + VScaledLine *m_foot2{nullptr}; - static void DrawAimedAxis(VCurvePathItem *item, const QLineF &line, const QColor &color, - Qt::PenStyle style = Qt::SolidLine); + static void DrawAimedAxis(VCurvePathItem *item, const QLineF &line, Qt::PenStyle style = Qt::SolidLine); static void DrawArrow(const QLineF &axis, QPainterPath &path, const qreal &arrow_size); }; diff --git a/src/libs/vtools/visualization/line/vistooltruedarts.cpp b/src/libs/vtools/visualization/line/vistooltruedarts.cpp index df48395d2..7607eca9f 100644 --- a/src/libs/vtools/visualization/line/vistooltruedarts.cpp +++ b/src/libs/vtools/visualization/line/vistooltruedarts.cpp @@ -32,32 +32,33 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" +#include "../vpatterndb/vcontainer.h" #include "visline.h" //--------------------------------------------------------------------------------------------------------------------- VisToolTrueDarts::VisToolTrueDarts(const VContainer *data, QGraphicsItem *parent) - :VisLine(data, parent) + : VisLine(data, parent) { - m_baseLineP1 = InitPoint(Color(VColor::SupportColor), this); - m_baseLineP2 = InitPoint(Color(VColor::SupportColor), this); - m_dartP1 = InitPoint(Color(VColor::SupportColor), this); - m_dartP2 = InitPoint(Color(VColor::SupportColor), this); - m_dartP3 = InitPoint(Color(VColor::SupportColor), this); + SetColorRole(VColorRole::VisSupportColor); - m_lineblP1P1 = InitItem(Color(VColor::SupportColor), this); - m_lineblP2P2 = InitItem(Color(VColor::SupportColor), this); - m_p1d2 = InitItem(Color(VColor::SupportColor), this); - m_d2p2 = InitItem(Color(VColor::SupportColor), this); + m_baseLineP1 = InitPoint(VColorRole::VisSupportColor, this); + m_baseLineP2 = InitPoint(VColorRole::VisSupportColor, this); + m_dartP1 = InitPoint(VColorRole::VisSupportColor, this); + m_dartP2 = InitPoint(VColorRole::VisSupportColor, this); + m_dartP3 = InitPoint(VColorRole::VisSupportColor, this); - m_point1 = InitPoint(Color(VColor::MainColor), this); - m_point2 = InitPoint(Color(VColor::MainColor), this); //-V656 + m_lineblP1P1 = InitItem(VColorRole::VisSupportColor, this); + m_lineblP2P2 = InitItem(VColorRole::VisSupportColor, this); + m_p1d2 = InitItem(VColorRole::VisSupportColor, this); + m_d2p2 = InitItem(VColorRole::VisSupportColor, this); + + m_point1 = InitPoint(VColorRole::VisMainColor, this); + m_point2 = InitPoint(VColorRole::VisMainColor, this); //-V656 } //--------------------------------------------------------------------------------------------------------------------- @@ -66,46 +67,42 @@ void VisToolTrueDarts::RefreshGeometry() if (m_baseLineP1Id > NULL_ID) { const QSharedPointer blP1 = GetData()->GeometricObject(m_baseLineP1Id); - DrawPoint(m_baseLineP1, static_cast(*blP1), Color(VColor::SupportColor)); + DrawPoint(m_baseLineP1, static_cast(*blP1)); if (m_baseLineP2Id <= NULL_ID) { - DrawLine(this, QLineF(static_cast(*blP1), ScenePos()), Color(VColor::SupportColor), Qt::DashLine); + DrawLine(this, QLineF(static_cast(*blP1), ScenePos()), Qt::DashLine); } else { const QSharedPointer blP2 = GetData()->GeometricObject(m_baseLineP2Id); - DrawPoint(m_baseLineP2, static_cast(*blP2), Color(VColor::SupportColor)); - DrawLine(this, QLineF(static_cast(*blP1), static_cast(*blP2)), - Color(VColor::SupportColor), Qt::DashLine); + DrawPoint(m_baseLineP2, static_cast(*blP2)); + DrawLine(this, QLineF(static_cast(*blP1), static_cast(*blP2)), Qt::DashLine); if (m_dartP1Id > NULL_ID) { const QSharedPointer d1 = GetData()->GeometricObject(m_dartP1Id); - DrawPoint(m_dartP1, static_cast(*d1), Color(VColor::SupportColor)); + DrawPoint(m_dartP1, static_cast(*d1)); if (m_dartP2Id <= NULL_ID) { - DrawLine(m_p1d2, QLineF(static_cast(*d1), ScenePos()), - Color(VColor::SupportColor)); + DrawLine(m_p1d2, QLineF(static_cast(*d1), ScenePos())); } else { const QSharedPointer d2 = GetData()->GeometricObject(m_dartP2Id); - DrawPoint(m_dartP2, static_cast(*d2), Color(VColor::SupportColor)); - DrawLine(m_p1d2, QLineF(static_cast(*d1), static_cast(*d2)), - Color(VColor::SupportColor)); + DrawPoint(m_dartP2, static_cast(*d2)); + DrawLine(m_p1d2, QLineF(static_cast(*d1), static_cast(*d2))); if (m_dartP3Id <= NULL_ID) { - DrawLine(m_d2p2, QLineF(static_cast(*d2), ScenePos()), Color(VColor::SupportColor)); + DrawLine(m_d2p2, QLineF(static_cast(*d2), ScenePos())); } else { const QSharedPointer d3 = GetData()->GeometricObject(m_dartP3Id); - DrawPoint(m_dartP3, static_cast(*d3), Color(VColor::SupportColor)); - DrawLine(m_d2p2, QLineF(static_cast(*d2), static_cast(*d3)), - Color(VColor::SupportColor)); + DrawPoint(m_dartP3, static_cast(*d3)); + DrawLine(m_d2p2, QLineF(static_cast(*d2), static_cast(*d3))); QPointF p1; QPointF p2; @@ -113,13 +110,13 @@ void VisToolTrueDarts::RefreshGeometry() static_cast(*d1), static_cast(*d2), static_cast(*d3), p1, p2); - DrawLine(m_lineblP1P1, QLineF(static_cast(*blP1), p1), Color(VColor::SupportColor)); - DrawLine(m_lineblP2P2, QLineF(static_cast(*blP2), p2), Color(VColor::SupportColor)); - DrawLine(m_p1d2, QLineF(p1, static_cast(*d2)), Color(VColor::SupportColor)); - DrawLine(m_d2p2, QLineF(static_cast(*d2), p2), Color(VColor::SupportColor)); + DrawLine(m_lineblP1P1, QLineF(static_cast(*blP1), p1)); + DrawLine(m_lineblP2P2, QLineF(static_cast(*blP2), p2)); + DrawLine(m_p1d2, QLineF(p1, static_cast(*d2))); + DrawLine(m_d2p2, QLineF(static_cast(*d2), p2)); - DrawPoint(m_point1, p1, Color(VColor::MainColor)); - DrawPoint(m_point2, p2, Color(VColor::MainColor)); + DrawPoint(m_point1, p1); + DrawPoint(m_point2, p2); } } } diff --git a/src/libs/vtools/visualization/path/vispath.cpp b/src/libs/vtools/visualization/path/vispath.cpp index df85a2635..4d611cd21 100644 --- a/src/libs/vtools/visualization/path/vispath.cpp +++ b/src/libs/vtools/visualization/path/vispath.cpp @@ -30,16 +30,16 @@ #include -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" +#include "../vpatterndb/vcontainer.h" #include "../vwidgets/vsimplepoint.h" //--------------------------------------------------------------------------------------------------------------------- VisPath::VisPath(const VContainer *data, QGraphicsItem *parent) - : Visualization(data), - VCurvePathItem(parent) + : Visualization(data), + VCurvePathItem(VColorRole::VisMainColor, parent) { - setZValue(1);// Show on top real tool + setZValue(1); // Show on top real tool VisPath::InitPen(); } @@ -47,9 +47,7 @@ VisPath::VisPath(const VContainer *data, QGraphicsItem *parent) void VisPath::InitPen() { QPen visPen = pen(); - visPen.setColor(Color(VColor::MainColor)); visPen.setStyle(LineStyle()); - setPen(visPen); } @@ -60,14 +58,14 @@ void VisPath::AddOnScene() } //--------------------------------------------------------------------------------------------------------------------- -auto VisPath::GetPoint(QVector &points, quint32 i, const QColor &color) -> VSimplePoint * +auto VisPath::GetPoint(QVector &points, quint32 i, VColorRole role) -> VSimplePoint * { if (not points.isEmpty() && static_cast(points.size() - 1) >= i) { return points.at(static_cast(i)); } - auto *point = new VSimplePoint(NULL_ID, color); + auto *point = new VSimplePoint(NULL_ID, role); point->SetPointHighlight(true); point->setParentItem(this); point->SetVisualizationMode(true); diff --git a/src/libs/vtools/visualization/path/vispath.h b/src/libs/vtools/visualization/path/vispath.h index e7c12ceab..b1d1b6804 100644 --- a/src/libs/vtools/visualization/path/vispath.h +++ b/src/libs/vtools/visualization/path/vispath.h @@ -29,7 +29,6 @@ #ifndef VISPATH_H #define VISPATH_H - #include #include #include @@ -45,21 +44,27 @@ class VSimplePoint; class VisPath : public Visualization, public VCurvePathItem { Q_OBJECT // NOLINT + public: explicit VisPath(const VContainer *data, QGraphicsItem *parent = nullptr); ~VisPath() override = default; void SetApproximationScale(qreal approximationScale); - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::Path)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::Path) + }; + protected: void InitPen() override; void AddOnScene() override; - auto GetPoint(QVector &points, quint32 i, const QColor &color) -> VSimplePoint *; + auto GetPoint(QVector &points, quint32 i, VColorRole role) -> VSimplePoint *; auto ApproximationScale() const -> qreal; + private: Q_DISABLE_COPY_MOVE(VisPath) // NOLINT diff --git a/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp b/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp index ae0916562..f53dc0ebc 100644 --- a/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp +++ b/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp @@ -27,9 +27,9 @@ *************************************************************************/ #include "vispiecespecialpoints.h" -#include "../vwidgets/vsimplepoint.h" #include "../vgeometry/vpointf.h" #include "../vpatterndb/vcontainer.h" +#include "../vwidgets/vsimplepoint.h" namespace { @@ -42,15 +42,13 @@ auto RectPath(const QRectF &rect) -> QPainterPath } return path; } -} // namespace +} // namespace //--------------------------------------------------------------------------------------------------------------------- VisPieceSpecialPoints::VisPieceSpecialPoints(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent) + : VisPath(data, parent) { - SetColor(VColor::SupportColor2, Qt::darkGreen); - - m_rectItem = InitItem(Color(VColor::SupportColor2), this); + m_rectItem = InitItem(VColorRole::VisSupportColor2, this); m_rectItem->SetWidth(VAbstractApplication::VApp()->Settings()->WidthHairLine()); } @@ -61,7 +59,7 @@ void VisPieceSpecialPoints::RefreshGeometry() for (int i = 0; i < m_spoints.size(); ++i) { - VSimplePoint *point = GetPoint(static_cast(i), Color(VColor::SupportColor)); + VSimplePoint *point = GetPoint(static_cast(i), VColorRole::VisSupportColor); // Keep first, you can hide only objects those have shape point->RefreshPointGeometry(*GetData()->GeometricObject(m_spoints.at(i))); point->SetOnlyPoint(false); @@ -69,7 +67,7 @@ void VisPieceSpecialPoints::RefreshGeometry() if (m_showRect) { - DrawPath(m_rectItem, RectPath(m_placeLabelRect), Color(VColor::SupportColor2), Qt::SolidLine, Qt::RoundCap); + DrawPath(m_rectItem, RectPath(m_placeLabelRect), Qt::SolidLine, Qt::RoundCap); } } } @@ -82,9 +80,9 @@ void VisPieceSpecialPoints::VisualMode(quint32 id) } //--------------------------------------------------------------------------------------------------------------------- -auto VisPieceSpecialPoints::GetPoint(quint32 i, const QColor &color) -> VSimplePoint * +auto VisPieceSpecialPoints::GetPoint(quint32 i, VColorRole role) -> VSimplePoint * { - return VisPath::GetPoint(m_points, i, color); + return VisPath::GetPoint(m_points, i, role); } //--------------------------------------------------------------------------------------------------------------------- @@ -98,4 +96,3 @@ void VisPieceSpecialPoints::HideAllItems() } } } - diff --git a/src/libs/vtools/visualization/path/vispiecespecialpoints.h b/src/libs/vtools/visualization/path/vispiecespecialpoints.h index a1c80fe66..5ee4dfe5a 100644 --- a/src/libs/vtools/visualization/path/vispiecespecialpoints.h +++ b/src/libs/vtools/visualization/path/vispiecespecialpoints.h @@ -57,7 +57,7 @@ private: QRectF m_placeLabelRect{}; VCurvePathItem *m_rectItem{nullptr}; - auto GetPoint(quint32 i, const QColor &color) -> VSimplePoint *; + auto GetPoint(quint32 i, VColorRole role) -> VSimplePoint *; void HideAllItems(); }; diff --git a/src/libs/vtools/visualization/path/vistoolarc.cpp b/src/libs/vtools/visualization/path/vistoolarc.cpp index d55299cfe..f0023f8ec 100644 --- a/src/libs/vtools/visualization/path/vistoolarc.cpp +++ b/src/libs/vtools/visualization/path/vistoolarc.cpp @@ -31,28 +31,26 @@ #include #include #include -#include -#include #include +#include #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" +#include "../vgeometry/vgeometrydef.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" #include "../vmisc/def.h" -#include "qnamespace.h" -#include "../vgeometry/vgeometrydef.h" -#include "vispath.h" -#include "../vwidgets/scalesceneitems.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "../vwidgets/scalesceneitems.h" +#include "vispath.h" //--------------------------------------------------------------------------------------------------------------------- VisToolArc::VisToolArc(const VContainer *data, QGraphicsItem *parent) - :VisPath(data, parent) + : VisPath(data, parent) { - m_arcCenter = InitPoint(Color(VColor::MainColor), this); - m_f1Point = InitPoint(Color(VColor::SupportColor), this); + m_arcCenter = InitPoint(VColorRole::VisSupportColor, this); + m_f1Point = InitPoint(VColorRole::VisSupportColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -63,7 +61,7 @@ void VisToolArc::RefreshGeometry() m_f1Point->setVisible(false); const QSharedPointer first = GetData()->GeometricObject(m_centerId); - DrawPoint(m_arcCenter, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_arcCenter, static_cast(*first)); if (GetMode() == Mode::Creation) { @@ -85,28 +83,27 @@ void VisToolArc::RefreshGeometry() if (qFuzzyIsNull(m_radius)) { - VArc arc = VArc (*first, r.length(), r.angle(), r.angle()); + VArc arc = VArc(*first, r.length(), r.angle(), r.angle()); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), QVector(), Color(VColor::SupportColor), Qt::DashLine, - Qt::RoundCap); + DrawPath(this, arc.GetPath(), QVector(), Qt::DashLine, Qt::RoundCap); SetToolTip(tr("Arc: radius = %1%2; " "Mouse click - finish selecting the radius, " - "%3 - skip").arg(LengthToUser(r.length()), prefix, VModifierKey::EnterKey())); + "%3 - skip") + .arg(LengthToUser(r.length()), prefix, VModifierKey::EnterKey())); } else if (m_f1 < 0) { qreal f1Angle = Angle(); - VArc arc = VArc (*first, m_radius, f1Angle, f1Angle); + VArc arc = VArc(*first, m_radius, f1Angle, f1Angle); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), QVector(), Color(VColor::SupportColor), Qt::DashLine, - Qt::RoundCap); + DrawPath(this, arc.GetPath(), QVector(), Qt::DashLine, Qt::RoundCap); QLineF f1Line = r; f1Line.setLength(m_radius); f1Line.setAngle(f1Angle); - DrawPoint(m_f1Point, f1Line.p2(), Color(VColor::SupportColor)); + DrawPoint(m_f1Point, f1Line.p2()); SetToolTip(tr("Arc: radius = %1%2, first angle = %3°; " "Mouse click - finish selecting the first angle, " @@ -118,10 +115,9 @@ void VisToolArc::RefreshGeometry() else if (m_f1 >= 0) { qreal f2Angle = StickyEnd(Angle()); - VArc arc = VArc (*first, m_radius, m_f1, f2Angle); + VArc arc = VArc(*first, m_radius, m_f1, f2Angle); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), arc.DirectionArrows(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, arc.GetPath(), arc.DirectionArrows(), LineStyle(), Qt::RoundCap); SetToolTip(tr("Arc: radius = %1%2, first angle = %3°, second angle = %4°; " "Mouse click - finish creating, " @@ -136,15 +132,13 @@ void VisToolArc::RefreshGeometry() { if (not qFuzzyIsNull(m_radius) && m_f1 >= 0 && m_f2 >= 0) { - VArc arc = VArc (*first, m_radius, m_f1, m_f2); + VArc arc = VArc(*first, m_radius, m_f1, m_f2); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), arc.DirectionArrows(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, arc.GetPath(), arc.DirectionArrows(), LineStyle(), Qt::RoundCap); } else { - DrawPath(this, QPainterPath(), QVector(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, QPainterPath(), QVector(), LineStyle(), Qt::RoundCap); } } } diff --git a/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp b/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp index bd3c9234c..6deaeadf8 100644 --- a/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp +++ b/src/libs/vtools/visualization/path/vistoolarcwithlength.cpp @@ -31,25 +31,24 @@ #include #include #include -#include -#include #include +#include #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" +#include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" #include "../vwidgets/scalesceneitems.h" #include "vispath.h" -#include "../vmisc/vmodifierkey.h" //--------------------------------------------------------------------------------------------------------------------- VisToolArcWithLength::VisToolArcWithLength(const VContainer *data, QGraphicsItem *parent) - :VisPath(data, parent) + : VisPath(data, parent) { - m_arcCenter = InitPoint(Color(VColor::MainColor), this); - m_f1Point = InitPoint(Color(VColor::SupportColor), this); + m_arcCenter = InitPoint(VColorRole::VisSupportColor, this); + m_f1Point = InitPoint(VColorRole::VisSupportColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -60,7 +59,7 @@ void VisToolArcWithLength::RefreshGeometry() m_f1Point->setVisible(false); const QSharedPointer first = GetData()->GeometricObject(m_centerId); - DrawPoint(m_arcCenter, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_arcCenter, static_cast(*first)); if (GetMode() == Mode::Creation) { @@ -82,28 +81,27 @@ void VisToolArcWithLength::RefreshGeometry() if (qFuzzyIsNull(m_radius)) { - VArc arc = VArc (*first, r.length(), r.angle(), r.angle()); + VArc arc = VArc(*first, r.length(), r.angle(), r.angle()); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), QVector(), Color(VColor::SupportColor), Qt::DashLine, - Qt::RoundCap); + DrawPath(this, arc.GetPath(), QVector(), Qt::DashLine, Qt::RoundCap); SetToolTip(tr("Arc: radius = %1%2; " "Mouse click - finish selecting the radius, " - "%3 - skip").arg(LengthToUser(r.length()), prefix, VModifierKey::EnterKey())); + "%3 - skip") + .arg(LengthToUser(r.length()), prefix, VModifierKey::EnterKey())); } else if (m_f1 < 0) { qreal f1Angle = Angle(); - VArc arc = VArc (*first, m_radius, f1Angle, f1Angle); + VArc arc = VArc(*first, m_radius, f1Angle, f1Angle); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), QVector(), Color(VColor::SupportColor), Qt::DashLine, - Qt::RoundCap); + DrawPath(this, arc.GetPath(), QVector(), Qt::DashLine, Qt::RoundCap); QLineF f1Line = r; f1Line.setLength(m_radius); f1Line.setAngle(f1Angle); - DrawPoint(m_f1Point, f1Line.p2(), Color(VColor::SupportColor)); + DrawPoint(m_f1Point, f1Line.p2()); SetToolTip(tr("Arc: radius = %1%2, first angle = %3°; " "Mouse click - finish selecting the first angle, " @@ -114,10 +112,9 @@ void VisToolArcWithLength::RefreshGeometry() } else if (m_f1 >= 0) { - VArc arc = VArc (*first, m_radius, m_f1, r.angle()); + VArc arc = VArc(*first, m_radius, m_f1, r.angle()); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), arc.DirectionArrows(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, arc.GetPath(), arc.DirectionArrows(), LineStyle(), Qt::RoundCap); SetToolTip(tr("Arc: radius = %1%2, first angle = %3°, arc length = %4%2; " "Mouse click - finish creating, " @@ -130,15 +127,13 @@ void VisToolArcWithLength::RefreshGeometry() { if (not qFuzzyIsNull(m_radius) && m_f1 >= 0 && not qFuzzyIsNull(m_length)) { - VArc arc = VArc (m_length, *first, m_radius, m_f1); + VArc arc = VArc(m_length, *first, m_radius, m_f1); arc.SetApproximationScale(ApproximationScale()); - DrawPath(this, arc.GetPath(), arc.DirectionArrows(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, arc.GetPath(), arc.DirectionArrows(), LineStyle(), Qt::RoundCap); } else { - DrawPath(this, QPainterPath(), QVector(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, QPainterPath(), QVector(), LineStyle(), Qt::RoundCap); } } } @@ -175,8 +170,8 @@ auto VisToolArcWithLength::CorrectAngle(qreal angle) -> qreal qreal ang = angle; if (angle > 360) { - ang = angle - 360.0 * qFloor(angle/360); + ang = angle - 360.0 * qFloor(angle / 360); } - return (qFloor(qAbs(ang)/5.)) * 5; + return (qFloor(qAbs(ang) / 5.)) * 5; } diff --git a/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp b/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp index b033eebfc..f7f7bc984 100644 --- a/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp +++ b/src/libs/vtools/visualization/path/vistoolcubicbezier.cpp @@ -33,28 +33,27 @@ #include #include #include -#include #include #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vcubicbezier.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "vispath.h" +#include "../vpatterndb/vcontainer.h" #include "../vwidgets/scalesceneitems.h" +#include "vispath.h" //--------------------------------------------------------------------------------------------------------------------- VisToolCubicBezier::VisToolCubicBezier(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent) + : VisPath(data, parent) { - m_helpLine1 = InitItem(Color(VColor::MainColor), this); - m_helpLine2 = InitItem(Color(VColor::MainColor), this); + m_helpLine1 = InitItem(VColorRole::VisMainColor, this); + m_helpLine2 = InitItem(VColorRole::VisMainColor, this); - m_point1 = InitPoint(Color(VColor::SupportColor), this); - m_point2 = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_point3 = InitPoint(Color(VColor::SupportColor), this); //-V656 - m_point4 = InitPoint(Color(VColor::SupportColor), this); //-V656 + m_point1 = InitPoint(VColorRole::VisSupportColor, this); + m_point2 = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_point3 = InitPoint(VColorRole::VisSupportColor, this); //-V656 + m_point4 = InitPoint(VColorRole::VisSupportColor, this); //-V656 } //--------------------------------------------------------------------------------------------------------------------- @@ -67,46 +66,42 @@ void VisToolCubicBezier::RefreshGeometry() if (m_point2Id <= NULL_ID) { - DrawLine(m_helpLine1, QLineF(static_cast(*first), ScenePos()), Color(VColor::MainColor), - Qt::DashLine); + DrawLine(m_helpLine1, QLineF(static_cast(*first), ScenePos()), Qt::DashLine); } else { const auto second = GetData()->GeometricObject(m_point2Id); - DrawPoint(m_point2, static_cast(*second), Color(VColor::SupportColor)); - DrawLine(m_helpLine1, QLineF(static_cast(*first), static_cast(*second)), - Color(VColor::MainColor), Qt::DashLine); + DrawPoint(m_point2, static_cast(*second)); + DrawLine(m_helpLine1, QLineF(static_cast(*first), static_cast(*second)), Qt::DashLine); if (m_point3Id <= NULL_ID) { VCubicBezier spline(*first, *second, VPointF(ScenePos()), VPointF(ScenePos())); spline.SetApproximationScale(ApproximationScale()); - DrawPath(this, spline.GetPath(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); + DrawPath(this, spline.GetPath(), LineStyle(), Qt::RoundCap); } else { const auto third = GetData()->GeometricObject(m_point3Id); - DrawPoint(m_point3, static_cast(*third), Color(VColor::SupportColor)); + DrawPoint(m_point3, static_cast(*third)); if (m_point4Id <= NULL_ID) { - VCubicBezier spline(*first, *second, *third, VPointF(ScenePos())); + VCubicBezier spline(*first, *second, *third, VPointF(ScenePos())); spline.SetApproximationScale(ApproximationScale()); - DrawPath(this, spline.GetPath(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); - DrawLine(m_helpLine2, QLineF(static_cast(*third), ScenePos()), Color(VColor::MainColor), - Qt::DashLine); + DrawPath(this, spline.GetPath(), LineStyle(), Qt::RoundCap); + DrawLine(m_helpLine2, QLineF(static_cast(*third), ScenePos()), Qt::DashLine); } else { const auto fourth = GetData()->GeometricObject(m_point4Id); - DrawPoint(m_point4, static_cast(*fourth), Color(VColor::SupportColor)); + DrawPoint(m_point4, static_cast(*fourth)); DrawLine(m_helpLine2, QLineF(static_cast(*fourth), static_cast(*third)), - Color(VColor::MainColor), Qt::DashLine); + Qt::DashLine); - VCubicBezier spline(*first, *second, *third, *fourth); + VCubicBezier spline(*first, *second, *third, *fourth); spline.SetApproximationScale(ApproximationScale()); - DrawPath(this, spline.GetPath(), spline.DirectionArrows(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, spline.GetPath(), spline.DirectionArrows(), LineStyle(), Qt::RoundCap); } } } diff --git a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp index 00a5e63dc..b05e5f0de 100644 --- a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp +++ b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp @@ -33,26 +33,26 @@ #include #include #include -#include #include #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" #include "../visualization.h" -#include "vispath.h" -#include "../vwidgets/scalesceneitems.h" -#include "../vmisc/vmodifierkey.h" #include "../vmisc/compatibility.h" +#include "../vmisc/vmodifierkey.h" +#include "../vwidgets/scalesceneitems.h" +#include "theme/themeDef.h" +#include "vispath.h" //--------------------------------------------------------------------------------------------------------------------- VisToolCubicBezierPath::VisToolCubicBezierPath(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent) + : VisPath(data, parent) { - helpLine1 = InitItem(Color(VColor::MainColor), this); - helpLine2 = InitItem(Color(VColor::MainColor), this); + helpLine1 = InitItem(VColorRole::VisMainColor, this); + helpLine2 = InitItem(VColorRole::VisMainColor, this); - newCurveSegment = InitItem(Color(VColor::MainColor), this); + newCurveSegment = InitItem(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -73,47 +73,50 @@ void VisToolCubicBezierPath::RefreshGeometry() for (vsizetype i = 0; i < size; ++i) { - VScaledEllipse *point = this->GetPoint(mainPoints, static_cast(i), 1/*zValue*/); - DrawPoint(point, static_cast(pathPoints.at(i)), Color(VColor::SupportColor)); + VScaledEllipse *point = + this->GetPoint(mainPoints, static_cast(i), VColorRole::VisSupportColor, 1 /*zValue*/); + DrawPoint(point, static_cast(pathPoints.at(i))); } if (GetMode() == Mode::Creation) { if (countSubSpl < 1) { - Creating(pathPoints, size-1); + Creating(pathPoints, size - 1); } else { const vsizetype last = VCubicBezierPath::SubSplOffset(countSubSpl) + 3; - Creating(pathPoints, size-1-last); + Creating(pathPoints, size - 1 - last); } } if (countSubSpl >= 1) { - DrawPath(this, path.GetPath(), path.DirectionArrows(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); + DrawPath(this, path.GetPath(), path.DirectionArrows(), LineStyle(), Qt::RoundCap); - for (vsizetype i = 1; i<=countSubSpl; ++i) + for (vsizetype i = 1; i <= countSubSpl; ++i) { const vsizetype preLastPoint = (countSubSpl - 1) * 2; const vsizetype lastPoint = preLastPoint + 1; const VSpline spl = path.GetSpline(i); - VScaledLine *ctrlLine1 = this->GetLine(static_cast(preLastPoint)); + VScaledLine *ctrlLine1 = this->GetLine(static_cast(preLastPoint), VColorRole::VisMainColor); DrawLine(ctrlLine1, QLineF(static_cast(spl.GetP1()), static_cast(spl.GetP2())), - Color(VColor::MainColor), Qt::DashLine); + Qt::DashLine); - VScaledEllipse *p2 = this->GetPoint(ctrlPoints, static_cast(preLastPoint)); - DrawPoint(p2, static_cast(spl.GetP2()), Qt::green); + VScaledEllipse *p2 = + this->GetPoint(ctrlPoints, static_cast(preLastPoint), VColorRole::VisSupportColor2); + DrawPoint(p2, static_cast(spl.GetP2())); - VScaledLine *ctrlLine2 = this->GetLine(static_cast(lastPoint)); + VScaledLine *ctrlLine2 = this->GetLine(static_cast(lastPoint), VColorRole::VisMainColor); DrawLine(ctrlLine2, QLineF(static_cast(spl.GetP4()), static_cast(spl.GetP3())), - Color(VColor::MainColor), Qt::DashLine); + Qt::DashLine); - VScaledEllipse *p3 = this->GetPoint(ctrlPoints, static_cast(lastPoint)); - DrawPoint(p3, static_cast(spl.GetP3()), Qt::green); + VScaledEllipse *p3 = + this->GetPoint(ctrlPoints, static_cast(lastPoint), VColorRole::VisSupportColor2); + DrawPoint(p3, static_cast(spl.GetP3())); } } @@ -137,27 +140,28 @@ void VisToolCubicBezierPath::SetPath(const VCubicBezierPath &value) } //--------------------------------------------------------------------------------------------------------------------- -auto VisToolCubicBezierPath::GetPoint(QVector &points, quint32 i, qreal z) -> VScaledEllipse * +auto VisToolCubicBezierPath::GetPoint(QVector &points, quint32 i, VColorRole role, qreal z) + -> VScaledEllipse * { if (not points.isEmpty() && static_cast(points.size() - 1) >= i) { return points.at(static_cast(i)); } - auto *point = InitPoint(Color(VColor::SupportColor), this, z); + auto *point = InitPoint(role, this, z); points.append(point); return point; } //--------------------------------------------------------------------------------------------------------------------- -auto VisToolCubicBezierPath::GetLine(quint32 i) -> VScaledLine * +auto VisToolCubicBezierPath::GetLine(quint32 i, VColorRole role) -> VScaledLine * { if (static_cast(lines.size() - 1) >= i && not lines.isEmpty()) { return lines.at(static_cast(i)); } - auto *line = InitItem(Color(VColor::MainColor), this); + auto *line = InitItem(role, this); lines.append(line); return line; } @@ -166,7 +170,7 @@ auto VisToolCubicBezierPath::GetLine(quint32 i) -> VScaledLine * void VisToolCubicBezierPath::Creating(const QVector &pathPoints, vsizetype pointsLeft) { const vsizetype size = pathPoints.size(); - if (pathPoints.isEmpty() || size+1 < pointsLeft) + if (pathPoints.isEmpty() || size + 1 < pointsLeft) { return; } @@ -175,10 +179,10 @@ void VisToolCubicBezierPath::Creating(const QVector &pathPoints, vsizet const vsizetype subSplCount = VCubicBezierPath::CountSubSpl(size); if (subSplCount >= 1) { - subSplPoints = VCubicBezierPath::SubSplPointsCount(subSplCount)-1; + subSplPoints = VCubicBezierPath::SubSplPointsCount(subSplCount) - 1; } - switch(pointsLeft) + switch (pointsLeft) { case 0: { @@ -186,75 +190,77 @@ void VisToolCubicBezierPath::Creating(const QVector &pathPoints, vsizet if (pathPoints.size() >= 4) { QLineF p1p2(static_cast(p1), ScenePos()); - QLineF prP3p1(static_cast(pathPoints.at(size-2)), static_cast(p1)); + QLineF prP3p1(static_cast(pathPoints.at(size - 2)), static_cast(p1)); p1p2.setAngle(prP3p1.angle()); const QPointF p2 = p1p2.p2(); VSpline spline(p1, p2, ScenePos(), VPointF(ScenePos())); - DrawPath(newCurveSegment, spline.GetPath(), Color(VColor::MainColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(newCurveSegment, spline.GetPath(), Qt::SolidLine, Qt::RoundCap); - DrawLine(helpLine1, p1p2, Color(VColor::MainColor), Qt::DashLine); + DrawLine(helpLine1, p1p2, Qt::DashLine); const vsizetype preLastPoint = subSplCount * 2; - VScaledEllipse *p2Ctrl = this->GetPoint(ctrlPoints, static_cast(preLastPoint)); - DrawPoint(p2Ctrl, p2, Qt::green); + VScaledEllipse *p2Ctrl = + this->GetPoint(ctrlPoints, static_cast(preLastPoint), VColorRole::VisSupportColor2); + DrawPoint(p2Ctrl, p2); } else { - DrawLine(helpLine1, QLineF(static_cast(p1), ScenePos()), Color(VColor::MainColor), - Qt::DashLine); + DrawLine(helpLine1, QLineF(static_cast(p1), ScenePos()), Qt::DashLine); } break; } case 1: { - const VPointF& p1 = pathPoints.at(subSplPoints + pointsLeft-1); + const VPointF &p1 = pathPoints.at(subSplPoints + pointsLeft - 1); auto p2 = static_cast(pathPoints.at(subSplPoints + pointsLeft)); if (subSplCount >= 1) { QLineF p1p2(static_cast(p1), p2); - QLineF prP3p1(static_cast(pathPoints.at(subSplPoints + pointsLeft-2)), + QLineF prP3p1(static_cast(pathPoints.at(subSplPoints + pointsLeft - 2)), static_cast(p1)); p1p2.setAngle(prP3p1.angle()); p2 = p1p2.p2(); } - DrawLine(helpLine1, QLineF(static_cast(p1), p2), Color(VColor::MainColor), Qt::DashLine); + DrawLine(helpLine1, QLineF(static_cast(p1), p2), Qt::DashLine); VSpline spline(p1, p2, ScenePos(), VPointF(ScenePos())); - DrawPath(newCurveSegment, spline.GetPath(), Color(VColor::MainColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(newCurveSegment, spline.GetPath(), Qt::SolidLine, Qt::RoundCap); const vsizetype preLastPoint = subSplCount * 2; - VScaledEllipse *p2Ctrl = this->GetPoint(ctrlPoints, static_cast(preLastPoint)); - DrawPoint(p2Ctrl, p2, Qt::green); + VScaledEllipse *p2Ctrl = + this->GetPoint(ctrlPoints, static_cast(preLastPoint), VColorRole::VisSupportColor2); + DrawPoint(p2Ctrl, p2); break; } case 2: { - const VPointF& p1 = pathPoints.at(subSplPoints + pointsLeft-2); - auto p2 = static_cast(pathPoints.at(subSplPoints + pointsLeft-1)); + const VPointF &p1 = pathPoints.at(subSplPoints + pointsLeft - 2); + auto p2 = static_cast(pathPoints.at(subSplPoints + pointsLeft - 1)); const QPointF p3 = static_cast(pathPoints.at(subSplPoints + pointsLeft)); if (subSplCount >= 1) { QLineF p1p2(static_cast(p1), p2); - QLineF prP3p1(static_cast(pathPoints.at(subSplPoints + pointsLeft-3)), + QLineF prP3p1(static_cast(pathPoints.at(subSplPoints + pointsLeft - 3)), static_cast(p1)); p1p2.setAngle(prP3p1.angle()); p2 = p1p2.p2(); } - DrawLine(helpLine1, QLineF(static_cast(p1), p2), Color(VColor::MainColor), Qt::DashLine); - DrawLine(helpLine2, QLineF(p3, ScenePos()), Color(VColor::MainColor), Qt::DashLine); + DrawLine(helpLine1, QLineF(static_cast(p1), p2), Qt::DashLine); + DrawLine(helpLine2, QLineF(p3, ScenePos()), Qt::DashLine); VSpline spline(p1, p2, p3, VPointF(ScenePos())); - DrawPath(newCurveSegment, spline.GetPath(), Color(VColor::MainColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(newCurveSegment, spline.GetPath(), Qt::SolidLine, Qt::RoundCap); const vsizetype preLastPoint = subSplCount * 2; - VScaledEllipse *p2Ctrl = this->GetPoint(ctrlPoints, static_cast(preLastPoint)); - DrawPoint(p2Ctrl, p2, Qt::green); + VScaledEllipse *p2Ctrl = + this->GetPoint(ctrlPoints, static_cast(preLastPoint), VColorRole::VisSupportColor2); + DrawPoint(p2Ctrl, p2); break; } default: @@ -277,7 +283,8 @@ void VisToolCubicBezierPath::RefreshToolTip() else if (size - VCubicBezierPath::SubSplPointsCount(countSubSpl) == 0) { SetToolTip(tr("Curved path: select seven or more points, " - "%1 - finish creation").arg(VModifierKey::EnterKey())); + "%1 - finish creation") + .arg(VModifierKey::EnterKey())); } else { diff --git a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.h b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.h index fa7e6d9cd..2af8b3ce4 100644 --- a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.h +++ b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.h @@ -29,7 +29,6 @@ #ifndef VISTOOLCUBICBEZIERPATH_H #define VISTOOLCUBICBEZIERPATH_H - #include #include #include @@ -44,6 +43,7 @@ class VisToolCubicBezierPath : public VisPath { Q_OBJECT // NOLINT + public: explicit VisToolCubicBezierPath(const VContainer *data, QGraphicsItem *parent = nullptr); ~VisToolCubicBezierPath() override; @@ -54,21 +54,25 @@ public: void SetPath(const VCubicBezierPath &value); auto GetPath() const -> VCubicBezierPath; - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::ToolCubicBezierPath)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ToolCubicBezierPath) + }; + private: Q_DISABLE_COPY_MOVE(VisToolCubicBezierPath) // NOLINT - QVector mainPoints{}; - QVector ctrlPoints{}; - QVector lines{}; - VCurvePathItem *newCurveSegment{nullptr}; - VCubicBezierPath path{}; - VScaledLine *helpLine1{nullptr}; - VScaledLine *helpLine2{nullptr}; + QVector mainPoints{}; + QVector ctrlPoints{}; + QVector lines{}; + VCurvePathItem *newCurveSegment{nullptr}; + VCubicBezierPath path{}; + VScaledLine *helpLine1{nullptr}; + VScaledLine *helpLine2{nullptr}; - auto GetPoint(QVector &points, quint32 i, qreal z = 0) -> VScaledEllipse *; - auto GetLine(quint32 i) -> VScaledLine *; - void Creating(const QVector &pathPoints , vsizetype pointsLeft); + auto GetPoint(QVector &points, quint32 i, VColorRole role, qreal z = 0) -> VScaledEllipse *; + auto GetLine(quint32 i, VColorRole role) -> VScaledLine *; + void Creating(const QVector &pathPoints, vsizetype pointsLeft); void RefreshToolTip(); }; diff --git a/src/libs/vtools/visualization/path/vistoolcutarc.cpp b/src/libs/vtools/visualization/path/vistoolcutarc.cpp index b5ec6f498..ccba07d62 100644 --- a/src/libs/vtools/visualization/path/vistoolcutarc.cpp +++ b/src/libs/vtools/visualization/path/vistoolcutarc.cpp @@ -33,27 +33,29 @@ #include #include #include -#include #include #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "vispath.h" -#include "../vwidgets/scalesceneitems.h" +#include "../vmisc/theme/themeDef.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "../vwidgets/scalesceneitems.h" +#include "vispath.h" //--------------------------------------------------------------------------------------------------------------------- VisToolCutArc::VisToolCutArc(const VContainer *data, QGraphicsItem *parent) - :VisPath(data, parent) + : VisPath(data, parent) { - m_arc1 = InitItem(Qt::darkGreen, this); + SetColorRole(VColorRole::VisSupportColor); + + m_arc1 = InitItem(VColorRole::VisSupportColor2, this); m_arc1->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_arc2 = InitItem(Qt::darkRed, this); + m_arc2 = InitItem(VColorRole::VisSupportColor4, this); m_arc2->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); m_point->setZValue(2); m_point->setFlag(QGraphicsItem::ItemStacksBehindParent, false); } @@ -64,29 +66,30 @@ void VisToolCutArc::RefreshGeometry() if (m_arcId > NULL_ID) { const QSharedPointer arc = GetData()->GeometricObject(m_arcId); - DrawPath(this, arc->GetPath(), arc->DirectionArrows(), Color(VColor::SupportColor), LineStyle(), Qt::RoundCap); + DrawPath(this, arc->GetPath(), arc->DirectionArrows(), LineStyle(), Qt::RoundCap); if (not qFuzzyIsNull(m_length)) { VArc ar1; VArc ar2; QPointF p = arc->CutArc(m_length, ar1, ar2, QString()); - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); - DrawPath(m_arc1, ar1.GetPath(), ar1.DirectionArrows(), Qt::darkGreen, LineStyle(), Qt::RoundCap); - DrawPath(m_arc2, ar2.GetPath(), ar2.DirectionArrows(), Qt::darkRed, LineStyle(), Qt::RoundCap); + DrawPath(m_arc1, ar1.GetPath(), ar1.DirectionArrows(), LineStyle(), Qt::RoundCap); + DrawPath(m_arc2, ar2.GetPath(), ar2.DirectionArrows(), LineStyle(), Qt::RoundCap); } else if (GetMode() == Mode::Creation) { QPointF p = arc->ClosestPoint(ScenePos()); qreal length = arc->GetLengthByPoint(p); - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Length = %1%2; " "Mouse click - finish selecting the length, " - "%3 - skip").arg(LengthToUser(length), prefix, VModifierKey::EnterKey())); + "%3 - skip") + .arg(LengthToUser(length), prefix, VModifierKey::EnterKey())); } } } diff --git a/src/libs/vtools/visualization/path/vistoolcutspline.cpp b/src/libs/vtools/visualization/path/vistoolcutspline.cpp index b21a79719..9c1dea321 100644 --- a/src/libs/vtools/visualization/path/vistoolcutspline.cpp +++ b/src/libs/vtools/visualization/path/vistoolcutspline.cpp @@ -33,29 +33,30 @@ #include #include #include -#include #include #include "../vgeometry/vabstractcubicbezier.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" -#include "vispath.h" -#include "../vwidgets/scalesceneitems.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "../vwidgets/scalesceneitems.h" +#include "vispath.h" //--------------------------------------------------------------------------------------------------------------------- VisToolCutSpline::VisToolCutSpline(const VContainer *data, QGraphicsItem *parent) - :VisPath(data, parent) + : VisPath(data, parent) { - m_spl1 = InitItem(Qt::darkGreen, this); + SetColorRole(VColorRole::VisSupportColor); + + m_spl1 = InitItem(VColorRole::VisSupportColor2, this); m_spl1->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_spl2 = InitItem(Qt::darkRed, this); + m_spl2 = InitItem(VColorRole::VisSupportColor4, this); m_spl2->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); m_point->setZValue(2); m_point->setFlag(QGraphicsItem::ItemStacksBehindParent, false); } @@ -66,7 +67,7 @@ void VisToolCutSpline::RefreshGeometry() if (m_splineId > NULL_ID) { const auto spl = GetData()->GeometricObject(m_splineId); - DrawPath(this, spl->GetPath(), spl->DirectionArrows(), Color(VColor::SupportColor), LineStyle(), Qt::RoundCap); + DrawPath(this, spl->GetPath(), spl->DirectionArrows(), LineStyle(), Qt::RoundCap); if (not qFuzzyIsNull(m_length)) { @@ -81,22 +82,23 @@ void VisToolCutSpline::RefreshGeometry() VSpline sp2 = VSpline(VPointF(p), spl2p2, spl2p3, spl->GetP4()); sp2.SetApproximationScale(spl->GetApproximationScale()); - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); - DrawPath(m_spl1, sp1.GetPath(), sp1.DirectionArrows(), Qt::darkGreen, LineStyle(), Qt::RoundCap); - DrawPath(m_spl2, sp2.GetPath(), sp2.DirectionArrows(), Qt::darkRed, LineStyle(), Qt::RoundCap); + DrawPath(m_spl1, sp1.GetPath(), sp1.DirectionArrows(), LineStyle(), Qt::RoundCap); + DrawPath(m_spl2, sp2.GetPath(), sp2.DirectionArrows(), LineStyle(), Qt::RoundCap); } else if (GetMode() == Mode::Creation) { QPointF p = spl->ClosestPoint(ScenePos()); qreal length = spl->GetLengthByPoint(p); - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Length = %1%2; " "Mouse click - finish selecting the length, " - "%3 - skip").arg(LengthToUser(length), prefix, VModifierKey::EnterKey())); + "%3 - skip") + .arg(LengthToUser(length), prefix, VModifierKey::EnterKey())); } } } diff --git a/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp b/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp index 5abad7d03..d64e1885e 100644 --- a/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp +++ b/src/libs/vtools/visualization/path/vistoolcutsplinepath.cpp @@ -48,12 +48,14 @@ VisToolCutSplinePath::VisToolCutSplinePath(const VContainer *data, QGraphicsItem *parent) : VisPath(data, parent) { - m_splPath1 = InitItem(Qt::darkGreen, this); + SetColorRole(VColorRole::VisSupportColor); + + m_splPath1 = InitItem(VColorRole::VisSupportColor2, this); m_splPath1->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_splPath2 = InitItem(Qt::darkRed, this); + m_splPath2 = InitItem(VColorRole::VisSupportColor4, this); m_splPath2->setFlag(QGraphicsItem::ItemStacksBehindParent, false); - m_point = InitPoint(Color(VColor::MainColor), this); + m_point = InitPoint(VColorRole::VisMainColor, this); m_point->setZValue(2); m_point->setFlag(QGraphicsItem::ItemStacksBehindParent, false); } @@ -64,8 +66,7 @@ void VisToolCutSplinePath::RefreshGeometry() if (m_splinePathId > NULL_ID) { const auto splPath = GetData()->GeometricObject(m_splinePathId); - DrawPath(this, splPath->GetPath(), splPath->DirectionArrows(), Color(VColor::SupportColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, splPath->GetPath(), splPath->DirectionArrows(), LineStyle(), Qt::RoundCap); if (not qFuzzyIsNull(m_length)) { @@ -76,13 +77,11 @@ void VisToolCutSplinePath::RefreshGeometry() SCASSERT(spPath1 != nullptr) SCASSERT(spPath2 != nullptr) - DrawPoint(m_point, static_cast(*p), Color(VColor::MainColor)); + DrawPoint(m_point, static_cast(*p)); delete p; - DrawPath(m_splPath1, spPath1->GetPath(), spPath1->DirectionArrows(), Qt::darkGreen, LineStyle(), - Qt::RoundCap); - DrawPath(m_splPath2, spPath2->GetPath(), spPath2->DirectionArrows(), Qt::darkRed, LineStyle(), - Qt::RoundCap); + DrawPath(m_splPath1, spPath1->GetPath(), spPath1->DirectionArrows(), LineStyle(), Qt::RoundCap); + DrawPath(m_splPath2, spPath2->GetPath(), spPath2->DirectionArrows(), LineStyle(), Qt::RoundCap); delete spPath1; delete spPath2; @@ -92,7 +91,7 @@ void VisToolCutSplinePath::RefreshGeometry() QPointF p = splPath->ClosestPoint(ScenePos()); qreal length = splPath->GetLengthByPoint(p); - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); SetToolTip(tr("Length = %1%2; " diff --git a/src/libs/vtools/visualization/path/vistoolduplicatedetail.cpp b/src/libs/vtools/visualization/path/vistoolduplicatedetail.cpp index 70bb48e59..bd590e759 100644 --- a/src/libs/vtools/visualization/path/vistoolduplicatedetail.cpp +++ b/src/libs/vtools/visualization/path/vistoolduplicatedetail.cpp @@ -30,8 +30,9 @@ //--------------------------------------------------------------------------------------------------------------------- VisToolDuplicateDetail::VisToolDuplicateDetail(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent) -{} + : VisPath(data, parent) +{ +} //--------------------------------------------------------------------------------------------------------------------- void VisToolDuplicateDetail::RefreshGeometry() @@ -51,7 +52,7 @@ void VisToolDuplicateDetail::RefreshGeometry() setPos(m_diff); } - DrawPath(this, PiecePath(piece), Color(VColor::MainColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(this, PiecePath(piece), Qt::SolidLine, Qt::RoundCap); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/visualization/path/vistoolellipticalarc.cpp b/src/libs/vtools/visualization/path/vistoolellipticalarc.cpp index f27968e99..007bb894e 100644 --- a/src/libs/vtools/visualization/path/vistoolellipticalarc.cpp +++ b/src/libs/vtools/visualization/path/vistoolellipticalarc.cpp @@ -29,17 +29,16 @@ #include #include #include -#include #include #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vellipticalarc.h" #include "../vgeometry/vpointf.h" -#include "../vpatterndb/vcontainer.h" #include "../visualization.h" +#include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" #include "../vwidgets/scalesceneitems.h" #include "vispath.h" -#include "../vmisc/vmodifierkey.h" namespace { @@ -54,16 +53,16 @@ auto Angle(const QLineF &radius) -> qreal return radius.angle(); } -} // namespace +} // namespace //--------------------------------------------------------------------------------------------------------------------- VisToolEllipticalArc::VisToolEllipticalArc(const VContainer *data, QGraphicsItem *parent) - :VisPath(data, parent) + : VisPath(data, parent) { - m_arcCenter = InitPoint(Color(VColor::MainColor), this); - m_radius1Line = InitItem(Color(VColor::SupportColor), this); - m_radius2Line = InitItem(Color(VColor::SupportColor), this); - m_f1Point = InitPoint(Color(VColor::SupportColor), this); + m_arcCenter = InitPoint(VColorRole::VisSupportColor, this); + m_radius1Line = InitItem(VColorRole::VisSupportColor, this); + m_radius2Line = InitItem(VColorRole::VisSupportColor, this); + m_f1Point = InitPoint(VColorRole::VisSupportColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -72,10 +71,10 @@ void VisToolEllipticalArc::RefreshGeometry() if (m_centerId > NULL_ID) { const QSharedPointer first = GetData()->GeometricObject(m_centerId); - DrawPoint(m_arcCenter, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_arcCenter, static_cast(*first)); static const QString prefix = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); - QLineF radius (static_cast(*first), ScenePos()); + QLineF radius(static_cast(*first), ScenePos()); auto center = static_cast(*first); if (GetMode() == Mode::Creation) @@ -86,7 +85,8 @@ void VisToolEllipticalArc::RefreshGeometry() SetToolTip(tr("Elliptical arc: radius1 = %1%2; " "Mouse click - finish selecting the first radius, " - "%3 - skip").arg(LengthToUser(radius.length()), prefix, VModifierKey::EnterKey())); + "%3 - skip") + .arg(LengthToUser(radius.length()), prefix, VModifierKey::EnterKey())); } else if (qFuzzyIsNull(m_radius2)) { @@ -99,12 +99,12 @@ void VisToolEllipticalArc::RefreshGeometry() DrawRadius2Line(center, radius.length()); DrawElArc(*first, m_radius1, radius.length(), 0, 0); - SetToolTip(tr("Elliptical arc: radius1 = %1%2, " - "radius2 = %3%2; " - "Mouse click - finish selecting the second radius, " - "%4 - skip") - .arg(LengthToUser(m_radius1), prefix, LengthToUser(radius.length()), - VModifierKey::EnterKey())); + SetToolTip( + tr("Elliptical arc: radius1 = %1%2, " + "radius2 = %3%2; " + "Mouse click - finish selecting the second radius, " + "%4 - skip") + .arg(LengthToUser(m_radius1), prefix, LengthToUser(radius.length()), VModifierKey::EnterKey())); } else if (m_f1 < 0) { @@ -114,15 +114,15 @@ void VisToolEllipticalArc::RefreshGeometry() qreal f1Angle = Angle(radius); VEllipticalArc elArc = DrawElArc(*first, m_radius1, m_radius2, f1Angle, f1Angle); - DrawPoint(m_f1Point, elArc.GetP1(), Color(VColor::SupportColor)); + DrawPoint(m_f1Point, elArc.GetP1()); SetToolTip(tr("Elliptical arc: radius1 = %1%2, " "radius2 = %3%2, angle1 = %4°; " "Mouse click - finish selecting the second radius, " "%5 - sticking angle, " "%6 - skip") - .arg(LengthToUser(m_radius1), prefix, LengthToUser(m_radius2), - AngleToUser(f1Angle), VModifierKey::Shift(), VModifierKey::EnterKey())); + .arg(LengthToUser(m_radius1), prefix, LengthToUser(m_radius2), AngleToUser(f1Angle), + VModifierKey::Shift(), VModifierKey::EnterKey())); } else if (m_f2 < 0) { @@ -132,16 +132,15 @@ void VisToolEllipticalArc::RefreshGeometry() const qreal f2Angle = Angle(radius); VEllipticalArc elArc = DrawElArc(*first, m_radius1, m_radius2, m_f1, f2Angle); - DrawPoint(m_f1Point, elArc.GetP1(), Color(VColor::SupportColor)); + DrawPoint(m_f1Point, elArc.GetP1()); SetToolTip(tr("Elliptical arc: radius1 = %1%2, " "radius2 = %3%2, angle1 = %4°, angle2 = %5°; " "Mouse click - finish selecting the second radius, " "%6 - sticking angle, " "%7 - skip") - .arg(LengthToUser(m_radius1), prefix, LengthToUser(m_radius2), - AngleToUser(m_f1), AngleToUser(f2Angle), VModifierKey::Shift(), - VModifierKey::EnterKey())); + .arg(LengthToUser(m_radius1), prefix, LengthToUser(m_radius2), AngleToUser(m_f1), + AngleToUser(f2Angle), VModifierKey::Shift(), VModifierKey::EnterKey())); } else if (VFuzzyComparePossibleNulls(m_rotationAngle, INT_MAX)) { @@ -156,16 +155,16 @@ void VisToolEllipticalArc::RefreshGeometry() DrawRadius2Line(center, m_radius2, rotationAngle); VEllipticalArc elArc = DrawElArc(*first, m_radius1, m_radius2, m_f1, m_f2, rotationAngle); - DrawPoint(m_f1Point, elArc.GetP1(), Color(VColor::SupportColor)); + DrawPoint(m_f1Point, elArc.GetP1()); SetToolTip(tr("Elliptical arc: radius1 = %1%2, " "radius2 = %3%2, angle1 = %4°, angle2 = %5°, rotation = %6°; " "Mouse click - finish selecting the second radius, " "%7 - sticking angle, " "%8 - skip") - .arg(LengthToUser(m_radius1), prefix, LengthToUser(radius.length()), - AngleToUser(m_f1), AngleToUser(m_f2), AngleToUser(rotationAngle), - VModifierKey::Shift(), VModifierKey::EnterKey())); + .arg(LengthToUser(m_radius1), prefix, LengthToUser(radius.length()), AngleToUser(m_f1), + AngleToUser(m_f2), AngleToUser(rotationAngle), VModifierKey::Shift(), + VModifierKey::EnterKey())); } } else if (not qFuzzyIsNull(m_radius1) && not qFuzzyIsNull(m_radius2) && m_f1 >= 0 && m_f2 >= 0 && @@ -219,7 +218,7 @@ void VisToolEllipticalArc::DrawRadius1Line(const QPointF ¢er, qreal radius, QLineF radiusLine(center.x(), center.y(), center.x() + 100, center.y()); radiusLine.setLength(radius); radiusLine.setAngle(radiusLine.angle() + rotationAngle); - DrawLine(m_radius1Line, radiusLine, Color(VColor::SupportColor)); + DrawLine(m_radius1Line, radiusLine); } //--------------------------------------------------------------------------------------------------------------------- @@ -228,7 +227,7 @@ void VisToolEllipticalArc::DrawRadius2Line(const QPointF ¢er, qreal radius, QLineF radiusLine(center.x(), center.y(), center.x(), center.y() - 100); radiusLine.setLength(radius); radiusLine.setAngle(radiusLine.angle() + rotationAngle); - DrawLine(m_radius2Line, radiusLine, Color(VColor::SupportColor)); + DrawLine(m_radius2Line, radiusLine); } //--------------------------------------------------------------------------------------------------------------------- @@ -237,7 +236,7 @@ auto VisToolEllipticalArc::DrawElArc(const VPointF ¢er, qreal radius1, qreal { VEllipticalArc elArc(center, radius1, radius2, f1, f2, rotationAngle); elArc.SetApproximationScale(ApproximationScale()); - DrawPath(this, elArc.GetPath(), elArc.DirectionArrows(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); + DrawPath(this, elArc.GetPath(), elArc.DirectionArrows(), LineStyle(), Qt::RoundCap); return elArc; } diff --git a/src/libs/vtools/visualization/path/vistoolpiece.cpp b/src/libs/vtools/visualization/path/vistoolpiece.cpp index f40bb5204..b5617edb6 100644 --- a/src/libs/vtools/visualization/path/vistoolpiece.cpp +++ b/src/libs/vtools/visualization/path/vistoolpiece.cpp @@ -27,16 +27,16 @@ *************************************************************************/ #include "vistoolpiece.h" -#include "../vpatterndb/vpiecepath.h" #include "../vgeometry/vpointf.h" +#include "../vpatterndb/vpiecepath.h" #include "../vwidgets/scalesceneitems.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPiece::VisToolPiece(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent) + : VisPath(data, parent) { - m_line1 = InitItem(Color(VColor::SupportColor), this); - m_line2 = InitItem(Color(VColor::SupportColor), this); + m_line1 = InitItem(VColorRole::VisSupportColor, this); + m_line2 = InitItem(VColorRole::VisSupportColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -62,29 +62,27 @@ void VisToolPiece::RefreshGeometry() m_pieceCached = true; } - DrawPath(this, m_cachedMainPath, Color(VColor::MainColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(this, m_cachedMainPath, Qt::SolidLine, Qt::RoundCap); for (int i = 0; i < m_cachedNodes.size(); ++i) { - VScaledEllipse *point = GetPoint(static_cast(i), Color(VColor::SupportColor)); - DrawPoint(point, m_cachedNodes.at(i).toQPointF(), Color(VColor::SupportColor)); + VScaledEllipse *point = GetPoint(static_cast(i), VColorRole::VisSupportColor); + DrawPoint(point, m_cachedNodes.at(i).toQPointF()); } if (GetMode() == Mode::Creation) { for (int i = 0; i < m_cachedCurvesPath.size(); ++i) { - VCurvePathItem *path = GetCurve(static_cast(i), Color(VColor::SupportColor)); - DrawPath(path, m_cachedCurvesPath.at(i), Color(VColor::SupportColor)); + VCurvePathItem *path = GetCurve(static_cast(i), VColorRole::VisSupportColor); + DrawPath(path, m_cachedCurvesPath.at(i)); } - DrawLine(m_line1, QLineF(ConstFirst(m_cachedMainPathPoints), ScenePos()), Color(VColor::SupportColor), - Qt::DashLine); + DrawLine(m_line1, QLineF(ConstFirst(m_cachedMainPathPoints), ScenePos()), Qt::DashLine); if (m_cachedMainPathPoints.size() > 1) { - DrawLine(m_line2, QLineF(ConstLast(m_cachedMainPathPoints), ScenePos()), Color(VColor::SupportColor), - Qt::DashLine); + DrawLine(m_line2, QLineF(ConstLast(m_cachedMainPathPoints), ScenePos()), Qt::DashLine); } } } @@ -105,15 +103,15 @@ void VisToolPiece::SetPiece(const VPiece &piece) } //--------------------------------------------------------------------------------------------------------------------- -auto VisToolPiece::GetPoint(quint32 i, const QColor &color) -> VScaledEllipse * +auto VisToolPiece::GetPoint(quint32 i, VColorRole role) -> VScaledEllipse * { - return GetPointItem(m_points, i, color, this); + return GetPointItem(m_points, i, role, this); } //--------------------------------------------------------------------------------------------------------------------- -auto VisToolPiece::GetCurve(quint32 i, const QColor &color) -> VCurvePathItem * +auto VisToolPiece::GetCurve(quint32 i, VColorRole role) -> VCurvePathItem * { - return GetCurveItem(m_curves, i, color, this); + return GetCurveItem(m_curves, i, role, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -129,7 +127,7 @@ void VisToolPiece::HideAllItems() m_line2->setVisible(false); } - for(QGraphicsEllipseItem *item : qAsConst(m_points)) + for (QGraphicsEllipseItem *item : qAsConst(m_points)) { if (item) { @@ -137,7 +135,7 @@ void VisToolPiece::HideAllItems() } } - for(QGraphicsPathItem *item : qAsConst(m_curves)) + for (QGraphicsPathItem *item : qAsConst(m_curves)) { if (item) { diff --git a/src/libs/vtools/visualization/path/vistoolpiece.h b/src/libs/vtools/visualization/path/vistoolpiece.h index e5b15f789..0455d084d 100644 --- a/src/libs/vtools/visualization/path/vistoolpiece.h +++ b/src/libs/vtools/visualization/path/vistoolpiece.h @@ -32,13 +32,14 @@ #include #include -#include "vispath.h" -#include "../vpatterndb/vpiece.h" #include "../vgeometry/vpointf.h" +#include "../vpatterndb/vpiece.h" +#include "vispath.h" class VisToolPiece : public VisPath { Q_OBJECT // NOLINT + public: explicit VisToolPiece(const VContainer *data, QGraphicsItem *parent = nullptr); ~VisToolPiece() override = default; @@ -48,8 +49,12 @@ public: void SetPiece(const VPiece &piece); - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::ToolPiece)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ToolPiece) + }; + private: Q_DISABLE_COPY_MOVE(VisToolPiece) // NOLINT QVector m_points{}; @@ -64,8 +69,8 @@ private: QVector m_cachedMainPathPoints{}; QVector m_cachedCurvesPath{}; - auto GetPoint(quint32 i, const QColor &color) -> VScaledEllipse *; - auto GetCurve(quint32 i, const QColor &color) -> VCurvePathItem *; + auto GetPoint(quint32 i, VColorRole role) -> VScaledEllipse *; + auto GetCurve(quint32 i, VColorRole role) -> VCurvePathItem *; void HideAllItems(); }; diff --git a/src/libs/vtools/visualization/path/vistoolpiecepath.cpp b/src/libs/vtools/visualization/path/vistoolpiecepath.cpp index bb4bde145..6f3775a66 100644 --- a/src/libs/vtools/visualization/path/vistoolpiecepath.cpp +++ b/src/libs/vtools/visualization/path/vistoolpiecepath.cpp @@ -27,19 +27,19 @@ *************************************************************************/ #include "vistoolpiecepath.h" -#include "../vwidgets/vsimplepoint.h" #include "../vgeometry/vpointf.h" -#include "../vwidgets/scalesceneitems.h" -#include "../vmisc/compatibility.h" #include "../vlayout/vlayoutpoint.h" +#include "../vmisc/compatibility.h" +#include "../vwidgets/scalesceneitems.h" +#include "../vwidgets/vsimplepoint.h" #include //--------------------------------------------------------------------------------------------------------------------- VisToolPiecePath::VisToolPiecePath(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent) + : VisPath(data, parent) { - m_line = InitItem(Color(VColor::SupportColor), this); + m_line = InitItem(VColorRole::VisSupportColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -49,14 +49,13 @@ void VisToolPiecePath::RefreshGeometry() if (m_path.CountNodes() > 0) { - DrawPath(this, m_path.PainterPath(GetData(), m_cuttingPath), Color(VColor::MainColor), m_path.GetPenType(), - Qt::RoundCap); + DrawPath(this, m_path.PainterPath(GetData(), m_cuttingPath), m_path.GetPenType(), Qt::RoundCap); const QVector nodes = m_path.PathNodePoints(GetData()); for (int i = 0; i < nodes.size(); ++i) { - VSimplePoint *point = GetPoint(static_cast(i), Color(VColor::SupportColor)); + VSimplePoint *point = GetPoint(static_cast(i), VColorRole::VisSupportColor); point->RefreshPointGeometry(nodes.at(i)); // Keep first, you can hide only objects those have shape point->SetOnlyPoint(GetMode() == Mode::Creation); point->setVisible(true); @@ -67,7 +66,7 @@ void VisToolPiecePath::RefreshGeometry() const QVector points = m_path.PathPoints(GetData()); if (not points.empty()) { - DrawLine(m_line, QLineF(ConstLast(points), ScenePos()), Color(VColor::SupportColor), Qt::DashLine); + DrawLine(m_line, QLineF(ConstLast(points), ScenePos()), Qt::DashLine); } } } @@ -87,9 +86,9 @@ void VisToolPiecePath::mousePressEvent(QGraphicsSceneMouseEvent *event) } //--------------------------------------------------------------------------------------------------------------------- -auto VisToolPiecePath::GetPoint(quint32 i, const QColor &color) -> VSimplePoint * +auto VisToolPiecePath::GetPoint(quint32 i, VColorRole role) -> VSimplePoint * { - return VisPath::GetPoint(m_points, i, color); + return VisPath::GetPoint(m_points, i, role); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/visualization/path/vistoolpiecepath.h b/src/libs/vtools/visualization/path/vistoolpiecepath.h index 368c58771..76d23b4d8 100644 --- a/src/libs/vtools/visualization/path/vistoolpiecepath.h +++ b/src/libs/vtools/visualization/path/vistoolpiecepath.h @@ -65,7 +65,7 @@ private: QVector m_cuttingPath{}; - auto GetPoint(quint32 i, const QColor &color) -> VSimplePoint *; + auto GetPoint(quint32 i, VColorRole role) -> VSimplePoint *; void HideAllItems(); }; diff --git a/src/libs/vtools/visualization/path/vistoolpointofintersectioncurves.cpp b/src/libs/vtools/visualization/path/vistoolpointofintersectioncurves.cpp index a57e39d9a..e3851d84a 100644 --- a/src/libs/vtools/visualization/path/vistoolpointofintersectioncurves.cpp +++ b/src/libs/vtools/visualization/path/vistoolpointofintersectioncurves.cpp @@ -32,22 +32,26 @@ #include #include #include -#include #include #include "../../tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h" +#include "../../visualization/path/vispath.h" #include "../vgeometry/vabstractcurve.h" +#include "../visualization.h" #include "../vpatterndb/vcontainer.h" #include "../vwidgets/scalesceneitems.h" -#include "../visualization.h" -#include "../../visualization/path/vispath.h" //--------------------------------------------------------------------------------------------------------------------- VisToolPointOfIntersectionCurves::VisToolPointOfIntersectionCurves(const VContainer *data, QGraphicsItem *parent) - :VisPath(data, parent) + : VisPath(data, parent) { - m_visCurve2 = InitItem(Color(VColor::SupportColor), this); - m_point = InitPoint(Color(VColor::MainColor), this); + SetColorRole(VColorRole::VisSupportColor); + + m_visCurve2 = InitItem(VColorRole::VisSupportColor, this); + m_visCurve2->setFlag(QGraphicsItem::ItemStacksBehindParent, false); + m_point = InitPoint(VColorRole::VisMainColor, this); + m_point->setFlag(QGraphicsItem::ItemStacksBehindParent, false); + m_point->setZValue(1); } //--------------------------------------------------------------------------------------------------------------------- @@ -56,19 +60,17 @@ void VisToolPointOfIntersectionCurves::RefreshGeometry() if (m_curve1Id > NULL_ID) { auto curve1 = GetData()->GeometricObject(m_curve1Id); - DrawPath(this, curve1->GetPath(), curve1->DirectionArrows(), Color(VColor::SupportColor), Qt::SolidLine, - Qt::RoundCap); + DrawPath(this, curve1->GetPath(), curve1->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); if (m_curve2Id > NULL_ID) { auto curve2 = GetData()->GeometricObject(m_curve2Id); - DrawPath(m_visCurve2, curve2->GetPath(), curve2->DirectionArrows(), Color(VColor::SupportColor), - Qt::SolidLine, Qt::RoundCap); + DrawPath(m_visCurve2, curve2->GetPath(), curve2->DirectionArrows(), Qt::SolidLine, Qt::RoundCap); QPointF p; VToolPointOfIntersectionCurves::FindPoint(curve1->GetPoints(), curve2->GetPoints(), m_vCrossPoint, m_hCrossPoint, &p); - DrawPoint(m_point, p, Color(VColor::MainColor)); + DrawPoint(m_point, p); } } } diff --git a/src/libs/vtools/visualization/path/vistoolspline.cpp b/src/libs/vtools/visualization/path/vistoolspline.cpp index bc554c564..beede4bc6 100644 --- a/src/libs/vtools/visualization/path/vistoolspline.cpp +++ b/src/libs/vtools/visualization/path/vistoolspline.cpp @@ -31,20 +31,19 @@ #include #include #include -#include #include #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vgeometrydef.h" #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" -#include "../vpatterndb/vcontainer.h" -#include "../vwidgets/vcontrolpointspline.h" -#include "../vwidgets/scalesceneitems.h" -#include "../vwidgets/global.h" #include "../visualization.h" -#include "vispath.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "../vwidgets/global.h" +#include "../vwidgets/scalesceneitems.h" +#include "../vwidgets/vcontrolpointspline.h" +#include "vispath.h" const int EMPTY_ANGLE = -1; @@ -52,18 +51,18 @@ namespace { inline auto TriggerRadius() -> qreal { - return ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5; -} + return ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5; } +} // namespace //--------------------------------------------------------------------------------------------------------------------- VisToolSpline::VisToolSpline(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent), - m_angle1(EMPTY_ANGLE), - m_angle2(EMPTY_ANGLE) + : VisPath(data, parent), + m_angle1(EMPTY_ANGLE), + m_angle2(EMPTY_ANGLE) { - m_point1 = InitPoint(Color(VColor::SupportColor), this); - m_point4 = InitPoint(Color(VColor::SupportColor), this); //-V656 + m_point1 = InitPoint(VColorRole::VisSupportColor, this); + m_point4 = InitPoint(VColorRole::VisSupportColor, this); //-V656 auto *controlPoint1 = new VControlPointSpline(1, SplinePointPosition::FirstPoint, this); controlPoint1->hide(); @@ -86,7 +85,7 @@ void VisToolSpline::RefreshGeometry() if (m_point1Id > NULL_ID) { const auto first = GetData()->GeometricObject(m_point1Id); - DrawPoint(m_point1, static_cast(*first), Color(VColor::SupportColor)); + DrawPoint(m_point1, static_cast(*first)); if (GetMode() == Mode::Creation) { @@ -97,12 +96,12 @@ void VisToolSpline::RefreshGeometry() { VSpline spline(*first, m_p2, ScenePos(), VPointF(ScenePos())); spline.SetApproximationScale(ApproximationScale()); - DrawPath(this, spline.GetPath(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); + DrawPath(this, spline.GetPath(), LineStyle(), Qt::RoundCap); } else { const auto second = GetData()->GeometricObject(m_point4Id); - DrawPoint(m_point4, static_cast(*second), Color(VColor::SupportColor)); + DrawPoint(m_point4, static_cast(*second)); if (GetMode() == Mode::Creation) { @@ -113,14 +112,13 @@ void VisToolSpline::RefreshGeometry() { VSpline spline(*first, m_p2, m_p3, *second); spline.SetApproximationScale(ApproximationScale()); - DrawPath(this, spline.GetPath(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); + DrawPath(this, spline.GetPath(), LineStyle(), Qt::RoundCap); } else { VSpline spline(*first, *second, m_angle1, m_angle2, m_kAsm1, m_kAsm2, m_kCurve); spline.SetApproximationScale(ApproximationScale()); - DrawPath(this, spline.GetPath(), spline.DirectionArrows(), Color(VColor::MainColor), LineStyle(), - Qt::RoundCap); + DrawPath(this, spline.GetPath(), spline.DirectionArrows(), LineStyle(), Qt::RoundCap); SetToolTip(tr("Use %1 for sticking angle!").arg(VModifierKey::Shift())); emit ToolTip(CurrentToolTip()); } diff --git a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp index be3821467..2a3c86801 100644 --- a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp +++ b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp @@ -32,7 +32,6 @@ #include #include #include -#include #include #include "../vgeometry/vabstractcurve.h" @@ -40,27 +39,27 @@ #include "../vgeometry/vpointf.h" #include "../vgeometry/vspline.h" #include "../vgeometry/vsplinepoint.h" -#include "../vpatterndb/vcontainer.h" -#include "../vwidgets/vcontrolpointspline.h" -#include "../vwidgets/scalesceneitems.h" -#include "../vwidgets/global.h" #include "../visualization.h" -#include "vispath.h" #include "../vmisc/vmodifierkey.h" +#include "../vpatterndb/vcontainer.h" +#include "../vwidgets/global.h" +#include "../vwidgets/scalesceneitems.h" +#include "../vwidgets/vcontrolpointspline.h" +#include "vispath.h" namespace { inline auto TriggerRadius() -> qreal { - return ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene()))*1.5; -} + return ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())) * 1.5; } +} // namespace //--------------------------------------------------------------------------------------------------------------------- VisToolSplinePath::VisToolSplinePath(const VContainer *data, QGraphicsItem *parent) - : VisPath(data, parent) + : VisPath(data, parent) { - m_newCurveSegment = InitItem(Color(VColor::MainColor), this); + m_newCurveSegment = InitItem(VColorRole::VisMainColor, this); } //--------------------------------------------------------------------------------------------------------------------- @@ -83,41 +82,41 @@ void VisToolSplinePath::RefreshGeometry() for (int i = 0; i < size; ++i) { VScaledEllipse *point = GetPoint(static_cast(i)); - DrawPoint(point, static_cast(pathPoints.at(i).P()), Color(VColor::SupportColor)); + DrawPoint(point, static_cast(pathPoints.at(i).P())); } if (GetMode() == Mode::Creation) { if (size > 1) { - for (vsizetype i = 1; i<=m_path.CountSubSpl(); ++i) + for (vsizetype i = 1; i <= m_path.CountSubSpl(); ++i) { const auto preLastPoint = (m_path.CountSubSpl() - 1) * 2; const auto lastPoint = preLastPoint + 1; VSpline spl = m_path.GetSpline(i); - m_ctrlPoints.at(preLastPoint)->RefreshCtrlPoint(i, SplinePointPosition::FirstPoint, - static_cast(spl.GetP2()), - static_cast(spl.GetP1())); + m_ctrlPoints.at(preLastPoint) + ->RefreshCtrlPoint(i, SplinePointPosition::FirstPoint, static_cast(spl.GetP2()), + static_cast(spl.GetP1())); m_ctrlPoints.at(lastPoint)->RefreshCtrlPoint(i, SplinePointPosition::LastPoint, static_cast(spl.GetP3()), static_cast(spl.GetP4())); } } - Creating(static_cast(pathPoints.at(size-1).P()), size); + Creating(static_cast(pathPoints.at(size - 1).P()), size); } if (size == 1) { VSpline spline(pathPoints.at(0).P(), m_ctrlPoint, ScenePos(), VPointF(ScenePos())); spline.SetApproximationScale(ApproximationScale()); - DrawPath(this, spline.GetPath(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); + DrawPath(this, spline.GetPath(), LineStyle(), Qt::RoundCap); } else if (size > 1) { - DrawPath(this, m_path.GetPath(), m_path.DirectionArrows(), Color(VColor::MainColor), LineStyle(), Qt::RoundCap); + DrawPath(this, m_path.GetPath(), m_path.DirectionArrows(), LineStyle(), Qt::RoundCap); } if (m_path.CountPoints() < 3) @@ -127,7 +126,8 @@ void VisToolSplinePath::RefreshGeometry() else { SetToolTip(tr("Curved path: select three or more points, " - "%1 - finish creation").arg(VModifierKey::EnterKey())); + "%1 - finish creation") + .arg(VModifierKey::EnterKey())); } if (GetMode() == Mode::Show) { @@ -172,7 +172,7 @@ auto VisToolSplinePath::GetPoint(quint32 i) -> VScaledEllipse * m_pointSelected = false; - auto *point = InitPoint(Color(VColor::SupportColor), this); + auto *point = InitPoint(VColorRole::VisSupportColor, this); m_points.append(point); if (m_points.size() == 1) @@ -183,7 +183,7 @@ auto VisToolSplinePath::GetPoint(quint32 i) -> VScaledEllipse * } else { - auto *controlPoint1 = new VControlPointSpline(m_points.size()-1, SplinePointPosition::LastPoint, this); + auto *controlPoint1 = new VControlPointSpline(m_points.size() - 1, SplinePointPosition::LastPoint, this); controlPoint1->hide(); m_ctrlPoints.append(controlPoint1); @@ -201,7 +201,7 @@ void VisToolSplinePath::DragControlPoint(vsizetype lastPoint, vsizetype preLastP { if (not m_ctrlPoints.at(lastPoint)->isVisible()) { - //Radius of point circle, but little bigger. Need handle with hover sizes. + // Radius of point circle, but little bigger. Need handle with hover sizes. if (QLineF(pSpl, m_ctrlPoint).length() > TriggerRadius()) { if (size == 1) @@ -220,8 +220,8 @@ void VisToolSplinePath::DragControlPoint(vsizetype lastPoint, vsizetype preLastP } } - QLineF ctrlLine (pSpl, ScenePos()); - ctrlLine.setAngle(ctrlLine.angle()+180); + QLineF ctrlLine(pSpl, ScenePos()); + ctrlLine.setAngle(ctrlLine.angle() + 180); if (size == 1) { @@ -229,7 +229,7 @@ void VisToolSplinePath::DragControlPoint(vsizetype lastPoint, vsizetype preLastP } else { - m_ctrlPoints.at(preLastPoint)->RefreshCtrlPoint(size-1, SplinePointPosition::LastPoint, ctrlLine.p2(), pSpl); + m_ctrlPoints.at(preLastPoint)->RefreshCtrlPoint(size - 1, SplinePointPosition::LastPoint, ctrlLine.p2(), pSpl); m_ctrlPoints.at(lastPoint)->RefreshCtrlPoint(size, SplinePointPosition::FirstPoint, m_ctrlPoint, pSpl); } @@ -244,35 +244,35 @@ void VisToolSplinePath::DragControlPoint(vsizetype lastPoint, vsizetype preLastP const VSpline spl = m_path.GetSpline(size - 1); VSpline preSpl(spl.GetP1(), static_cast(spl.GetP2()), ctrlLine.p2(), VPointF(pSpl)); - m_path[size-1].SetAngle2(spline.GetStartAngle(), spline.GetStartAngleFormula()); + m_path[size - 1].SetAngle2(spline.GetStartAngle(), spline.GetStartAngleFormula()); if (m_ctrlPoint != pSpl) { - m_path[size-1].SetLength1(preSpl.GetC2Length(), preSpl.GetC2LengthFormula()); - m_path[size-1].SetLength2(spline.GetC1Length(), spline.GetC1LengthFormula()); + m_path[size - 1].SetLength1(preSpl.GetC2Length(), preSpl.GetC2LengthFormula()); + m_path[size - 1].SetLength2(spline.GetC1Length(), spline.GetC1LengthFormula()); } else { - m_path[size-1].SetLength1(0, QChar('0')); - m_path[size-1].SetLength2(0, QChar('0')); + m_path[size - 1].SetLength1(0, QChar('0')); + m_path[size - 1].SetLength2(0, QChar('0')); } emit PathChanged(m_path); } - DrawPath(m_newCurveSegment, spline.GetPath(), Color(VColor::MainColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(m_newCurveSegment, spline.GetPath(), Qt::SolidLine, Qt::RoundCap); } //--------------------------------------------------------------------------------------------------------------------- void VisToolSplinePath::NewCurveSegment(const VSpline &spline, const QPointF &pSpl, vsizetype size) { - m_path[size-1].SetAngle2(spline.GetStartAngle(), spline.GetStartAngleFormula()); + m_path[size - 1].SetAngle2(spline.GetStartAngle(), spline.GetStartAngleFormula()); if (m_ctrlPoint != pSpl) { - m_path[size-1].SetLength2(spline.GetC1Length(), spline.GetC1LengthFormula()); + m_path[size - 1].SetLength2(spline.GetC1Length(), spline.GetC1LengthFormula()); } else { - m_path[size-1].SetLength2(0, QChar('0')); + m_path[size - 1].SetLength2(0, QChar('0')); } emit PathChanged(m_path); } @@ -302,6 +302,6 @@ void VisToolSplinePath::Creating(const QPointF &pSpl, vsizetype size) VSpline spline(VPointF(pSpl), m_ctrlPoint, ScenePos(), VPointF(ScenePos())); NewCurveSegment(spline, pSpl, size); - DrawPath(m_newCurveSegment, spline.GetPath(), Color(VColor::MainColor), Qt::SolidLine, Qt::RoundCap); + DrawPath(m_newCurveSegment, spline.GetPath(), Qt::SolidLine, Qt::RoundCap); } } diff --git a/src/libs/vtools/visualization/visualization.cpp b/src/libs/vtools/visualization/visualization.cpp index 76b07809f..38a570fe6 100644 --- a/src/libs/vtools/visualization/visualization.cpp +++ b/src/libs/vtools/visualization/visualization.cpp @@ -28,7 +28,6 @@ #include "visualization.h" -#include #include #include #include @@ -41,20 +40,21 @@ #include #include #include -#include +#include #include #include -#include +#include -#include "../vpatterndb/calculator.h" -#include "../vpatterndb/vtranslatevars.h" #include "../qmuparser/qmuparsererror.h" +#include "../vmisc/theme/themeDef.h" #include "../vmisc/vcommonsettings.h" +#include "../vpatterndb/calculator.h" #include "../vpatterndb/vcontainer.h" -#include "../vwidgets/vmaingraphicsscene.h" -#include "../vwidgets/vcurvepathitem.h" -#include "../vwidgets/scalesceneitems.h" +#include "../vpatterndb/vtranslatevars.h" #include "../vwidgets/global.h" +#include "../vwidgets/scalesceneitems.h" +#include "../vwidgets/vcurvepathitem.h" +#include "../vwidgets/vmaingraphicsscene.h" QT_WARNING_PUSH QT_WARNING_DISABLE_CLANG("-Wmissing-prototypes") @@ -67,16 +67,11 @@ QT_WARNING_POP namespace { //--------------------------------------------------------------------------------------------------------------------- -auto InitPointItem(const QColor &color, QGraphicsItem *parent, qreal z = 0) -> VScaledEllipse * +auto InitPointItem(VColorRole role, QGraphicsItem *parent, qreal z = 0) -> VScaledEllipse * { - auto *point = new VScaledEllipse(parent); + auto *point = new VScaledEllipse(role, parent); point->setZValue(1); point->setBrush(QBrush(Qt::NoBrush)); - - QPen visPen = point->pen(); - visPen.setColor(color); - - point->setPen(visPen); point->setRect(PointRect(ScaledRadius(SceneScale(VAbstractValApplication::VApp()->getCurrentScene())))); point->setPos(QPointF()); point->setFlags(QGraphicsItem::ItemStacksBehindParent); @@ -86,26 +81,22 @@ auto InitPointItem(const QColor &color, QGraphicsItem *parent, qreal z = 0) -> V } //--------------------------------------------------------------------------------------------------------------------- -auto InitCurveItem(const QColor &color, QGraphicsItem *parent, qreal z = 0) -> VCurvePathItem * +auto InitCurveItem(VColorRole role, QGraphicsItem *parent, qreal z = 0) -> VCurvePathItem * { - auto *curve = new VCurvePathItem(parent); + auto *curve = new VCurvePathItem(role, parent); curve->setBrush(QBrush(Qt::NoBrush)); - - QPen visPen = curve->pen(); - visPen.setColor(color); - curve->setPen(visPen); - curve->setFlags(QGraphicsItem::ItemStacksBehindParent); curve->setZValue(z); curve->setVisible(false); return curve; } -} // namespace +} // namespace //--------------------------------------------------------------------------------------------------------------------- Visualization::Visualization(const VContainer *data) - :m_data(data) -{} + : m_data(data) +{ +} //--------------------------------------------------------------------------------------------------------------------- void Visualization::SetLineStyle(const Qt::PenStyle &value) @@ -114,14 +105,6 @@ void Visualization::SetLineStyle(const Qt::PenStyle &value) InitPen(); } -//--------------------------------------------------------------------------------------------------------------------- -// cppcheck-suppress unusedFunction -void Visualization::SetMainColor(const QColor &value) -{ - SetColor(VColor::MainColor, value); - InitPen(); -} - //--------------------------------------------------------------------------------------------------------------------- void Visualization::StartVisualMode() { @@ -143,23 +126,23 @@ void Visualization::MousePos(const QPointF &scenePos) } //--------------------------------------------------------------------------------------------------------------------- -auto Visualization::InitPoint(const QColor &color, QGraphicsItem *parent, qreal z) -> VScaledEllipse * +auto Visualization::InitPoint(VColorRole role, QGraphicsItem *parent, qreal z) -> VScaledEllipse * { - return InitPointItem(color, parent, z); + return InitPointItem(role, parent, z); } //--------------------------------------------------------------------------------------------------------------------- auto Visualization::FindLengthFromUser(const QString &expression, - const QHash > *vars, - bool fromUser) -> qreal + const QHash> *vars, bool fromUser) + -> qreal { return VAbstractValApplication::VApp()->toPixel(FindValFromUser(expression, vars, fromUser)); } //--------------------------------------------------------------------------------------------------------------------- auto Visualization::FindValFromUser(const QString &expression, - const QHash > *vars, - bool fromUser) -> qreal + const QHash> *vars, bool fromUser) + -> qreal { qreal val = 0; if (expression.isEmpty()) @@ -174,8 +157,8 @@ auto Visualization::FindValFromUser(const QString &expression, QString formula = expression; if (fromUser) { - formula = VAbstractApplication::VApp()->TrVars() - ->FormulaFromUser(formula, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + formula = VAbstractApplication::VApp()->TrVars()->FormulaFromUser( + formula, VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } QScopedPointer cal(new Calculator()); @@ -191,7 +174,7 @@ auto Visualization::FindValFromUser(const QString &expression, val = 0; qDebug() << "\nMath parser error:\n" << "--------------------------------------\n" - << "Message: " << e.GetMsg() << "\n" + << "Message: " << e.GetMsg() << "\n" << "Expression: " << e.GetExpr() << "\n" << "--------------------------------------"; } @@ -205,10 +188,10 @@ auto Visualization::CorrectAngle(qreal angle) -> qreal qreal ang = angle; if (angle > 360) { - ang = angle - 360.0 * qFloor(angle/360); + ang = angle - 360.0 * qFloor(angle / 360); } - return (qFloor(qAbs(ang)/5.)) * 5; + return (qFloor(qAbs(ang) / 5.)) * 5; } //--------------------------------------------------------------------------------------------------------------------- @@ -221,27 +204,25 @@ void Visualization::RefreshToolTip() const } //--------------------------------------------------------------------------------------------------------------------- -void Visualization::DrawPoint(QGraphicsEllipseItem *point, const QPointF &pos, const QColor &color, Qt::PenStyle style) +void Visualization::DrawPoint(QGraphicsEllipseItem *point, const QPointF &pos, Qt::PenStyle style) { - SCASSERT (point != nullptr) + SCASSERT(point != nullptr) point->setPos(pos); QPen visPen = point->pen(); - visPen.setColor(color); visPen.setStyle(style); - point->setPen(visPen); + point->setVisible(true); } //--------------------------------------------------------------------------------------------------------------------- -void Visualization::DrawLine(VScaledLine *lineItem, const QLineF &line, const QColor &color, Qt::PenStyle style) +void Visualization::DrawLine(VScaledLine *lineItem, const QLineF &line, Qt::PenStyle style) { - SCASSERT (lineItem != nullptr) + SCASSERT(lineItem != nullptr) QPen visPen = lineItem->pen(); - visPen.setColor(color); visPen.setStyle(not line.isNull() ? style : Qt::NoPen); lineItem->setPen(visPen); @@ -254,54 +235,52 @@ void Visualization::DrawLine(VScaledLine *lineItem, const QLineF &line, const QC } //--------------------------------------------------------------------------------------------------------------------- -void Visualization::DrawPath(VCurvePathItem *pathItem, const QPainterPath &path, const QColor &color, - Qt::PenStyle style, Qt::PenCapStyle cap) +void Visualization::DrawPath(VCurvePathItem *pathItem, const QPainterPath &path, Qt::PenStyle style, + Qt::PenCapStyle cap) { - DrawPath(pathItem, path, QVector(), color, style, cap); + DrawPath(pathItem, path, QVector(), style, cap); } //--------------------------------------------------------------------------------------------------------------------- void Visualization::DrawPath(VCurvePathItem *pathItem, const QPainterPath &path, - const QVector &directionArrows, const QColor &color, Qt::PenStyle style, - Qt::PenCapStyle cap) + const QVector &directionArrows, Qt::PenStyle style, Qt::PenCapStyle cap) { - SCASSERT (pathItem != nullptr) + SCASSERT(pathItem != nullptr) QPen visPen = pathItem->pen(); - visPen.setColor(color); visPen.setStyle(style); visPen.setCapStyle(cap); - pathItem->setPen(visPen); + pathItem->setPath(path); pathItem->SetDirectionArrows(directionArrows); pathItem->setVisible(true); } //--------------------------------------------------------------------------------------------------------------------- -auto Visualization::GetPointItem(QVector &points, quint32 i, const QColor &color, - QGraphicsItem *parent) -> VScaledEllipse * +auto Visualization::GetPointItem(QVector &points, quint32 i, VColorRole role, QGraphicsItem *parent) + -> VScaledEllipse * { if (not points.isEmpty() && static_cast(points.size() - 1) >= i) { return points.at(static_cast(i)); } - auto *point = InitPointItem(color, parent); + auto *point = InitPointItem(role, parent); points.append(point); return point; } //--------------------------------------------------------------------------------------------------------------------- -auto Visualization::GetCurveItem(QVector &curves, quint32 i, const QColor &color, - QGraphicsItem *parent) -> VCurvePathItem * +auto Visualization::GetCurveItem(QVector &curves, quint32 i, VColorRole role, QGraphicsItem *parent) + -> VCurvePathItem * { if (not curves.isEmpty() && static_cast(curves.size() - 1) >= i) { return curves.at(static_cast(i)); } - auto *point = InitCurveItem(color, parent); + auto *point = InitCurveItem(role, parent); curves.append(point); return point; } @@ -309,26 +288,14 @@ auto Visualization::GetCurveItem(QVector &curves, quint32 i, c //--------------------------------------------------------------------------------------------------------------------- auto Visualization::LengthToUser(qreal value) -> QString { - return VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(QString::number(VAbstractValApplication::VApp()->fromPixel(value)), - VAbstractApplication::VApp()->Settings()->GetOsSeparator()); + return VAbstractApplication::VApp()->TrVars()->FormulaToUser( + QString::number(VAbstractValApplication::VApp()->fromPixel(value)), + VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } //--------------------------------------------------------------------------------------------------------------------- auto Visualization::AngleToUser(qreal value) -> QString { - return VAbstractApplication::VApp()->TrVars() - ->FormulaToUser(QString::number(value), VAbstractApplication::VApp()->Settings()->GetOsSeparator()); -} - -//--------------------------------------------------------------------------------------------------------------------- -void Visualization::SetColor(VColor type, const QColor& color) -{ - m_colorShema.insert(type, color); -} - -//--------------------------------------------------------------------------------------------------------------------- -auto Visualization::Color(VColor type) const -> QColor -{ - return m_colorShema.value(type, Qt::black); + return VAbstractApplication::VApp()->TrVars()->FormulaToUser( + QString::number(value), VAbstractApplication::VApp()->Settings()->GetOsSeparator()); } diff --git a/src/libs/vtools/visualization/visualization.h b/src/libs/vtools/visualization/visualization.h index ef627b05e..b6a41e39d 100644 --- a/src/libs/vtools/visualization/visualization.h +++ b/src/libs/vtools/visualization/visualization.h @@ -34,7 +34,6 @@ #include #include - #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include #endif @@ -58,14 +57,6 @@ enum class Mode : qint8 Show }; -enum class VColor : qint8 -{ - MainColor, - SupportColor, - SupportColor2, - SupportColor3 -}; - #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) Q_DECL_CONST_FUNCTION inline auto qHash(VColor key, uint seed = 0) noexcept -> uint { @@ -109,8 +100,10 @@ public: auto CurrentToolTip() const -> QString; void RefreshToolTip() const; + signals: void ToolTip(const QString &toolTip) const; // clazy:exclude=const-signal-or-slot + public slots: void MousePos(const QPointF &scenePos); @@ -118,38 +111,30 @@ protected: virtual void InitPen() = 0; virtual void AddOnScene() = 0; - static auto InitPoint(const QColor &color, QGraphicsItem *parent, qreal z = 0) -> VScaledEllipse *; - static void DrawPoint(QGraphicsEllipseItem *point, const QPointF &pos, const QColor &color, - Qt::PenStyle style = Qt::SolidLine); - virtual void DrawLine(VScaledLine *lineItem, const QLineF &line, const QColor &color, - Qt::PenStyle style = Qt::SolidLine); - static void DrawPath(VCurvePathItem *pathItem, const QPainterPath &path, const QColor &color, - Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap); + static auto InitPoint(VColorRole role, QGraphicsItem *parent, qreal z = 0) -> VScaledEllipse *; + static void DrawPoint(QGraphicsEllipseItem *point, const QPointF &pos, Qt::PenStyle style = Qt::SolidLine); + virtual void DrawLine(VScaledLine *lineItem, const QLineF &line, Qt::PenStyle style = Qt::SolidLine); + static void DrawPath(VCurvePathItem *pathItem, const QPainterPath &path, Qt::PenStyle style = Qt::SolidLine, + Qt::PenCapStyle cap = Qt::SquareCap); static void DrawPath(VCurvePathItem *pathItem, const QPainterPath &path, - const QVector &directionArrows, const QColor &color, - Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap); + const QVector &directionArrows, Qt::PenStyle style = Qt::SolidLine, + Qt::PenCapStyle cap = Qt::SquareCap); template void AddItem(Item *item); - template auto InitItem(const QColor &color, QGraphicsItem *parent) -> Item *; + template auto InitItem(VColorRole role, QGraphicsItem *parent) -> Item *; - static auto GetPointItem(QVector &points, quint32 i, const QColor &color, QGraphicsItem *parent) + static auto GetPointItem(QVector &points, quint32 i, VColorRole role, QGraphicsItem *parent) -> VScaledEllipse *; - static auto GetCurveItem(QVector &curves, quint32 i, const QColor &color, QGraphicsItem *parent) + static auto GetCurveItem(QVector &curves, quint32 i, VColorRole role, QGraphicsItem *parent) -> VCurvePathItem *; static auto LengthToUser(qreal value) -> QString; static auto AngleToUser(qreal value) -> QString; - void SetColor(VColor type, const QColor &color); - - auto Color(VColor type) const -> QColor; - void SetScenePos(QPointF pos); auto ScenePos() const -> QPointF; - void SetMainColor(const QColor &value); - void SetToolTip(const QString &tooltip); void StartVisualMode(); @@ -162,7 +147,6 @@ private: Qt::PenStyle m_lineStyle{Qt::SolidLine}; QString m_toolTip{}; Mode m_mode{Mode::Creation}; - QHash m_colorShema{{VColor::MainColor, Qt::red}, {VColor::SupportColor, Qt::magenta}}; }; // cppcheck-suppress unknownMacro @@ -180,14 +164,9 @@ template inline void Visualization::AddItem(Item *item) } //--------------------------------------------------------------------------------------------------------------------- -template inline auto Visualization::InitItem(const QColor &color, QGraphicsItem *parent) -> Item * +template inline auto Visualization::InitItem(VColorRole role, QGraphicsItem *parent) -> Item * { - Item *item = new Item(parent); - - QPen visPen = item->pen(); - visPen.setColor(color); - - item->setPen(visPen); + Item *item = new Item(role, parent); item->setZValue(1); item->setFlags(QGraphicsItem::ItemStacksBehindParent); item->setVisible(false); diff --git a/src/libs/vwidgets/global.cpp b/src/libs/vwidgets/global.cpp index 9e86b25b0..03bebb2e4 100644 --- a/src/libs/vwidgets/global.cpp +++ b/src/libs/vwidgets/global.cpp @@ -63,19 +63,6 @@ auto SceneScale(QGraphicsScene *scene) -> qreal return scale; } -//--------------------------------------------------------------------------------------------------------------------- -auto CorrectColor(const QGraphicsItem *item, const QColor &color) -> QColor -{ - SCASSERT(item != nullptr) - - if (item->isEnabled()) - { - return color; - } - - return Qt::gray; -} - //--------------------------------------------------------------------------------------------------------------------- auto PointRect(qreal radius) -> QRectF { diff --git a/src/libs/vwidgets/global.h b/src/libs/vwidgets/global.h index 7ead62263..d4c8f3a0d 100644 --- a/src/libs/vwidgets/global.h +++ b/src/libs/vwidgets/global.h @@ -48,8 +48,6 @@ auto IsSelectedByReleaseEvent(QGraphicsItem *item, QGraphicsSceneMouseEvent *eve auto SceneScale(QGraphicsScene *scene) -> qreal; -auto CorrectColor(const QGraphicsItem *item, const QColor &color) -> QColor; - auto PointRect(qreal radius) -> QRectF; auto ScaledRadius(qreal scale) -> qreal; void ScaleCircleSize(QGraphicsEllipseItem *item, qreal scale); diff --git a/src/libs/vwidgets/scalesceneitems.cpp b/src/libs/vwidgets/scalesceneitems.cpp index 4bc9888c2..dd6abd7a2 100644 --- a/src/libs/vwidgets/scalesceneitems.cpp +++ b/src/libs/vwidgets/scalesceneitems.cpp @@ -27,38 +27,51 @@ *************************************************************************/ #include "scalesceneitems.h" -#include "global.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vmisc/vabstractapplication.h" +#include "global.h" #include //--------------------------------------------------------------------------------------------------------------------- -VScaledLine::VScaledLine(QGraphicsItem *parent) - : QGraphicsLineItem(parent) -{} +VScaledLine::VScaledLine(VColorRole role, QGraphicsItem *parent) + : QGraphicsLineItem(parent), + m_role(role) +{ +} //--------------------------------------------------------------------------------------------------------------------- -VScaledLine::VScaledLine(const QLineF &line, QGraphicsItem *parent) - : QGraphicsLineItem(line, parent) -{} +VScaledLine::VScaledLine(const QLineF &line, VColorRole role, QGraphicsItem *parent) + : QGraphicsLineItem(line, parent), + m_role(role) +{ +} //--------------------------------------------------------------------------------------------------------------------- void VScaledLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QPen lPen = pen(); + + if (m_role != VColorRole::CustomColor) + { + lPen.setColor(VSceneStylesheet::CorrectToolColor(this, VSceneStylesheet::Color(m_role))); + } + const qreal width = ScaleWidth(m_isBoldLine ? VAbstractApplication::VApp()->Settings()->WidthMainLine() : VAbstractApplication::VApp()->Settings()->WidthHairLine(), SceneScale(scene())); - lPen.setWidthF(qRound(width*100.)/100.); + lPen.setWidthF(qRound(width * 100.) / 100.); setPen(lPen); PaintWithFixItemHighlightSelected(this, painter, option, widget); } //--------------------------------------------------------------------------------------------------------------------- -VScaledEllipse::VScaledEllipse(QGraphicsItem *parent) - : QGraphicsEllipseItem(parent) -{} +VScaledEllipse::VScaledEllipse(VColorRole role, QGraphicsItem *parent) + : QGraphicsEllipseItem(parent), + m_role(role) +{ +} //--------------------------------------------------------------------------------------------------------------------- void VScaledEllipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) @@ -67,6 +80,12 @@ void VScaledEllipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *op const qreal width = ScaleWidth(VAbstractApplication::VApp()->Settings()->WidthMainLine(), scale); QPen visPen = pen(); + + if (m_role != VColorRole::CustomColor) + { + visPen.setColor(VSceneStylesheet::Color(m_role)); + } + visPen.setWidthF(width); setPen(visPen); diff --git a/src/libs/vwidgets/scalesceneitems.h b/src/libs/vwidgets/scalesceneitems.h index b483fd112..32c42f710 100644 --- a/src/libs/vwidgets/scalesceneitems.h +++ b/src/libs/vwidgets/scalesceneitems.h @@ -32,28 +32,48 @@ #include #include "../vmisc/def.h" +#include "../vmisc/theme/themeDef.h" class VScaledLine : public QGraphicsLineItem { public: - explicit VScaledLine(QGraphicsItem * parent = nullptr); - explicit VScaledLine(const QLineF &line, QGraphicsItem * parent = nullptr); + explicit VScaledLine(VColorRole role, QGraphicsItem *parent = nullptr); + VScaledLine(const QLineF &line, VColorRole role, QGraphicsItem *parent = nullptr); ~VScaledLine() override = default; - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::ScaledLine)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ScaledLine) + }; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; auto IsBoldLine() const -> bool; void SetBoldLine(bool bold); + auto GetColorRole() const -> VColorRole; + void SetColorRole(VColorRole role); + private: Q_DISABLE_COPY_MOVE(VScaledLine) // NOLINT bool m_isBoldLine{true}; + VColorRole m_role; }; +//--------------------------------------------------------------------------------------------------------------------- +inline auto VScaledLine::GetColorRole() const -> VColorRole +{ + return m_role; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline void VScaledLine::SetColorRole(VColorRole role) +{ + m_role = role; +} + //--------------------------------------------------------------------------------------------------------------------- inline auto VScaledLine::IsBoldLine() const -> bool { @@ -69,13 +89,17 @@ inline void VScaledLine::SetBoldLine(bool bold) class VScaledEllipse : public QGraphicsEllipseItem { public: - explicit VScaledEllipse(QGraphicsItem * parent = nullptr); + explicit VScaledEllipse(VColorRole role, QGraphicsItem *parent = nullptr); ~VScaledEllipse() override = default; - auto type() const -> int override {return Type;} - enum {Type = UserType + static_cast(Vis::ScaledEllipse)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ScaledEllipse) + }; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; + auto PointMode() const -> bool; void SetPointMode(bool newPointMode); @@ -83,6 +107,7 @@ private: Q_DISABLE_COPY_MOVE(VScaledEllipse) // NOLINT bool m_pointMode{true}; + VColorRole m_role; }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vwidgets/vabstractsimple.h b/src/libs/vwidgets/vabstractsimple.h index 26ced9722..847530bb6 100644 --- a/src/libs/vwidgets/vabstractsimple.h +++ b/src/libs/vwidgets/vabstractsimple.h @@ -34,18 +34,18 @@ #include #include #include -#include #include -#include "../ifc/ifcdef.h" #include "../vgeometry/vgeometrydef.h" #include "../vmisc/def.h" +#include "../vmisc/typedef.h" class QGraphicsSceneContextMenuEvent; class VAbstractSimple : public QObject { Q_OBJECT // NOLINT + public: VAbstractSimple(quint32 id, QObject *parent = nullptr); virtual ~VAbstractSimple() = default; @@ -53,10 +53,10 @@ public: virtual void ToolSelectionType(const SelectionType &type); auto GetType() const -> GOType; - void SetType(const GOType &value); + void SetType(const GOType &value); signals: - void ShowContextMenu(QGraphicsSceneContextMenuEvent * event, quint32 id = NULL_ID); + void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id = NULL_ID); void Delete(); protected: @@ -65,7 +65,7 @@ protected: SelectionType selectionType; - GOType type; + GOType type; private: Q_DISABLE_COPY_MOVE(VAbstractSimple) // NOLINT diff --git a/src/libs/vwidgets/vcontrolpointspline.cpp b/src/libs/vwidgets/vcontrolpointspline.cpp index 6473f0129..5d3920eeb 100644 --- a/src/libs/vwidgets/vcontrolpointspline.cpp +++ b/src/libs/vwidgets/vcontrolpointspline.cpp @@ -41,26 +41,23 @@ #include #include #include -#include -#include "../vwidgets/global.h" #include "../vgeometry/vgobject.h" -#include "../vmisc/vabstractapplication.h" #include "../vmisc/literals.h" -#include "vmaingraphicsscene.h" -#include "vmaingraphicsview.h" -#include "vgraphicssimpletextitem.h" +#include "../vmisc/theme/themeDef.h" +#include "../vwidgets/global.h" #include "scalesceneitems.h" +#include "vmaingraphicsview.h" //--------------------------------------------------------------------------------------------------------------------- VControlPointSpline::VControlPointSpline(const vsizetype &indexSpline, SplinePointPosition position, QGraphicsItem *parent) - : VScenePoint(parent), - controlLine(nullptr), - indexSpline(indexSpline), - position(position), - freeAngle(true), - freeLength(true) + : VScenePoint(VColorRole::ControlPointColor, parent), + controlLine(nullptr), + indexSpline(indexSpline), + position(position), + freeAngle(true), + freeLength(true) { Init(); } @@ -74,14 +71,14 @@ VControlPointSpline::VControlPointSpline(const vsizetype &indexSpline, SplinePoi * @param parent parent object. */ VControlPointSpline::VControlPointSpline(const vsizetype &indexSpline, SplinePointPosition position, - const QPointF &controlPoint, bool freeAngle, - bool freeLength, QGraphicsItem *parent) - : VScenePoint(parent), - controlLine(nullptr), - indexSpline(indexSpline), - position(position), - freeAngle(freeAngle), - freeLength(freeLength) + const QPointF &controlPoint, bool freeAngle, bool freeLength, + QGraphicsItem *parent) + : VScenePoint(VColorRole::ControlPointColor, parent), + controlLine(nullptr), + indexSpline(indexSpline), + position(position), + freeAngle(freeAngle), + freeLength(freeLength) { Init(); @@ -96,13 +93,9 @@ VControlPointSpline::VControlPointSpline(const vsizetype &indexSpline, SplinePoi //--------------------------------------------------------------------------------------------------------------------- void VControlPointSpline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { - QPen lPen = controlLine->pen(); - lPen.setColor(CorrectColor(controlLine, Qt::black)); - controlLine->setPen(lPen); - QPointF p1, p2; VGObject::LineIntersectCircle(QPointF(), ScaledRadius(SceneScale(scene())), - QLineF( QPointF(), controlLine->line().p1()), p1, p2); + QLineF(QPointF(), controlLine->line().p1()), p1, p2); QLineF line(controlLine->line().p1(), p1); controlLine->setLine(line); @@ -140,8 +133,8 @@ auto VControlPointSpline::itemChange(QGraphicsItem::GraphicsItemChange change, c { const QPointF splPoint = controlLine->line().p1() + pos(); - QLineF newLine(splPoint, value.toPointF());// value - new position. - QLineF oldLine(splPoint, pos());// pos() - old position. + QLineF newLine(splPoint, value.toPointF()); // value - new position. + QLineF oldLine(splPoint, pos()); // pos() - old position. if (not freeAngle) { @@ -174,7 +167,7 @@ auto VControlPointSpline::itemChange(QGraphicsItem::GraphicsItemChange change, c const QList viewList = scene()->views(); if (not viewList.isEmpty()) { - if (VMainGraphicsView *view = qobject_cast(viewList.at(0))) + if (auto *view = qobject_cast(viewList.at(0))) { view->EnsureItemVisibleWithDelay(this, VMainGraphicsView::scrollDelay); } @@ -205,7 +198,7 @@ void VControlPointSpline::mousePressEvent(QGraphicsSceneMouseEvent *event) } // Somehow clicking on notselectable object do not clean previous selections. - if (not (flags() & ItemIsSelectable) && scene()) + if (not(flags() & ItemIsSelectable) && scene()) { scene()->clearSelection(); } @@ -236,28 +229,27 @@ void VControlPointSpline::contextMenuEvent(QGraphicsSceneContextMenuEvent *event //--------------------------------------------------------------------------------------------------------------------- void VControlPointSpline::Init() { - m_baseColor = Qt::red; SetOnlyPoint(true); this->setBrush(QBrush(Qt::NoBrush)); this->setZValue(100); - controlLine = new VScaledLine(this); + controlLine = new VScaledLine(VColorRole::ControlLineColor, this); controlLine->SetBoldLine(false); - //controlLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true); + // controlLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true); controlLine->setVisible(false); } //--------------------------------------------------------------------------------------------------------------------- void VControlPointSpline::SetCtrlLine(const QPointF &controlPoint, const QPointF &splinePoint) { - QLineF circleLine (QPointF(), splinePoint-controlPoint); + QLineF circleLine(QPointF(), splinePoint - controlPoint); const qreal radius = ScaledRadius(SceneScale(scene())); if (circleLine.length() > radius) { QPointF p1, p2; VGObject::LineIntersectCircle(QPointF(), radius, circleLine, p1, p2); - QLineF line(splinePoint-controlPoint, p1); + QLineF line(splinePoint - controlPoint, p1); controlLine->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); controlLine->setLine(line); controlLine->setVisible(not line.isNull()); diff --git a/src/libs/vwidgets/vcontrolpointspline.h b/src/libs/vwidgets/vcontrolpointspline.h index 19c2b222a..e358bf219 100644 --- a/src/libs/vwidgets/vcontrolpointspline.h +++ b/src/libs/vwidgets/vcontrolpointspline.h @@ -38,10 +38,11 @@ #include #include "../vgeometry/vgeometrydef.h" -#include "../vgeometry/vsplinepath.h" #include "../vmisc/def.h" #include "vscenepoint.h" +class VScaledLine; + /** * @brief The VControlPointSpline class control spline point. */ @@ -53,15 +54,15 @@ public: VControlPointSpline(const vsizetype &indexSpline, SplinePointPosition position, QGraphicsItem *parent = nullptr); VControlPointSpline(const vsizetype &indexSpline, SplinePointPosition position, const QPointF &controlPoint, bool freeAngle, bool freeLength, QGraphicsItem *parent = nullptr); - virtual ~VControlPointSpline() = default; + ~VControlPointSpline() override = default; - virtual auto type() const -> int override { return Type; } + auto type() const -> int override { return Type; } enum { Type = UserType + static_cast(Vis::ControlPointSpline) }; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; signals: /** * @brief ControlPointChangePosition emit when control point change position. @@ -86,11 +87,11 @@ protected: /** @brief controlLine pointer to line control point. */ VScaledLine *controlLine; - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) override; - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; - virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; private: Q_DISABLE_COPY_MOVE(VControlPointSpline) // NOLINT diff --git a/src/libs/vwidgets/vcurvepathitem.cpp b/src/libs/vwidgets/vcurvepathitem.cpp index 7edacfa18..c50be5658 100644 --- a/src/libs/vwidgets/vcurvepathitem.cpp +++ b/src/libs/vwidgets/vcurvepathitem.cpp @@ -27,19 +27,20 @@ *************************************************************************/ #include "vcurvepathitem.h" -#include "../vwidgets/global.h" #include "../vgeometry/vabstractcurve.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vmisc/vabstractapplication.h" +#include "global.h" #include //--------------------------------------------------------------------------------------------------------------------- -VCurvePathItem::VCurvePathItem(QGraphicsItem *parent) - : QGraphicsPathItem(parent), - m_directionArrows(), - m_points(), - m_defaultWidth(VAbstractApplication::VApp()->Settings()->WidthMainLine()) -{} +VCurvePathItem::VCurvePathItem(VColorRole role, QGraphicsItem *parent) + : QGraphicsPathItem(parent), + m_defaultWidth(VAbstractApplication::VApp()->Settings()->WidthMainLine()), + m_role(role) +{ +} //--------------------------------------------------------------------------------------------------------------------- auto VCurvePathItem::shape() const -> QPainterPath @@ -48,10 +49,10 @@ auto VCurvePathItem::shape() const -> QPainterPath if (not m_points.isEmpty()) { - for (qint32 i = 0; i < m_points.count()-1; ++i) + for (qint32 i = 0; i < m_points.count() - 1; ++i) { itemPath.moveTo(m_points.at(i)); - itemPath.lineTo(m_points.at(i+1)); + itemPath.lineTo(m_points.at(i + 1)); } } else @@ -59,9 +60,9 @@ auto VCurvePathItem::shape() const -> QPainterPath itemPath = path(); } - const QPainterPath arrowsPath = VAbstractCurve::ShowDirection(m_directionArrows, - ScaleWidth(VAbstractCurve::LengthCurveDirectionArrow(), - SceneScale(scene()))); + const QPainterPath arrowsPath = VAbstractCurve::ShowDirection( + m_directionArrows, ScaleWidth(VAbstractCurve::LengthCurveDirectionArrow(), SceneScale(scene()))); + if (arrowsPath != QPainterPath()) { itemPath.addPath(arrowsPath); @@ -75,15 +76,20 @@ void VCurvePathItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *op { ScalePenWidth(); - const QPainterPath arrowsPath = VAbstractCurve::ShowDirection(m_directionArrows, - ScaleWidth(VAbstractCurve::LengthCurveDirectionArrow(), - SceneScale(scene()))); + const QPainterPath arrowsPath = VAbstractCurve::ShowDirection( + m_directionArrows, ScaleWidth(VAbstractCurve::LengthCurveDirectionArrow(), SceneScale(scene()))); if (arrowsPath != QPainterPath()) { painter->save(); QPen arrowPen(pen()); + + if (m_role != VColorRole::CustomColor) + { + arrowPen.setColor(VSceneStylesheet::Color(m_role)); + } + arrowPen.setStyle(Qt::SolidLine); painter->setPen(arrowPen); @@ -97,7 +103,7 @@ void VCurvePathItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *op } //--------------------------------------------------------------------------------------------------------------------- -void VCurvePathItem::SetDirectionArrows(const QVector > &arrows) +void VCurvePathItem::SetDirectionArrows(const QVector> &arrows) { m_directionArrows = arrows; } @@ -122,5 +128,10 @@ void VCurvePathItem::ScalePenWidth() QPen toolPen = pen(); toolPen.setWidthF(width); + if (m_role != VColorRole::CustomColor) + { + toolPen.setColor(VSceneStylesheet::Color(m_role)); + } + setPen(toolPen); } diff --git a/src/libs/vwidgets/vcurvepathitem.h b/src/libs/vwidgets/vcurvepathitem.h index 9b2aa2585..71d3371c5 100644 --- a/src/libs/vwidgets/vcurvepathitem.h +++ b/src/libs/vwidgets/vcurvepathitem.h @@ -33,6 +33,7 @@ #include #include "../vmisc/def.h" +#include "../vmisc/theme/themeDef.h" QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wsuggest-final-types") @@ -41,30 +42,50 @@ QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods") class VCurvePathItem : public QGraphicsPathItem { public: - explicit VCurvePathItem(QGraphicsItem *parent = nullptr); - virtual ~VCurvePathItem() = default; + explicit VCurvePathItem(VColorRole role, QGraphicsItem *parent = nullptr); + ~VCurvePathItem() override = default; - virtual auto shape() const -> QPainterPath override; + auto shape() const -> QPainterPath override; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, - QWidget *widget = nullptr) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Vis::CurvePathItem)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::CurvePathItem) + }; void SetDirectionArrows(const QVector> &arrows); void SetPoints(const QVector &points); void SetWidth(qreal width); + protected: virtual void ScalePenWidth(); + + auto GetColorRole() const -> VColorRole; + void SetColorRole(VColorRole role); + private: Q_DISABLE_COPY_MOVE(VCurvePathItem) // NOLINT - QVector> m_directionArrows; - QVector m_points; + QVector> m_directionArrows{}; + QVector m_points{}; qreal m_defaultWidth; + VColorRole m_role; }; +//--------------------------------------------------------------------------------------------------------------------- +inline void VCurvePathItem::SetColorRole(VColorRole role) +{ + m_role = role; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VCurvePathItem::GetColorRole() const -> VColorRole +{ + return m_role; +} + QT_WARNING_POP #endif // VCURVEPATHITEM_H diff --git a/src/libs/vwidgets/vgrainlineitem.cpp b/src/libs/vwidgets/vgrainlineitem.cpp index 9679686fd..c8b8c5bf4 100644 --- a/src/libs/vwidgets/vgrainlineitem.cpp +++ b/src/libs/vwidgets/vgrainlineitem.cpp @@ -26,8 +26,6 @@ ** *************************************************************************/ -#include - #include #include #include @@ -35,14 +33,15 @@ #include #include #include +#include #include "../vmisc/def.h" -#include "../vmisc/vabstractapplication.h" #include "../vmisc/literals.h" +#include "../vmisc/theme/vscenestylesheet.h" +#include "../vmisc/vabstractapplication.h" #include "global.h" -#include "vpiecegrainline.h" - #include "vgrainlineitem.h" +#include "vpiecegrainline.h" constexpr int rectWidth = 30; constexpr int resizeRectSize = 10; @@ -54,9 +53,10 @@ constexpr int activeZ = 10; * @brief VGrainlineItem::VGrainlineItem constructor * @param pParent pointer to the parent item */ -VGrainlineItem::VGrainlineItem(QGraphicsItem* pParent) - : VPieceItem(pParent), - m_penWidth(VAbstractApplication::VApp()->Settings()->WidthMainLine()) +VGrainlineItem::VGrainlineItem(VColorRole role, QGraphicsItem *pParent) + : VPieceItem(pParent), + m_penWidth(VAbstractApplication::VApp()->Settings()->WidthMainLine()), + m_role(role) { setAcceptHoverEvents(true); m_inactiveZ = 5; @@ -84,12 +84,17 @@ auto VGrainlineItem::shape() const -> QPainterPath * @param pOption not used * @param pWidget not used */ -void VGrainlineItem::paint(QPainter* pP, const QStyleOptionGraphicsItem* pOption, QWidget* pWidget) +void VGrainlineItem::paint(QPainter *pP, const QStyleOptionGraphicsItem *pOption, QWidget *pWidget) { Q_UNUSED(pOption) Q_UNUSED(pWidget) pP->save(); - QColor clr = Qt::black; + QColor clr = m_color; + + if (m_role != VColorRole::CustomColor) + { + clr = VSceneStylesheet::Color(m_role); + } const qreal width = ScaleWidth(VAbstractApplication::VApp()->Settings()->WidthHairLine(), SceneScale(scene())); pP->setPen(QPen(clr, width, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); @@ -154,7 +159,7 @@ void VGrainlineItem::paint(QPainter* pP, const QStyleOptionGraphicsItem* pOption if (m_eMode == mRotate) { - QPointF ptC = (m_polyBound.at(0) + m_polyBound.at(2))/2; + QPointF ptC = (m_polyBound.at(0) + m_polyBound.at(2)) / 2; qreal dRad = rotateCircR; pP->setBrush(clr); pP->drawEllipse(ptC, dRad, dRad); @@ -163,13 +168,13 @@ void VGrainlineItem::paint(QPainter* pP, const QStyleOptionGraphicsItem* pOption pP->save(); pP->translate(ptC); pP->rotate(qRadiansToDegrees(-m_dRotation)); - int iX = qRound(m_dLength/2 - 0.5*dRad); - int iY = grainline.IsFourWays() ? qRound((m_dLength/2) - 0.8*dRad) : qRound(rectWidth - 0.5*dRad); - int iR = qRound(dRad*3); - pP->drawArc(iX - iR, iY - iR, iR, iR, 0*16, -90*16); - pP->drawArc(-iX, iY - iR, iR, iR, 270*16, -90*16); - pP->drawArc(-iX, -iY, iR, iR, 180*16, -90*16); - pP->drawArc(iX - iR, -iY, iR, iR, 90*16, -90*16); + int iX = qRound(m_dLength / 2 - 0.5 * dRad); + int iY = grainline.IsFourWays() ? qRound((m_dLength / 2) - 0.8 * dRad) : qRound(rectWidth - 0.5 * dRad); + int iR = qRound(dRad * 3); + pP->drawArc(iX - iR, iY - iR, iR, iR, 0 * 16, -90 * 16); + pP->drawArc(-iX, iY - iR, iR, iR, 270 * 16, -90 * 16); + pP->drawArc(-iX, -iY, iR, iR, 180 * 16, -90 * 16); + pP->drawArc(iX - iR, -iY, iR, iR, 90 * 16, -90 * 16); pP->restore(); } } @@ -183,7 +188,7 @@ void VGrainlineItem::paint(QPainter* pP, const QStyleOptionGraphicsItem* pOption * @param dRotation rotation of the grainline in [degrees] * @param dLength length of the grainline in user's units */ -void VGrainlineItem::UpdateGeometry(const QPointF& ptPos, qreal dRotation, qreal dLength, GrainlineArrowDirection eAT) +void VGrainlineItem::UpdateGeometry(const QPointF &ptPos, qreal dRotation, qreal dLength, GrainlineArrowDirection eAT) { m_dRotation = qDegreesToRadians(dRotation); m_dLength = dLength; @@ -215,10 +220,10 @@ auto VGrainlineItem::Grainline() const -> VPieceGrainline * @brief VGrainlineItem::mousePressEvent handles left button mouse press events * @param pME pointer to QGraphicsSceneMouseEvent object */ -void VGrainlineItem::mousePressEvent(QGraphicsSceneMouseEvent* pME) +void VGrainlineItem::mousePressEvent(QGraphicsSceneMouseEvent *pME) { - if (pME->button() == Qt::LeftButton && pME->type() != QEvent::GraphicsSceneMouseDoubleClick - && (flags() & QGraphicsItem::ItemIsMovable)) + if (pME->button() == Qt::LeftButton && pME->type() != QEvent::GraphicsSceneMouseDoubleClick && + (flags() & QGraphicsItem::ItemIsMovable)) { if (m_moveType == NotMovable) { @@ -235,7 +240,7 @@ void VGrainlineItem::mousePressEvent(QGraphicsSceneMouseEvent* pME) m_dAngle = GetAngle(mapToParent(pME->pos())); m_ptRotCenter = m_ptCenter; - if ((m_moveType & AllModifications ) == AllModifications) + if ((m_moveType & AllModifications) == AllModifications) { AllUserModifications(pME->pos()); setZValue(activeZ); @@ -303,7 +308,7 @@ void VGrainlineItem::mousePressEvent(QGraphicsSceneMouseEvent* pME) * @brief VGrainlineItem::mouseMoveEvent handles mouse move events, making sure that the item is moved properly * @param pME pointer to QGraphicsSceneMouseEvent object */ -void VGrainlineItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME) +void VGrainlineItem::mouseMoveEvent(QGraphicsSceneMouseEvent *pME) { QPointF ptDiff = pME->scenePos() - m_ptStartMove; qreal dX; @@ -322,12 +327,12 @@ void VGrainlineItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME) } else if (m_eMode == mResize && m_moveType & IsResizable) { - qreal dLen = qSqrt(ptDiff.x()*ptDiff.x() + ptDiff.y()*ptDiff.y()); + qreal dLen = qSqrt(ptDiff.x() * ptDiff.x() + ptDiff.y() * ptDiff.y()); qreal dAng = qAtan2(-ptDiff.y(), ptDiff.x()); - dLen = -dLen*qCos(dAng - m_dRotation); + dLen = -dLen * qCos(dAng - m_dRotation); qreal dPrevLen = m_dLength; // try with new length - if (not (m_moveType & IsMovable)) + if (not(m_moveType & IsMovable)) { dLen *= 2; } @@ -343,8 +348,7 @@ void VGrainlineItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME) if (m_moveType & IsMovable) { - QLineF grainline(this->pos().x(), this->pos().y(), - this->pos().x() + dPrevLen, this->pos().y()); + QLineF grainline(this->pos().x(), this->pos().y(), this->pos().x() + dPrevLen, this->pos().y()); grainline.setAngle(qRadiansToDegrees(m_dRotation)); grainline = QLineF(grainline.p2(), grainline.p1()); grainline.setLength(m_dLength); @@ -352,8 +356,7 @@ void VGrainlineItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME) } else { - QLineF grainline(m_ptCenter.x(), m_ptCenter.y(), - m_ptCenter.x() + m_dLength / 2.0, m_ptCenter.y()); + QLineF grainline(m_ptCenter.x(), m_ptCenter.y(), m_ptCenter.x() + m_dLength / 2.0, m_ptCenter.y()); grainline.setAngle(qRadiansToDegrees(m_dRotation)); grainline = QLineF(grainline.p2(), grainline.p1()); @@ -380,7 +383,7 @@ void VGrainlineItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME) else if (m_eMode == mRotate && m_moveType & IsRotatable) { // prevent strange angle changes due to singularities - qreal dLen = qSqrt(ptDiff.x()*ptDiff.x() + ptDiff.y()*ptDiff.y()); + qreal dLen = qSqrt(ptDiff.x() * ptDiff.x() + ptDiff.y() * ptDiff.y()); if (dLen < 2) { return; @@ -411,7 +414,7 @@ void VGrainlineItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME) * moved * @param pME pointer to QGraphicsSceneMouseEvent object */ -void VGrainlineItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* pME) +void VGrainlineItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *pME) { if (pME->button() != Qt::LeftButton) { @@ -425,7 +428,7 @@ void VGrainlineItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* pME) } QPointF ptDiff = pME->scenePos() - m_ptStartMove; - qreal dLen = qSqrt(ptDiff.x()*ptDiff.x() + ptDiff.y()*ptDiff.y()); + qreal dLen = qSqrt(ptDiff.x() * ptDiff.x() + ptDiff.y() * ptDiff.y()); bool bShort = (dLen < 2); if (m_eMode == mMove || m_eMode == mResize) @@ -508,20 +511,20 @@ void VGrainlineItem::UpdateRectangle() m_ptStart = mapToParent(mainLine.p1()); m_ptFinish = mapToParent(mainLine.p2()); - m_ptCenter = (m_ptStart + m_ptFinish)/2; + m_ptCenter = (m_ptStart + m_ptFinish) / 2; m_polyBound.clear(); if (grainline.IsFourWays()) { - m_polyBound << QPointF(mainLine.p1().x() + (m_dLength/2)*cos(m_dRotation + M_PI/2), - mainLine.p1().y() - (m_dLength/2)*sin(m_dRotation + M_PI/2)); - m_polyBound << QPointF(mainLine.p1().x() + (m_dLength/2)*cos(m_dRotation - M_PI/2), - mainLine.p1().y() - (m_dLength/2)*sin(m_dRotation - M_PI/2)); - m_polyBound << QPointF(mainLine.p2().x() + (m_dLength/2)*cos(m_dRotation - M_PI/2), - mainLine.p2().y() - (m_dLength/2)*sin(m_dRotation - M_PI/2)); - m_polyBound << QPointF(mainLine.p2().x() + (m_dLength/2)*cos(m_dRotation + M_PI/2), - mainLine.p2().y() - (m_dLength/2)*sin(m_dRotation + M_PI/2)); + m_polyBound << QPointF(mainLine.p1().x() + (m_dLength / 2) * cos(m_dRotation + M_PI / 2), + mainLine.p1().y() - (m_dLength / 2) * sin(m_dRotation + M_PI / 2)); + m_polyBound << QPointF(mainLine.p1().x() + (m_dLength / 2) * cos(m_dRotation - M_PI / 2), + mainLine.p1().y() - (m_dLength / 2) * sin(m_dRotation - M_PI / 2)); + m_polyBound << QPointF(mainLine.p2().x() + (m_dLength / 2) * cos(m_dRotation - M_PI / 2), + mainLine.p2().y() - (m_dLength / 2) * sin(m_dRotation - M_PI / 2)); + m_polyBound << QPointF(mainLine.p2().x() + (m_dLength / 2) * cos(m_dRotation + M_PI / 2), + mainLine.p2().y() - (m_dLength / 2) * sin(m_dRotation + M_PI / 2)); const QLineF secondaryLine = grainline.SecondaryLine(); m_ptSecondaryStart = mapToParent(secondaryLine.p1()); @@ -529,14 +532,14 @@ void VGrainlineItem::UpdateRectangle() } else { - m_polyBound << QPointF(mainLine.p1().x() + rectWidth*cos(m_dRotation + M_PI/2), - mainLine.p1().y() - rectWidth*sin(m_dRotation + M_PI/2)); - m_polyBound << QPointF(mainLine.p1().x() + rectWidth*cos(m_dRotation - M_PI/2), - mainLine.p1().y() - rectWidth*sin(m_dRotation - M_PI/2)); - m_polyBound << QPointF(mainLine.p2().x() + rectWidth*cos(m_dRotation - M_PI/2), - mainLine.p2().y() - rectWidth*sin(m_dRotation - M_PI/2)); - m_polyBound << QPointF(mainLine.p2().x() + rectWidth*cos(m_dRotation + M_PI/2), - mainLine.p2().y() - rectWidth*sin(m_dRotation + M_PI/2)); + m_polyBound << QPointF(mainLine.p1().x() + rectWidth * cos(m_dRotation + M_PI / 2), + mainLine.p1().y() - rectWidth * sin(m_dRotation + M_PI / 2)); + m_polyBound << QPointF(mainLine.p1().x() + rectWidth * cos(m_dRotation - M_PI / 2), + mainLine.p1().y() - rectWidth * sin(m_dRotation - M_PI / 2)); + m_polyBound << QPointF(mainLine.p2().x() + rectWidth * cos(m_dRotation - M_PI / 2), + mainLine.p2().y() - rectWidth * sin(m_dRotation - M_PI / 2)); + m_polyBound << QPointF(mainLine.p2().x() + rectWidth * cos(m_dRotation + M_PI / 2), + mainLine.p2().y() - rectWidth * sin(m_dRotation + M_PI / 2)); } m_rectBoundingBox = m_polyBound.boundingRect().adjusted(-2, -2, 2, 2); setTransformOriginPoint(m_rectBoundingBox.center()); @@ -560,12 +563,12 @@ auto VGrainlineItem::GetAngle(const QPointF &pt) const -> double * @param dAng angle of rotation * @return point, which is a result of rotating pt around ptCenter by angle dAng */ -auto VGrainlineItem::Rotate(const QPointF& pt, const QPointF& ptCenter, qreal dAng) -> QPointF +auto VGrainlineItem::Rotate(const QPointF &pt, const QPointF &ptCenter, qreal dAng) -> QPointF { QPointF ptRel = pt - ptCenter; QPointF ptFinal; - ptFinal.setX(ptRel.x()*qCos(dAng) + ptRel.y()*qSin(dAng)); - ptFinal.setY(-ptRel.x()*qSin(dAng) + ptRel.y()*qCos(dAng)); + ptFinal.setX(ptRel.x() * qCos(dAng) + ptRel.y() * qSin(dAng)); + ptFinal.setY(-ptRel.x() * qSin(dAng) + ptRel.y() * qCos(dAng)); ptFinal += ptCenter; return ptFinal; } @@ -583,8 +586,8 @@ auto VGrainlineItem::GetInsideCorner(int i, qreal dDist) const -> QPointF QPointF pt1 = m_polyBound.at((i + 1) % m_polyBound.count()) - m_polyBound.at(i); QPointF pt2 = m_polyBound.at((i + m_polyBound.count() - 1) % m_polyBound.count()) - m_polyBound.at(i); - pt1 = dDist*pt1/qSqrt(pt1.x()*pt1.x() + pt1.y()*pt1.y()); - pt2 = dDist*pt2/qSqrt(pt2.x()*pt2.x() + pt2.y()*pt2.y()); + pt1 = dDist * pt1 / qSqrt(pt1.x() * pt1.x() + pt1.y() * pt1.y()); + pt2 = dDist * pt2 / qSqrt(pt2.x() * pt2.x() + pt2.y() * pt2.y()); return m_polyBound.at(i) + pt1 + pt2; } @@ -701,15 +704,15 @@ void VGrainlineItem::UpdatePolyResize() m_polyResize << ptA; const double dSize = resizeRectSize; - ptA.setX(ptA.x() - dSize*cos(m_dRotation - M_PI/2)); - ptA.setY(ptA.y() + dSize*sin(m_dRotation - M_PI/2)); + ptA.setX(ptA.x() - dSize * cos(m_dRotation - M_PI / 2)); + ptA.setY(ptA.y() + dSize * sin(m_dRotation - M_PI / 2)); m_polyResize << ptA; - ptA.setX(ptA.x() + dSize*cos(m_dRotation)); - ptA.setY(ptA.y() - dSize*sin(m_dRotation)); + ptA.setX(ptA.x() + dSize * cos(m_dRotation)); + ptA.setY(ptA.y() - dSize * sin(m_dRotation)); m_polyResize << ptA; - ptA.setX(ptA.x() - dSize*cos(m_dRotation + M_PI/2)); - ptA.setY(ptA.y() + dSize*sin(m_dRotation + M_PI/2)); + ptA.setX(ptA.x() - dSize * cos(m_dRotation + M_PI / 2)); + ptA.setY(ptA.y() + dSize * sin(m_dRotation + M_PI / 2)); m_polyResize << ptA; } diff --git a/src/libs/vwidgets/vgrainlineitem.h b/src/libs/vwidgets/vgrainlineitem.h index 09fd128b8..9d2c1a77c 100644 --- a/src/libs/vwidgets/vgrainlineitem.h +++ b/src/libs/vwidgets/vgrainlineitem.h @@ -29,65 +29,75 @@ #ifndef VGRAINLINEITEM_H #define VGRAINLINEITEM_H -#include "vpieceitem.h" -#include "../vpatterndb/floatItemData/floatitemdef.h" #include "../vmisc/def.h" +#include "../vmisc/theme/themeDef.h" +#include "../vpatterndb/floatItemData/floatitemdef.h" +#include "vpieceitem.h" class VPieceGrainline; class VGrainlineItem final : public VPieceItem { Q_OBJECT // NOLINT + public: - explicit VGrainlineItem(QGraphicsItem* pParent = nullptr); + explicit VGrainlineItem(VColorRole role, QGraphicsItem *pParent = nullptr); ~VGrainlineItem() override = default; auto shape() const -> QPainterPath override; - void paint(QPainter* pP, const QStyleOptionGraphicsItem* pOption, QWidget* pWidget) override; - void UpdateGeometry(const QPointF& ptPos, qreal dRotation, qreal dLength, GrainlineArrowDirection eAT); + void paint(QPainter *pP, const QStyleOptionGraphicsItem *pOption, QWidget *pWidget) override; + void UpdateGeometry(const QPointF &ptPos, qreal dRotation, qreal dLength, GrainlineArrowDirection eAT); - auto type() const -> int override {return Type;} - enum { Type = UserType + static_cast(Vis::GrainlineItem)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::GrainlineItem) + }; auto Grainline() const -> VPieceGrainline; + auto GetColor() const -> QColor; + void SetColor(const QColor &color); + signals: void SignalResized(qreal dLength); - void SignalRotated(qreal dRot, const QPointF& ptNewPos); + void SignalRotated(qreal dRot, const QPointF &ptNewPos); protected: - void mousePressEvent(QGraphicsSceneMouseEvent* pME) override; - void mouseMoveEvent(QGraphicsSceneMouseEvent* pME) override; - void mouseReleaseEvent(QGraphicsSceneMouseEvent* pME) override; - void hoverEnterEvent(QGraphicsSceneHoverEvent* pME) override; - void hoverLeaveEvent(QGraphicsSceneHoverEvent* pME) override; + void mousePressEvent(QGraphicsSceneMouseEvent *pME) override; + void mouseMoveEvent(QGraphicsSceneMouseEvent *pME) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *pME) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *pME) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *pME) override; void Update() override; void UpdateRectangle(); auto GetAngle(const QPointF &pt) const -> double override; - static auto Rotate(const QPointF& pt, const QPointF& ptCenter, qreal dAng) -> QPointF; + static auto Rotate(const QPointF &pt, const QPointF &ptCenter, qreal dAng) -> QPointF; auto GetInsideCorner(int i, qreal dDist) const -> QPointF; private: Q_DISABLE_COPY_MOVE(VGrainlineItem) // NOLINT - qreal m_dRotation{0}; - qreal m_dStartRotation{0}; - qreal m_dLength{0}; - QPolygonF m_polyBound{}; - QPointF m_ptStartPos{}; - QPointF m_ptStartMove{}; - QPolygonF m_polyResize{}; - qreal m_dStartLength{0}; - QPointF m_ptStart{}; - QPointF m_ptFinish{}; - QPointF m_ptSecondaryStart{}; - QPointF m_ptSecondaryFinish{}; - QPointF m_ptCenter{}; - qreal m_dAngle{0}; + qreal m_dRotation{0}; + qreal m_dStartRotation{0}; + qreal m_dLength{0}; + QPolygonF m_polyBound{}; + QPointF m_ptStartPos{}; + QPointF m_ptStartMove{}; + QPolygonF m_polyResize{}; + qreal m_dStartLength{0}; + QPointF m_ptStart{}; + QPointF m_ptFinish{}; + QPointF m_ptSecondaryStart{}; + QPointF m_ptSecondaryFinish{}; + QPointF m_ptCenter{}; + qreal m_dAngle{0}; GrainlineArrowDirection m_eArrowType{GrainlineArrowDirection::twoWaysUpDown}; - double m_penWidth{1}; + double m_penWidth{1}; + VColorRole m_role; + QColor m_color{Qt::black}; auto MainShape() const -> QPainterPath; @@ -98,4 +108,16 @@ private: void UpdatePolyResize(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline auto VGrainlineItem::GetColor() const -> QColor +{ + return m_color; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline void VGrainlineItem::SetColor(const QColor &color) +{ + m_color = color; +} + #endif // VGRAINLINEITEM_H diff --git a/src/libs/vwidgets/vgraphicssimpletextitem.cpp b/src/libs/vwidgets/vgraphicssimpletextitem.cpp index 7c9592736..38d16c6c4 100644 --- a/src/libs/vwidgets/vgraphicssimpletextitem.cpp +++ b/src/libs/vwidgets/vgraphicssimpletextitem.cpp @@ -41,26 +41,23 @@ #include #include #include -#include -#include "vmaingraphicsscene.h" -#include "vmaingraphicsview.h" -#include "global.h" -#include "vscenepoint.h" -#include "../vmisc/vmath.h" -#include "../vmisc/vabstractvalapplication.h" #include "../vmisc/literals.h" +#include "../vmisc/vabstractvalapplication.h" +#include "global.h" +#include "theme/vscenestylesheet.h" +#include "vmaingraphicsview.h" +#include "vscenepoint.h" //--------------------------------------------------------------------------------------------------------------------- /** * @brief VGraphicsSimpleTextItem default constructor. * @param parent parent object. */ -VGraphicsSimpleTextItem::VGraphicsSimpleTextItem(QGraphicsItem * parent) - : QGraphicsSimpleTextItem(parent), - selectionType(SelectionType::ByMouseRelease), - m_oldScale(1), - m_showParentTooltip(true) +VGraphicsSimpleTextItem::VGraphicsSimpleTextItem(VColorRole textColor, VColorRole textHoverColor, QGraphicsItem *parent) + : QGraphicsSimpleTextItem(parent), + m_textColor(textColor), + m_textHoverColor(textHoverColor) { Init(); } @@ -71,11 +68,11 @@ VGraphicsSimpleTextItem::VGraphicsSimpleTextItem(QGraphicsItem * parent) * @param text text. * @param parent parent object. */ -VGraphicsSimpleTextItem::VGraphicsSimpleTextItem( const QString & text, QGraphicsItem * parent ) - : QGraphicsSimpleTextItem(text, parent), - selectionType(SelectionType::ByMouseRelease), - m_oldScale(1), - m_showParentTooltip(true) +VGraphicsSimpleTextItem::VGraphicsSimpleTextItem(const QString &text, VColorRole textColor, VColorRole textHoverColor, + QGraphicsItem *parent) + : QGraphicsSimpleTextItem(text, parent), + m_textColor(textColor), + m_textHoverColor(textHoverColor) { Init(); } @@ -91,6 +88,8 @@ void VGraphicsSimpleTextItem::paint(QPainter *painter, const QStyleOptionGraphic } }; + RefreshColor(); + QFont font = this->font(); if (font.pointSize() != VAbstractApplication::VApp()->Settings()->GetPatternLabelFontSize()) { @@ -102,7 +101,7 @@ void VGraphicsSimpleTextItem::paint(QPainter *painter, const QStyleOptionGraphic const qreal scale = SceneScale(scene); if (scale > 1 && not VFuzzyComparePossibleNulls(m_oldScale, scale)) { - setScale(1/scale); + setScale(1 / scale); CorrectLabelPosition(); UpdateLine(); m_oldScale = scale; @@ -189,20 +188,20 @@ void VGraphicsSimpleTextItem::CorrectLabelPosition() */ auto VGraphicsSimpleTextItem::itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant { - if (change == ItemPositionChange && scene()) - { - // Each time we move something we call recalculation scene rect. In some cases this can cause moving - // objects positions. And this cause infinite redrawing. That's why we wait the finish of saving the last move. - static bool changeFinished = true; - if (changeFinished) - { + if (change == ItemPositionChange && scene()) + { + // Each time we move something we call recalculation scene rect. In some cases this can cause moving + // objects positions. And this cause infinite redrawing. That's why we wait the finish of saving the last move. + static bool changeFinished = true; + if (changeFinished) + { changeFinished = false; if (scene()) { const QList viewList = scene()->views(); if (not viewList.isEmpty()) { - if (VMainGraphicsView *view = qobject_cast(viewList.at(0))) + if (auto *view = qobject_cast(viewList.at(0))) { view->EnsureItemVisibleWithDelay(this, VMainGraphicsView::scrollDelay); } @@ -220,14 +219,14 @@ auto VGraphicsSimpleTextItem::itemChange(GraphicsItemChange change, const QVaria emit NameChangePosition(m_realPos + this->parentItem()->pos()); changeFinished = true; - } - } - if (change == QGraphicsItem::ItemSelectedHasChanged) - { - setFlag(QGraphicsItem::ItemIsFocusable, value.toBool()); - emit PointSelected(value.toBool()); - } - return QGraphicsSimpleTextItem::itemChange(change, value); + } + } + if (change == QGraphicsItem::ItemSelectedHasChanged) + { + setFlag(QGraphicsItem::ItemIsFocusable, value.toBool()); + emit PointSelected(value.toBool()); + } + return QGraphicsSimpleTextItem::itemChange(change, value); } //--------------------------------------------------------------------------------------------------------------------- @@ -246,10 +245,11 @@ void VGraphicsSimpleTextItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) setCursor(VAbstractValApplication::VApp()->getSceneView()->viewport()->cursor()); } - this->setBrush(Qt::green); + m_hoverFlag = true; + setBrush(Qt::green); QGraphicsItem *parent = parentItem(); - if(parent && m_showParentTooltip) + if (parent && m_showParentTooltip) { setToolTip(parent->toolTip()); } @@ -264,7 +264,7 @@ void VGraphicsSimpleTextItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) */ void VGraphicsSimpleTextItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { - this->setBrush(m_baseColor); + m_hoverFlag = false; QGraphicsSimpleTextItem::hoverLeaveEvent(event); } @@ -285,7 +285,7 @@ void VGraphicsSimpleTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) QGraphicsSimpleTextItem::mousePressEvent(event); // Somehow clicking on notselectable object do not clean previous selections. - if (not (flags() & ItemIsSelectable) && scene()) + if (not(flags() & ItemIsSelectable) && scene()) { scene()->clearSelection(); } @@ -338,30 +338,17 @@ void VGraphicsSimpleTextItem::keyReleaseEvent(QKeyEvent *event) { case Qt::Key_Delete: emit DeleteTool(); - return; //Leave this method immediately after call!!! + return; // Leave this method immediately after call!!! default: break; } - QGraphicsSimpleTextItem::keyReleaseEvent ( event ); + QGraphicsSimpleTextItem::keyReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- -void VGraphicsSimpleTextItem::SetDestination(const QPointF &destination) +void VGraphicsSimpleTextItem::RefreshColor() { - m_destination = destination; -} - -//--------------------------------------------------------------------------------------------------------------------- -auto VGraphicsSimpleTextItem::BaseColor() const -> QColor -{ - return m_baseColor; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VGraphicsSimpleTextItem::SetBaseColor(const QColor &baseColor) -{ - m_baseColor = baseColor; - setBrush(m_baseColor); + setBrush(VSceneStylesheet::Color(m_hoverFlag ? m_textHoverColor : m_textColor)); } //--------------------------------------------------------------------------------------------------------------------- @@ -370,7 +357,7 @@ void VGraphicsSimpleTextItem::Init() this->setFlag(QGraphicsItem::ItemIsMovable, true); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); - this->setFlag(QGraphicsItem::ItemIsFocusable, true);// For keyboard input focus + this->setFlag(QGraphicsItem::ItemIsFocusable, true); // For keyboard input focus this->setAcceptHoverEvents(true); QFont font = this->font(); font.setPointSize(VAbstractApplication::VApp()->Settings()->GetPatternLabelFontSize()); diff --git a/src/libs/vwidgets/vgraphicssimpletextitem.h b/src/libs/vwidgets/vgraphicssimpletextitem.h index 9c814bfa2..b9de441cc 100644 --- a/src/libs/vwidgets/vgraphicssimpletextitem.h +++ b/src/libs/vwidgets/vgraphicssimpletextitem.h @@ -29,7 +29,6 @@ #ifndef VGRAPHICSSIMPLETEXTITEM_H #define VGRAPHICSSIMPLETEXTITEM_H - #include #include #include @@ -40,6 +39,12 @@ #include #include "../vmisc/def.h" +#include "qtclasshelpermacros.h" +#include "theme/themeDef.h" + +#if QT_VERSION < QT_VERSION_CHECK(5, 13, 0) +#include "../vmisc/defglobal.h" +#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) /** * @brief The VGraphicsSimpleTextItem class pointer label. @@ -47,16 +52,20 @@ class VGraphicsSimpleTextItem : public QObject, public QGraphicsSimpleTextItem { Q_OBJECT // NOLINT + public: - explicit VGraphicsSimpleTextItem(QGraphicsItem *parent = nullptr); - explicit VGraphicsSimpleTextItem( const QString & text, QGraphicsItem *parent = nullptr ); - virtual ~VGraphicsSimpleTextItem() =default; + explicit VGraphicsSimpleTextItem(VColorRole textColor, VColorRole textHoverColor, QGraphicsItem *parent = nullptr); + explicit VGraphicsSimpleTextItem(const QString &text, VColorRole textColor, VColorRole textHoverColor, + QGraphicsItem *parent = nullptr); + ~VGraphicsSimpleTextItem() override = default; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Vis::GraphicsSimpleTextItem)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::GraphicsSimpleTextItem) + }; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, - QWidget *widget = nullptr) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; void setEnabled(bool enabled); void LabelSelectionType(const SelectionType &type); @@ -65,44 +74,84 @@ public: void SetRealPos(const QPointF &pos); - auto BaseColor() const -> QColor; - void SetBaseColor(const QColor &baseColor); - void SetDestination(const QPointF &destination); + void RefreshColor(); + + VColorRole GetTextColor() const; + void SetTextColor(VColorRole newTextColor); + + VColorRole GetTextHoverColor() const; + void SetTextHoverColor(VColorRole newTextHoverColor); + signals: /** * @brief NameChangePosition emit when label change position. * @param pos new posotion. */ - void NameChangePosition(const QPointF &pos); + void NameChangePosition(const QPointF &pos); /** * @brief ShowContextMenu emit when need show tool context menu. * @param event context menu event. */ - void ShowContextMenu(QGraphicsSceneContextMenuEvent *event); - void DeleteTool(); - void PointChoosed(); - void PointSelected(bool selected); + void ShowContextMenu(QGraphicsSceneContextMenuEvent *event); + void DeleteTool(); + void PointChoosed(); + void PointSelected(bool selected); + protected: - virtual auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; - virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent *event ) override; - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent *event ) override; - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent *event ) override; - virtual void mousePressEvent( QGraphicsSceneMouseEvent * event ) override; - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) override; - virtual void keyReleaseEvent ( QKeyEvent * event ) override; + auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; + private: - SelectionType selectionType; - qreal m_oldScale; - bool m_showParentTooltip; - QPointF m_realPos{}; - QColor m_baseColor{Qt::black}; - QPointF m_destination{}; + Q_DISABLE_COPY_MOVE(VGraphicsSimpleTextItem) // NOLINT + SelectionType selectionType{SelectionType::ByMouseRelease}; + qreal m_oldScale{1}; + bool m_showParentTooltip{true}; + QPointF m_realPos{}; + QPointF m_destination{}; + bool m_hoverFlag{false}; + VColorRole m_textColor; + VColorRole m_textHoverColor; void Init(); void CorrectLabelPosition(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline auto VGraphicsSimpleTextItem::GetTextHoverColor() const -> VColorRole +{ + return m_textHoverColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline void VGraphicsSimpleTextItem::SetTextHoverColor(VColorRole newTextHoverColor) +{ + m_textHoverColor = newTextHoverColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline auto VGraphicsSimpleTextItem::GetTextColor() const -> VColorRole +{ + return m_textColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline void VGraphicsSimpleTextItem::SetTextColor(VColorRole newTextColor) +{ + m_textColor = newTextColor; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline void VGraphicsSimpleTextItem::SetDestination(const QPointF &destination) +{ + m_destination = destination; +} + #endif // VGRAPHICSSIMPLETEXTITEM_H diff --git a/src/libs/vwidgets/vmaingraphicsscene.cpp b/src/libs/vwidgets/vmaingraphicsscene.cpp index dc7e87082..d62915884 100644 --- a/src/libs/vwidgets/vmaingraphicsscene.cpp +++ b/src/libs/vwidgets/vmaingraphicsscene.cpp @@ -34,26 +34,26 @@ #include #include #include +#include #include #include -#include -#include -#include "global.h" #include "../vmisc/vabstractapplication.h" +#include "global.h" //--------------------------------------------------------------------------------------------------------------------- /** * @brief VMainGraphicsScene default constructor. */ VMainGraphicsScene::VMainGraphicsScene(QObject *parent) - : QGraphicsScene(parent), - horScrollBar(0), - verScrollBar(0), - _transform(QTransform()), - scenePos(QPointF()), - origins() -{} + : QGraphicsScene(parent), + horScrollBar(0), + verScrollBar(0), + _transform(QTransform()), + scenePos(QPointF()), + origins() +{ +} //--------------------------------------------------------------------------------------------------------------------- /** @@ -61,21 +61,22 @@ VMainGraphicsScene::VMainGraphicsScene(QObject *parent) * @param sceneRect scene rect. * @param parent parent object. */ -VMainGraphicsScene::VMainGraphicsScene(const QRectF & sceneRect, QObject * parent) - :QGraphicsScene ( sceneRect, parent ), - horScrollBar(0), - verScrollBar(0), - _transform(QTransform()), - scenePos(), - origins() -{} +VMainGraphicsScene::VMainGraphicsScene(const QRectF &sceneRect, QObject *parent) + : QGraphicsScene(sceneRect, parent), + horScrollBar(0), + verScrollBar(0), + _transform(QTransform()), + scenePos(), + origins() +{ +} //--------------------------------------------------------------------------------------------------------------------- /** * @brief mouseMoveEvent handle mouse move events. * @param event mouse move event. */ -void VMainGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent* event) +void VMainGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { scenePos = event->scenePos(); emit mouseMove(event->scenePos()); @@ -169,7 +170,7 @@ void VMainGraphicsScene::InitOrigins() // Arrow left side QLineF arrowLeftLine = lineX; - arrowLeftLine.setAngle(arrowLeftLine.angle()-arrowAngle); + arrowLeftLine.setAngle(arrowLeftLine.angle() - arrowAngle); arrowLeftLine.setLength(arrowLength); auto *xLine2 = new QGraphicsLineItem(arrowLeftLine); xLine2->setPen(originsPen); @@ -180,7 +181,7 @@ void VMainGraphicsScene::InitOrigins() // Arrow right side QLineF arrowRightLine = lineX; - arrowRightLine.setAngle(arrowRightLine.angle()+arrowAngle); + arrowRightLine.setAngle(arrowRightLine.angle() + arrowAngle); arrowRightLine.setLength(arrowLength); auto *xLine3 = new QGraphicsLineItem(arrowRightLine); xLine3->setPen(originsPen); @@ -194,7 +195,7 @@ void VMainGraphicsScene::InitOrigins() xOrigin->setBrush(axisTextBrush); xOrigin->setFlag(QGraphicsItem::ItemIgnoresTransformations); xOrigin->setZValue(-0.5); - xOrigin->setPos(30, -(xOrigin->boundingRect().height()/2)); + xOrigin->setPos(30, -(xOrigin->boundingRect().height() / 2)); origins.append(xOrigin); } @@ -210,7 +211,7 @@ void VMainGraphicsScene::InitOrigins() // Arrow left side QLineF arrowLeftLine = lineY; - arrowLeftLine.setAngle(arrowLeftLine.angle()-arrowAngle); + arrowLeftLine.setAngle(arrowLeftLine.angle() - arrowAngle); arrowLeftLine.setLength(arrowLength); auto *yLine2 = new QGraphicsLineItem(arrowLeftLine); yLine2->setPen(originsPen); @@ -221,7 +222,7 @@ void VMainGraphicsScene::InitOrigins() // Arrow right side QLineF arrowRightLine = lineY; - arrowRightLine.setAngle(arrowRightLine.angle()+arrowAngle); + arrowRightLine.setAngle(arrowRightLine.angle() + arrowAngle); arrowRightLine.setLength(arrowLength); auto *yLine3 = new QGraphicsLineItem(arrowRightLine); yLine3->setPen(originsPen); @@ -235,7 +236,7 @@ void VMainGraphicsScene::InitOrigins() yOrigin->setBrush(axisTextBrush); yOrigin->setFlag(QGraphicsItem::ItemIgnoresTransformations); yOrigin->setZValue(-0.5); - yOrigin->setPos(-(yOrigin->boundingRect().width()/2), 30); + yOrigin->setPos(-(yOrigin->boundingRect().width() / 2), 30); origins.append(yOrigin); } } @@ -265,7 +266,7 @@ auto VMainGraphicsScene::VisibleItemsBoundingRect() const -> QRectF const QList qItems = items(); for (auto *item : qItems) { - if(not item->isVisible()) + if (not item->isVisible()) { continue; } diff --git a/src/libs/vwidgets/vmaingraphicsview.h b/src/libs/vwidgets/vmaingraphicsview.h index decf2a3b9..29f0b419a 100644 --- a/src/libs/vwidgets/vmaingraphicsview.h +++ b/src/libs/vwidgets/vmaingraphicsview.h @@ -36,7 +36,6 @@ #include #include #include -#include #include #if QT_VERSION < QT_VERSION_CHECK(5, 13, 0) diff --git a/src/libs/vwidgets/vscenepoint.cpp b/src/libs/vwidgets/vscenepoint.cpp index 277dce3b0..bf59dda2d 100644 --- a/src/libs/vwidgets/vscenepoint.cpp +++ b/src/libs/vwidgets/vscenepoint.cpp @@ -27,12 +27,13 @@ *************************************************************************/ #include "vscenepoint.h" -#include "../vmisc/def.h" -#include "../vmisc/vabstractapplication.h" #include "../vgeometry/vpointf.h" +#include "../vmisc/def.h" +#include "../vmisc/theme/vscenestylesheet.h" +#include "../vmisc/vabstractapplication.h" #include "global.h" -#include "vgraphicssimpletextitem.h" #include "scalesceneitems.h" +#include "vgraphicssimpletextitem.h" #include #include @@ -42,23 +43,19 @@ #include //--------------------------------------------------------------------------------------------------------------------- -VScenePoint::VScenePoint(QGraphicsItem *parent) - : QGraphicsEllipseItem(parent), - m_namePoint(new VGraphicsSimpleTextItem(this)), - m_lineName(new VScaledLine(this)), - m_onlyPoint(false), - m_isHovered(false), - m_showLabel(true), - m_baseColor(Qt::black), - m_selectedFromChild(false) +VScenePoint::VScenePoint(VColorRole role, QGraphicsItem *parent) + : QGraphicsEllipseItem(parent), + m_namePoint(new VGraphicsSimpleTextItem(VColorRole::DraftLabelColor, VColorRole::DraftLabelHoverColor, this)), + m_lineName(new VScaledLine(VColorRole::DraftLabelLineColor, this)), + m_role(role) { m_lineName->SetBoldLine(false); m_lineName->setLine(QLineF(0, 0, 1, 0)); m_lineName->setVisible(false); - this->setBrush(QBrush(Qt::NoBrush)); - this->setAcceptHoverEvents(true); - this->setFlag(QGraphicsItem::ItemIsFocusable, true);// For keyboard input focus + setBrush(QBrush(Qt::NoBrush)); + setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsFocusable, true); // For keyboard input focus } //--------------------------------------------------------------------------------------------------------------------- @@ -74,16 +71,18 @@ void VScenePoint::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio if (settings->GetShowAccuracyRadius()) { painter->save(); + QPen pen = painter->pen(); - pen.setWidthF(accuracyPointOnLine/15); + pen.setWidthF(accuracyPointOnLine / 15); pen.setStyle(Qt::DashLine); - pen.setColor(Qt::black); + pen.setColor(VSceneStylesheet::ToolStyle().AccuracyRadiusColor()); + painter->setPen(pen); painter->drawEllipse(PointRect(accuracyPointOnLine)); painter->restore(); } - - if (settings->GetPatternLabelFontSize()*scale < minVisibleFontSize || settings->GetHideLabels()) + + if (settings->GetPatternLabelFontSize() * scale < minVisibleFontSize || settings->GetHideLabels()) { m_namePoint->setVisible(false); m_lineName->setVisible(false); @@ -93,13 +92,6 @@ void VScenePoint::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio if (not m_onlyPoint) { m_namePoint->setVisible(m_showLabel); - - QPen lPen = m_lineName->pen(); - QColor color = CorrectColor(m_lineName, Qt::black); - color.setAlpha(50); - lPen.setColor(color); - m_lineName->setPen(lPen); - RefreshLine(); } } @@ -160,7 +152,7 @@ void VScenePoint::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) void VScenePoint::RefreshLine() { QRectF nRec = m_namePoint->sceneBoundingRect(); - nRec.translate(- scenePos()); + nRec.translate(-scenePos()); if (not rect().intersects(nRec)) { const QRectF nameRec = m_namePoint->sceneBoundingRect(); @@ -170,7 +162,7 @@ void VScenePoint::RefreshLine() QLineF(QPointF(), nameRec.center() - scenePos()), p1, p2); const QPointF pRec = VGObject::LineIntersectRect(nameRec, QLineF(scenePos(), nameRec.center())); - if (QLineF(p1, pRec - scenePos()).length() <= ToPixel(4/qMax(1.0, SceneScale(scene())), Unit::Mm)) + if (QLineF(p1, pRec - scenePos()).length() <= ToPixel(4 / qMax(1.0, SceneScale(scene())), Unit::Mm)) { m_lineName->setVisible(false); } @@ -186,6 +178,42 @@ void VScenePoint::RefreshLine() } } +//--------------------------------------------------------------------------------------------------------------------- +auto VScenePoint::GetLabelLineColorRole() const -> VColorRole +{ + return m_lineName->GetColorRole(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VScenePoint::SetLabelLineColorRole(VColorRole role) +{ + m_lineName->SetColorRole(role); +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VScenePoint::GetLabelTextColorRole() const -> VColorRole +{ + return m_namePoint->GetTextColor(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VScenePoint::SetLabelTextColorRole(VColorRole role) +{ + m_namePoint->SetTextColor(role); +} + +//--------------------------------------------------------------------------------------------------------------------- +auto VScenePoint::GetLabelTextHoverColorRole() const -> VColorRole +{ + return m_namePoint->GetTextHoverColor(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VScenePoint::SetLabelTextHoverColorRole(VColorRole role) +{ + m_namePoint->SetTextHoverColor(role); +} + //--------------------------------------------------------------------------------------------------------------------- void VScenePoint::ScaleMainPenWidth(qreal scale) { @@ -193,5 +221,11 @@ void VScenePoint::ScaleMainPenWidth(qreal scale) : VAbstractApplication::VApp()->Settings()->WidthHairLine(), scale); - setPen(QPen(CorrectColor(this, m_baseColor), width)); + QPen pointPen = pen(); + if (m_role != VColorRole::CustomColor) + { + pointPen.setColor(VSceneStylesheet::CorrectToolColor(this, VSceneStylesheet::Color(m_role))); + } + pointPen.setWidthF(width); + setPen(pointPen); } diff --git a/src/libs/vwidgets/vscenepoint.h b/src/libs/vwidgets/vscenepoint.h index 8e230dfce..7934b9076 100644 --- a/src/libs/vwidgets/vscenepoint.h +++ b/src/libs/vwidgets/vscenepoint.h @@ -29,48 +29,60 @@ #ifndef VSCENEPOINT_H #define VSCENEPOINT_H -#include #include +#include #include "../vmisc/def.h" +#include "../vmisc/theme/themeDef.h" class VGraphicsSimpleTextItem; class VPointF; class VScaledLine; -class VScenePoint: public QGraphicsEllipseItem +class VScenePoint : public QGraphicsEllipseItem { public: - explicit VScenePoint(QGraphicsItem *parent = nullptr); - virtual ~VScenePoint() = default; + explicit VScenePoint(VColorRole role, QGraphicsItem *parent = nullptr); + ~VScenePoint() override = default; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Vis::ScenePoint)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::ScenePoint) + }; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, - QWidget *widget = nullptr) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; virtual void RefreshPointGeometry(const VPointF &point); void RefreshLine(); + auto GetColorRole() const -> VColorRole; + void SetColorRole(VColorRole role); + + auto GetLabelLineColorRole() const -> VColorRole; + void SetLabelLineColorRole(VColorRole role); + + auto GetLabelTextColorRole() const -> VColorRole; + void SetLabelTextColorRole(VColorRole role); + + auto GetLabelTextHoverColorRole() const -> VColorRole; + void SetLabelTextHoverColorRole(VColorRole role); + protected: /** @brief namePoint point label. */ - VGraphicsSimpleTextItem *m_namePoint; + VGraphicsSimpleTextItem *m_namePoint; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) /** @brief lineName line what we see if label moved too away from point. */ - VScaledLine *m_lineName; + VScaledLine *m_lineName; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) - bool m_onlyPoint; - bool m_isHovered; - bool m_showLabel; + bool m_onlyPoint{false}; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + bool m_isHovered{false}; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + bool m_showLabel{true}; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) - /** @brief m_baseColor base color of point. */ - QColor m_baseColor; + bool m_selectedFromChild{false}; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) - bool m_selectedFromChild; - - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; void SetOnlyPoint(bool value); auto IsOnlyPoint() const -> bool; @@ -79,6 +91,20 @@ private: Q_DISABLE_COPY_MOVE(VScenePoint) // NOLINT void ScaleMainPenWidth(qreal scale); + + VColorRole m_role; }; +//--------------------------------------------------------------------------------------------------------------------- +inline auto VScenePoint::GetColorRole() const -> VColorRole +{ + return m_role; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline void VScenePoint::SetColorRole(VColorRole role) +{ + m_role = role; +} + #endif // VSCENEPOINT_H diff --git a/src/libs/vwidgets/vsimplecurve.cpp b/src/libs/vwidgets/vsimplecurve.cpp index 364fb0180..1b750a87d 100644 --- a/src/libs/vwidgets/vsimplecurve.cpp +++ b/src/libs/vwidgets/vsimplecurve.cpp @@ -36,25 +36,26 @@ #include #include #include -#include #include -#include "global.h" +#include "../ifc/ifcdef.h" #include "../vgeometry/vabstractcurve.h" +#include "../vmisc/theme/vscenestylesheet.h" #include "../vmisc/vabstractapplication.h" +#include "global.h" template class QSharedPointer; //--------------------------------------------------------------------------------------------------------------------- VSimpleCurve::VSimpleCurve(quint32 id, const QSharedPointer &curve, QObject *parent) - : VAbstractSimple(id, parent), - VCurvePathItem(), - m_curve(curve), - m_isHovered(false) + : VAbstractSimple(id, parent), + VCurvePathItem(VColorRole::CustomColor), + m_curve(curve), + m_isHovered(false) { - this->setBrush(QBrush(Qt::NoBrush)); - this->setAcceptHoverEvents(true); - this->setFlag(QGraphicsItem::ItemIsFocusable, true);// For keyboard input focus + setBrush(QBrush(Qt::NoBrush)); + setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsFocusable, true); // For keyboard input focus } //--------------------------------------------------------------------------------------------------------------------- @@ -93,14 +94,15 @@ void VSimpleCurve::mousePressEvent(QGraphicsSceneMouseEvent *event) QGraphicsPathItem::mousePressEvent(event); // Somehow clicking on notselectable object do not clean previous selections. - if (not (flags() & ItemIsSelectable) && scene()) + if (not(flags() & ItemIsSelectable) && scene()) { scene()->clearSelection(); } if (selectionType == SelectionType::ByMouseRelease) { - event->accept();// Special for not selectable item first need to call standard mousePressEvent then accept event + event + ->accept(); // Special for not selectable item first need to call standard mousePressEvent then accept event } else { @@ -165,11 +167,11 @@ void VSimpleCurve::keyReleaseEvent(QKeyEvent *event) { case Qt::Key_Delete: emit Delete(); - return; //Leave this method immediately after call!!! + return; // Leave this method immediately after call!!! default: break; } - QGraphicsPathItem::keyReleaseEvent ( event ); + QGraphicsPathItem::keyReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- @@ -178,5 +180,11 @@ void VSimpleCurve::ScalePenWidth() qreal width = m_isHovered ? VAbstractApplication::VApp()->Settings()->WidthMainLine() : VAbstractApplication::VApp()->Settings()->WidthHairLine(); width = ScaleWidth(width, SceneScale(scene())); - setPen(QPen(CorrectColor(this, m_curve->GetColor()), width, LineStyleToPenStyle(m_curve->GetPenStyle()))); + + QPen curvePen = pen(); + curvePen.setColor( + VSceneStylesheet::CorrectToolColor(this, VSceneStylesheet::CorrectToolColorForDarkTheme(m_curve->GetColor()))); + curvePen.setWidthF(width); + curvePen.setStyle(LineStyleToPenStyle(m_curve->GetPenStyle())); + setPen(curvePen); } diff --git a/src/libs/vwidgets/vsimplecurve.h b/src/libs/vwidgets/vsimplecurve.h index 6ed89594b..af53fb258 100644 --- a/src/libs/vwidgets/vsimplecurve.h +++ b/src/libs/vwidgets/vsimplecurve.h @@ -29,7 +29,6 @@ #ifndef VSIMPLECURVE_H #define VSIMPLECURVE_H - #include #include #include @@ -49,12 +48,16 @@ template class QSharedPointer; class VSimpleCurve : public VAbstractSimple, public VCurvePathItem { Q_OBJECT // NOLINT + public: VSimpleCurve(quint32 id, const QSharedPointer &curve, QObject *parent = nullptr); - virtual ~VSimpleCurve() = default; + ~VSimpleCurve() override = default; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Vis::SimpleCurve)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::SimpleCurve) + }; void RefreshGeometry(const QSharedPointer &curve); signals: @@ -70,14 +73,14 @@ public slots: void CurveSelected(bool selected); protected: - virtual void mousePressEvent( QGraphicsSceneMouseEvent * event ) override; - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) override; - virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) override; - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ) override; - virtual auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) override; - virtual void keyReleaseEvent ( QKeyEvent * event ) override; - virtual void ScalePenWidth() override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; + void ScalePenWidth() override; private: Q_DISABLE_COPY_MOVE(VSimpleCurve) // NOLINT diff --git a/src/libs/vwidgets/vsimplepoint.cpp b/src/libs/vwidgets/vsimplepoint.cpp index 02319bc2e..e730817b8 100644 --- a/src/libs/vwidgets/vsimplepoint.cpp +++ b/src/libs/vwidgets/vsimplepoint.cpp @@ -39,22 +39,17 @@ #include #include #include -#include #include "global.h" -#include "../vgeometry/vgobject.h" -#include "../vgeometry/vpointf.h" #include "vgraphicssimpletextitem.h" -#include "../vmisc/vabstractapplication.h" //--------------------------------------------------------------------------------------------------------------------- -VSimplePoint::VSimplePoint(quint32 id, const QColor ¤tColor, QObject *parent) - : VAbstractSimple(id, parent), - VScenePoint(), - m_visualizationMode(false), - m_alwaysHovered(false) +VSimplePoint::VSimplePoint(quint32 id, VColorRole role, QObject *parent) + : VAbstractSimple(id, parent), + VScenePoint(role), + m_visualizationMode(false), + m_alwaysHovered(false) { - m_baseColor = currentColor; connect(m_namePoint, &VGraphicsSimpleTextItem::ShowContextMenu, this, &VSimplePoint::contextMenuEvent); connect(m_namePoint, &VGraphicsSimpleTextItem::DeleteTool, this, &VSimplePoint::DeleteFromLabel); connect(m_namePoint, &VGraphicsSimpleTextItem::PointChoosed, this, &VSimplePoint::PointChoosed); @@ -151,13 +146,13 @@ void VSimplePoint::mousePressEvent(QGraphicsSceneMouseEvent *event) QGraphicsEllipseItem::mousePressEvent(event); // Somehow clicking on notselectable object do not clean previous selections. - if (not (flags() & ItemIsSelectable) && scene()) + if (not(flags() & ItemIsSelectable) && scene()) { scene()->clearSelection(); } if (selectionType == SelectionType::ByMouseRelease) - {// Special for not selectable item first need to call standard mousePressEvent then accept event + { // Special for not selectable item first need to call standard mousePressEvent then accept event event->accept(); } else @@ -208,11 +203,11 @@ void VSimplePoint::keyReleaseEvent(QKeyEvent *event) { case Qt::Key_Delete: emit Delete(); - return; //Leave this method immediately after call!!! + return; // Leave this method immediately after call!!! default: break; } - VScenePoint::keyReleaseEvent ( event ); + VScenePoint::keyReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vwidgets/vsimplepoint.h b/src/libs/vwidgets/vsimplepoint.h index 28ae50ffc..23ed0b867 100644 --- a/src/libs/vwidgets/vsimplepoint.h +++ b/src/libs/vwidgets/vsimplepoint.h @@ -29,7 +29,6 @@ #ifndef VSIMPLEPOINT_H #define VSIMPLEPOINT_H - #include #include #include @@ -40,8 +39,8 @@ #include #include "../vmisc/def.h" -#include "vabstractsimple.h" #include "../vwidgets/vscenepoint.h" +#include "vabstractsimple.h" class VGraphicsSimpleTextItem; class VPointF; @@ -49,15 +48,19 @@ class VPointF; class VSimplePoint : public VAbstractSimple, public VScenePoint { Q_OBJECT // NOLINT + public: - VSimplePoint(quint32 id, const QColor ¤tColor, QObject *parent = nullptr); - virtual ~VSimplePoint() = default; + VSimplePoint(quint32 id, VColorRole role, QObject *parent = nullptr); + ~VSimplePoint() override = default; - virtual auto type() const -> int override { return Type; } - enum { Type = UserType + static_cast(Vis::SimplePoint)}; + auto type() const -> int override { return Type; } + enum + { + Type = UserType + static_cast(Vis::SimplePoint) + }; - using VScenePoint::SetOnlyPoint; using VScenePoint::IsOnlyPoint; + using VScenePoint::SetOnlyPoint; void SetVisualizationMode(bool value); auto IsVisualizationMode() const -> bool; @@ -68,7 +71,8 @@ public: void EnableToolMove(bool move); void AllowLabelHover(bool enabled); void AllowLabelSelecting(bool enabled); - virtual void ToolSelectionType(const SelectionType &type) override; + void ToolSelectionType(const SelectionType &type) override; + signals: /** * @brief Choosed send id when clicked. @@ -85,13 +89,13 @@ public slots: void ChangedPosition(const QPointF &pos); protected: - virtual void mousePressEvent( QGraphicsSceneMouseEvent * event ) override; - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) override; - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; - virtual void keyReleaseEvent ( QKeyEvent * event ) override; - virtual auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; + auto itemChange(GraphicsItemChange change, const QVariant &value) -> QVariant override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; private: Q_DISABLE_COPY_MOVE(VSimplePoint) // NOLINT diff --git a/src/libs/vwidgets/vtextgraphicsitem.cpp b/src/libs/vwidgets/vtextgraphicsitem.cpp index 3c5e6780a..cc6b88671 100644 --- a/src/libs/vwidgets/vtextgraphicsitem.cpp +++ b/src/libs/vwidgets/vtextgraphicsitem.cpp @@ -49,6 +49,7 @@ #include "../vmisc/svgfont/vsvgfont.h" #include "../vmisc/svgfont/vsvgfontdatabase.h" #include "../vmisc/vabstractvalapplication.h" +#include "theme/vscenestylesheet.h" #include "vtextgraphicsitem.h" namespace @@ -165,9 +166,9 @@ void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem { Q_UNUSED(widget) Q_UNUSED(option) - painter->fillRect(m_rectBoundingBox, QColor(251, 251, 175, 128 /*50% opacity*/)); + painter->fillRect(m_rectBoundingBox, VSceneStylesheet::PatternPieceStyle().LabelBackgroundColor()); painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); - painter->setPen(Qt::black); + painter->setPen(VSceneStylesheet::PatternPieceStyle().LabelTextColor()); PaintLabel(painter); @@ -175,14 +176,14 @@ void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem if (m_eMode != mNormal) { // outline the rectangle - painter->setPen(QPen(Qt::black, 2, Qt::DashLine)); + painter->setPen(QPen(VSceneStylesheet::PatternPieceStyle().LabelModeColor(), 2, Qt::DashLine)); painter->drawRect(boundingRect().adjusted(1, 1, -1, -1)); if (m_eMode != mRotate) { // draw the resize square - painter->setPen(Qt::black); - painter->setBrush(Qt::black); + painter->setPen(VSceneStylesheet::PatternPieceStyle().LabelModeColor()); + painter->setBrush(VSceneStylesheet::PatternPieceStyle().LabelModeColor()); painter->drawRect(m_rectResize.adjusted(-1, -1, -1, -1)); if (m_eMode == mResize) @@ -195,13 +196,13 @@ void VTextGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem else { // in rotate mode, draw the circle in the middle - painter->setPen(Qt::black); - painter->setBrush(Qt::black); + painter->setPen(VSceneStylesheet::PatternPieceStyle().LabelModeColor()); + painter->setBrush(VSceneStylesheet::PatternPieceStyle().LabelModeColor()); painter->drawEllipse(QPointF(m_rectBoundingBox.width() / 2, m_rectBoundingBox.height() / 2), rotateCircle, rotateCircle); if (m_rectBoundingBox.width() > minW * 3 && m_rectBoundingBox.height() > minH * 3) { - painter->setPen(QPen(Qt::black, 3)); + painter->setPen(QPen(VSceneStylesheet::PatternPieceStyle().LabelModeColor(), 3)); painter->setBrush(Qt::NoBrush); // and then draw the arc in each of the corners int iTop = rotateRect - rotateArc; diff --git a/src/libs/vwidgets/vwidgetpopup.cpp b/src/libs/vwidgets/vwidgetpopup.cpp index 7faaf4665..9f96368d4 100644 --- a/src/libs/vwidgets/vwidgetpopup.cpp +++ b/src/libs/vwidgets/vwidgetpopup.cpp @@ -28,7 +28,6 @@ #include "vwidgetpopup.h" -#include #include #include #include @@ -36,16 +35,20 @@ #include #include #include +#include #include #include #include -#include #include "../vmisc/def.h" //--------------------------------------------------------------------------------------------------------------------- VWidgetPopup::VWidgetPopup(QWidget *parent) - :QFrame(parent, Qt::Popup), mWidget(nullptr), mOwn(true), mOldParent(nullptr), lifeTime(-1) + : QFrame(parent, Qt::Popup), + mWidget(nullptr), + mOwn(true), + mOldParent(nullptr), + lifeTime(-1) { setAttribute(Qt::WA_WindowPropagation); @@ -111,7 +114,7 @@ void VWidgetPopup::Show(QPoint coord) QFrame::show(); const QRect screen(QGuiApplication::primaryScreen()->availableGeometry()); - coord.setX(coord.x() - width()/2); + coord.setX(coord.x() - width() / 2); if (coord.x() < screen.x()) { @@ -123,14 +126,14 @@ void VWidgetPopup::Show(QPoint coord) coord.setY(screen.y()); } - if (coord.x() > (screen.right()-width())) + if (coord.x() > (screen.right() - width())) { - coord.setX(screen.right()-width()); + coord.setX(screen.right() - width()); } - if (coord.y() > (screen.bottom()-height())) + if (coord.y() > (screen.bottom() - height())) { - coord.setY(screen.bottom()-height()); + coord.setY(screen.bottom() - height()); } move(coord);