From 8062430bd25645cbbe3702866c80c411b6b1a78c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Mon, 2 Sep 2019 14:12:23 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@587 a8b55f48-bf90-11e4-a774-851b48703e85 --- test/CMakeLists.txt | 151 -- test/FindMinGW.cmake | 25 - test/README.txt | 18 - test/SDKMacros.cmake | 25 - test/cd_utils/CMakeLists.txt | 74 - test/cd_utils/cdtest.h | 10 - test/cd_utils/cdutils_c.cpp | 41 - test/cd_utils/cdutils_c.h | 26 - test/cd_utils/cdutils_core.cpp | 606 ----- test/cd_utils/cdutils_core.h | 127 - test/cd_utils/cdutils_interface.cpp | 217 -- test/cd_utils/cdutils_interface.h | 76 - test/cd_utils/cdutils_k.cpp | 20 - test/cd_utils/cdutils_k.h | 27 - test/cd_utils/cdutils_m.cpp | 22 - test/cd_utils/cdutils_m.h | 36 - test/cd_utils/cdutils_parser.cpp | 196 -- test/cd_utils/cdutils_parser.h | 19 - test/cd_utils/cdutils_protocol.h | 53 - test/cd_utils/cdutils_types.cpp | 763 ------ test/cd_utils/cdutils_types.h | 173 -- test/cd_utils/cdutils_x.cpp | 55 - test/cd_utils/cdutils_x.h | 37 - test/cd_utils/cdutilstest.cpp | 97 - test/cd_utils/k_description.h | 147 -- test/kx_utils/CMakeLists.txt | 76 - test/kx_utils/clean | 4 - test/kx_utils/clean.bat | 4 - .../kx_utils/icons/accessories-calculator.png | Bin 1525 -> 0 bytes test/kx_utils/icons/alpha.png | Bin 158 -> 0 bytes test/kx_utils/icons/application-exit.png | Bin 1134 -> 0 bytes test/kx_utils/icons/archive-extract.png | Bin 1005 -> 0 bytes test/kx_utils/icons/configure.png | Bin 717 -> 0 bytes test/kx_utils/icons/dialog-close.png | Bin 813 -> 0 bytes test/kx_utils/icons/document-export.png | Bin 1106 -> 0 bytes test/kx_utils/icons/document-import.png | Bin 1017 -> 0 bytes test/kx_utils/icons/document-open.png | Bin 1798 -> 0 bytes test/kx_utils/icons/document-save-.png | Bin 1263 -> 0 bytes test/kx_utils/icons/document-save.png | Bin 563 -> 0 bytes test/kx_utils/icons/edit-clear-.png | Bin 2066 -> 0 bytes .../icons/edit-clear-locationbar-rtl.png | Bin 644 -> 0 bytes test/kx_utils/icons/edit-clear.png | Bin 802 -> 0 bytes test/kx_utils/icons/edit-copy.png | Bin 485 -> 0 bytes test/kx_utils/icons/edit-delete.png | Bin 640 -> 0 bytes test/kx_utils/icons/edit-find-.png | Bin 1631 -> 0 bytes test/kx_utils/icons/edit-find.png | Bin 634 -> 0 bytes test/kx_utils/icons/edit-guides.png | Bin 544 -> 0 bytes test/kx_utils/icons/edit-paste.png | Bin 529 -> 0 bytes test/kx_utils/icons/expand_s_x.png | Bin 571 -> 0 bytes test/kx_utils/icons/expand_s_y.png | Bin 577 -> 0 bytes test/kx_utils/icons/expand_x.png | Bin 579 -> 0 bytes test/kx_utils/icons/expand_y.png | Bin 577 -> 0 bytes test/kx_utils/icons/item-add.png | Bin 639 -> 0 bytes test/kx_utils/icons/item.png | Bin 448 -> 0 bytes test/kx_utils/icons/layer-visible-off.png | Bin 1766 -> 0 bytes test/kx_utils/icons/layer-visible-on.png | Bin 2001 -> 0 bytes test/kx_utils/icons/list-add.png | Bin 564 -> 0 bytes test/kx_utils/icons/media-playback-pause.png | Bin 1145 -> 0 bytes test/kx_utils/icons/media-playback-stop.png | Bin 1165 -> 0 bytes test/kx_utils/icons/media-record.png | Bin 1843 -> 0 bytes test/kx_utils/icons/node-add.png | Bin 694 -> 0 bytes test/kx_utils/icons/node.png | Bin 658 -> 0 bytes test/kx_utils/icons/view-grid.png | Bin 691 -> 0 bytes test/kx_utils/icons/view-refresh.png | Bin 2182 -> 0 bytes test/kx_utils/icons/zoom-fit-best.png | Bin 539 -> 0 bytes test/kx_utils/icons/zoom-fit-height.png | Bin 929 -> 0 bytes test/kx_utils/kx_coeffs.cpp | 194 -- test/kx_utils/kx_coeffs.h | 95 - test/kx_utils/kx_protocol_c.h | 126 - test/kx_utils/kx_protocol_x.h | 121 - test/kx_utils/kx_pult.conf | 0 test/kx_utils/kx_pult.cpp | 848 ------- test/kx_utils/kx_pult.h | 170 -- test/kx_utils/kx_pult.qrc | 40 - test/kx_utils/kx_pult.ui | 1311 ----------- test/kx_utils/main_kx_pult.cpp | 10 - test/kx_utils/make_lib.bat | 1 - test/kx_utils/piprotocol.cpp | 718 ------ test/kx_utils/piprotocol.h | 238 -- test/logo.png | Bin 13843 -> 0 bytes test/make_android.bat | 45 - test/make_android.sh | 11 - test/make_libs.bat | 6 - test/make_libs.sh | 6 - test/make_libs32.bat | 1 - test/make_libs64.bat | 1 - test/make_libs_all.bat | 2 - test/make_libs_android.bat | 6 - test/make_libs_android_all.bat | 4 - test/piqt/CMakeLists.txt | 46 - test/piqt/clean | 4 - test/piqt/clean.bat | 4 - test/piqt/make_lib.bat | 1 - test/piqt/piqt.cpp | 141 -- test/piqt/piqt.h | 149 -- test/piqt_utils/CMakeLists.txt | 70 - test/piqt_utils/piconnedit/CMakeLists.txt | 26 - .../Apps-accessories-calculator-icon.png | Bin 9661 -> 0 bytes .../piconnedit/icons/DALI-designer.png | Bin 7837 -> 0 bytes test/piqt_utils/piconnedit/icons/alpha.png | Bin 158 -> 0 bytes .../piconnedit/icons/application-exit.png | Bin 1134 -> 0 bytes .../icons/applications-engineering.png | Bin 1035 -> 0 bytes .../piconnedit/icons/archive-extract.png | Bin 626 -> 0 bytes .../icons/archive-insert-directory.png | Bin 588 -> 0 bytes .../piconnedit/icons/archive-insert.png | Bin 433 -> 0 bytes .../piconnedit/icons/arrow-down.png | Bin 525 -> 0 bytes test/piqt_utils/piconnedit/icons/arrow-up.png | Bin 484 -> 0 bytes test/piqt_utils/piconnedit/icons/axis_x.png | Bin 235 -> 0 bytes test/piqt_utils/piconnedit/icons/axis_y.png | Bin 259 -> 0 bytes .../piconnedit/icons/case-sensitive.png | Bin 326 -> 0 bytes .../piconnedit/icons/checkbox-unchecked.png | Bin 419 -> 0 bytes test/piqt_utils/piconnedit/icons/checkbox.png | Bin 654 -> 0 bytes test/piqt_utils/piconnedit/icons/clients.png | Bin 1257 -> 0 bytes test/piqt_utils/piconnedit/icons/close.png | Bin 1251 -> 0 bytes .../piconnedit/icons/code-error.png | Bin 722 -> 0 bytes .../piconnedit/icons/code-function.png | Bin 449 -> 0 bytes .../piconnedit/icons/code-keyword.png | Bin 342 -> 0 bytes .../piconnedit/icons/code-parents.png | Bin 641 -> 0 bytes .../piconnedit/icons/code-property.png | Bin 540 -> 0 bytes .../piconnedit/icons/code-signal.png | Bin 726 -> 0 bytes .../piconnedit/icons/code-struct.png | Bin 676 -> 0 bytes .../piconnedit/icons/code-union.png | Bin 731 -> 0 bytes .../piconnedit/icons/code-variable.png | Bin 328 -> 0 bytes .../piqt_utils/piconnedit/icons/code-word.png | Bin 543 -> 0 bytes .../piconnedit/icons/configure-.png | Bin 1379 -> 0 bytes .../piqt_utils/piconnedit/icons/configure.png | Bin 717 -> 0 bytes test/piqt_utils/piconnedit/icons/database.png | Bin 1918 -> 0 bytes .../piqt_utils/piconnedit/icons/debug-run.png | Bin 1100 -> 0 bytes .../piconnedit/icons/designer-qt4.png | Bin 1367 -> 0 bytes .../piconnedit/icons/dialog-close.png | Bin 813 -> 0 bytes .../piconnedit/icons/dialog-ok-apply.png | Bin 1977 -> 0 bytes .../piconnedit/icons/dialog-warning.png | Bin 2312 -> 0 bytes test/piqt_utils/piconnedit/icons/disabled.png | Bin 5685 -> 0 bytes .../icons/distribute-horizontal-margin.png | Bin 539 -> 0 bytes .../piconnedit/icons/document-edit.png | Bin 726 -> 0 bytes .../piconnedit/icons/document-new.png | Bin 1387 -> 0 bytes .../piconnedit/icons/document-open.png | Bin 1798 -> 0 bytes .../piconnedit/icons/document-print.png | Bin 880 -> 0 bytes .../piconnedit/icons/document-save-.png | Bin 1263 -> 0 bytes .../piconnedit/icons/document-save-all.png | Bin 921 -> 0 bytes .../piconnedit/icons/document-save-as.png | Bin 2152 -> 0 bytes .../piconnedit/icons/document-save.png | Bin 563 -> 0 bytes .../piconnedit/icons/edit-clear-.png | Bin 3911 -> 0 bytes .../icons/edit-clear-locationbar-rtl.png | Bin 644 -> 0 bytes .../piconnedit/icons/edit-clear.png | Bin 2066 -> 0 bytes .../piqt_utils/piconnedit/icons/edit-copy.png | Bin 828 -> 0 bytes test/piqt_utils/piconnedit/icons/edit-cut.png | Bin 892 -> 0 bytes .../piconnedit/icons/edit-delete.png | Bin 1259 -> 0 bytes .../piconnedit/icons/edit-find-.png | Bin 1631 -> 0 bytes .../piqt_utils/piconnedit/icons/edit-find.png | Bin 634 -> 0 bytes .../piconnedit/icons/edit-guides.png | Bin 544 -> 0 bytes .../piconnedit/icons/edit-paste.png | Bin 1406 -> 0 bytes .../piqt_utils/piconnedit/icons/edit-redo.png | Bin 3383 -> 0 bytes .../icons/edit-table-insert-row-below.png | Bin 852 -> 0 bytes .../piqt_utils/piconnedit/icons/edit-undo.png | Bin 3440 -> 0 bytes .../piqt_utils/piconnedit/icons/employees.png | Bin 1304 -> 0 bytes .../piconnedit/icons/expand_s_x.png | Bin 571 -> 0 bytes .../piconnedit/icons/expand_s_y.png | Bin 577 -> 0 bytes test/piqt_utils/piconnedit/icons/expand_x.png | Bin 579 -> 0 bytes test/piqt_utils/piconnedit/icons/expand_y.png | Bin 577 -> 0 bytes .../icons/format-text-subscript.png | Bin 824 -> 0 bytes .../piconnedit/icons/games-solve.png | Bin 1449 -> 0 bytes test/piqt_utils/piconnedit/icons/go-jump.png | Bin 1126 -> 0 bytes test/piqt_utils/piconnedit/icons/go-next.png | Bin 940 -> 0 bytes .../piconnedit/icons/go-previous.png | Bin 907 -> 0 bytes test/piqt_utils/piconnedit/icons/graphics.png | Bin 391 -> 0 bytes .../piconnedit/icons/groups-edit.png | Bin 12368 -> 0 bytes test/piqt_utils/piconnedit/icons/item-add.png | Bin 639 -> 0 bytes test/piqt_utils/piconnedit/icons/item.png | Bin 448 -> 0 bytes .../piqt_utils/piconnedit/icons/lastmoves.png | Bin 592 -> 0 bytes test/piqt_utils/piconnedit/icons/led_3.png | Bin 8532 -> 0 bytes test/piqt_utils/piconnedit/icons/led_off.png | Bin 540 -> 0 bytes test/piqt_utils/piconnedit/icons/led_on.png | Bin 533 -> 0 bytes test/piqt_utils/piconnedit/icons/light-+.png | Bin 16851 -> 0 bytes test/piqt_utils/piconnedit/icons/light--.png | Bin 16559 -> 0 bytes .../piqt_utils/piconnedit/icons/light-254.png | Bin 12006 -> 0 bytes .../piconnedit/icons/light-disable-all.png | Bin 20566 -> 0 bytes .../piconnedit/icons/light-disable.png | Bin 16755 -> 0 bytes .../piconnedit/icons/light-down.png | Bin 16334 -> 0 bytes .../piconnedit/icons/light-edit.png | Bin 13080 -> 0 bytes .../piqt_utils/piconnedit/icons/light-max.png | Bin 14426 -> 0 bytes .../piqt_utils/piconnedit/icons/light-min.png | Bin 17432 -> 0 bytes .../piqt_utils/piconnedit/icons/light-off.png | Bin 16487 -> 0 bytes test/piqt_utils/piconnedit/icons/light-on.png | Bin 13042 -> 0 bytes .../piconnedit/icons/light-step-down.png | Bin 16814 -> 0 bytes .../piconnedit/icons/light-step-up.png | Bin 16158 -> 0 bytes test/piqt_utils/piconnedit/icons/light-up.png | Bin 15602 -> 0 bytes test/piqt_utils/piconnedit/icons/lights.png | Bin 34124 -> 0 bytes test/piqt_utils/piconnedit/icons/list-add.png | Bin 1487 -> 0 bytes .../piconnedit/icons/list-remove.png | Bin 1065 -> 0 bytes .../piconnedit/icons/log_parser.png | Bin 18635 -> 0 bytes test/piqt_utils/piconnedit/icons/mail.png | Bin 918 -> 0 bytes .../piconnedit/icons/media-flash.png | Bin 1256 -> 0 bytes .../piconnedit/icons/media-playback-pause.png | Bin 721 -> 0 bytes .../piconnedit/icons/media-playback-stop.png | Bin 736 -> 0 bytes .../piconnedit/icons/media-record.png | Bin 1155 -> 0 bytes test/piqt_utils/piconnedit/icons/node-add.png | Bin 694 -> 0 bytes test/piqt_utils/piconnedit/icons/node.png | Bin 658 -> 0 bytes .../piconnedit/icons/object-locked.png | Bin 604 -> 0 bytes .../piconnedit/icons/piconnection.png | Bin 19319 -> 0 bytes .../piconnedit/icons/piconnection.xcf | Bin 66746 -> 0 bytes .../piqt_utils/piconnedit/icons/quickopen.png | Bin 1969 -> 0 bytes .../icons/run-build-install-root.png | Bin 1915 -> 0 bytes .../piqt_utils/piconnedit/icons/run-build.png | Bin 1928 -> 0 bytes .../piconnedit/icons/scenes-edit.png | Bin 314 -> 0 bytes .../piconnedit/icons/select-add.png | Bin 941 -> 0 bytes .../piconnedit/icons/select-intersect.png | Bin 946 -> 0 bytes .../piconnedit/icons/select-invert.png | Bin 830 -> 0 bytes .../piconnedit/icons/select-none.png | Bin 1113 -> 0 bytes .../piconnedit/icons/select-replace.png | Bin 738 -> 0 bytes .../piconnedit/icons/select-subtract.png | Bin 981 -> 0 bytes test/piqt_utils/piconnedit/icons/splash.png | Bin 37270 -> 0 bytes .../piconnedit/icons/status-off.png | Bin 47007 -> 0 bytes .../piqt_utils/piconnedit/icons/status-on.png | Bin 50169 -> 0 bytes .../piconnedit/icons/status-warn.png | Bin 12669 -> 0 bytes .../piconnedit/icons/system-help.png | Bin 1222 -> 0 bytes .../piconnedit/icons/tool-light-add.png | Bin 1381 -> 0 bytes .../piconnedit/icons/tool-selection.png | Bin 971 -> 0 bytes .../piconnedit/icons/tools-wizard.png | Bin 797 -> 0 bytes .../piconnedit/icons/transform-move.png | Bin 1103 -> 0 bytes .../piconnedit/icons/variable-add.png | Bin 557 -> 0 bytes .../piconnedit/icons/variable-copy.png | Bin 567 -> 0 bytes .../piconnedit/icons/variable-edit.png | Bin 567 -> 0 bytes .../piconnedit/icons/variable-remove.png | Bin 588 -> 0 bytes .../piqt_utils/piconnedit/icons/view-grid.png | Bin 691 -> 0 bytes .../piconnedit/icons/view-refresh.png | Bin 2182 -> 0 bytes .../piqt_utils/piconnedit/icons/warning-a.png | Bin 2529 -> 0 bytes .../piconnedit/icons/warning-id.png | Bin 2458 -> 0 bytes .../piconnedit/icons/window-close.png | Bin 2083 -> 0 bytes .../piconnedit/icons/zoom-fit-best.png | Bin 539 -> 0 bytes test/piqt_utils/piconnedit/icons/zoom-in.png | Bin 1191 -> 0 bytes test/piqt_utils/piconnedit/icons/zoom-out.png | Bin 1173 -> 0 bytes .../piconnedit/icons/zoom-range.png | Bin 1311 -> 0 bytes .../piqt_utils/piconnedit/icons/zoom-rect.png | Bin 1378 -> 0 bytes test/piqt_utils/piconnedit/piconnedit.qrc | 6 - .../piqt_utils/piconnedit/piconnedit_main.cpp | 34 - test/piqt_utils/pidumper/CMakeLists.txt | 26 - test/piqt_utils/pidumper/pidumper.cpp | 146 -- test/piqt_utils/pidumper/pidumper.h | 36 - test/piqt_utils/pidumper/pidumper.ui | 207 -- test/piqt_utils/pidumper/pidumper_main.cpp | 13 - test/piqt_utils/piintrospector/CMakeLists.txt | 28 - .../piintrospector/containers_view.cpp | 264 --- .../piintrospector/containers_view.h | 76 - .../piintrospector/containers_view.ui | 93 - .../piintrospector/objects_view.cpp | 60 - test/piqt_utils/piintrospector/objects_view.h | 28 - .../piqt_utils/piintrospector/objects_view.ui | 101 - .../piintrospector/piintrospector.cpp | 242 -- .../piintrospector/piintrospector.h | 53 - .../piintrospector/piintrospector.ui | 284 --- .../piintrospector/piintrospector_main.cpp | 13 - .../piintrospector/threads_view.cpp | 230 -- test/piqt_utils/piintrospector/threads_view.h | 81 - .../piqt_utils/piintrospector/threads_view.ui | 51 - test/piqt_utils/piqt_connection_edit.cpp | 493 ---- test/piqt_utils/piqt_connection_edit.h | 61 - test/piqt_utils/piqt_connection_edit.ui | 898 ------- test/piqt_utils/piqt_connection_view.cpp | 204 -- test/piqt_utils/piqt_connection_view.h | 113 - test/piqt_utils/piqt_highlighter.cpp | 70 - test/piqt_utils/piqt_highlighter.h | 31 - test/piqt_utils/piqt_iodevice_edit.cpp | 92 - test/piqt_utils/piqt_iodevice_edit.h | 52 - test/piqt_utils/piqt_iodevice_edit_dialog.cpp | 112 - test/piqt_utils/piqt_iodevice_edit_dialog.h | 34 - test/piqt_utils/piqt_iodevice_edit_dialog.ui | 138 -- test/piqt_utils/qpiconnection.cpp | 31 - test/piqt_utils/qpiconnection.h | 31 - .../ProjectFilesystemPlugin.json.in | 11 - test/project_fs/filterdialog.cpp | 91 - test/project_fs/filterdialog.h | 37 - test/project_fs/filterdialog.ui | 226 -- test/project_fs/icons/edit-find.png | Bin 43469 -> 0 bytes test/project_fs/icons/utilities-terminal.png | Bin 15685 -> 0 bytes test/project_fs/projectfilesystem.qrc | 6 - test/project_fs/projectfilesystemplugin.cpp | 89 - test/project_fs/projectfilesystemplugin.h | 29 - test/project_fs/projectfilesystemplugin.pro | 61 - .../projectfilesystemplugin_global.h | 9 - .../projectfilesystempluginconstants.h | 10 - test/project_fs/projectfilesystemwidget.cpp | 308 --- test/project_fs/projectfilesystemwidget.h | 64 - test/project_fs/projectfilesystemwidget.ui | 183 -- .../projectfilesystemwidgetplugin.cpp | 57 - .../projectfilesystemwidgetplugin.h | 18 - test/qad/CMakeLists.txt | 118 - test/qad/FindQAD.cmake | 63 - test/qad/QADConfig.cmake | 1 - test/qad/QtWraps.cmake | 519 ----- test/qad/application/CMakeLists.txt | 1 - test/qad/application/edockwidget.cpp | 96 - test/qad/application/edockwidget.h | 39 - test/qad/application/emainwindow.cpp | 423 ---- test/qad/application/emainwindow.h | 127 - test/qad/application/etabwidget.cpp | 104 - test/qad/application/etabwidget.h | 54 - test/qad/application/historyview.cpp | 161 -- test/qad/application/historyview.h | 79 - .../application/lang/qad_application_ru.ts | 57 - test/qad/application/plugin/CMakeLists.txt | 1 - .../application/plugin/edockwidgetplugin.cpp | 69 - .../application/plugin/edockwidgetplugin.h | 36 - .../application/plugin/emainwindowplugin.cpp | 69 - .../application/plugin/emainwindowplugin.h | 36 - .../application/plugin/historyviewplugin.cpp | 69 - .../application/plugin/historyviewplugin.h | 36 - .../application/plugin/qad_application.cpp | 21 - test/qad/application/plugin/qad_application.h | 23 - test/qad/application/qad_application.qrc | 31 - test/qad/application/qsingleapplication.cpp | 87 - test/qad/application/qsingleapplication.h | 30 - test/qad/application/ribbon.cpp | 230 -- test/qad/application/ribbon.h | 63 - test/qad/blockview/CMakeLists.txt | 4 - test/qad/blockview/alignedtextitem.cpp | 62 - test/qad/blockview/alignedtextitem.h | 48 - test/qad/blockview/blockbase.cpp | 109 - test/qad/blockview/blockbase.h | 59 - test/qad/blockview/blockbusitem.cpp | 814 ------- test/qad/blockview/blockbusitem.h | 143 -- test/qad/blockview/blockeditor.cpp | 389 ---- test/qad/blockview/blockeditor.h | 91 - test/qad/blockview/blockeditor.ui | 543 ----- test/qad/blockview/blockeditor/CMakeLists.txt | 26 - .../blockeditor/blockeditor_main.cpp | 16 - .../blockview/blockeditor/icons/blockview.ico | Bin 50190 -> 0 bytes .../blockeditor/resource_win_icon.rc | 43 - test/qad/blockview/blockitem.cpp | 548 ----- test/qad/blockview/blockitem.h | 144 -- test/qad/blockview/blockitempin.cpp | 163 -- test/qad/blockview/blockitempin.h | 112 - test/qad/blockview/blockview.cpp | 2062 ----------------- test/qad/blockview/blockview.h | 269 --- test/qad/blockview/blockviewwavetrace.cpp | 202 -- test/qad/blockview/blockviewwavetrace.h | 43 - test/qad/blockview/drawtools.cpp | 904 -------- test/qad/blockview/drawtools.h | 132 -- test/qad/blockview/drawtools.ui | 821 ------- test/qad/blockview/lang/qad_blockview_ru.ts | 366 --- test/qad/blockview/plugin/CMakeLists.txt | 1 - test/qad/blockview/plugin/blockviewplugin.cpp | 69 - test/qad/blockview/plugin/blockviewplugin.h | 36 - test/qad/blockview/plugin/qad_blockview.cpp | 17 - test/qad/blockview/plugin/qad_blockview.h | 23 - test/qad/blockview/qad_blockview.qrc | 51 - test/qad/graphic/CMakeLists.txt | 4 - test/qad/graphic/graphic.cpp | 1843 --------------- test/qad/graphic/graphic.h | 455 ---- test/qad/graphic/graphic.ui | 443 ---- test/qad/graphic/graphic_conf.cpp | 107 - test/qad/graphic/graphic_conf.h | 91 - test/qad/graphic/graphic_conf.ui | 644 ----- test/qad/graphic/lang/qad_graphic_ru.ts | 351 --- test/qad/graphic/plugin/CMakeLists.txt | 1 - test/qad/graphic/plugin/graphicplugin.cpp | 69 - test/qad/graphic/plugin/graphicplugin.h | 36 - test/qad/graphic/plugin/qad_graphic.cpp | 17 - test/qad/graphic/plugin/qad_graphic.h | 23 - test/qad/graphic/qad_graphic.qrc | 28 - test/qad/graphic/qpicalculator/CMakeLists.txt | 27 - .../graphic/qpicalculator/CMakeLists.txt.user | 188 -- .../Apps-accessories-calculator-icon.png | Bin 9661 -> 0 bytes .../qpicalculator/icons/application-exit.png | Bin 842 -> 0 bytes .../qpicalculator/icons/arrow-left.png | Bin 839 -> 0 bytes .../qpicalculator/icons/arrow-right.png | Bin 798 -> 0 bytes test/qad/graphic/qpicalculator/icons/axes.png | Bin 468 -> 0 bytes .../graphic/qpicalculator/icons/axes_1.png | Bin 538 -> 0 bytes .../qpicalculator/icons/character-set.png | Bin 494 -> 0 bytes .../graphic/qpicalculator/icons/configure.png | Bin 717 -> 0 bytes .../qpicalculator/icons/dialog-close.png | Bin 813 -> 0 bytes .../qpicalculator/icons/document-close.png | Bin 678 -> 0 bytes .../qpicalculator/icons/document-edit.png | Bin 726 -> 0 bytes .../qpicalculator/icons/document-open.png | Bin 639 -> 0 bytes .../qpicalculator/icons/document-revert.png | Bin 794 -> 0 bytes .../qpicalculator/icons/document-save-as.png | Bin 839 -> 0 bytes .../qpicalculator/icons/document-save.png | Bin 563 -> 0 bytes .../icons/edit-clear-locationbar-rtl.png | Bin 644 -> 0 bytes .../qpicalculator/icons/edit-clear.png | Bin 802 -> 0 bytes .../graphic/qpicalculator/icons/edit-copy.png | Bin 485 -> 0 bytes .../graphic/qpicalculator/icons/edit-cut.png | Bin 368 -> 0 bytes .../qpicalculator/icons/edit-delete.png | Bin 640 -> 0 bytes .../graphic/qpicalculator/icons/edit-find.png | Bin 634 -> 0 bytes .../qpicalculator/icons/edit-guides.png | Bin 544 -> 0 bytes .../qpicalculator/icons/edit-paste.png | Bin 529 -> 0 bytes .../graphic/qpicalculator/icons/edit-redo.png | Bin 813 -> 0 bytes .../graphic/qpicalculator/icons/edit-undo.png | Bin 866 -> 0 bytes .../qpicalculator/icons/empty_brick.png | Bin 674 -> 0 bytes .../qpicalculator/icons/format-fill-color.png | Bin 985 -> 0 bytes .../qpicalculator/icons/format-text-bold.png | Bin 463 -> 0 bytes .../qpicalculator/icons/format-text-color.png | Bin 601 -> 0 bytes .../icons/format-text-italic.png | Bin 331 -> 0 bytes .../icons/format-text-overline.png | Bin 464 -> 0 bytes .../icons/format-text-strikethrough.png | Bin 441 -> 0 bytes .../icons/format-text-underline.png | Bin 392 -> 0 bytes .../graphic/qpicalculator/icons/go-home.png | Bin 935 -> 0 bytes .../graphic/qpicalculator/icons/go-next.png | Bin 940 -> 0 bytes .../qpicalculator/icons/go-previous.png | Bin 907 -> 0 bytes .../qpicalculator/icons/graphic_add.png | Bin 599 -> 0 bytes .../graphic/qpicalculator/icons/graphics.png | Bin 364 -> 0 bytes .../qpicalculator/icons/help-contents.png | Bin 684 -> 0 bytes .../qpicalculator/icons/history_brick_add.png | Bin 767 -> 0 bytes .../qpicalculator/icons/history_brick_del.png | Bin 747 -> 0 bytes .../icons/history_brick_move.png | Bin 427 -> 0 bytes .../qpicalculator/icons/history_conn_add.png | Bin 644 -> 0 bytes .../qpicalculator/icons/history_conn_del.png | Bin 623 -> 0 bytes .../qpicalculator/icons/history_conn_edit.png | Bin 539 -> 0 bytes .../icons/history_conn_retrace.png | Bin 597 -> 0 bytes .../qpicalculator/icons/history_convert.png | Bin 761 -> 0 bytes .../qpicalculator/icons/history_freq.png | Bin 631 -> 0 bytes .../qpicalculator/icons/history_point.xcf | Bin 5283 -> 0 bytes .../qpicalculator/icons/history_point_add.png | Bin 612 -> 0 bytes .../qpicalculator/icons/history_point_del.png | Bin 591 -> 0 bytes .../icons/history_point_move.png | Bin 532 -> 0 bytes .../qpicalculator/icons/history_seg_add.png | Bin 621 -> 0 bytes .../qpicalculator/icons/history_seg_del.png | Bin 602 -> 0 bytes .../qpicalculator/icons/history_seg_move.png | Bin 542 -> 0 bytes .../qpicalculator/icons/history_text_add.png | Bin 603 -> 0 bytes .../qpicalculator/icons/history_text_del.png | Bin 609 -> 0 bytes .../qpicalculator/icons/history_text_edit.png | Bin 620 -> 0 bytes .../qpicalculator/icons/history_text_move.png | Bin 542 -> 0 bytes .../graphic/qpicalculator/icons/initial.png | Bin 1248 -> 0 bytes .../qpicalculator/icons/insert-image.png | Bin 697 -> 0 bytes .../qpicalculator/icons/insert-text.png | Bin 1772 -> 0 bytes .../qpicalculator/icons/layer-visible-off.png | Bin 783 -> 0 bytes .../qpicalculator/icons/layer-visible-on.png | Bin 838 -> 0 bytes .../graphic/qpicalculator/icons/list-add.png | Bin 564 -> 0 bytes .../graphic/qpicalculator/icons/mbricks.svg | 351 --- .../qpicalculator/icons/mbricks_128.png | Bin 9458 -> 0 bytes .../qpicalculator/icons/mbricks_22.png | Bin 1070 -> 0 bytes .../qpicalculator/icons/mbricks_256.png | Bin 24538 -> 0 bytes .../qpicalculator/icons/mbricks_64.png | Bin 3764 -> 0 bytes .../icons/media-playback-pause.png | Bin 484 -> 0 bytes .../icons/media-playback-start.png | Bin 501 -> 0 bytes .../icons/media-playback-stop.png | Bin 499 -> 0 bytes .../icons/media-skip-forward.png | Bin 506 -> 0 bytes .../icons/object-flip-horizontal.png | Bin 748 -> 0 bytes .../qpicalculator/icons/player-time.png | Bin 975 -> 0 bytes .../icons/preferences-desktop-display.png | Bin 1341 -> 0 bytes .../icons/preferences-desktop-keyboard.png | Bin 843 -> 0 bytes .../graphic/qpicalculator/icons/run-build.png | Bin 880 -> 0 bytes test/qad/graphic/qpicalculator/icons/tree.png | Bin 793 -> 0 bytes .../qpicalculator/icons/view-center.png | Bin 500 -> 0 bytes .../qpicalculator/icons/view-fullscreen.png | Bin 396 -> 0 bytes .../graphic/qpicalculator/icons/view-grid.png | Bin 691 -> 0 bytes .../qpicalculator/icons/view-mode-compact.png | Bin 734 -> 0 bytes .../icons/view-mode-expanded.png | Bin 789 -> 0 bytes .../qpicalculator/icons/view-mode-icon.png | Bin 659 -> 0 bytes .../qpicalculator/icons/view-refresh.png | Bin 931 -> 0 bytes .../qpicalculator/icons/view-restore.png | Bin 370 -> 0 bytes .../qpicalculator/icons/view-tooltips.png | Bin 659 -> 0 bytes .../qpicalculator/icons/window-new.png | Bin 377 -> 0 bytes .../qpicalculator/icons/zoom-fit-best.png | Bin 539 -> 0 bytes .../graphic/qpicalculator/icons/zoom-in.png | Bin 791 -> 0 bytes .../qpicalculator/icons/zoom-original.png | Bin 781 -> 0 bytes .../graphic/qpicalculator/icons/zoom-out.png | Bin 786 -> 0 bytes .../qpicalculator/icons/zoom-range.png | Bin 1311 -> 0 bytes .../graphic/qpicalculator/icons/zoom-rect.png | Bin 1378 -> 0 bytes test/qad/graphic/qpicalculator/main.cpp | 13 - test/qad/graphic/qpicalculator/mainwindow.cpp | 260 --- test/qad/graphic/qpicalculator/mainwindow.h | 56 - test/qad/graphic/qpicalculator/mainwindow.ui | 379 --- .../graphic/qpicalculator/qpicalculator.qrc | 9 - test/qad/graphic/uglwidget.h | 68 - test/qad/graphic/uwidget.h | 52 - test/qad/icons/align-bottom-center.png | Bin 342 -> 0 bytes test/qad/icons/align-bottom-left.png | Bin 384 -> 0 bytes test/qad/icons/align-bottom-right.png | Bin 382 -> 0 bytes test/qad/icons/align-center-center.png | Bin 303 -> 0 bytes test/qad/icons/align-center-left.png | Bin 354 -> 0 bytes test/qad/icons/align-center-right.png | Bin 348 -> 0 bytes test/qad/icons/align-hor.png | Bin 992 -> 0 bytes test/qad/icons/align-top-center.png | Bin 344 -> 0 bytes test/qad/icons/align-top-left.png | Bin 403 -> 0 bytes test/qad/icons/align-top-right.png | Bin 387 -> 0 bytes test/qad/icons/align-ver.png | Bin 1038 -> 0 bytes test/qad/icons/alpha.png | Bin 158 -> 0 bytes test/qad/icons/application-exit.png | Bin 32537 -> 0 bytes test/qad/icons/archive-extract.png | Bin 1824 -> 0 bytes test/qad/icons/archive-insert-directory.png | Bin 2770 -> 0 bytes test/qad/icons/archive-insert.png | Bin 1475 -> 0 bytes test/qad/icons/arrow-down.png | Bin 5734 -> 0 bytes test/qad/icons/arrow-up.png | Bin 6211 -> 0 bytes test/qad/icons/axis_x.png | Bin 235 -> 0 bytes test/qad/icons/axis_y.png | Bin 259 -> 0 bytes test/qad/icons/blockview.png | Bin 943 -> 0 bytes test/qad/icons/blockview.xcf | Bin 21607 -> 0 bytes test/qad/icons/border-line.png | Bin 4859 -> 0 bytes test/qad/icons/button.png | Bin 6345 -> 0 bytes test/qad/icons/case-sensitive.png | Bin 326 -> 0 bytes test/qad/icons/chardialog.png | Bin 943 -> 0 bytes test/qad/icons/checkbox-unchecked.png | Bin 419 -> 0 bytes test/qad/icons/checkbox.png | Bin 654 -> 0 bytes test/qad/icons/clear-history.png | Bin 3825 -> 0 bytes test/qad/icons/clineedit.png | Bin 9153 -> 0 bytes test/qad/icons/code-error.png | Bin 2780 -> 0 bytes test/qad/icons/code-parents.png | Bin 1126 -> 0 bytes test/qad/icons/code-struct.png | Bin 1150 -> 0 bytes test/qad/icons/code-union.png | Bin 2071 -> 0 bytes test/qad/icons/code-variable.png | Bin 813 -> 0 bytes test/qad/icons/code-word.png | Bin 1818 -> 0 bytes test/qad/icons/colorbutton.png | Bin 7468 -> 0 bytes test/qad/icons/configure.png | Bin 32993 -> 0 bytes test/qad/icons/configure_16.png | Bin 717 -> 0 bytes test/qad/icons/database.png | Bin 39434 -> 0 bytes test/qad/icons/dialog-cancel.png | Bin 45200 -> 0 bytes test/qad/icons/dialog-close.png | Bin 39321 -> 0 bytes test/qad/icons/dialog-ok-apply.png | Bin 24550 -> 0 bytes test/qad/icons/dialog-warning.png | Bin 29995 -> 0 bytes test/qad/icons/document-close.png | Bin 27547 -> 0 bytes test/qad/icons/document-edit.png | Bin 30106 -> 0 bytes test/qad/icons/document-new.png | Bin 24844 -> 0 bytes test/qad/icons/document-open-recent.png | Bin 17232 -> 0 bytes test/qad/icons/document-open.png | Bin 8621 -> 0 bytes test/qad/icons/document-open_16.png | Bin 701 -> 0 bytes test/qad/icons/document-print.png | Bin 22169 -> 0 bytes test/qad/icons/document-save-all.png | Bin 26721 -> 0 bytes test/qad/icons/document-save-as.png | Bin 41121 -> 0 bytes test/qad/icons/document-save.png | Bin 22676 -> 0 bytes test/qad/icons/draw-ellipse.png | Bin 19602 -> 0 bytes test/qad/icons/draw-line.png | Bin 4499 -> 0 bytes test/qad/icons/draw-rectangle.png | Bin 20814 -> 0 bytes test/qad/icons/draw-text.png | Bin 3147 -> 0 bytes test/qad/icons/ecombobox.png | Bin 1215 -> 0 bytes test/qad/icons/edit-clear-locationbar-rtl.png | Bin 20226 -> 0 bytes test/qad/icons/edit-clear.png | Bin 54801 -> 0 bytes test/qad/icons/edit-copy.png | Bin 14072 -> 0 bytes test/qad/icons/edit-delete.png | Bin 22776 -> 0 bytes test/qad/icons/edit-find.png | Bin 43469 -> 0 bytes test/qad/icons/edit-find_16.png | Bin 634 -> 0 bytes test/qad/icons/edit-guides.png | Bin 1892 -> 0 bytes test/qad/icons/edit-paste.png | Bin 14413 -> 0 bytes test/qad/icons/edit-redo.png | Bin 42667 -> 0 bytes .../qad/icons/edit-table-insert-row-below.png | Bin 2952 -> 0 bytes test/qad/icons/edit-undo.png | Bin 36074 -> 0 bytes test/qad/icons/edockwidget.png | Bin 638 -> 0 bytes test/qad/icons/etabwidget.png | Bin 693 -> 0 bytes test/qad/icons/evalspinbox.png | Bin 10593 -> 0 bytes test/qad/icons/expand_s_x.png | Bin 2210 -> 0 bytes test/qad/icons/expand_s_y.png | Bin 2176 -> 0 bytes test/qad/icons/expand_x.png | Bin 2178 -> 0 bytes test/qad/icons/expand_y.png | Bin 2103 -> 0 bytes test/qad/icons/f1.png | Bin 1046 -> 0 bytes test/qad/icons/format-fill-color.png | Bin 44130 -> 0 bytes test/qad/icons/format-stroke-color.png | Bin 24156 -> 0 bytes test/qad/icons/format-text-subscript.png | Bin 824 -> 0 bytes test/qad/icons/games-solve.png | Bin 40132 -> 0 bytes test/qad/icons/go-next.png | Bin 29199 -> 0 bytes test/qad/icons/go-previous.png | Bin 30071 -> 0 bytes test/qad/icons/graphic.png | Bin 1630 -> 0 bytes test/qad/icons/graphics.png | Bin 391 -> 0 bytes test/qad/icons/historyview.png | Bin 1262 -> 0 bytes test/qad/icons/icons.xcf | Bin 4382 -> 0 bytes test/qad/icons/item-add.png | Bin 639 -> 0 bytes test/qad/icons/item.png | Bin 448 -> 0 bytes test/qad/icons/lastmoves.png | Bin 592 -> 0 bytes test/qad/icons/layer-visible-off.png | Bin 3446 -> 0 bytes test/qad/icons/layer-visible-on.png | Bin 4016 -> 0 bytes test/qad/icons/led_3.png | Bin 12080 -> 0 bytes test/qad/icons/led_gray.png | Bin 9996 -> 0 bytes test/qad/icons/led_off.png | Bin 12177 -> 0 bytes test/qad/icons/led_on.png | Bin 12145 -> 0 bytes test/qad/icons/legend.png | Bin 907 -> 0 bytes test/qad/icons/list-add.png | Bin 35372 -> 0 bytes test/qad/icons/list-remove.png | Bin 12744 -> 0 bytes test/qad/icons/log_parser.png | Bin 18635 -> 0 bytes test/qad/icons/mail.png | Bin 918 -> 0 bytes test/qad/icons/media-playback-pause.png | Bin 22787 -> 0 bytes test/qad/icons/media-playback-start.png | Bin 22394 -> 0 bytes test/qad/icons/media-playback-stop.png | Bin 22642 -> 0 bytes test/qad/icons/media-record.png | Bin 26202 -> 0 bytes test/qad/icons/media-skip-forward.png | Bin 23940 -> 0 bytes test/qad/icons/node-add.png | Bin 694 -> 0 bytes test/qad/icons/node.png | Bin 658 -> 0 bytes test/qad/icons/pause-back.png | Bin 6397 -> 0 bytes test/qad/icons/pause-front.png | Bin 3146 -> 0 bytes test/qad/icons/qcodeedit.png | Bin 818 -> 0 bytes test/qad/icons/qpiconsole.png | Bin 9858 -> 0 bytes test/qad/icons/quickopen.png | Bin 26302 -> 0 bytes test/qad/icons/qvariantedit.png | Bin 1247 -> 0 bytes test/qad/icons/spinslider.png | Bin 830 -> 0 bytes test/qad/icons/sql_table.png | Bin 1405 -> 0 bytes test/qad/icons/tools-wizard.png | Bin 39007 -> 0 bytes test/qad/icons/touchbuttframe.png | Bin 1030 -> 0 bytes test/qad/icons/touchbutton.png | Bin 906 -> 0 bytes test/qad/icons/touchslider.png | Bin 915 -> 0 bytes test/qad/icons/transform-move.png | Bin 24712 -> 0 bytes test/qad/icons/variable-add.png | Bin 557 -> 0 bytes test/qad/icons/variable-copy.png | Bin 567 -> 0 bytes test/qad/icons/variable-edit.png | Bin 567 -> 0 bytes test/qad/icons/variable-remove.png | Bin 588 -> 0 bytes test/qad/icons/view-autofit.png | Bin 1853 -> 0 bytes test/qad/icons/view-fullscreen.png | Bin 6795 -> 0 bytes test/qad/icons/view-grid.png | Bin 2257 -> 0 bytes test/qad/icons/view-preview.png | Bin 35511 -> 0 bytes test/qad/icons/view-refresh.png | Bin 40505 -> 0 bytes test/qad/icons/z-bottom.png | Bin 5964 -> 0 bytes test/qad/icons/z-down.png | Bin 6659 -> 0 bytes test/qad/icons/z-top.png | Bin 7763 -> 0 bytes test/qad/icons/z-up.png | Bin 6936 -> 0 bytes test/qad/icons/zoom-draw.png | Bin 47540 -> 0 bytes test/qad/icons/zoom-fit-best.png | Bin 12394 -> 0 bytes test/qad/icons/zoom-in.png | Bin 49357 -> 0 bytes test/qad/icons/zoom-original.png | Bin 50411 -> 0 bytes test/qad/icons/zoom-out.png | Bin 47817 -> 0 bytes test/qad/icons/zoom-range.png | Bin 48890 -> 0 bytes test/qad/icons/zoom-rect.png | Bin 63008 -> 0 bytes test/qad/icons/zoom-select.png | Bin 64587 -> 0 bytes test/qad/sql_table/CMakeLists.txt | 1 - test/qad/sql_table/lang/qad_sql_table_ru.ts | 58 - test/qad/sql_table/plugin/CMakeLists.txt | 1 - test/qad/sql_table/plugin/qad_sql_table.cpp | 19 - test/qad/sql_table/plugin/qad_sql_table.h | 23 - .../sql_table/plugin/sql_record_plugin.cpp | 69 - test/qad/sql_table/plugin/sql_record_plugin.h | 36 - .../qad/sql_table/plugin/sql_table_plugin.cpp | 69 - test/qad/sql_table/plugin/sql_table_plugin.h | 36 - test/qad/sql_table/qad_sql_table.qrc | 26 - test/qad/sql_table/sql_record_widget.cpp | 352 --- test/qad/sql_table/sql_record_widget.h | 74 - test/qad/sql_table/sql_table_widget.cpp | 1081 --------- test/qad/sql_table/sql_table_widget.h | 335 --- test/qad/sql_table/sql_table_widget.ui | 369 --- test/qad/touch_widgets/CMakeLists.txt | 1 - test/qad/touch_widgets/plugin/CMakeLists.txt | 1 - .../plugin/qad_touch_widgets.cpp | 21 - .../touch_widgets/plugin/qad_touch_widgets.h | 23 - .../plugin/touchbuttframeplugin.cpp | 90 - .../plugin/touchbuttframeplugin.h | 35 - .../plugin/touchbuttonplugin.cpp | 74 - .../touch_widgets/plugin/touchbuttonplugin.h | 35 - .../plugin/touchsliderplugin.cpp | 81 - .../touch_widgets/plugin/touchsliderplugin.h | 35 - test/qad/touch_widgets/touch_bar.h | 17 - test/qad/touch_widgets/touch_widgets.qrc | 7 - test/qad/touch_widgets/touchbuttframe.cpp | 84 - test/qad/touch_widgets/touchbuttframe.h | 113 - test/qad/touch_widgets/touchbutton.cpp | 104 - test/qad/touch_widgets/touchbutton.h | 154 -- test/qad/touch_widgets/touchslider.cpp | 242 -- test/qad/touch_widgets/touchslider.h | 105 - test/qad/touch_widgets/touchslider.ui | 187 -- test/qad/utils/CMakeLists.txt | 1 - test/qad/utils/chunkstream.cpp | 38 - test/qad/utils/chunkstream.h | 60 - test/qad/utils/plugin/CMakeLists.txt | 1 - test/qad/utils/plugin/qad_utils.cpp | 16 - test/qad/utils/plugin/qad_utils.h | 24 - test/qad/utils/propertystorage.cpp | 165 -- test/qad/utils/propertystorage.h | 120 - test/qad/utils/qad_types.cpp | 275 --- test/qad/utils/qad_types.h | 148 -- test/qad/utils/qad_utils.qrc | 17 - test/qad/utils/qpiconfig.cpp | 825 ------- test/qad/utils/qpiconfig.h | 280 --- test/qad/utils/qpievaluator.cpp | 1047 --------- test/qad/utils/qpievaluator.h | 178 -- test/qad/widgets/CMakeLists.txt | 1 - test/qad/widgets/chardialog.cpp | 151 -- test/qad/widgets/chardialog.h | 50 - test/qad/widgets/chardialog.ui | 92 - test/qad/widgets/clineedit.cpp | 67 - test/qad/widgets/clineedit.h | 45 - test/qad/widgets/colorbutton.cpp | 112 - test/qad/widgets/colorbutton.h | 63 - test/qad/widgets/ecombobox.cpp | 102 - test/qad/widgets/ecombobox.h | 36 - test/qad/widgets/evalspinbox.cpp | 337 --- test/qad/widgets/evalspinbox.h | 79 - test/qad/widgets/iconedlabel.cpp | 59 - test/qad/widgets/iconedlabel.h | 53 - test/qad/widgets/image_view.cpp | 134 -- test/qad/widgets/image_view.h | 46 - test/qad/widgets/lang/qad_widgets_ru.ts | 607 ----- test/qad/widgets/mathmatrixedit.cpp | 53 - test/qad/widgets/mathmatrixedit.h | 40 - test/qad/widgets/mathvectoredit.cpp | 53 - test/qad/widgets/mathvectoredit.h | 40 - test/qad/widgets/matrixedit.cpp | 149 -- test/qad/widgets/matrixedit.h | 43 - test/qad/widgets/matrixedit.ui | 116 - test/qad/widgets/plugin/CMakeLists.txt | 1 - test/qad/widgets/plugin/chardialogplugin.cpp | 69 - test/qad/widgets/plugin/chardialogplugin.h | 36 - test/qad/widgets/plugin/clineeditplugin.cpp | 69 - test/qad/widgets/plugin/clineeditplugin.h | 36 - test/qad/widgets/plugin/colorbuttonplugin.cpp | 69 - test/qad/widgets/plugin/colorbuttonplugin.h | 36 - test/qad/widgets/plugin/ecomboboxplugin.cpp | 69 - test/qad/widgets/plugin/ecomboboxplugin.h | 36 - test/qad/widgets/plugin/evalspinboxplugin.cpp | 69 - test/qad/widgets/plugin/evalspinboxplugin.h | 36 - test/qad/widgets/plugin/iconedlabelplugin.h | 36 - test/qad/widgets/plugin/imageviewplugin.cpp | 69 - test/qad/widgets/plugin/imageviewplugin.h | 36 - test/qad/widgets/plugin/lconedlabelplugin.cpp | 69 - test/qad/widgets/plugin/qad_widgets.cpp | 47 - test/qad/widgets/plugin/qad_widgets.h | 23 - test/qad/widgets/plugin/qcodeeditplugin.cpp | 69 - test/qad/widgets/plugin/qcodeeditplugin.h | 36 - test/qad/widgets/plugin/qipeditplugin.cpp | 69 - test/qad/widgets/plugin/qipeditplugin.h | 36 - test/qad/widgets/plugin/qpiconfigplugin.cpp | 69 - test/qad/widgets/plugin/qpiconfigplugin.h | 36 - test/qad/widgets/plugin/qpiconsoleplugin.cpp | 69 - test/qad/widgets/plugin/qpiconsoleplugin.h | 36 - test/qad/widgets/plugin/qpointeditplugin.cpp | 69 - test/qad/widgets/plugin/qpointeditplugin.h | 36 - test/qad/widgets/plugin/qrecteditplugin.cpp | 69 - test/qad/widgets/plugin/qrecteditplugin.h | 36 - .../qad/widgets/plugin/qvarianteditplugin.cpp | 69 - test/qad/widgets/plugin/qvarianteditplugin.h | 36 - test/qad/widgets/plugin/shortcutsplugin.cpp | 69 - test/qad/widgets/plugin/shortcutsplugin.h | 36 - test/qad/widgets/plugin/spinsliderplugin.cpp | 69 - test/qad/widgets/plugin/spinsliderplugin.h | 36 - test/qad/widgets/propertystorage_editor.cpp | 72 - test/qad/widgets/propertystorage_editor.h | 29 - test/qad/widgets/qad_widgets.qrc | 46 - test/qad/widgets/qcodeedit.cpp | 1443 ------------ test/qad/widgets/qcodeedit.h | 163 -- test/qad/widgets/qcodeedit.ui | 388 ---- test/qad/widgets/qipedit.cpp | 82 - test/qad/widgets/qipedit.h | 48 - test/qad/widgets/qpiconfignewdialog.cpp | 77 - test/qad/widgets/qpiconfignewdialog.h | 40 - test/qad/widgets/qpiconfignewdialog.ui | 432 ---- test/qad/widgets/qpiconfigvaluewidget.cpp | 98 - test/qad/widgets/qpiconfigvaluewidget.h | 58 - test/qad/widgets/qpiconfigwidget.cpp | 380 --- test/qad/widgets/qpiconfigwidget.h | 111 - test/qad/widgets/qpiconsole.cpp | 268 --- test/qad/widgets/qpiconsole.h | 187 -- test/qad/widgets/qpointedit.cpp | 34 - test/qad/widgets/qpointedit.h | 42 - test/qad/widgets/qrectedit.cpp | 56 - test/qad/widgets/qrectedit.h | 51 - test/qad/widgets/qvariantedit.cpp | 490 ---- test/qad/widgets/qvariantedit.h | 135 -- test/qad/widgets/qvariantedit_custom.cpp | 43 - test/qad/widgets/qvariantedit_custom.h | 36 - test/qad/widgets/session_manager.cpp | 236 -- test/qad/widgets/session_manager.h | 104 - test/qad/widgets/shortcuts.cpp | 233 -- test/qad/widgets/shortcuts.h | 90 - test/qad/widgets/spinslider.cpp | 85 - test/qad/widgets/spinslider.h | 102 - test/qcd_utils/CMakeLists.txt | 50 - test/qcd_utils/pult/CMakeLists.txt | 26 - test/qcd_utils/pult/cddirectk.cpp | 312 --- test/qcd_utils/pult/cddirectk.h | 77 - test/qcd_utils/pult/cddirectk.ui | 85 - test/qcd_utils/pult/cddirectk_type_dialog.cpp | 76 - test/qcd_utils/pult/cddirectk_type_dialog.h | 44 - test/qcd_utils/pult/cddirectk_type_dialog.ui | 232 -- test/qcd_utils/pult/cdgraphics.cpp | 353 --- test/qcd_utils/pult/cdgraphics.h | 92 - test/qcd_utils/pult/cdgraphics.ui | 168 -- test/qcd_utils/pult/cdpult.qrc | 16 - test/qcd_utils/pult/cdpultwindow.cpp | 292 --- test/qcd_utils/pult/cdpultwindow.h | 53 - test/qcd_utils/pult/cdpultwindow.ui | 612 ----- test/qcd_utils/pult/cdviewwidget.cpp | 78 - test/qcd_utils/pult/cdviewwidget.h | 41 - test/qcd_utils/pult/cdviewwidget.ui | 176 -- .../Apps-accessories-calculator-icon.png | Bin 9661 -> 0 bytes .../pult/icons/accessories-text-editor.png | Bin 36782 -> 0 bytes test/qcd_utils/pult/icons/db-export.png | Bin 33510 -> 0 bytes test/qcd_utils/pult/icons/db-import.png | Bin 32628 -> 0 bytes test/qcd_utils/pult/icons/dialog-cancel.png | Bin 45200 -> 0 bytes .../pult/icons/dialog-information.png | Bin 36295 -> 0 bytes test/qcd_utils/pult/icons/dialog-ok-apply.png | Bin 24550 -> 0 bytes test/qcd_utils/pult/icons/document-revert.png | Bin 2885 -> 0 bytes test/qcd_utils/pult/icons/flame.png | Bin 3342 -> 0 bytes .../pult/icons/format-stroke-color.png | Bin 24156 -> 0 bytes test/qcd_utils/pult/icons/timer.png | Bin 45230 -> 0 bytes test/qcd_utils/pult/icons/view-refresh.png | Bin 40505 -> 0 bytes test/qcd_utils/pult/main.cpp | 56 - test/qcd_utils/qcd_core.cpp | 297 --- test/qcd_utils/qcd_core.h | 77 - test/qcd_utils/qcd_graphic.cpp | 30 - test/qcd_utils/qcd_graphic.h | 42 - test/qcd_utils/qcd_graphic.ui | 169 -- test/qcd_utils/qcd_modedialog.cpp | 46 - test/qcd_utils/qcd_modedialog.h | 31 - test/qcd_utils/qcd_modedialog.ui | 98 - test/qcd_utils/qcd_model.cpp | 460 ---- test/qcd_utils/qcd_model.h | 113 - test/qcd_utils/qcd_view.cpp | 353 --- test/qcd_utils/qcd_view.h | 89 - test/qglview/CMakeLists.txt | 61 - test/qglview/glcamera.cpp | 260 --- test/qglview/glcamera.h | 104 - test/qglview/glframebuffer.cpp | 145 -- test/qglview/glframebuffer.h | 66 - test/qglview/glmaterial.cpp | 266 --- test/qglview/glmaterial.h | 188 -- test/qglview/globject.cpp | 593 ----- test/qglview/globject.h | 268 --- test/qglview/globject_editor.cpp | 151 -- test/qglview/globject_editor.h | 55 - test/qglview/globject_editor.ui | 1087 --------- test/qglview/glparticles_system.cpp | 215 -- test/qglview/glparticles_system.h | 153 -- test/qglview/glprimitives.cpp | 220 -- test/qglview/glprimitives.h | 85 - test/qglview/glrendererbase.cpp | 321 --- test/qglview/glrendererbase.h | 80 - test/qglview/glshaders.cpp | 253 -- test/qglview/glshaders.h | 35 - test/qglview/gltexture_manager.cpp | 67 - test/qglview/gltexture_manager.h | 53 - test/qglview/gltypes.cpp | 379 --- test/qglview/gltypes.h | 348 --- test/qglview/glvbo.cpp | 317 --- test/qglview/glvbo.h | 98 - test/qglview/glwidget.cpp | 268 --- test/qglview/glwidget.h | 88 - test/qglview/icons/alpha.png | Bin 158 -> 0 bytes test/qglview/icons/application-exit.png | Bin 1134 -> 0 bytes test/qglview/icons/configure.png | Bin 717 -> 0 bytes test/qglview/icons/dialog-close.png | Bin 813 -> 0 bytes test/qglview/icons/document-import.png | Bin 2411 -> 0 bytes test/qglview/icons/document-new.png | Bin 2461 -> 0 bytes test/qglview/icons/document-open.png | Bin 2798 -> 0 bytes test/qglview/icons/document-save-.png | Bin 2122 -> 0 bytes test/qglview/icons/document-save-all.png | Bin 2585 -> 0 bytes test/qglview/icons/document-save.png | Bin 563 -> 0 bytes .../icons/edit-clear-locationbar-rtl.png | Bin 644 -> 0 bytes test/qglview/icons/edit-clear.png | Bin 802 -> 0 bytes test/qglview/icons/edit-copy.png | Bin 485 -> 0 bytes test/qglview/icons/edit-delete.png | Bin 640 -> 0 bytes test/qglview/icons/edit-find.png | Bin 634 -> 0 bytes test/qglview/icons/edit-guides.png | Bin 544 -> 0 bytes test/qglview/icons/edit-paste.png | Bin 529 -> 0 bytes test/qglview/icons/item-add.png | Bin 639 -> 0 bytes test/qglview/icons/item.png | Bin 448 -> 0 bytes test/qglview/icons/list-add.png | Bin 564 -> 0 bytes test/qglview/icons/node-add.png | Bin 694 -> 0 bytes test/qglview/icons/node.png | Bin 658 -> 0 bytes test/qglview/icons/qglview.png | Bin 82318 -> 0 bytes test/qglview/icons/qglview.xcf | Bin 170453 -> 0 bytes test/qglview/icons/type-camera.png | Bin 1152 -> 0 bytes test/qglview/icons/type-geo.png | Bin 1105 -> 0 bytes test/qglview/icons/type-light.png | Bin 971 -> 0 bytes test/qglview/icons/view-grid.png | Bin 691 -> 0 bytes test/qglview/icons/zoom-fit-best.png | Bin 539 -> 0 bytes test/qglview/loader_3ds.cpp | 348 --- test/qglview/loader_3ds.h | 77 - test/qglview/loader_ase.cpp | 386 --- test/qglview/loader_ase.h | 33 - test/qglview/loader_dae.cpp | 426 ---- test/qglview/loader_dae.h | 35 - test/qglview/loader_obj.cpp | 270 --- test/qglview/loader_obj.h | 42 - test/qglview/loader_qgl.cpp | 69 - test/qglview/loader_qgl.h | 31 - test/qglview/material_editor.cpp | 206 -- test/qglview/material_editor.h | 65 - test/qglview/material_editor.ui | 779 ------- test/qglview/material_map_editor.cpp | 88 - test/qglview/material_map_editor.h | 56 - test/qglview/material_map_editor.ui | 178 -- test/qglview/openglwindow.cpp | 95 - test/qglview/openglwindow.h | 36 - test/qglview/plugin/CMakeLists.txt | 12 - .../qglview/plugin/qglview_designerplugin.cpp | 14 - test/qglview/plugin/qglview_designerplugin.h | 22 - test/qglview/plugin/qglviewplugin.cpp | 95 - test/qglview/plugin/qglviewplugin.h | 33 - test/qglview/propertyeditor.cpp | 408 ---- test/qglview/propertyeditor.h | 77 - test/qglview/qglview.cpp | 770 ------ test/qglview/qglview.h | 296 --- test/qglview/qglview.qrc | 76 - test/qglview/qglview_test/main.cpp | 34 - test/qglview/qglview_test/qglview_window.cpp | 338 --- test/qglview/qglview_test/qglview_window.h | 144 -- test/qglview/qglview_test/qglview_window.ui | 1234 ---------- test/qglview/renderer_deferred_shading.cpp | 597 ----- test/qglview/renderer_deferred_shading.h | 67 - test/qglview/renderer_simple.cpp | 130 -- test/qglview/renderer_simple.h | 47 - test/qglview/shaders/FXAA.frag | 230 -- test/qglview/shaders/FXAA.vert | 13 - test/qglview/shaders/bloom_0.frag | 8 - test/qglview/shaders/bloom_1.frag | 30 - test/qglview/shaders/bloom_pass_0.frag | 8 - test/qglview/shaders/bloom_pass_0.vert | 6 - test/qglview/shaders/bloom_pass_1.frag | 55 - test/qglview/shaders/bloom_pass_1.vert | 6 - test/qglview/shaders/dof.frag | 47 - test/qglview/shaders/dof.vert | 6 - test/qglview/shaders/downscale.frag | 7 - test/qglview/shaders/downscale.vert | 6 - test/qglview/shaders/dsl_pass_0.frag | 67 - test/qglview/shaders/dsl_pass_0.vert | 46 - test/qglview/shaders/dsl_pass_1.frag | 166 -- test/qglview/shaders/dsl_pass_1.vert | 14 - test/qglview/shaders/dsl_pass_2.frag | 13 - test/qglview/shaders/dsl_pass_2.vert | 6 - test/qglview/shaders/fbo_add.frag | 7 - test/qglview/shaders/fbo_add.vert | 6 - test/qglview/shaders/hdr.frag | 29 - test/qglview/shaders/hdr.vert | 6 - test/qglview/shaders/hdr_scale_0.frag | 13 - test/qglview/shaders/hdr_scale_1.frag | 10 - test/qglview/shaders/light_models.frag | 161 -- test/qglview/shaders/motion_blur.frag | 24 - test/qglview/shaders/motion_blur.vert | 6 - test/qglview/shaders/post.frag | 42 - test/qglview/shaders/ppl.frag | 179 -- test/qglview/shaders/ppl.vert | 66 - test/qglview/shaders/selection.frag | 7 - test/qglview/shaders/selection.vert | 8 - test/qglview/shaders/selection_halo.frag | 20 - test/qglview/shaders/selection_halo.vert | 6 - test/qglview/shaders/shadow.frag | 7 - test/qglview/shaders/shadow.vert | 10 - test/qglview/shaders/ssao_blur.frag | 55 - test/qglview/shaders/ssao_blur.vert | 6 - test/qglview/shaders/ssao_merge.frag | 53 - test/qglview/shaders/ssao_merge.vert | 10 - test/qglview/shaders/ssr.frag | 67 - test/qglview/shaders/ssr.vert | 10 - test/qglview/shaders/ssr_blur.frag | 38 - test/qglview/shaders/ssr_blur.vert | 6 - test/qglview/shaders/ssr_merge.frag | 15 - test/qglview/shaders/ssr_merge.vert | 6 - 929 files changed, 66799 deletions(-) delete mode 100644 test/CMakeLists.txt delete mode 100644 test/FindMinGW.cmake delete mode 100644 test/README.txt delete mode 100644 test/SDKMacros.cmake delete mode 100644 test/cd_utils/CMakeLists.txt delete mode 100644 test/cd_utils/cdtest.h delete mode 100644 test/cd_utils/cdutils_c.cpp delete mode 100644 test/cd_utils/cdutils_c.h delete mode 100644 test/cd_utils/cdutils_core.cpp delete mode 100644 test/cd_utils/cdutils_core.h delete mode 100644 test/cd_utils/cdutils_interface.cpp delete mode 100644 test/cd_utils/cdutils_interface.h delete mode 100644 test/cd_utils/cdutils_k.cpp delete mode 100644 test/cd_utils/cdutils_k.h delete mode 100644 test/cd_utils/cdutils_m.cpp delete mode 100644 test/cd_utils/cdutils_m.h delete mode 100644 test/cd_utils/cdutils_parser.cpp delete mode 100644 test/cd_utils/cdutils_parser.h delete mode 100644 test/cd_utils/cdutils_protocol.h delete mode 100644 test/cd_utils/cdutils_types.cpp delete mode 100644 test/cd_utils/cdutils_types.h delete mode 100644 test/cd_utils/cdutils_x.cpp delete mode 100644 test/cd_utils/cdutils_x.h delete mode 100644 test/cd_utils/cdutilstest.cpp delete mode 100644 test/cd_utils/k_description.h delete mode 100644 test/kx_utils/CMakeLists.txt delete mode 100644 test/kx_utils/clean delete mode 100644 test/kx_utils/clean.bat delete mode 100644 test/kx_utils/icons/accessories-calculator.png delete mode 100644 test/kx_utils/icons/alpha.png delete mode 100644 test/kx_utils/icons/application-exit.png delete mode 100644 test/kx_utils/icons/archive-extract.png delete mode 100644 test/kx_utils/icons/configure.png delete mode 100644 test/kx_utils/icons/dialog-close.png delete mode 100644 test/kx_utils/icons/document-export.png delete mode 100644 test/kx_utils/icons/document-import.png delete mode 100644 test/kx_utils/icons/document-open.png delete mode 100644 test/kx_utils/icons/document-save-.png delete mode 100644 test/kx_utils/icons/document-save.png delete mode 100644 test/kx_utils/icons/edit-clear-.png delete mode 100644 test/kx_utils/icons/edit-clear-locationbar-rtl.png delete mode 100644 test/kx_utils/icons/edit-clear.png delete mode 100644 test/kx_utils/icons/edit-copy.png delete mode 100644 test/kx_utils/icons/edit-delete.png delete mode 100644 test/kx_utils/icons/edit-find-.png delete mode 100644 test/kx_utils/icons/edit-find.png delete mode 100644 test/kx_utils/icons/edit-guides.png delete mode 100644 test/kx_utils/icons/edit-paste.png delete mode 100644 test/kx_utils/icons/expand_s_x.png delete mode 100644 test/kx_utils/icons/expand_s_y.png delete mode 100644 test/kx_utils/icons/expand_x.png delete mode 100644 test/kx_utils/icons/expand_y.png delete mode 100644 test/kx_utils/icons/item-add.png delete mode 100644 test/kx_utils/icons/item.png delete mode 100644 test/kx_utils/icons/layer-visible-off.png delete mode 100644 test/kx_utils/icons/layer-visible-on.png delete mode 100644 test/kx_utils/icons/list-add.png delete mode 100644 test/kx_utils/icons/media-playback-pause.png delete mode 100644 test/kx_utils/icons/media-playback-stop.png delete mode 100644 test/kx_utils/icons/media-record.png delete mode 100644 test/kx_utils/icons/node-add.png delete mode 100644 test/kx_utils/icons/node.png delete mode 100644 test/kx_utils/icons/view-grid.png delete mode 100644 test/kx_utils/icons/view-refresh.png delete mode 100644 test/kx_utils/icons/zoom-fit-best.png delete mode 100644 test/kx_utils/icons/zoom-fit-height.png delete mode 100644 test/kx_utils/kx_coeffs.cpp delete mode 100644 test/kx_utils/kx_coeffs.h delete mode 100644 test/kx_utils/kx_protocol_c.h delete mode 100644 test/kx_utils/kx_protocol_x.h delete mode 100644 test/kx_utils/kx_pult.conf delete mode 100644 test/kx_utils/kx_pult.cpp delete mode 100644 test/kx_utils/kx_pult.h delete mode 100644 test/kx_utils/kx_pult.qrc delete mode 100644 test/kx_utils/kx_pult.ui delete mode 100644 test/kx_utils/main_kx_pult.cpp delete mode 100644 test/kx_utils/make_lib.bat delete mode 100644 test/kx_utils/piprotocol.cpp delete mode 100644 test/kx_utils/piprotocol.h delete mode 100644 test/logo.png delete mode 100644 test/make_android.bat delete mode 100755 test/make_android.sh delete mode 100644 test/make_libs.bat delete mode 100755 test/make_libs.sh delete mode 100644 test/make_libs32.bat delete mode 100644 test/make_libs64.bat delete mode 100644 test/make_libs_all.bat delete mode 100644 test/make_libs_android.bat delete mode 100644 test/make_libs_android_all.bat delete mode 100644 test/piqt/CMakeLists.txt delete mode 100644 test/piqt/clean delete mode 100644 test/piqt/clean.bat delete mode 100644 test/piqt/make_lib.bat delete mode 100644 test/piqt/piqt.cpp delete mode 100644 test/piqt/piqt.h delete mode 100644 test/piqt_utils/CMakeLists.txt delete mode 100644 test/piqt_utils/piconnedit/CMakeLists.txt delete mode 100644 test/piqt_utils/piconnedit/icons/Apps-accessories-calculator-icon.png delete mode 100644 test/piqt_utils/piconnedit/icons/DALI-designer.png delete mode 100644 test/piqt_utils/piconnedit/icons/alpha.png delete mode 100644 test/piqt_utils/piconnedit/icons/application-exit.png delete mode 100644 test/piqt_utils/piconnedit/icons/applications-engineering.png delete mode 100644 test/piqt_utils/piconnedit/icons/archive-extract.png delete mode 100644 test/piqt_utils/piconnedit/icons/archive-insert-directory.png delete mode 100644 test/piqt_utils/piconnedit/icons/archive-insert.png delete mode 100644 test/piqt_utils/piconnedit/icons/arrow-down.png delete mode 100644 test/piqt_utils/piconnedit/icons/arrow-up.png delete mode 100644 test/piqt_utils/piconnedit/icons/axis_x.png delete mode 100644 test/piqt_utils/piconnedit/icons/axis_y.png delete mode 100644 test/piqt_utils/piconnedit/icons/case-sensitive.png delete mode 100644 test/piqt_utils/piconnedit/icons/checkbox-unchecked.png delete mode 100644 test/piqt_utils/piconnedit/icons/checkbox.png delete mode 100644 test/piqt_utils/piconnedit/icons/clients.png delete mode 100644 test/piqt_utils/piconnedit/icons/close.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-error.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-function.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-keyword.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-parents.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-property.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-signal.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-struct.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-union.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-variable.png delete mode 100644 test/piqt_utils/piconnedit/icons/code-word.png delete mode 100644 test/piqt_utils/piconnedit/icons/configure-.png delete mode 100644 test/piqt_utils/piconnedit/icons/configure.png delete mode 100644 test/piqt_utils/piconnedit/icons/database.png delete mode 100644 test/piqt_utils/piconnedit/icons/debug-run.png delete mode 100644 test/piqt_utils/piconnedit/icons/designer-qt4.png delete mode 100644 test/piqt_utils/piconnedit/icons/dialog-close.png delete mode 100644 test/piqt_utils/piconnedit/icons/dialog-ok-apply.png delete mode 100644 test/piqt_utils/piconnedit/icons/dialog-warning.png delete mode 100644 test/piqt_utils/piconnedit/icons/disabled.png delete mode 100644 test/piqt_utils/piconnedit/icons/distribute-horizontal-margin.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-edit.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-new.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-open.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-print.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-save-.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-save-all.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-save-as.png delete mode 100644 test/piqt_utils/piconnedit/icons/document-save.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-clear-.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-clear-locationbar-rtl.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-clear.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-copy.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-cut.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-delete.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-find-.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-find.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-guides.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-paste.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-redo.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-table-insert-row-below.png delete mode 100644 test/piqt_utils/piconnedit/icons/edit-undo.png delete mode 100644 test/piqt_utils/piconnedit/icons/employees.png delete mode 100644 test/piqt_utils/piconnedit/icons/expand_s_x.png delete mode 100644 test/piqt_utils/piconnedit/icons/expand_s_y.png delete mode 100644 test/piqt_utils/piconnedit/icons/expand_x.png delete mode 100644 test/piqt_utils/piconnedit/icons/expand_y.png delete mode 100644 test/piqt_utils/piconnedit/icons/format-text-subscript.png delete mode 100644 test/piqt_utils/piconnedit/icons/games-solve.png delete mode 100644 test/piqt_utils/piconnedit/icons/go-jump.png delete mode 100644 test/piqt_utils/piconnedit/icons/go-next.png delete mode 100644 test/piqt_utils/piconnedit/icons/go-previous.png delete mode 100644 test/piqt_utils/piconnedit/icons/graphics.png delete mode 100644 test/piqt_utils/piconnedit/icons/groups-edit.png delete mode 100644 test/piqt_utils/piconnedit/icons/item-add.png delete mode 100644 test/piqt_utils/piconnedit/icons/item.png delete mode 100644 test/piqt_utils/piconnedit/icons/lastmoves.png delete mode 100644 test/piqt_utils/piconnedit/icons/led_3.png delete mode 100644 test/piqt_utils/piconnedit/icons/led_off.png delete mode 100644 test/piqt_utils/piconnedit/icons/led_on.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-+.png delete mode 100644 test/piqt_utils/piconnedit/icons/light--.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-254.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-disable-all.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-disable.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-down.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-edit.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-max.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-min.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-off.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-on.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-step-down.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-step-up.png delete mode 100644 test/piqt_utils/piconnedit/icons/light-up.png delete mode 100644 test/piqt_utils/piconnedit/icons/lights.png delete mode 100644 test/piqt_utils/piconnedit/icons/list-add.png delete mode 100644 test/piqt_utils/piconnedit/icons/list-remove.png delete mode 100644 test/piqt_utils/piconnedit/icons/log_parser.png delete mode 100644 test/piqt_utils/piconnedit/icons/mail.png delete mode 100644 test/piqt_utils/piconnedit/icons/media-flash.png delete mode 100644 test/piqt_utils/piconnedit/icons/media-playback-pause.png delete mode 100644 test/piqt_utils/piconnedit/icons/media-playback-stop.png delete mode 100644 test/piqt_utils/piconnedit/icons/media-record.png delete mode 100644 test/piqt_utils/piconnedit/icons/node-add.png delete mode 100644 test/piqt_utils/piconnedit/icons/node.png delete mode 100644 test/piqt_utils/piconnedit/icons/object-locked.png delete mode 100644 test/piqt_utils/piconnedit/icons/piconnection.png delete mode 100644 test/piqt_utils/piconnedit/icons/piconnection.xcf delete mode 100644 test/piqt_utils/piconnedit/icons/quickopen.png delete mode 100644 test/piqt_utils/piconnedit/icons/run-build-install-root.png delete mode 100644 test/piqt_utils/piconnedit/icons/run-build.png delete mode 100644 test/piqt_utils/piconnedit/icons/scenes-edit.png delete mode 100644 test/piqt_utils/piconnedit/icons/select-add.png delete mode 100644 test/piqt_utils/piconnedit/icons/select-intersect.png delete mode 100644 test/piqt_utils/piconnedit/icons/select-invert.png delete mode 100644 test/piqt_utils/piconnedit/icons/select-none.png delete mode 100644 test/piqt_utils/piconnedit/icons/select-replace.png delete mode 100644 test/piqt_utils/piconnedit/icons/select-subtract.png delete mode 100644 test/piqt_utils/piconnedit/icons/splash.png delete mode 100644 test/piqt_utils/piconnedit/icons/status-off.png delete mode 100644 test/piqt_utils/piconnedit/icons/status-on.png delete mode 100644 test/piqt_utils/piconnedit/icons/status-warn.png delete mode 100644 test/piqt_utils/piconnedit/icons/system-help.png delete mode 100644 test/piqt_utils/piconnedit/icons/tool-light-add.png delete mode 100644 test/piqt_utils/piconnedit/icons/tool-selection.png delete mode 100644 test/piqt_utils/piconnedit/icons/tools-wizard.png delete mode 100644 test/piqt_utils/piconnedit/icons/transform-move.png delete mode 100644 test/piqt_utils/piconnedit/icons/variable-add.png delete mode 100644 test/piqt_utils/piconnedit/icons/variable-copy.png delete mode 100644 test/piqt_utils/piconnedit/icons/variable-edit.png delete mode 100644 test/piqt_utils/piconnedit/icons/variable-remove.png delete mode 100644 test/piqt_utils/piconnedit/icons/view-grid.png delete mode 100644 test/piqt_utils/piconnedit/icons/view-refresh.png delete mode 100644 test/piqt_utils/piconnedit/icons/warning-a.png delete mode 100644 test/piqt_utils/piconnedit/icons/warning-id.png delete mode 100644 test/piqt_utils/piconnedit/icons/window-close.png delete mode 100644 test/piqt_utils/piconnedit/icons/zoom-fit-best.png delete mode 100644 test/piqt_utils/piconnedit/icons/zoom-in.png delete mode 100644 test/piqt_utils/piconnedit/icons/zoom-out.png delete mode 100644 test/piqt_utils/piconnedit/icons/zoom-range.png delete mode 100644 test/piqt_utils/piconnedit/icons/zoom-rect.png delete mode 100644 test/piqt_utils/piconnedit/piconnedit.qrc delete mode 100644 test/piqt_utils/piconnedit/piconnedit_main.cpp delete mode 100644 test/piqt_utils/pidumper/CMakeLists.txt delete mode 100644 test/piqt_utils/pidumper/pidumper.cpp delete mode 100644 test/piqt_utils/pidumper/pidumper.h delete mode 100644 test/piqt_utils/pidumper/pidumper.ui delete mode 100644 test/piqt_utils/pidumper/pidumper_main.cpp delete mode 100644 test/piqt_utils/piintrospector/CMakeLists.txt delete mode 100644 test/piqt_utils/piintrospector/containers_view.cpp delete mode 100644 test/piqt_utils/piintrospector/containers_view.h delete mode 100644 test/piqt_utils/piintrospector/containers_view.ui delete mode 100644 test/piqt_utils/piintrospector/objects_view.cpp delete mode 100644 test/piqt_utils/piintrospector/objects_view.h delete mode 100644 test/piqt_utils/piintrospector/objects_view.ui delete mode 100644 test/piqt_utils/piintrospector/piintrospector.cpp delete mode 100644 test/piqt_utils/piintrospector/piintrospector.h delete mode 100644 test/piqt_utils/piintrospector/piintrospector.ui delete mode 100644 test/piqt_utils/piintrospector/piintrospector_main.cpp delete mode 100644 test/piqt_utils/piintrospector/threads_view.cpp delete mode 100644 test/piqt_utils/piintrospector/threads_view.h delete mode 100644 test/piqt_utils/piintrospector/threads_view.ui delete mode 100644 test/piqt_utils/piqt_connection_edit.cpp delete mode 100644 test/piqt_utils/piqt_connection_edit.h delete mode 100644 test/piqt_utils/piqt_connection_edit.ui delete mode 100644 test/piqt_utils/piqt_connection_view.cpp delete mode 100644 test/piqt_utils/piqt_connection_view.h delete mode 100644 test/piqt_utils/piqt_highlighter.cpp delete mode 100644 test/piqt_utils/piqt_highlighter.h delete mode 100644 test/piqt_utils/piqt_iodevice_edit.cpp delete mode 100644 test/piqt_utils/piqt_iodevice_edit.h delete mode 100644 test/piqt_utils/piqt_iodevice_edit_dialog.cpp delete mode 100644 test/piqt_utils/piqt_iodevice_edit_dialog.h delete mode 100644 test/piqt_utils/piqt_iodevice_edit_dialog.ui delete mode 100644 test/piqt_utils/qpiconnection.cpp delete mode 100644 test/piqt_utils/qpiconnection.h delete mode 100644 test/project_fs/ProjectFilesystemPlugin.json.in delete mode 100644 test/project_fs/filterdialog.cpp delete mode 100644 test/project_fs/filterdialog.h delete mode 100644 test/project_fs/filterdialog.ui delete mode 100644 test/project_fs/icons/edit-find.png delete mode 100644 test/project_fs/icons/utilities-terminal.png delete mode 100644 test/project_fs/projectfilesystem.qrc delete mode 100644 test/project_fs/projectfilesystemplugin.cpp delete mode 100644 test/project_fs/projectfilesystemplugin.h delete mode 100644 test/project_fs/projectfilesystemplugin.pro delete mode 100644 test/project_fs/projectfilesystemplugin_global.h delete mode 100644 test/project_fs/projectfilesystempluginconstants.h delete mode 100644 test/project_fs/projectfilesystemwidget.cpp delete mode 100644 test/project_fs/projectfilesystemwidget.h delete mode 100644 test/project_fs/projectfilesystemwidget.ui delete mode 100644 test/project_fs/projectfilesystemwidgetplugin.cpp delete mode 100644 test/project_fs/projectfilesystemwidgetplugin.h delete mode 100644 test/qad/CMakeLists.txt delete mode 100644 test/qad/FindQAD.cmake delete mode 100644 test/qad/QADConfig.cmake delete mode 100644 test/qad/QtWraps.cmake delete mode 100644 test/qad/application/CMakeLists.txt delete mode 100644 test/qad/application/edockwidget.cpp delete mode 100644 test/qad/application/edockwidget.h delete mode 100644 test/qad/application/emainwindow.cpp delete mode 100644 test/qad/application/emainwindow.h delete mode 100644 test/qad/application/etabwidget.cpp delete mode 100644 test/qad/application/etabwidget.h delete mode 100644 test/qad/application/historyview.cpp delete mode 100644 test/qad/application/historyview.h delete mode 100644 test/qad/application/lang/qad_application_ru.ts delete mode 100644 test/qad/application/plugin/CMakeLists.txt delete mode 100644 test/qad/application/plugin/edockwidgetplugin.cpp delete mode 100644 test/qad/application/plugin/edockwidgetplugin.h delete mode 100644 test/qad/application/plugin/emainwindowplugin.cpp delete mode 100644 test/qad/application/plugin/emainwindowplugin.h delete mode 100644 test/qad/application/plugin/historyviewplugin.cpp delete mode 100644 test/qad/application/plugin/historyviewplugin.h delete mode 100644 test/qad/application/plugin/qad_application.cpp delete mode 100644 test/qad/application/plugin/qad_application.h delete mode 100644 test/qad/application/qad_application.qrc delete mode 100644 test/qad/application/qsingleapplication.cpp delete mode 100644 test/qad/application/qsingleapplication.h delete mode 100644 test/qad/application/ribbon.cpp delete mode 100644 test/qad/application/ribbon.h delete mode 100644 test/qad/blockview/CMakeLists.txt delete mode 100644 test/qad/blockview/alignedtextitem.cpp delete mode 100644 test/qad/blockview/alignedtextitem.h delete mode 100644 test/qad/blockview/blockbase.cpp delete mode 100644 test/qad/blockview/blockbase.h delete mode 100644 test/qad/blockview/blockbusitem.cpp delete mode 100644 test/qad/blockview/blockbusitem.h delete mode 100644 test/qad/blockview/blockeditor.cpp delete mode 100644 test/qad/blockview/blockeditor.h delete mode 100644 test/qad/blockview/blockeditor.ui delete mode 100644 test/qad/blockview/blockeditor/CMakeLists.txt delete mode 100644 test/qad/blockview/blockeditor/blockeditor_main.cpp delete mode 100644 test/qad/blockview/blockeditor/icons/blockview.ico delete mode 100644 test/qad/blockview/blockeditor/resource_win_icon.rc delete mode 100644 test/qad/blockview/blockitem.cpp delete mode 100644 test/qad/blockview/blockitem.h delete mode 100644 test/qad/blockview/blockitempin.cpp delete mode 100644 test/qad/blockview/blockitempin.h delete mode 100644 test/qad/blockview/blockview.cpp delete mode 100644 test/qad/blockview/blockview.h delete mode 100644 test/qad/blockview/blockviewwavetrace.cpp delete mode 100644 test/qad/blockview/blockviewwavetrace.h delete mode 100644 test/qad/blockview/drawtools.cpp delete mode 100644 test/qad/blockview/drawtools.h delete mode 100644 test/qad/blockview/drawtools.ui delete mode 100644 test/qad/blockview/lang/qad_blockview_ru.ts delete mode 100644 test/qad/blockview/plugin/CMakeLists.txt delete mode 100644 test/qad/blockview/plugin/blockviewplugin.cpp delete mode 100644 test/qad/blockview/plugin/blockviewplugin.h delete mode 100644 test/qad/blockview/plugin/qad_blockview.cpp delete mode 100644 test/qad/blockview/plugin/qad_blockview.h delete mode 100644 test/qad/blockview/qad_blockview.qrc delete mode 100644 test/qad/graphic/CMakeLists.txt delete mode 100644 test/qad/graphic/graphic.cpp delete mode 100644 test/qad/graphic/graphic.h delete mode 100644 test/qad/graphic/graphic.ui delete mode 100644 test/qad/graphic/graphic_conf.cpp delete mode 100644 test/qad/graphic/graphic_conf.h delete mode 100644 test/qad/graphic/graphic_conf.ui delete mode 100644 test/qad/graphic/lang/qad_graphic_ru.ts delete mode 100644 test/qad/graphic/plugin/CMakeLists.txt delete mode 100644 test/qad/graphic/plugin/graphicplugin.cpp delete mode 100644 test/qad/graphic/plugin/graphicplugin.h delete mode 100644 test/qad/graphic/plugin/qad_graphic.cpp delete mode 100644 test/qad/graphic/plugin/qad_graphic.h delete mode 100644 test/qad/graphic/qad_graphic.qrc delete mode 100644 test/qad/graphic/qpicalculator/CMakeLists.txt delete mode 100644 test/qad/graphic/qpicalculator/CMakeLists.txt.user delete mode 100644 test/qad/graphic/qpicalculator/icons/Apps-accessories-calculator-icon.png delete mode 100644 test/qad/graphic/qpicalculator/icons/application-exit.png delete mode 100644 test/qad/graphic/qpicalculator/icons/arrow-left.png delete mode 100644 test/qad/graphic/qpicalculator/icons/arrow-right.png delete mode 100644 test/qad/graphic/qpicalculator/icons/axes.png delete mode 100644 test/qad/graphic/qpicalculator/icons/axes_1.png delete mode 100644 test/qad/graphic/qpicalculator/icons/character-set.png delete mode 100644 test/qad/graphic/qpicalculator/icons/configure.png delete mode 100644 test/qad/graphic/qpicalculator/icons/dialog-close.png delete mode 100644 test/qad/graphic/qpicalculator/icons/document-close.png delete mode 100644 test/qad/graphic/qpicalculator/icons/document-edit.png delete mode 100644 test/qad/graphic/qpicalculator/icons/document-open.png delete mode 100644 test/qad/graphic/qpicalculator/icons/document-revert.png delete mode 100644 test/qad/graphic/qpicalculator/icons/document-save-as.png delete mode 100644 test/qad/graphic/qpicalculator/icons/document-save.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-clear-locationbar-rtl.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-clear.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-copy.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-cut.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-delete.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-find.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-guides.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-paste.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-redo.png delete mode 100644 test/qad/graphic/qpicalculator/icons/edit-undo.png delete mode 100644 test/qad/graphic/qpicalculator/icons/empty_brick.png delete mode 100644 test/qad/graphic/qpicalculator/icons/format-fill-color.png delete mode 100644 test/qad/graphic/qpicalculator/icons/format-text-bold.png delete mode 100644 test/qad/graphic/qpicalculator/icons/format-text-color.png delete mode 100644 test/qad/graphic/qpicalculator/icons/format-text-italic.png delete mode 100644 test/qad/graphic/qpicalculator/icons/format-text-overline.png delete mode 100644 test/qad/graphic/qpicalculator/icons/format-text-strikethrough.png delete mode 100644 test/qad/graphic/qpicalculator/icons/format-text-underline.png delete mode 100644 test/qad/graphic/qpicalculator/icons/go-home.png delete mode 100644 test/qad/graphic/qpicalculator/icons/go-next.png delete mode 100644 test/qad/graphic/qpicalculator/icons/go-previous.png delete mode 100644 test/qad/graphic/qpicalculator/icons/graphic_add.png delete mode 100644 test/qad/graphic/qpicalculator/icons/graphics.png delete mode 100644 test/qad/graphic/qpicalculator/icons/help-contents.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_brick_add.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_brick_del.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_brick_move.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_conn_add.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_conn_del.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_conn_edit.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_conn_retrace.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_convert.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_freq.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_point.xcf delete mode 100644 test/qad/graphic/qpicalculator/icons/history_point_add.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_point_del.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_point_move.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_seg_add.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_seg_del.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_seg_move.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_text_add.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_text_del.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_text_edit.png delete mode 100644 test/qad/graphic/qpicalculator/icons/history_text_move.png delete mode 100644 test/qad/graphic/qpicalculator/icons/initial.png delete mode 100644 test/qad/graphic/qpicalculator/icons/insert-image.png delete mode 100644 test/qad/graphic/qpicalculator/icons/insert-text.png delete mode 100644 test/qad/graphic/qpicalculator/icons/layer-visible-off.png delete mode 100644 test/qad/graphic/qpicalculator/icons/layer-visible-on.png delete mode 100644 test/qad/graphic/qpicalculator/icons/list-add.png delete mode 100644 test/qad/graphic/qpicalculator/icons/mbricks.svg delete mode 100644 test/qad/graphic/qpicalculator/icons/mbricks_128.png delete mode 100644 test/qad/graphic/qpicalculator/icons/mbricks_22.png delete mode 100644 test/qad/graphic/qpicalculator/icons/mbricks_256.png delete mode 100644 test/qad/graphic/qpicalculator/icons/mbricks_64.png delete mode 100644 test/qad/graphic/qpicalculator/icons/media-playback-pause.png delete mode 100644 test/qad/graphic/qpicalculator/icons/media-playback-start.png delete mode 100644 test/qad/graphic/qpicalculator/icons/media-playback-stop.png delete mode 100644 test/qad/graphic/qpicalculator/icons/media-skip-forward.png delete mode 100644 test/qad/graphic/qpicalculator/icons/object-flip-horizontal.png delete mode 100644 test/qad/graphic/qpicalculator/icons/player-time.png delete mode 100644 test/qad/graphic/qpicalculator/icons/preferences-desktop-display.png delete mode 100644 test/qad/graphic/qpicalculator/icons/preferences-desktop-keyboard.png delete mode 100644 test/qad/graphic/qpicalculator/icons/run-build.png delete mode 100644 test/qad/graphic/qpicalculator/icons/tree.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-center.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-fullscreen.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-grid.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-mode-compact.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-mode-expanded.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-mode-icon.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-refresh.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-restore.png delete mode 100644 test/qad/graphic/qpicalculator/icons/view-tooltips.png delete mode 100644 test/qad/graphic/qpicalculator/icons/window-new.png delete mode 100644 test/qad/graphic/qpicalculator/icons/zoom-fit-best.png delete mode 100644 test/qad/graphic/qpicalculator/icons/zoom-in.png delete mode 100644 test/qad/graphic/qpicalculator/icons/zoom-original.png delete mode 100644 test/qad/graphic/qpicalculator/icons/zoom-out.png delete mode 100644 test/qad/graphic/qpicalculator/icons/zoom-range.png delete mode 100644 test/qad/graphic/qpicalculator/icons/zoom-rect.png delete mode 100644 test/qad/graphic/qpicalculator/main.cpp delete mode 100644 test/qad/graphic/qpicalculator/mainwindow.cpp delete mode 100644 test/qad/graphic/qpicalculator/mainwindow.h delete mode 100644 test/qad/graphic/qpicalculator/mainwindow.ui delete mode 100644 test/qad/graphic/qpicalculator/qpicalculator.qrc delete mode 100644 test/qad/graphic/uglwidget.h delete mode 100644 test/qad/graphic/uwidget.h delete mode 100644 test/qad/icons/align-bottom-center.png delete mode 100644 test/qad/icons/align-bottom-left.png delete mode 100644 test/qad/icons/align-bottom-right.png delete mode 100644 test/qad/icons/align-center-center.png delete mode 100644 test/qad/icons/align-center-left.png delete mode 100644 test/qad/icons/align-center-right.png delete mode 100644 test/qad/icons/align-hor.png delete mode 100644 test/qad/icons/align-top-center.png delete mode 100644 test/qad/icons/align-top-left.png delete mode 100644 test/qad/icons/align-top-right.png delete mode 100644 test/qad/icons/align-ver.png delete mode 100644 test/qad/icons/alpha.png delete mode 100644 test/qad/icons/application-exit.png delete mode 100644 test/qad/icons/archive-extract.png delete mode 100644 test/qad/icons/archive-insert-directory.png delete mode 100644 test/qad/icons/archive-insert.png delete mode 100644 test/qad/icons/arrow-down.png delete mode 100644 test/qad/icons/arrow-up.png delete mode 100644 test/qad/icons/axis_x.png delete mode 100644 test/qad/icons/axis_y.png delete mode 100644 test/qad/icons/blockview.png delete mode 100644 test/qad/icons/blockview.xcf delete mode 100644 test/qad/icons/border-line.png delete mode 100644 test/qad/icons/button.png delete mode 100644 test/qad/icons/case-sensitive.png delete mode 100644 test/qad/icons/chardialog.png delete mode 100644 test/qad/icons/checkbox-unchecked.png delete mode 100644 test/qad/icons/checkbox.png delete mode 100644 test/qad/icons/clear-history.png delete mode 100644 test/qad/icons/clineedit.png delete mode 100644 test/qad/icons/code-error.png delete mode 100644 test/qad/icons/code-parents.png delete mode 100644 test/qad/icons/code-struct.png delete mode 100644 test/qad/icons/code-union.png delete mode 100644 test/qad/icons/code-variable.png delete mode 100644 test/qad/icons/code-word.png delete mode 100644 test/qad/icons/colorbutton.png delete mode 100644 test/qad/icons/configure.png delete mode 100644 test/qad/icons/configure_16.png delete mode 100644 test/qad/icons/database.png delete mode 100644 test/qad/icons/dialog-cancel.png delete mode 100644 test/qad/icons/dialog-close.png delete mode 100644 test/qad/icons/dialog-ok-apply.png delete mode 100644 test/qad/icons/dialog-warning.png delete mode 100644 test/qad/icons/document-close.png delete mode 100644 test/qad/icons/document-edit.png delete mode 100644 test/qad/icons/document-new.png delete mode 100644 test/qad/icons/document-open-recent.png delete mode 100644 test/qad/icons/document-open.png delete mode 100644 test/qad/icons/document-open_16.png delete mode 100644 test/qad/icons/document-print.png delete mode 100644 test/qad/icons/document-save-all.png delete mode 100644 test/qad/icons/document-save-as.png delete mode 100644 test/qad/icons/document-save.png delete mode 100644 test/qad/icons/draw-ellipse.png delete mode 100644 test/qad/icons/draw-line.png delete mode 100644 test/qad/icons/draw-rectangle.png delete mode 100644 test/qad/icons/draw-text.png delete mode 100644 test/qad/icons/ecombobox.png delete mode 100644 test/qad/icons/edit-clear-locationbar-rtl.png delete mode 100644 test/qad/icons/edit-clear.png delete mode 100644 test/qad/icons/edit-copy.png delete mode 100644 test/qad/icons/edit-delete.png delete mode 100644 test/qad/icons/edit-find.png delete mode 100644 test/qad/icons/edit-find_16.png delete mode 100644 test/qad/icons/edit-guides.png delete mode 100644 test/qad/icons/edit-paste.png delete mode 100644 test/qad/icons/edit-redo.png delete mode 100644 test/qad/icons/edit-table-insert-row-below.png delete mode 100644 test/qad/icons/edit-undo.png delete mode 100644 test/qad/icons/edockwidget.png delete mode 100644 test/qad/icons/etabwidget.png delete mode 100644 test/qad/icons/evalspinbox.png delete mode 100644 test/qad/icons/expand_s_x.png delete mode 100644 test/qad/icons/expand_s_y.png delete mode 100644 test/qad/icons/expand_x.png delete mode 100644 test/qad/icons/expand_y.png delete mode 100644 test/qad/icons/f1.png delete mode 100644 test/qad/icons/format-fill-color.png delete mode 100644 test/qad/icons/format-stroke-color.png delete mode 100644 test/qad/icons/format-text-subscript.png delete mode 100644 test/qad/icons/games-solve.png delete mode 100644 test/qad/icons/go-next.png delete mode 100644 test/qad/icons/go-previous.png delete mode 100644 test/qad/icons/graphic.png delete mode 100644 test/qad/icons/graphics.png delete mode 100644 test/qad/icons/historyview.png delete mode 100644 test/qad/icons/icons.xcf delete mode 100644 test/qad/icons/item-add.png delete mode 100644 test/qad/icons/item.png delete mode 100644 test/qad/icons/lastmoves.png delete mode 100644 test/qad/icons/layer-visible-off.png delete mode 100644 test/qad/icons/layer-visible-on.png delete mode 100644 test/qad/icons/led_3.png delete mode 100644 test/qad/icons/led_gray.png delete mode 100644 test/qad/icons/led_off.png delete mode 100644 test/qad/icons/led_on.png delete mode 100644 test/qad/icons/legend.png delete mode 100644 test/qad/icons/list-add.png delete mode 100644 test/qad/icons/list-remove.png delete mode 100644 test/qad/icons/log_parser.png delete mode 100644 test/qad/icons/mail.png delete mode 100644 test/qad/icons/media-playback-pause.png delete mode 100644 test/qad/icons/media-playback-start.png delete mode 100644 test/qad/icons/media-playback-stop.png delete mode 100644 test/qad/icons/media-record.png delete mode 100644 test/qad/icons/media-skip-forward.png delete mode 100644 test/qad/icons/node-add.png delete mode 100644 test/qad/icons/node.png delete mode 100644 test/qad/icons/pause-back.png delete mode 100644 test/qad/icons/pause-front.png delete mode 100644 test/qad/icons/qcodeedit.png delete mode 100644 test/qad/icons/qpiconsole.png delete mode 100644 test/qad/icons/quickopen.png delete mode 100644 test/qad/icons/qvariantedit.png delete mode 100644 test/qad/icons/spinslider.png delete mode 100644 test/qad/icons/sql_table.png delete mode 100644 test/qad/icons/tools-wizard.png delete mode 100644 test/qad/icons/touchbuttframe.png delete mode 100644 test/qad/icons/touchbutton.png delete mode 100644 test/qad/icons/touchslider.png delete mode 100644 test/qad/icons/transform-move.png delete mode 100644 test/qad/icons/variable-add.png delete mode 100644 test/qad/icons/variable-copy.png delete mode 100644 test/qad/icons/variable-edit.png delete mode 100644 test/qad/icons/variable-remove.png delete mode 100644 test/qad/icons/view-autofit.png delete mode 100644 test/qad/icons/view-fullscreen.png delete mode 100644 test/qad/icons/view-grid.png delete mode 100644 test/qad/icons/view-preview.png delete mode 100644 test/qad/icons/view-refresh.png delete mode 100644 test/qad/icons/z-bottom.png delete mode 100644 test/qad/icons/z-down.png delete mode 100644 test/qad/icons/z-top.png delete mode 100644 test/qad/icons/z-up.png delete mode 100644 test/qad/icons/zoom-draw.png delete mode 100644 test/qad/icons/zoom-fit-best.png delete mode 100644 test/qad/icons/zoom-in.png delete mode 100644 test/qad/icons/zoom-original.png delete mode 100644 test/qad/icons/zoom-out.png delete mode 100644 test/qad/icons/zoom-range.png delete mode 100644 test/qad/icons/zoom-rect.png delete mode 100644 test/qad/icons/zoom-select.png delete mode 100644 test/qad/sql_table/CMakeLists.txt delete mode 100644 test/qad/sql_table/lang/qad_sql_table_ru.ts delete mode 100644 test/qad/sql_table/plugin/CMakeLists.txt delete mode 100644 test/qad/sql_table/plugin/qad_sql_table.cpp delete mode 100644 test/qad/sql_table/plugin/qad_sql_table.h delete mode 100644 test/qad/sql_table/plugin/sql_record_plugin.cpp delete mode 100644 test/qad/sql_table/plugin/sql_record_plugin.h delete mode 100644 test/qad/sql_table/plugin/sql_table_plugin.cpp delete mode 100644 test/qad/sql_table/plugin/sql_table_plugin.h delete mode 100644 test/qad/sql_table/qad_sql_table.qrc delete mode 100644 test/qad/sql_table/sql_record_widget.cpp delete mode 100644 test/qad/sql_table/sql_record_widget.h delete mode 100644 test/qad/sql_table/sql_table_widget.cpp delete mode 100644 test/qad/sql_table/sql_table_widget.h delete mode 100644 test/qad/sql_table/sql_table_widget.ui delete mode 100644 test/qad/touch_widgets/CMakeLists.txt delete mode 100644 test/qad/touch_widgets/plugin/CMakeLists.txt delete mode 100644 test/qad/touch_widgets/plugin/qad_touch_widgets.cpp delete mode 100644 test/qad/touch_widgets/plugin/qad_touch_widgets.h delete mode 100644 test/qad/touch_widgets/plugin/touchbuttframeplugin.cpp delete mode 100644 test/qad/touch_widgets/plugin/touchbuttframeplugin.h delete mode 100644 test/qad/touch_widgets/plugin/touchbuttonplugin.cpp delete mode 100644 test/qad/touch_widgets/plugin/touchbuttonplugin.h delete mode 100644 test/qad/touch_widgets/plugin/touchsliderplugin.cpp delete mode 100644 test/qad/touch_widgets/plugin/touchsliderplugin.h delete mode 100644 test/qad/touch_widgets/touch_bar.h delete mode 100644 test/qad/touch_widgets/touch_widgets.qrc delete mode 100644 test/qad/touch_widgets/touchbuttframe.cpp delete mode 100644 test/qad/touch_widgets/touchbuttframe.h delete mode 100644 test/qad/touch_widgets/touchbutton.cpp delete mode 100644 test/qad/touch_widgets/touchbutton.h delete mode 100644 test/qad/touch_widgets/touchslider.cpp delete mode 100644 test/qad/touch_widgets/touchslider.h delete mode 100644 test/qad/touch_widgets/touchslider.ui delete mode 100644 test/qad/utils/CMakeLists.txt delete mode 100644 test/qad/utils/chunkstream.cpp delete mode 100644 test/qad/utils/chunkstream.h delete mode 100644 test/qad/utils/plugin/CMakeLists.txt delete mode 100644 test/qad/utils/plugin/qad_utils.cpp delete mode 100644 test/qad/utils/plugin/qad_utils.h delete mode 100644 test/qad/utils/propertystorage.cpp delete mode 100644 test/qad/utils/propertystorage.h delete mode 100644 test/qad/utils/qad_types.cpp delete mode 100644 test/qad/utils/qad_types.h delete mode 100644 test/qad/utils/qad_utils.qrc delete mode 100644 test/qad/utils/qpiconfig.cpp delete mode 100644 test/qad/utils/qpiconfig.h delete mode 100644 test/qad/utils/qpievaluator.cpp delete mode 100644 test/qad/utils/qpievaluator.h delete mode 100644 test/qad/widgets/CMakeLists.txt delete mode 100644 test/qad/widgets/chardialog.cpp delete mode 100644 test/qad/widgets/chardialog.h delete mode 100644 test/qad/widgets/chardialog.ui delete mode 100644 test/qad/widgets/clineedit.cpp delete mode 100644 test/qad/widgets/clineedit.h delete mode 100644 test/qad/widgets/colorbutton.cpp delete mode 100644 test/qad/widgets/colorbutton.h delete mode 100644 test/qad/widgets/ecombobox.cpp delete mode 100644 test/qad/widgets/ecombobox.h delete mode 100644 test/qad/widgets/evalspinbox.cpp delete mode 100644 test/qad/widgets/evalspinbox.h delete mode 100644 test/qad/widgets/iconedlabel.cpp delete mode 100644 test/qad/widgets/iconedlabel.h delete mode 100644 test/qad/widgets/image_view.cpp delete mode 100644 test/qad/widgets/image_view.h delete mode 100644 test/qad/widgets/lang/qad_widgets_ru.ts delete mode 100644 test/qad/widgets/mathmatrixedit.cpp delete mode 100644 test/qad/widgets/mathmatrixedit.h delete mode 100644 test/qad/widgets/mathvectoredit.cpp delete mode 100644 test/qad/widgets/mathvectoredit.h delete mode 100644 test/qad/widgets/matrixedit.cpp delete mode 100644 test/qad/widgets/matrixedit.h delete mode 100644 test/qad/widgets/matrixedit.ui delete mode 100644 test/qad/widgets/plugin/CMakeLists.txt delete mode 100644 test/qad/widgets/plugin/chardialogplugin.cpp delete mode 100644 test/qad/widgets/plugin/chardialogplugin.h delete mode 100644 test/qad/widgets/plugin/clineeditplugin.cpp delete mode 100644 test/qad/widgets/plugin/clineeditplugin.h delete mode 100644 test/qad/widgets/plugin/colorbuttonplugin.cpp delete mode 100644 test/qad/widgets/plugin/colorbuttonplugin.h delete mode 100644 test/qad/widgets/plugin/ecomboboxplugin.cpp delete mode 100644 test/qad/widgets/plugin/ecomboboxplugin.h delete mode 100644 test/qad/widgets/plugin/evalspinboxplugin.cpp delete mode 100644 test/qad/widgets/plugin/evalspinboxplugin.h delete mode 100644 test/qad/widgets/plugin/iconedlabelplugin.h delete mode 100644 test/qad/widgets/plugin/imageviewplugin.cpp delete mode 100644 test/qad/widgets/plugin/imageviewplugin.h delete mode 100644 test/qad/widgets/plugin/lconedlabelplugin.cpp delete mode 100644 test/qad/widgets/plugin/qad_widgets.cpp delete mode 100644 test/qad/widgets/plugin/qad_widgets.h delete mode 100644 test/qad/widgets/plugin/qcodeeditplugin.cpp delete mode 100644 test/qad/widgets/plugin/qcodeeditplugin.h delete mode 100644 test/qad/widgets/plugin/qipeditplugin.cpp delete mode 100644 test/qad/widgets/plugin/qipeditplugin.h delete mode 100644 test/qad/widgets/plugin/qpiconfigplugin.cpp delete mode 100644 test/qad/widgets/plugin/qpiconfigplugin.h delete mode 100644 test/qad/widgets/plugin/qpiconsoleplugin.cpp delete mode 100644 test/qad/widgets/plugin/qpiconsoleplugin.h delete mode 100644 test/qad/widgets/plugin/qpointeditplugin.cpp delete mode 100644 test/qad/widgets/plugin/qpointeditplugin.h delete mode 100644 test/qad/widgets/plugin/qrecteditplugin.cpp delete mode 100644 test/qad/widgets/plugin/qrecteditplugin.h delete mode 100644 test/qad/widgets/plugin/qvarianteditplugin.cpp delete mode 100644 test/qad/widgets/plugin/qvarianteditplugin.h delete mode 100644 test/qad/widgets/plugin/shortcutsplugin.cpp delete mode 100644 test/qad/widgets/plugin/shortcutsplugin.h delete mode 100644 test/qad/widgets/plugin/spinsliderplugin.cpp delete mode 100644 test/qad/widgets/plugin/spinsliderplugin.h delete mode 100644 test/qad/widgets/propertystorage_editor.cpp delete mode 100644 test/qad/widgets/propertystorage_editor.h delete mode 100644 test/qad/widgets/qad_widgets.qrc delete mode 100644 test/qad/widgets/qcodeedit.cpp delete mode 100644 test/qad/widgets/qcodeedit.h delete mode 100644 test/qad/widgets/qcodeedit.ui delete mode 100644 test/qad/widgets/qipedit.cpp delete mode 100644 test/qad/widgets/qipedit.h delete mode 100644 test/qad/widgets/qpiconfignewdialog.cpp delete mode 100644 test/qad/widgets/qpiconfignewdialog.h delete mode 100644 test/qad/widgets/qpiconfignewdialog.ui delete mode 100644 test/qad/widgets/qpiconfigvaluewidget.cpp delete mode 100644 test/qad/widgets/qpiconfigvaluewidget.h delete mode 100644 test/qad/widgets/qpiconfigwidget.cpp delete mode 100644 test/qad/widgets/qpiconfigwidget.h delete mode 100644 test/qad/widgets/qpiconsole.cpp delete mode 100644 test/qad/widgets/qpiconsole.h delete mode 100644 test/qad/widgets/qpointedit.cpp delete mode 100644 test/qad/widgets/qpointedit.h delete mode 100644 test/qad/widgets/qrectedit.cpp delete mode 100644 test/qad/widgets/qrectedit.h delete mode 100644 test/qad/widgets/qvariantedit.cpp delete mode 100644 test/qad/widgets/qvariantedit.h delete mode 100644 test/qad/widgets/qvariantedit_custom.cpp delete mode 100644 test/qad/widgets/qvariantedit_custom.h delete mode 100644 test/qad/widgets/session_manager.cpp delete mode 100644 test/qad/widgets/session_manager.h delete mode 100644 test/qad/widgets/shortcuts.cpp delete mode 100644 test/qad/widgets/shortcuts.h delete mode 100644 test/qad/widgets/spinslider.cpp delete mode 100644 test/qad/widgets/spinslider.h delete mode 100644 test/qcd_utils/CMakeLists.txt delete mode 100644 test/qcd_utils/pult/CMakeLists.txt delete mode 100644 test/qcd_utils/pult/cddirectk.cpp delete mode 100644 test/qcd_utils/pult/cddirectk.h delete mode 100644 test/qcd_utils/pult/cddirectk.ui delete mode 100644 test/qcd_utils/pult/cddirectk_type_dialog.cpp delete mode 100644 test/qcd_utils/pult/cddirectk_type_dialog.h delete mode 100644 test/qcd_utils/pult/cddirectk_type_dialog.ui delete mode 100644 test/qcd_utils/pult/cdgraphics.cpp delete mode 100644 test/qcd_utils/pult/cdgraphics.h delete mode 100644 test/qcd_utils/pult/cdgraphics.ui delete mode 100644 test/qcd_utils/pult/cdpult.qrc delete mode 100644 test/qcd_utils/pult/cdpultwindow.cpp delete mode 100644 test/qcd_utils/pult/cdpultwindow.h delete mode 100644 test/qcd_utils/pult/cdpultwindow.ui delete mode 100644 test/qcd_utils/pult/cdviewwidget.cpp delete mode 100644 test/qcd_utils/pult/cdviewwidget.h delete mode 100644 test/qcd_utils/pult/cdviewwidget.ui delete mode 100644 test/qcd_utils/pult/icons/Apps-accessories-calculator-icon.png delete mode 100644 test/qcd_utils/pult/icons/accessories-text-editor.png delete mode 100644 test/qcd_utils/pult/icons/db-export.png delete mode 100644 test/qcd_utils/pult/icons/db-import.png delete mode 100644 test/qcd_utils/pult/icons/dialog-cancel.png delete mode 100644 test/qcd_utils/pult/icons/dialog-information.png delete mode 100644 test/qcd_utils/pult/icons/dialog-ok-apply.png delete mode 100644 test/qcd_utils/pult/icons/document-revert.png delete mode 100644 test/qcd_utils/pult/icons/flame.png delete mode 100644 test/qcd_utils/pult/icons/format-stroke-color.png delete mode 100644 test/qcd_utils/pult/icons/timer.png delete mode 100644 test/qcd_utils/pult/icons/view-refresh.png delete mode 100644 test/qcd_utils/pult/main.cpp delete mode 100644 test/qcd_utils/qcd_core.cpp delete mode 100644 test/qcd_utils/qcd_core.h delete mode 100644 test/qcd_utils/qcd_graphic.cpp delete mode 100644 test/qcd_utils/qcd_graphic.h delete mode 100644 test/qcd_utils/qcd_graphic.ui delete mode 100644 test/qcd_utils/qcd_modedialog.cpp delete mode 100644 test/qcd_utils/qcd_modedialog.h delete mode 100644 test/qcd_utils/qcd_modedialog.ui delete mode 100644 test/qcd_utils/qcd_model.cpp delete mode 100644 test/qcd_utils/qcd_model.h delete mode 100644 test/qcd_utils/qcd_view.cpp delete mode 100644 test/qcd_utils/qcd_view.h delete mode 100644 test/qglview/CMakeLists.txt delete mode 100644 test/qglview/glcamera.cpp delete mode 100644 test/qglview/glcamera.h delete mode 100644 test/qglview/glframebuffer.cpp delete mode 100644 test/qglview/glframebuffer.h delete mode 100644 test/qglview/glmaterial.cpp delete mode 100644 test/qglview/glmaterial.h delete mode 100644 test/qglview/globject.cpp delete mode 100644 test/qglview/globject.h delete mode 100644 test/qglview/globject_editor.cpp delete mode 100644 test/qglview/globject_editor.h delete mode 100644 test/qglview/globject_editor.ui delete mode 100644 test/qglview/glparticles_system.cpp delete mode 100644 test/qglview/glparticles_system.h delete mode 100644 test/qglview/glprimitives.cpp delete mode 100644 test/qglview/glprimitives.h delete mode 100644 test/qglview/glrendererbase.cpp delete mode 100644 test/qglview/glrendererbase.h delete mode 100644 test/qglview/glshaders.cpp delete mode 100644 test/qglview/glshaders.h delete mode 100644 test/qglview/gltexture_manager.cpp delete mode 100644 test/qglview/gltexture_manager.h delete mode 100644 test/qglview/gltypes.cpp delete mode 100644 test/qglview/gltypes.h delete mode 100644 test/qglview/glvbo.cpp delete mode 100644 test/qglview/glvbo.h delete mode 100644 test/qglview/glwidget.cpp delete mode 100644 test/qglview/glwidget.h delete mode 100644 test/qglview/icons/alpha.png delete mode 100644 test/qglview/icons/application-exit.png delete mode 100644 test/qglview/icons/configure.png delete mode 100644 test/qglview/icons/dialog-close.png delete mode 100644 test/qglview/icons/document-import.png delete mode 100644 test/qglview/icons/document-new.png delete mode 100644 test/qglview/icons/document-open.png delete mode 100644 test/qglview/icons/document-save-.png delete mode 100644 test/qglview/icons/document-save-all.png delete mode 100644 test/qglview/icons/document-save.png delete mode 100644 test/qglview/icons/edit-clear-locationbar-rtl.png delete mode 100644 test/qglview/icons/edit-clear.png delete mode 100644 test/qglview/icons/edit-copy.png delete mode 100644 test/qglview/icons/edit-delete.png delete mode 100644 test/qglview/icons/edit-find.png delete mode 100644 test/qglview/icons/edit-guides.png delete mode 100644 test/qglview/icons/edit-paste.png delete mode 100644 test/qglview/icons/item-add.png delete mode 100644 test/qglview/icons/item.png delete mode 100644 test/qglview/icons/list-add.png delete mode 100644 test/qglview/icons/node-add.png delete mode 100644 test/qglview/icons/node.png delete mode 100644 test/qglview/icons/qglview.png delete mode 100644 test/qglview/icons/qglview.xcf delete mode 100644 test/qglview/icons/type-camera.png delete mode 100644 test/qglview/icons/type-geo.png delete mode 100644 test/qglview/icons/type-light.png delete mode 100644 test/qglview/icons/view-grid.png delete mode 100644 test/qglview/icons/zoom-fit-best.png delete mode 100644 test/qglview/loader_3ds.cpp delete mode 100644 test/qglview/loader_3ds.h delete mode 100644 test/qglview/loader_ase.cpp delete mode 100644 test/qglview/loader_ase.h delete mode 100644 test/qglview/loader_dae.cpp delete mode 100644 test/qglview/loader_dae.h delete mode 100644 test/qglview/loader_obj.cpp delete mode 100644 test/qglview/loader_obj.h delete mode 100644 test/qglview/loader_qgl.cpp delete mode 100644 test/qglview/loader_qgl.h delete mode 100644 test/qglview/material_editor.cpp delete mode 100644 test/qglview/material_editor.h delete mode 100644 test/qglview/material_editor.ui delete mode 100644 test/qglview/material_map_editor.cpp delete mode 100644 test/qglview/material_map_editor.h delete mode 100644 test/qglview/material_map_editor.ui delete mode 100644 test/qglview/openglwindow.cpp delete mode 100644 test/qglview/openglwindow.h delete mode 100644 test/qglview/plugin/CMakeLists.txt delete mode 100644 test/qglview/plugin/qglview_designerplugin.cpp delete mode 100644 test/qglview/plugin/qglview_designerplugin.h delete mode 100644 test/qglview/plugin/qglviewplugin.cpp delete mode 100644 test/qglview/plugin/qglviewplugin.h delete mode 100644 test/qglview/propertyeditor.cpp delete mode 100644 test/qglview/propertyeditor.h delete mode 100644 test/qglview/qglview.cpp delete mode 100644 test/qglview/qglview.h delete mode 100644 test/qglview/qglview.qrc delete mode 100644 test/qglview/qglview_test/main.cpp delete mode 100644 test/qglview/qglview_test/qglview_window.cpp delete mode 100644 test/qglview/qglview_test/qglview_window.h delete mode 100644 test/qglview/qglview_test/qglview_window.ui delete mode 100644 test/qglview/renderer_deferred_shading.cpp delete mode 100644 test/qglview/renderer_deferred_shading.h delete mode 100644 test/qglview/renderer_simple.cpp delete mode 100644 test/qglview/renderer_simple.h delete mode 100644 test/qglview/shaders/FXAA.frag delete mode 100644 test/qglview/shaders/FXAA.vert delete mode 100644 test/qglview/shaders/bloom_0.frag delete mode 100644 test/qglview/shaders/bloom_1.frag delete mode 100644 test/qglview/shaders/bloom_pass_0.frag delete mode 100644 test/qglview/shaders/bloom_pass_0.vert delete mode 100644 test/qglview/shaders/bloom_pass_1.frag delete mode 100644 test/qglview/shaders/bloom_pass_1.vert delete mode 100644 test/qglview/shaders/dof.frag delete mode 100644 test/qglview/shaders/dof.vert delete mode 100644 test/qglview/shaders/downscale.frag delete mode 100644 test/qglview/shaders/downscale.vert delete mode 100644 test/qglview/shaders/dsl_pass_0.frag delete mode 100644 test/qglview/shaders/dsl_pass_0.vert delete mode 100644 test/qglview/shaders/dsl_pass_1.frag delete mode 100644 test/qglview/shaders/dsl_pass_1.vert delete mode 100644 test/qglview/shaders/dsl_pass_2.frag delete mode 100644 test/qglview/shaders/dsl_pass_2.vert delete mode 100644 test/qglview/shaders/fbo_add.frag delete mode 100644 test/qglview/shaders/fbo_add.vert delete mode 100644 test/qglview/shaders/hdr.frag delete mode 100644 test/qglview/shaders/hdr.vert delete mode 100644 test/qglview/shaders/hdr_scale_0.frag delete mode 100644 test/qglview/shaders/hdr_scale_1.frag delete mode 100644 test/qglview/shaders/light_models.frag delete mode 100644 test/qglview/shaders/motion_blur.frag delete mode 100644 test/qglview/shaders/motion_blur.vert delete mode 100644 test/qglview/shaders/post.frag delete mode 100644 test/qglview/shaders/ppl.frag delete mode 100644 test/qglview/shaders/ppl.vert delete mode 100644 test/qglview/shaders/selection.frag delete mode 100644 test/qglview/shaders/selection.vert delete mode 100644 test/qglview/shaders/selection_halo.frag delete mode 100644 test/qglview/shaders/selection_halo.vert delete mode 100644 test/qglview/shaders/shadow.frag delete mode 100644 test/qglview/shaders/shadow.vert delete mode 100644 test/qglview/shaders/ssao_blur.frag delete mode 100644 test/qglview/shaders/ssao_blur.vert delete mode 100644 test/qglview/shaders/ssao_merge.frag delete mode 100644 test/qglview/shaders/ssao_merge.vert delete mode 100644 test/qglview/shaders/ssr.frag delete mode 100644 test/qglview/shaders/ssr.vert delete mode 100644 test/qglview/shaders/ssr_blur.frag delete mode 100644 test/qglview/shaders/ssr_blur.vert delete mode 100644 test/qglview/shaders/ssr_merge.frag delete mode 100644 test/qglview/shaders/ssr_merge.vert diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt deleted file mode 100644 index a30d946..0000000 --- a/test/CMakeLists.txt +++ /dev/null @@ -1,151 +0,0 @@ -cmake_minimum_required(VERSION 2.6) -if (POLICY CMP0020) - cmake_policy(SET CMP0020 NEW) -endif() -if (POLICY CMP0011) - cmake_policy(SET CMP0011 NEW) -endif() -#if (POLICY CMP0017) - #cmake_policy(SET CMP0017 OLD) -#endif() -if (POLICY CMP0053) - cmake_policy(SET CMP0053 NEW) -endif() -project(libs) -include(SDKMacros.cmake) -set(LIBPROJECT 1) -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/pip/") -include_directories(${CMAKE_CURRENT_BINARY_DIR}/pip) -if(APPLE) - include_directories(/usr/local/include) - link_directories(/usr/local/lib) -endif() -if(MINGW) - find_package(MinGW REQUIRED) -endif() -if (DEFINED ANDROID_PLATFORM) - include_directories(${ANDROID_SYSTEM_LIBRARY_PATH}/usr/include) - #set(TARGET_INSTALL_PATH "${ANDROID_SYSTEM_LIBRARY_PATH}/usr/") - #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${ANDROID_NDK}/sysroot/usr/include") - #message("${ANDROID_SYSTEM_LIBRARY_PATH}/usr/include") - #message("${ANDROID_NDK}/sysroot/usr/include") -endif() -set(INSTALL_PREFIX "") -if(CMAKE_CROSSCOMPILING) - if (DEFINED ANDROID_PLATFORM) - set(INSTALL_PREFIX "${CMAKE_FIND_ROOT_PATH}/") - else() - set(INSTALL_PREFIX "${CMAKE_STAGING_PREFIX}") - endif() -endif() -option(LIB "System install" 1) -option(DEBUG "Build with -g3" 0) -option(QGLVIEW "Build QGLview library and utils" 1) -option(UTILS "Build various utils" 1) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wall") -#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") -#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") -if (DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3") -endif () -include(SDKMacros.cmake) - -set(PIP_LIBRARY pip) -set(PIP_FOLDERS "." "core" "containers" "thread" "system" "io_devices" "io_utils" "console" "math" "code" "geo" "resources" "opencl" "crypt" "introspection") -set(PIP_INCLUDES) - -if(LIB) - if(WIN32) - if(MINGW) - set(CMAKE_INSTALL_PREFIX ${MINGW_DIR}) - endif() - else() - if(APPLE) - set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX}/usr/local) - else() - if (DEFINED ANDROID_PLATFORM) - set(CMAKE_INSTALL_PREFIX ${ANDROID_SYSTEM_LIBRARY_PATH}/usr) - else() - if(CMAKE_CROSSCOMPILING) - set(CMAKE_INSTALL_PREFIX ${CMAKE_STAGING_PREFIX}) - else() - set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX}/usr) - endif() - endif() - endif() - endif() - message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") -else() - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") -endif() - -foreach(F ${PIP_FOLDERS}) - list(APPEND PIP_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/pip/src_main/${F}") -endforeach(F) -#message(${PIP_INCLUDES}) -if(CMAKE_CROSSCOMPILING OR (DEFINED ANDROID_PLATFORM)) - set(PIP_CMG "pip_cmg") - set(PIP_RC "pip_rc") -else() - set(PIP_CMG "${CMAKE_CURRENT_BINARY_DIR}/pip/utils/code_model_generator/pip_cmg") - set(PIP_RC "${CMAKE_CURRENT_BINARY_DIR}/pip/utils/resources_compiler/pip_rc") -endif() -if(WIN32) - set(PIP_DLL_DIR "${CMAKE_CURRENT_BINARY_DIR}/pip") -endif() - -set(QAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/qad) - -include(qad/QtWraps.cmake) -find_qt(Core QUIET) -set(QtVersions) -set(SomeQtFound 0) -foreach(_v ${_QT_VERSIONS_}) - option(Qt${_v} "Build for Qt${_v}" 1) - if (Qt${_v}) - #message("Qt${_v} -> ${LOCAL_FOUND${_v}}") - if (LOCAL_FOUND${_v}) - list(APPEND QtVersions Qt${_v}) - set(SomeQtFound 1) - endif() - endif() -endforeach() - -if(UTILS) - message(STATUS "Building with utils") -else() - message(STATUS "Building only libraries") -endif() - -add_subdirectory(pip) -set(_DIRS) -if (SomeQtFound) - message(STATUS "Building Qt-derived targets for ${QtVersions}") - add_subdirectory(qad) - set(_DIRS piqt piqt_utils qcd_utils) - if (QGLVIEW) - list(APPEND _DIRS qglview) - endif() - foreach(_D ${_DIRS}) - list(APPEND QT_MULTILIB_LIST ${_D}) - endforeach(_D) -else() - message(STATUS "None of Qt found, skip Qt-derived targets") -endif() -list(INSERT _DIRS 0 cd_utils) -foreach(_D ${_DIRS}) - include_directories(${_D}) - add_subdirectory(${_D}) -endforeach(_D) - -if(WIN32) - foreach(PIP_LT ${PIP_LIBS_TARGETS}) - if (SomeQtFound) - qt_install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pip/lib${PIP_LT}.dll" DESTINATION QtBin) - endif() - endforeach() - set(CMAKES "FindMinGW.cmake") - install(FILES ${CMAKES} DESTINATION ${CMAKE_ROOT}/Modules) -endif() diff --git a/test/FindMinGW.cmake b/test/FindMinGW.cmake deleted file mode 100644 index 023de89..0000000 --- a/test/FindMinGW.cmake +++ /dev/null @@ -1,25 +0,0 @@ -if(${MINGW}) - if(NOT DEFINED MINGW_DIR) - get_filename_component(MINGW_BIN ${CMAKE_CXX_COMPILER} PATH) - get_filename_component(MINGW_DIR ${MINGW_BIN} PATH) - find_path(MINGW_INCLUDE - windows.h - PATHS - ENV INCLUDE - ${MINGW_DIR} - ${MINGW_DIR}/i686-w64-mingw32 - ${MINGW_DIR}/x86_64-w64-mingw32 - PATH_SUFFIXES - include) - #message(STATUS "Find MinGW = ${MINGW_INCLUDE}") - #if(NOT ${MINGW_INCLUDE}) MINGW_INCLUDE = ${MINGW_DIR}/include - find_library(MINGW_LIB m HINTS ${MINGW_BIN}/../lib ${MINGW_INCLUDE}/../lib) - get_filename_component(MINGW_LIB ${MINGW_LIB} PATH) - if (NOT _MGW_MSG) - set(_MGW_MSG 1 CACHE BOOL "msg_mingw" FORCE) - message(STATUS "Found MinGW binary path = ${MINGW_BIN}") - message(STATUS "Found MinGW include path = ${MINGW_INCLUDE}") - message(STATUS "Found MinGW library path = ${MINGW_LIB}") - endif() - endif() -endif(${MINGW}) diff --git a/test/README.txt b/test/README.txt deleted file mode 100644 index 1395f22..0000000 --- a/test/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -Build steps for i686 architecture: -1. unzip mingw.7z to C:\mingw -2. unzip qt.7z to C:\qt -3. download and install cmake from https://cmake.org/download/ -2. Prepare environment - - set prefix for mingw e.g.: for C:\mingw\7_1_x32\ - set SDK_MINGW_DIR=C:\mingw\7_1_x - - set prefix for Qt5 e.g.: for C:\qt\qt5120_win32\ - set SDK_QT5_DIR=C:\qt\qt5120_win - - set SDK_CMAKE_DIR=C:\cmake -4. run make_libs32.bat - -Build steps for amd64 architecture: - -- follow previos steps, but replace '32' to '64' - -Build steps for both architectures: - -- follow previos steps, but on '4' state run make_libs_all.bat - \ No newline at end of file diff --git a/test/SDKMacros.cmake b/test/SDKMacros.cmake deleted file mode 100644 index a615860..0000000 --- a/test/SDKMacros.cmake +++ /dev/null @@ -1,25 +0,0 @@ - -macro(sdk_install _DIR _TARGET _H_FILES _QM_FILES) - if(LIB) - if(WIN32) - if(NOT "x${_H_FILES}" STREQUAL "x") - #message("HFILES ${_H_FILES}") - install(FILES ${_H_FILES} DESTINATION ${MINGW_INCLUDE}/${_DIR}) - endif() - qt_install(TARGETS ${_TARGET} DESTINATION ${MINGW_LIB}) - qt_install(TARGETS ${_TARGET} DESTINATION ${MINGW_BIN}) - qt_install(TARGETS ${_TARGET} DESTINATION QtBin) - qt_install(FILES ${_QM_FILES} DESTINATION QtLang) - else() - if (NOT "x${_H_FILES}" STREQUAL "x") - install(FILES ${_H_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${_DIR}) - endif() - qt_install(TARGETS ${_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - qt_install(FILES ${_QM_FILES} DESTINATION QtLang) - endif() - #message(STATUS "Install ${_TARGET} to system \"${CMAKE_INSTALL_PREFIX}\"") - else() - qt_install(TARGETS ${_TARGET} DESTINATION bin) - #message(STATUS "Install ${_TARGET} to local \"bin\"") - endif() -endmacro() diff --git a/test/cd_utils/CMakeLists.txt b/test/cd_utils/CMakeLists.txt deleted file mode 100644 index 01f9881..0000000 --- a/test/cd_utils/CMakeLists.txt +++ /dev/null @@ -1,74 +0,0 @@ -project(cd_utils) -cmake_minimum_required(VERSION 2.6) -if (POLICY CMP0017) - cmake_policy(SET CMP0017 NEW) -endif() -if (NOT LIBPROJECT) - find_package(PIP REQUIRED) - option(LIB "System install" 1) - option(DEBUG "Build with -g3" 0) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall") - if (DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") - endif() -endif() -if (MINGW) - find_package(MinGW REQUIRED) -endif() -include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES}) -#file(GLOB HDRS_UTILS "*.h") -#file(GLOB CPPS_UTILS "*.cpp") -file(GLOB CPPS_UTILS "cdutils_*.cpp") -file(GLOB HDRS_UTILS "cdutils_*.h") -if (DEFINED ENV{QNX_HOST}) - add_library(${PROJECT_NAME} STATIC ${CPPS_UTILS} ${HDRS_UTILS}) -else() - add_library(${PROJECT_NAME} SHARED ${CPPS_UTILS} ${HDRS_UTILS}) -endif() -target_link_libraries(${PROJECT_NAME} ${PIP_LIBRARY}) - -add_executable(cdutilstest "cdutilstest.cpp" "cdtest.h") -target_link_libraries(cdutilstest ${PIP_LIBRARY} ${PROJECT_NAME}) -message(STATUS "Building ${PROJECT_NAME}") - -if(NOT LIBPROJECT) - if(LIB) - if(WIN32) - if(MINGW) - set(CMAKE_INSTALL_PREFIX ${MINGW_DIR}) - endif() - else() - if(APPLE) - set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX}/usr/local) - else() - if (DEFINED ANDROID_PLATFORM) - set(CMAKE_INSTALL_PREFIX ${ANDROID_SYSTEM_LIBRARY_PATH}/usr) - else() - if(CMAKE_CROSSCOMPILING) - set(CMAKE_INSTALL_PREFIX ${CMAKE_STAGING_PREFIX}) - else() - set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX}/usr) - endif() - endif() - endif() - endif() - message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") - else() - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") - endif() -endif() - -if(LIB) - if(WIN32) - install(FILES ${HDRS_UTILS} DESTINATION ${MINGW_INCLUDE}) - install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) - install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - else() - install(FILES ${HDRS_UTILS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include) - install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - endif() - #message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") -else() - install(TARGETS ${PROJECT_NAME} DESTINATION bin) - #message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") -endif() diff --git a/test/cd_utils/cdtest.h b/test/cd_utils/cdtest.h deleted file mode 100644 index c2e45d6..0000000 --- a/test/cd_utils/cdtest.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef CDTEST_H -#define CDTEST_H - - -enum KDescription { - First, //f Первый - Second, //b Второй -}; - -#endif // CDTEST_H diff --git a/test/cd_utils/cdutils_c.cpp b/test/cd_utils/cdutils_c.cpp deleted file mode 100644 index 30a5fae..0000000 --- a/test/cd_utils/cdutils_c.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "cdutils_c.h" -#include "cdutils_core.h" - -using namespace CDUtils; - -CInterface C; - - -CInterface::CInterface(): Interface(CDType::cdC) { -} - - -void CInterface::sendCommand(const CDType & c) { - core->sendCommand(c); -} - - -void CInterface::connect(const CDType & c, PIObject * o, Handler eh) { - core->registerCHandler(c, o, eh); -} - - -void CInterface::autoConnect(PIObject * o, const PIString & prefix) { - if (!o) return; - uint cid = o->classNameID(); - if (!PIObject::__meta_data().contains(cid)) return; - PIMap eh_map; - PIObject::__MetaData & md(PIObject::__meta_data()[cid]); - PIMap::const_iterator it; - for (it = md.eh_func.constBegin(); it != md.eh_func.constEnd(); ++it) { - eh_map[it.value().func_name] = (Handler)it.value().addr; - //piCout << "func" << it.value().func_name; - } - PIVector cl = C.root().children(); - piForeachC (CDType * c, cl) { - PIString cp = prefix + c->pathString().join("_"); - if (cp.isEmpty()) continue; - if (!eh_map.contains(cp)) continue; - connect(*c, o, eh_map[cp]); - } -} diff --git a/test/cd_utils/cdutils_c.h b/test/cd_utils/cdutils_c.h deleted file mode 100644 index 72590ca..0000000 --- a/test/cd_utils/cdutils_c.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef CDUTILS_C_H -#define CDUTILS_C_H - -#include "cdutils_interface.h" - - -namespace CDUtils { - - -class CInterface: public Interface -{ - PIOBJECT_SUBCLASS(CInterface, Interface) -public: - CInterface(); - - void sendCommand(const CDType & c); - void connect(const CDType & c, PIObject * o, Handler eh); - void autoConnect(PIObject * o, const PIString & prefix = PIStringAscii("c_")); - -}; - -} - -extern CDUtils::CInterface C; - -#endif // CDUTILS_C_H diff --git a/test/cd_utils/cdutils_core.cpp b/test/cd_utils/cdutils_core.cpp deleted file mode 100644 index c03c327..0000000 --- a/test/cd_utils/cdutils_core.cpp +++ /dev/null @@ -1,606 +0,0 @@ -#include "cdutils_core.h" -#include "cdutils_parser.h" -#include "piconfig.h" -#include "piiobytearray.h" -#include "piiostring.h" -#include "pifile.h" - -using namespace CDUtils; - -const char CDCore::app_config[] = - "include = cd_ip.conf\n\ - port_rec = 2\n\ - port_send = 1\n\ - [connection]\n\ - device.cd = peer://cd_app:cd_pult #s\n\ - []\n\ - connectionmodel = AAAM2Xja7VXLTttAFD12QpsikKjUSixYlLbKEpIUtVIlVEfqhk2FWuiGRRolUYtoHgrmpYiv6IItf8AveMMH9E/YsG6Ph3sde5hGoQoblLGuPHfunTPjc49nADxDA110+LTYC7FrPCAPeAO+vZu+aX7c/8PGd45WCJC0OGcfT6FDnmfSTPtwhZFt3HjgDs/Qtu5jPbZHtI/x50XfIzMQbdwEolbg9INP4ku++myPaUtCHYRaT2j1ldIh3VP60/Qff8vSfXLu9BP6JX9K/0TVH6jqVe22P1X/fao/oddWu/paDs1vBf9Jv/EZ91clbyHqv7BL6sscDOd4v4WTqs6jzaHGJ8QJerxlpJSpdZ7IWFJvDW7I2JxZqIM62k6A57RZmMQGmlyrxdV+WGBnmR01mXPI267hBKwp4FeBeo9VPtssxyb7rzHg1B7T9nCMU45U8BZlWuVWtIcD/CRGOqtsbW09851tXsHN0UTlLIAdASjSXnLyLn+H7L2+xbGYvC63Ezqg543egkLmn8qnRF6USbM4Qp9godkhzI777Ne5bCIt/5UtGz2o/yGby0nKpjqmbOa1ynkjmyzIrzvIZUeBPjvlUmbh32EFJbGyJZhR8YcvlS+3TpjhqeWSyvUkpbI9plSWtcKLcsK05beOJVEnhaEFfHEH+RwpeMcpn1JKGqWMNOL+G6wZyahlpdVOtufKfbDS+guLke9O\n\ - "; - -const char CDCore::pult_config[] = - "include = cd_ip.conf\n\ - port_rec = 1\n\ - port_send = 2\n\ - [connection]\n\ - device.cd = peer://cd_pult:cd_app #s\n\ - []\n\ - connectionmodel = AAAM2Xja7VXLTttAFD12QpsikKjUSixYlLbKEpIUtVIlVEfqhk2FWuiGRRolUYtoHgrmpYiv6IItf8AveMMH9E/YsG6Ph3sde5hGoQoblLGuPHfunTPjc49nADxDA110+LTYC7FrPCAPeAO+vZu+aX7c/8PGd45WCJC0OGcfT6FDnmfSTPtwhZFt3HjgDs/Qtu5jPbZHtI/x50XfIzMQbdwEolbg9INP4ku++myPaUtCHYRaT2j1ldIh3VP60/Qff8vSfXLu9BP6JX9K/0TVH6jqVe22P1X/fao/oddWu/paDs1vBf9Jv/EZ91clbyHqv7BL6sscDOd4v4WTqs6jzaHGJ8QJerxlpJSpdZ7IWFJvDW7I2JxZqIM62k6A57RZmMQGmlyrxdV+WGBnmR01mXPI267hBKwp4FeBeo9VPtssxyb7rzHg1B7T9nCMU45U8BZlWuVWtIcD/CRGOqtsbW09851tXsHN0UTlLIAdASjSXnLyLn+H7L2+xbGYvC63Ezqg543egkLmn8qnRF6USbM4Qp9godkhzI777Ne5bCIt/5UtGz2o/yGby0nKpjqmbOa1ynkjmyzIrzvIZUeBPjvlUmbh32EFJbGyJZhR8YcvlS+3TpjhqeWSyvUkpbI9plSWtcKLcsK05beOJVEnhaEFfHEH+RwpeMcpn1JKGqWMNOL+G6wZyahlpdVOtufKfbDS+guLke9O\n\ - "; - - -int __Core_Initializer__::count_(0); -CDCore * __Core_Initializer__::__instance__(0); -const uchar header_direct = 0x80; -const uchar header_transfer = 0x81; - - -__Core_Initializer__::__Core_Initializer__() { - count_++; - if (count_ > 1) return; - __instance__ = new CDCore(); -} - - -__Core_Initializer__::~__Core_Initializer__() { - count_--; - if (count_ < 0) { - count_ = 0; - return; - } - if (count_ > 0) return; - if (__instance__) { - delete __instance__; - __instance__ = 0; - } -} - - - - -CDCore::CDCore() { - setName("CDCore"); - x_timer.setName("__S__.CDCore.x_timer"); - datatr.setPacketSize(960); - CONNECTU(&connection, dataReceivedEvent, this, dataReceived); - CONNECTU(PICout::Notifier::object(), finished, this, piCoutFinished); - /*PIString s(app_config); - connection.configureFromString(&s); - connection.start();*/ - need_rebuild_x = x_pult_side = false; - k_.cd_type_ = CDType::cdK; - x_.cd_type_ = CDType::cdX; - c_.cd_type_ = CDType::cdC; - m_.cd_type_ = CDType::cdM; - initRoot(&k_); - initRoot(&x_); - initRoot(&c_); - initRoot(&m_); - - CONNECTU(&sendt, started, this, sendThread) - CONNECTU(&datatr, sendRequest, this, dtSendRequest) - CONNECTU(&datatr, receiveFinished, this, dtReceiveFinished) - CONNECTU(&x_timer, tickEvent, this, xTimerTick) - - /*k_[1] = KType(1, "123", "120+3", "comment"); - k_[2] = KType(2, "1", "2", "comm"); - k_[4] = KType(4, "-0.6", "-6/10", "mment"); - k_.section(10)[5] = KType(5, "8", "2*2*2", "88"); - k_.section(10).section(50)[100] = KType(100, "8", "2*2*2", "88"); - k_.section(11)[3] = KType(3, "1", "1", "88"); - k_.section(11)[4] = KType(4, "0", "0", "88"); - k_.section(11)[6] = KType(6, "0", "0", "88");*/ - //piCout << s; -} - - -CDCore::~CDCore() { - x_timer.stop(true); - datatr.stop(); - sendt.stop(); - sendt.waitForFinish(10); - connection.stop(); -} - - -void CDCore::cd_write(CDSection * cd, PIIODevice * d) { - cd->write(d, PIString()); -} - - -void CDCore::cd_read(CDSection * cd, PIIODevice * d) { - PIConfig conf(d, PIIODevice::ReadOnly); - cd->read(&(conf.rootEntry())); - if (cd->cd_type_ == CDType::cdX) - x_selected = cd->collectX(); - initRoot(cd); - raiseChangedGlobal(cd->cd_type_); - /*PIVector ds = connection.allDevices(); - piForeach(PIIODevice * d, ds) { - if (d) - piCoutObj << d->constructFullPath() << d->isOpened(); - }*/ -} - - -void CDCore::cd_parse(CDSection * cd, PIIODevice * d) { - *cd = CDParser::parse(d, cd->cd_type_); - initRoot(cd); - raiseChangedGlobal(cd->cd_type_); -} - - -void CDCore::cd_update(CDSection * cd, PIIODevice * d, UpdateModeFlags mode) { - CDSection ucd = *cd; - cd_parse(cd, d); - /*bool kn = true; - if (!ucd.isEmpty()) - if (!ucd.isSameStructure(k_)) { - piCout << "ask for save names"; - K_KeepNamesRequest(&kn); - }*/ - ucd.update(*cd, mode); - //piCout << k_.count() << ucd.count(); - *cd = ucd; - initRoot(cd); - raiseChangedGlobal(cd->cd_type_); -} - - -void CDCore::cd_calculate(CDSection * cd) { - cd->calculate(); - raiseChangedGlobal(cd->cd_type_); -} - - -void CDCore::cd_send(CDSection * cd, CDPacketType pt, bool direct) { - if (!cd) return; - PIByteArray ba, sba; - PIIOByteArray iob(&ba, PIIODevice::ReadWrite); - cd_write(cd, &iob); - //piCoutObj << PIString(ba); - sba = makeHeader(pt, 0); - sba << ba; - if (direct) - sendDirect(sba); - else - sendThreaded(sba); -} - - -void CDCore::send(CDType::cdT cdt) { - CDPacketType pt = CD_Ping; - switch (cdt) { - case CDType::cdK: pt = CD_KSend; break; - case CDType::cdX: pt = CD_XSend; break; - case CDType::cdC: pt = CD_CSend; break; - case CDType::cdM: pt = CD_MSend; break; - default: break; - } - piCoutObj << "send" << typeLetter(cdt); - cd_send(root(cdt), pt); -} - - -void CDCore::request(CDType::cdT cdt) { - CDPacketType pt = CD_Ping; - switch (cdt) { - case CDType::cdK: pt = CD_KQuery; break; - case CDType::cdX: pt = CD_XQuery; break; - case CDType::cdC: pt = CD_CQuery; break; - case CDType::cdM: pt = CD_MQuery; break; - default: break; - } - piCoutObj << "request" << typeLetter(cdt); - PIByteArray sba = makeHeader(pt, 0); - sendThreaded(sba); -} - - -void CDCore::initApp() { - init(appConfig(), false); -} - - -void CDCore::initPult() { - init(pultConfig(), true); -} - - -void CDCore::init(const PIString & configuration, bool pult) { - PIString c = configuration; - //piCoutObj << "init" << c; - connection.stop(); - connection.removeAllDevices(); - connection.configureFromString(&c); - connection.start(); - x_pult_side = pult; -} - - -void CDCore::stop() { - x_timer.stop(); - x_timer.waitForFinish(1000); - connection.stop(); -} - - -void CDCore::release() { - stop(); - connection.removeAllDevices(); -} - - -void CDCore::startX(double freq) { - //piCout << "start x" << x_timer.isRunning() << freq; - if (!x_timer.isRunning()) - x_timer.start(1000. / piMaxd(freq, 0.01)); -} - - -void CDCore::stopX() { - x_timer.stop(); - x_timer.waitForFinish(1000); -} - - -void CDCore::sendCommand(const CDType & c) { - //piCoutObj << "C_sendCommand" << c; - PIByteArray sba = makeHeader(CD_Command, 0); - sba << c.path(); - sendDirect(sba); -} - - -void CDCore::registerCHandler(const CDType & c, PIObject * o, Handler h) { - PIString sp = pathToString(c.path()); - if (sp.isEmpty() || !h) return; - //piCout << "register" << sp; - c_handlers[sp] = OHPair(o, h); -} - - -void CDCore::sendMessage(const CDType & m, MessageType mt, const PIString & msg) { - if (msg.isEmpty() || (m.cd_type() != CDType::cdM)) return; - PIByteArray sba = makeHeader(CD_Message, 0); - sba << m.path() << int(mt) << msg; - sendDirect(sba); -} - - -CDSection * CDCore::root(CDType::cdT cdt) { - switch (cdt) { - case CDType::cdK: return &k_; break; - case CDType::cdX: return &x_; break; - case CDType::cdC: return &c_; break; - case CDType::cdM: return &m_; break; - default: break; - } - return 0; -} - - -PIString CDCore::typeLetter(CDType::cdT cdt) { - switch (cdt) { - case CDType::cdK: return PIStringAscii("k"); break; - case CDType::cdX: return PIStringAscii("x"); break; - case CDType::cdC: return PIStringAscii("c"); break; - case CDType::cdM: return PIStringAscii("m"); break; - default: break; - } - return PIString(); -} - - -CDCore * CDCore::instance() { - /*static CDCore * ret = new CDCore(); - return ret;*/ - return __Core_Initializer__::__instance__; -} - - -bool CDCore::destroy() { - if (!__Core_Initializer__::__instance__) return false; -// piCout << "delete Core ..."; - delete __Core_Initializer__::__instance__; -// piCout << "delete Core ok"; - __Core_Initializer__::__instance__ = 0; - __Core_Initializer__::count_ = 0; - return true; -} - - -void CDUtils::CDCore::K_DirectChange(PIDeque path, PIString value) { -// piCoutObj << "K_DirectChange"; - PacketKDirectChange p; - p.path = path; - p.value = value; - PIByteArray sba = makeHeader(CD_KDirectChange, 0); - sba << p; - sendDirect(sba); -} - - -void CDCore::sendThread() { - if (send_data.size_s() < 4) return; - PacketHeader h; - memcpy(&h, send_data.data(), sizeof(h)); - bool ok = datatr.send(send_data); - switch (h.type) { - case CD_KSend: - if (ok) K_Sended(); - else K_SendFail(); - break; - case CD_KQuery: - if (!ok) K_ReceiveFail(); - break; - case CD_XSend: - if (ok) X_Sended(); - else X_SendFail(); - break; - case CD_XQuery: - if (!ok) X_ReceiveFail(); - break; - case CD_CSend: - if (ok) C_Sended(); - else C_SendFail(); - break; - case CD_CQuery: - if (!ok) C_ReceiveFail(); - break; - case CD_MSend: - if (ok) M_Sended(); - else M_SendFail(); - break; - case CD_MQuery: - if (!ok) M_ReceiveFail(); - break; - default: break; - } -} - - -void CDCore::xTimerTick() { - //piCout << "x tick" << x_pult_side; - PIByteArray ba; - x_mutex.lock(); - if (x_pult_side) { - ba = makeHeader(CD_XRequest, 0); - if (need_rebuild_x) { - x_selected = x_.collectX(); - //piCout << "collectX" << x_selected.size(); - need_rebuild_x = false; - } - ba << x_selected; - //piCout << "x pult send" << x_selected.size(); - } else { - ba = makeHeader(CD_XValues, 0); - ba << x_selected; - piForeachC (PIDeque & p, x_selected) { - x_[p].writeX(ba); - } - //piCout << "x app" << x_selected.size(); - } - x_mutex.unlock(); - sendDirect(ba); -} - - -void CDCore::piCoutFinished(int id, PIString * buffer) { - if (!buffer || !(id == 1)) return; - PIString sp = buffer->takeRange("[", "]"); - PIDeque p = CDCore::stringToPath(sp); - sendMessage(m_[p], Log, *buffer); - delete buffer; -} - - -void CDCore::initRoot(CDSection * r) { - r->name = "__root__"; - r->alias = "root"; - r->makePath(); - r->calculate(); -} - - -PIByteArray CDCore::makeHeader(CDPacketType type, int session_id) const { - PacketHeader h; - h.type = type; - h.session_id = session_id; - PIByteArray ret; ret << h; - return ret; -} - - -void CDCore::sendDirect(PIByteArray & ba) { - ba.push_front(header_direct); - connection.writeByName("cd", ba); -} - - -void CDCore::sendThreaded(PIByteArray & ba) { - if (sendt.isRunning()) { - piCoutObj << "Send in process, abort"; - return; - } - send_data = ba; - sendt.startOnce(); -} - - -void CDCore::procReceivedPacket(PIByteArray & ba) { - PacketHeader h; - ba >> h; - switch(h.type) { - case CD_Ping: - //piCoutObj << "ping"; - break; - case CD_KQuery: - send(CDType::cdK); - break; - case CD_KSend: { - PIByteArray k; - ba >> k; - k << uchar(0); - PIString s = PIString::fromUTF8((const char *)k.data()); - PIIOString ios(&s); - cd_read(&k_, &ios); - K_Received(); - piCoutObj << "K received"; - } break; - case CD_KDirectChange: { - PacketKDirectChange p; - ba >> p; - k_[p.path].setValue(p.value); - } break; - case CD_XQuery: - send(CDType::cdX); - break; - case CD_XSend: { - PIByteArray x; - ba >> x; - x << uchar(0); - PIString s = PIString::fromUTF8((const char *)x.data()); - PIIOString ios(&s); - cd_read(&x_, &ios); - x_selected = x_.collectX(); - X_Received(); - piCoutObj << "X received"; - } break; - case CD_XRequest: { - if (x_pult_side) break; - //break; - x_mutex.lock(); - x_selected.clear(); - ba >> x_selected; - //piCout << "X req" << x_selected.size(); - x_.setSelectedX(false); - piForeachC (PIDeque & p, x_selected) { - x_[p].x_enabled = true; - } - x_mutex.unlock(); - } break; - case CD_XValues: { - if (!x_pult_side) break; - PIVector > x_vals; - ba >> x_vals; - x_mutex.lock(); - piForeachC (PIDeque & p, x_vals) { - x_[p].readX(ba); - } - x_mutex.unlock(); - X_ReceivedX(x_vals); - } break; - case CD_CQuery: - send(CDType::cdC); - break; - case CD_CSend: { - piCoutObj << "C received"; - PIByteArray c; - ba >> c; - c << uchar(0); - PIString s = PIString::fromUTF8((const char *)c.data()); - PIIOString ios(&s); - cd_read(&c_, &ios); - C_Received(); - } break; - case CD_Command: { - piCoutObj << "C command"; - PIDeque p; - ba >> p; - if (p.isEmpty()) return; - PIString sp = pathToString(p); - OHPair h = c_handlers.value(sp, OHPair(0, 0)); - //piCoutObj << "found" << sp << h.first; - if (h.first && h.second) h.second(h.first); - } break; - case CD_MQuery: - send(CDType::cdM); - break; - case CD_MSend: { - piCoutObj << "M received"; - PIByteArray c; - ba >> c; - c << uchar(0); - PIString s = PIString::fromUTF8((const char *)c.data()); - PIIOString ios(&s); - cd_read(&m_, &ios); - M_Received(); - } break; - case CD_Message: { - PIDeque p; - ba >> p; - piCoutObj << "M message" << p; - if (p.isEmpty()) return; - int t = 0; - PIString msg; - ba >> t >> msg; - //piCoutObj << "found" << sp << h.first; - //piCoutObj << "M message invoke"; - M_Message(p, t, msg); - } break; - default: break; - } -} - - -void CDCore::raiseChangedGlobal(CDType::cdT cdt) { - switch (cdt) { - case CDType::cdK: K_ChangedGlobal(); break; - case CDType::cdX: X_ChangedGlobal(); break; - case CDType::cdC: C_ChangedGlobal(); break; - case CDType::cdM: M_ChangedGlobal(); break; - default: break; - } -} - - -PIString CDCore::pathToString(const PIDeque & p) { - PIString ret; - for (int i = 0; i < p.size_s(); ++i) { - if (!ret.isEmpty()) ret += "."; - ret << p[i]; - } - return ret; -} - - -PIDeque CDCore::stringToPath(const PIString & p) { - PIDeque ret; - PIStringList sl = p.split("."); - piForeachC (PIString & s, sl) - ret << s.toInt(); - return ret; -} - - -void CDUtils::CDCore::dataReceived(const PIString & from, const PIByteArray & data) { - //piCoutObj << "dataReceived" << from << data.size(); - PIIODevice * d = connection.deviceByName("cd"); - if (d && d == connection.deviceByFullPath(from)) { - if (data.size() >= sizeof(4)) { - PIByteArray ba = data; - uchar header = ba.take_front(); - if (header == header_transfer) { - datatr.received(ba); - } - if (header == header_direct) { - procReceivedPacket(ba); - } - } - } -} - - -void CDCore::dtSendRequest(PIByteArray & data) { - data.push_front(header_transfer); - connection.writeByName("cd", data); - //piCoutObj << "send" << data.size() << ret; -} - - -void CDCore::dtReceiveFinished(bool ok) { - if (!ok) return; - PIByteArray ba = datatr.data(); - procReceivedPacket(ba); -} - diff --git a/test/cd_utils/cdutils_core.h b/test/cd_utils/cdutils_core.h deleted file mode 100644 index ab26bcb..0000000 --- a/test/cd_utils/cdutils_core.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef CDUTILS_CORE_H -#define CDUTILS_CORE_H - -#include "cdutils_types.h" -#include "cdutils_protocol.h" -#include "piconnection.h" -#include "pidatatransfer.h" - - -namespace CDUtils { - -class CDCore; - - -class __Core_Initializer__ { -public: - __Core_Initializer__(); - ~__Core_Initializer__(); - static int count_; - static CDCore * __instance__; -}; - - -class CDCore: public PIObject -{ - PIOBJECT(CDUtils::CDCore) - friend class __Core_Initializer__; - friend class CDSection; - friend class Interface; - friend class XInterface; -public: - static CDCore * instance(); - static bool destroy(); - - EVENT(K_Sended) - EVENT(K_SendFail) - EVENT(K_Received) - EVENT(K_ReceiveFail) - EVENT(K_ChangedGlobal) - EVENT_HANDLER2(void, K_DirectChange, PIDeque, path, PIString, value); - - EVENT(X_Sended) - EVENT(X_SendFail) - EVENT(X_Received) - EVENT(X_ReceiveFail) - EVENT(X_ChangedGlobal) - EVENT1(X_ReceivedX, PIVector >, pathes) - - EVENT(C_Sended) - EVENT(C_SendFail) - EVENT(C_Received) - EVENT(C_ReceiveFail) - EVENT(C_ChangedGlobal) - - EVENT(M_Sended) - EVENT(M_SendFail) - EVENT(M_Received) - EVENT(M_ReceiveFail) - EVENT(M_ChangedGlobal) - EVENT3(M_Message, PIDeque, path, int, type, PIString, msg) - - void cd_write (CDSection * cd, PIIODevice * d); - void cd_read (CDSection * cd, PIIODevice * d); - void cd_parse (CDSection * cd, PIIODevice * d); - void cd_update (CDSection * cd, PIIODevice * d, UpdateModeFlags mode); - void cd_calculate(CDSection * cd); - void cd_send (CDSection * cd, CDPacketType pt, bool direct = false); - void send(CDType::cdT cdt); - void request(CDType::cdT cdt); - void initApp(); - void initPult(); - void init(const PIString & configuration, bool pult = false); - void stop(); - void release(); - void startX(double freq = 20.); - void stopX(); - void sendCommand(const CDType & c); - void registerCHandler(const CDType & c, PIObject * o, Handler h); - bool inProgress() {return sendt.isRunning();} - void sendMessage(const CDType & m, MessageType mt, const PIString & msg); - - CDSection * root(CDType::cdT cdt); - PIString typeLetter(CDType::cdT cdt); - static PIString pathToString(const PIDeque & p); - static PIDeque stringToPath(const PIString & p); - - static PIString pultConfig() {return PIString(pult_config);} - static PIString appConfig() {return PIString(app_config);} - -private: - CDCore(); - ~CDCore(); - EVENT_HANDLER2(void, dataReceived, const PIString &, from, const PIByteArray &, data); - EVENT_HANDLER1(void, dtSendRequest, PIByteArray &, data); - EVENT_HANDLER1(void, dtReceiveFinished, bool, ok); - EVENT_HANDLER(void, sendThread); - EVENT_HANDLER(void, xTimerTick); - EVENT_HANDLER2(void, piCoutFinished, int, id, PIString*, buffer); - void initRoot(CDSection * r); - PIByteArray makeHeader(CDPacketType type, int session_id = 0) const; - void sendDirect(PIByteArray & ba); - void sendThreaded(PIByteArray & ba); - void procReceivedPacket(PIByteArray & ba); - void raiseChangedGlobal(CDType::cdT cdt); - - typedef PIPair OHPair; - - static const char app_config[], pult_config[]; - PIConnection connection; - PIDataTransfer datatr; - PIByteArray send_data; - PIThread sendt; - PITimer x_timer; - CDSection k_, x_, c_, m_; - PIMutex x_mutex; - PIVector > x_selected; - PIMap c_handlers; - bool need_rebuild_x, x_pult_side; - -}; - - -static __Core_Initializer__ __Core_initializer__; - -} - -#endif // CDUTILS_CORE_H diff --git a/test/cd_utils/cdutils_interface.cpp b/test/cd_utils/cdutils_interface.cpp deleted file mode 100644 index 2967801..0000000 --- a/test/cd_utils/cdutils_interface.cpp +++ /dev/null @@ -1,217 +0,0 @@ -#include "cdutils_interface.h" -#include "cdutils_core.h" -#include "piconfig.h" -#include "pifile.h" - -using namespace CDUtils; - - -Interface::Interface(CDType::cdT type_) { - core = CDCore::instance(); - s = core->root(type_); - type = type_; - //piCoutObj << (void*)this << core; - file_ = core->typeLetter(type_) + PIStringAscii(".dat"); - file_size = 0; - switch (type) { - case CDType::cdK: - CONNECTU(core, K_Sended, this, sended); - CONNECTU(core, K_SendFail, this, sendFailed); - CONNECTU(core, K_Received, this, received); - CONNECTU(core, K_ReceiveFail, this, receiveFailed); - CONNECTU(core, K_ChangedGlobal, this, changedGlobal); - break; - case CDType::cdX: - CONNECTU(core, X_Sended, this, sended); - CONNECTU(core, X_SendFail, this, sendFailed); - CONNECTU(core, X_Received, this, received); - CONNECTU(core, X_ReceiveFail, this, receiveFailed); - CONNECTU(core, X_ChangedGlobal, this, changedGlobal); - break; - case CDType::cdC: - CONNECTU(core, C_Sended, this, sended); - CONNECTU(core, C_SendFail, this, sendFailed); - CONNECTU(core, C_Received, this, received); - CONNECTU(core, C_ReceiveFail, this, receiveFailed); - CONNECTU(core, C_ChangedGlobal, this, changedGlobal); - break; - case CDType::cdM: - CONNECTU(core, M_Sended, this, sended); - CONNECTU(core, M_SendFail, this, sendFailed); - CONNECTU(core, M_Received, this, received); - CONNECTU(core, M_ReceiveFail, this, receiveFailed); - CONNECTU(core, M_ChangedGlobal, this, changedGlobal); - break; - default: break; - } -} - - -bool Interface::test(int v) { - return s->test(v); -} - - -CDType & Interface::operator [](const PIString & name_) { - return (*s)[name_]; -} - - -const CDType Interface::operator [](const PIString & name_) const { - return (*s)[name_]; -} - - -CDType & Interface::operator [](const PIDeque & path_) { - return (*s)[path_]; -} - - -const CDType Interface::operator [](const PIDeque & path_) const { - return (*s)[path_]; -} - - -CDType & Interface::operator [](int v) { - //piCout << (void*)this << "[]" << core; - return (*s)[v]; -} - - -const CDType Interface::operator [](int v) const { - //piCout << (void*)this << "[]" << core; - return (*s)[v]; -} - - -CDSection & Interface::section(int v) { -// CDSection & ret = s->section(v); -// piCout << "[get section]" << v << ret.name; - return s->section(v); -} - - -const CDSection Interface::section(int v) const { - return s->section(v); -} - - -CDSection & Interface::section(const PIDeque &path) { - PIDeque spath = path; - CDSection * rs = s; - while (!spath.isEmpty()) { - rs = &(rs->section(spath.take_front())); - } - return *rs; -} - - -CDSection & Interface::root() { - return *s; -} - - -const CDSection & Interface::root() const { - return *s; -} - - -int Interface::count(bool recursive) const { - return s->count(recursive); -} - - -bool Interface::exists(PIDeque path) const { - return s->exists(path); -} - - -void Interface::setFileName(const PIString & _file) { - file_ = _file; -} - - -bool Interface::configure(const PIString & config) { - PIConfig conf(config, PIIODevice::ReadOnly); - PIConfig::Entry & e(conf.getValue(core->typeLetter(s->cd_type_))); - bool ret = false; - setFileName(e.getValue("file", file(), &ret)); - return ret; -} - - -void Interface::reinitConnection(const PIString & configuration) { - core->init(configuration); -} - - -void Interface::releaseConnection() { - core->release(); -} - - -void Interface::write(PIIODevice * d) { - core->cd_write(s, d); -} - - -void Interface::read(PIIODevice * d) { - core->cd_read(s, d); -} - - -void Interface::parse(PIIODevice * d) { - core->cd_parse(s, d); -} - - -void Interface::update(PIIODevice * d, UpdateModeFlags mode) { - core->cd_update(s, d, mode); -} - - -void Interface::calculate() { - core->cd_calculate(s); -} - - -PIString Interface::appConfig() { - return core->appConfig(); -} - - -PIString Interface::pultConfig() { - return core->pultConfig(); -} - - -void Interface::readFile() { - if (file_.isEmpty()) return; - PIFile f(file_, PIIODevice::ReadOnly); - read(&f); - file_size = f.size(); -} - - -void Interface::writeFile() { - if (file_.isEmpty()) return; - PIFile f(file_, PIIODevice::ReadWrite); - f.clear(); - write(&f); - file_size = f.size(); -} - - -bool Interface::inProgress() { - return core->inProgress(); -} - - -void Interface::send() { - core->send(type); -} - - -void Interface::request() { - core->request(type); -} diff --git a/test/cd_utils/cdutils_interface.h b/test/cd_utils/cdutils_interface.h deleted file mode 100644 index c44a005..0000000 --- a/test/cd_utils/cdutils_interface.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef CDUTILS_INTERFACE_H -#define CDUTILS_INTERFACE_H - -#include "cdutils_types.h" -#include "piobject.h" - - -namespace CDUtils { - -class CDCore; - - -class Interface: public PIObject -{ - PIOBJECT(CDUtils::Interface) -public: - Interface(CDType::cdT type_); - - bool test(int v); - CDType & operator [](int v); - const CDType operator [](int v) const; - CDType & operator [](const PIString & name_); - const CDType operator [](const PIString & name_) const; - CDType & operator [](const PIDeque & path_); - const CDType operator [](const PIDeque & path_) const; - CDSection & section(int v); - const CDSection section(int v) const; - CDSection & section(const PIDeque & path); - CDSection & root(); - const CDSection & root() const; - - int count(bool recursive = true) const; - const PIString file() const {return file_;} - int fileSize() const {return file_size;} - CDType::cdT cdType() const {return type;} - bool exists(PIDeque path) const; - - void setFileName(const PIString & _file); - bool configure(const PIString & config); - void reinitConnection(const PIString & configuration); - void releaseConnection(); - void write(PIIODevice * d); - void read(PIIODevice * d); - void parse(PIIODevice * d); - void update(PIIODevice * d, UpdateModeFlags mode = SaveByName); - void calculate(); - - PIString appConfig(); - PIString pultConfig(); - - void readFile(); - void writeFile(); - bool inProgress(); - - EVENT(sended) - EVENT(sendFailed) - EVENT(received) - EVENT(receiveFailed) - EVENT(changedGlobal) - EVENT_HANDLER(void, send); - EVENT_HANDLER(void, request); - -protected: - CDCore * core; - CDSection * s; - CDType::cdT type; - PIString file_; - int file_size; - -}; - - -} - - -#endif // CDUTILS_INTERFACE_H diff --git a/test/cd_utils/cdutils_k.cpp b/test/cd_utils/cdutils_k.cpp deleted file mode 100644 index 6ee850a..0000000 --- a/test/cd_utils/cdutils_k.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "cdutils_k.h" -#include "cdutils_core.h" - -using namespace CDUtils; - -KInterface K; - - -KInterface::KInterface(): Interface(CDType::cdK) { -} - - -void KInterface::directChange(const CDType & k) { - core->K_DirectChange(k.path(), k.value()); -} - - -void KInterface::directChange(const CDType & k, double v) { - core->K_DirectChange(k.path(), PIString::fromNumber(v)); -} diff --git a/test/cd_utils/cdutils_k.h b/test/cd_utils/cdutils_k.h deleted file mode 100644 index b49e697..0000000 --- a/test/cd_utils/cdutils_k.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef CDUTILS_K_H -#define CDUTILS_K_H - -#include "cdutils_interface.h" - - -namespace CDUtils { - - -class KInterface: public Interface -{ - PIOBJECT_SUBCLASS(KInterface, Interface) -public: - KInterface(); - - EVENT1(keepNamesRequest, bool*, kn) - - void directChange(const CDType & k); - void directChange(const CDType & k, double v); - -}; - -} - -extern CDUtils::KInterface K; - -#endif // CDUTILS_K_H diff --git a/test/cd_utils/cdutils_m.cpp b/test/cd_utils/cdutils_m.cpp deleted file mode 100644 index cd326cd..0000000 --- a/test/cd_utils/cdutils_m.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "cdutils_m.h" -#include "cdutils_core.h" - -using namespace CDUtils; - -MInterface M; - - -MInterface::MInterface(): Interface(CDType::cdM) { - CONNECTU(core, M_Message, this, messageReceived); -} - - -void MInterface::messageBox(const CDType & m, const PIString & msg) { - core->sendMessage(m, MessageBox, msg); -} - - -PICout MInterface::createPICout(const CDType & m) const { - PIString * buff = new PIString("[" + CDCore::pathToString(m.path()) + "]"); - return PICout(buff, 1); -} diff --git a/test/cd_utils/cdutils_m.h b/test/cd_utils/cdutils_m.h deleted file mode 100644 index cbc73e8..0000000 --- a/test/cd_utils/cdutils_m.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CDUTILS_M_H -#define CDUTILS_M_H - -#include "cdutils_interface.h" - - -namespace CDUtils { - - -class MInterface: public Interface -{ - PIOBJECT_SUBCLASS(MInterface, Interface) -public: - MInterface(); - - PICout operator [](int v) {return createPICout((*s)[v]);} - PICout operator [](int v) const {return createPICout((*s)[v]);} - PICout operator [](const PIString & name_) {return createPICout((*s)[name_]);} - PICout operator [](const PIString & name_) const {return createPICout((*s)[name_]);} - PICout operator [](const PIDeque & path_) {return createPICout((*s)[path_]);} - PICout operator [](const PIDeque & path_) const {return createPICout((*s)[path_]);} - - void messageBox(const CDType & m, const PIString & msg); - - EVENT3(messageReceived, PIDeque, path, int, type, PIString, msg) - -private: - PICout createPICout(const CDType & m) const; - -}; - -} - -extern CDUtils::MInterface M; - -#endif // CDUTILS_M_H diff --git a/test/cd_utils/cdutils_parser.cpp b/test/cd_utils/cdutils_parser.cpp deleted file mode 100644 index 50e0600..0000000 --- a/test/cd_utils/cdutils_parser.cpp +++ /dev/null @@ -1,196 +0,0 @@ -#include "cdutils_parser.h" -#include "cdutils_types.h" -#include "piiostring.h" -#include "piiobytearray.h" -#include "pifile.h" - -using namespace CDUtils; - -enum Phase { - eName = 1, - eBracketOpen, - eBracketClose, - eMemberName, - eMemberEqual, - eMemberValue, - eMemberComma, - eComment, - eMultiComment -}; - - -void removeComment(PIString & line, PIString * type, PIString * comment) { - int ci = line.find("//"); - if (ci >= 0) { - if (comment) *comment = line.right(line.size_s() - ci - 2); - line.cutRight(line.size_s() - ci).trim(); - if (type && comment && !line.isEmpty()) { - *type = comment->takeLeft(1); - comment->trim(); - } - } -} - - -void parseEnumLine(PIString & line, int * value, PIString * type, PIString * comment) { - removeComment(line, type, comment); - int ci = line.find("="); - if (ci >= 0) { - if (value) *value = line.right(line.size_s() - ci - 1).trim().toInt(); - line.cutRight(line.size_s() - ci).trim(); - } - if (line.trim().endsWith(",")) line.cutRight(1); -} - - -void parseInsert(PIString line, PIString & alias, PIStringList & out) { - out.clear(); - int ci = line.find("="); - if (ci < 0) return; - alias = line.right(line.size_s() - ci - 1).trim(); - line.cutRight(line.size_s() - ci).trim(); - while (line.find("[") > 0) { - int is = line.find("["), ie = line.find("]"); - PIString arr = line.mid(is + 1, ie - is - 1); - out << arr; - line.cutMid(is, ie - is + 1); - } - if (!line.isEmpty()) out.insert(0, line); -} - - -PIVector enumValues(const PIString & e, const PIMap & sections, PIStringList & enames) { - PIVector ret; - enames.clear(); - if (sections.contains(e)) { - ret = sections[e].indexes(); - enames = sections[e].index_names(); - } else { - int v = e.toInt(); - if (v < 2) return ret; - for (int i = 0; i < v; ++i) { - ret << i; - enames << "";//PIString::fromNumber(i); - } - } - return ret; -} - - -CDSection CDParser::parse(PIIODevice * d, int cdsection_type) { - CDType::cdT et = (CDType::cdT)cdsection_type; - if (!d) return CDSection(et); - if (!d->canRead()) return CDSection(et); - //piCout << "[CDSection] parse start"; - CDSection cs(et); - CDType ck; - PIMap sections; - PIMap enum_values; - PIString content, line, alias, type, comment; - PIStringList iarr; - if (PIStringAscii(d->className()) == PIStringAscii("PIFile")) { - PIByteArray c = ((PIFile*)d)->readAll(); - c << uchar(0); - content = PIString::fromUTF8((const char *)c.data()); - } - if (PIStringAscii(d->className()) == PIStringAscii("PIIOString")) content = *(((PIIOString*)d)->string()); - if (PIStringAscii(d->className()) == PIStringAscii("PIIOByteArray")) content = PIString(*(((PIIOByteArray*)d)->byteArray())); - PIIOString ios(&content); - //int phase = 0; - int cind = -1; - while ((cind = content.find("enum", cind)) >= 0) { - ios.seek(cind); - line = ios.readLine().trim(); - type.clear(); - comment.clear(); - removeComment(line, &type, &comment); - if (line.find("{") < 0) { - cind += 4; - continue; - } - line.cutLeft(line.find("enum") + 4).trim(); - line.cutRight(line.size_s() - line.find("{")).trim(); - if (line.isEmpty()) { - cind += 4; - continue; - } - cs = CDSection(et); - cs.name = line; - //piCout << "enum" << cs.name; - int cev = 0; -// cevalues.clear(); - while (!ios.isEnd()) { - line = ios.readLine().trim(); - comment.clear(); - removeComment(line, &type, &comment); - if (line.find("}") >= 0) break; - if (line.isEmpty()) { - if (comment.find("=") >= 0) { - parseInsert(comment, alias, iarr); - if (!iarr.isEmpty()) { -// piCout << "#" << enum_values; - if (!enum_values.contains(alias)) { - piCout << "Parse error: can`t find section alias \"" << alias << "\"!"; - return CDSection(et); - } - if (!sections.contains(iarr.front())) { - piCout << "Parse error: can`t find section \"" << iarr.front() << "\"!"; - return CDSection(et); - } - //piCout << "insert" << alias << iarr; - int aval = enum_values.value(alias); - CDSection is = sections.value(iarr.take_front()), ts; - int ibpos = is.name.size_s(); - piForeachRC (PIString & a, iarr) { - PIStringList enames; - PIVector evals = enumValues(a, sections, enames); - //piCout << a << evals; - for (int i = 0; i < evals.size_s(); ++i) { - ts.section(evals[i]) = is; - ts.section(evals[i]).alias = enames[i]; - } - ts.name = is.name; - ts.name.insert(ibpos, PIString("[") << a << "]"); - is = ts; - ts = CDSection(et); - } - is.alias = alias; - cs.section(aval) = is; - } - } - } else { - parseEnumLine(line, &cev, &type, &comment); - //piCout << line << "=" << cev << "//" << type << comment; - ck = CDType(cev, line, type, "", "", comment, et); - if (type == "e") { - if (comment.startsWith("${")) { - comment.cutLeft(1); - PIString en = comment.inBrackets('{', '}'); - comment.cutLeft(en.size_s() + 2).trim(); - ck.setEnumValues(sections.value(en).enumValues()); - ck.setComment(comment); - //piCout << "enum" << en << ck.enumValues(); - } - } - cs[cev] = ck; - //cevalues[line] = cev; - enum_values[line] = cev; - ++cev; - } - } - //piCout << cs.name << cs.k; - sections[cs.name] = cs; -// piCout << "#" << cevalues; -// enum_values << cevalues; - cind += 4; - } -// piCout << "[CDSection] parse end"; - switch (et) { - case CDType::cdK: return sections.value("KDescription"); - case CDType::cdX: return sections.value("XDescription"); - case CDType::cdC: return sections.value("CDescription"); - case CDType::cdM: return sections.value("MDescription"); - default: return CDSection(et); - } - return CDSection(et); -} diff --git a/test/cd_utils/cdutils_parser.h b/test/cd_utils/cdutils_parser.h deleted file mode 100644 index 6c39c6f..0000000 --- a/test/cd_utils/cdutils_parser.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef CDUTILS_PARSER_H -#define CDUTILS_PARSER_H - - -class PIIODevice; - -namespace CDUtils { - -class CDSection; - -namespace CDParser { - -CDSection parse(PIIODevice * d, int cdsection_type); - -} - -} - -#endif // CDUTILS_PARSER_H diff --git a/test/cd_utils/cdutils_protocol.h b/test/cd_utils/cdutils_protocol.h deleted file mode 100644 index b835359..0000000 --- a/test/cd_utils/cdutils_protocol.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef CDUTILS_PROTOCOL_H -#define CDUTILS_PROTOCOL_H - -#include "pibytearray.h" - -namespace CDUtils { - - enum CDPacketType { - CD_Ping, - CD_Pong, - - CD_KQuery, - CD_KSend, - CD_KDirectChange, - - CD_XQuery, - CD_XSend, - CD_XRequest, - CD_XValues, - - CD_CQuery, - CD_CSend, - CD_Command, - - CD_MQuery, - CD_MSend, - CD_Message, - }; - -# pragma pack(push,1) - - struct PacketHeader { - int type; // CDPacketType - int session_id; - }; - - struct PacketKDirectChange { - PIDeque path; - PIString value; - }; - -# pragma pack(pop) - - -inline PIByteArray & operator <<(PIByteArray & s, const PacketHeader & v) {s << v.type << v.session_id; return s;} -inline PIByteArray & operator >>(PIByteArray & s, PacketHeader & v) {s >> v.type >> v.session_id; return s;} - -inline PIByteArray & operator <<(PIByteArray & s, const PacketKDirectChange & v) {s << v.path << v.value; return s;} -inline PIByteArray & operator >>(PIByteArray & s, PacketKDirectChange & v) {s >> v.path >> v.value; return s;} - -} - -#endif // CDUTILS_PROTOCOL_H diff --git a/test/cd_utils/cdutils_types.cpp b/test/cd_utils/cdutils_types.cpp deleted file mode 100644 index ae8ce05..0000000 --- a/test/cd_utils/cdutils_types.cpp +++ /dev/null @@ -1,763 +0,0 @@ -#include "cdutils_types.h" -#include "piconfig.h" -#include "pifile.h" -#include "pievaluator.h" -#include "cdutils_core.h" - -using namespace CDUtils; - -//int cdtype_debug_cnt = 1; - -const int cd_x_history_max_size = 4000; - -CDType::CDType() { - index_ = -1; - value_d = 0.; - value_i = 0; - value_b = calculated = x_enabled = false; - cd_type_ = cdNull; - parent = 0; - avg_size = 1; - mode_ = rmode_ = X_Current; -// debug_cnt = cdtype_debug_cnt; -// cdtype_debug_cnt++; -// piCout << "[CDType]" << "create Null" << debug_cnt; -} - - - - -CDType::CDType(int i, const PIString & n, const PIString & t, const PIString & v, const PIString & f, const PIString & c, cdT cd_t) { - index_ = i; - name_ = n.trimmed(); - type_ = t.trimmed(); - value_s = v.trimmed(); - formula_ = f.trimmed(); - comment_ = c.trimmed(); - value_d = v.toDouble(); - value_i = v.toInt(); - value_b = v.toBool(); - cd_type_ = cd_t; - calculated = x_enabled = false; - parent = 0; - avg_size = 1; - mode_ = rmode_ = X_Current; - if (type_ == "e") { - enum_values = parseEnumComment(comment_); -// piCout << enum_values.size() << enum_values; - } -// piCout << type_.size() << type_.toUTF8(); -// piCout << formula_.size() << formula_.toUTF8(); -// piCout << comment_.size() << comment_.toUTF8(); -// debug_cnt = cdtype_debug_cnt; -// cdtype_debug_cnt++; -// piCout << "[CDType] create" << name_ << ":" << type_ << ":" << value_s << ":" << value_d << ":" << formula_ << ":" << comment_ << ":" << (cd_type_ == cdK); -} - - -CDType & CDType::operator =(double x) { - value_d = x; - value_i = x; - value_b = x > 0.; - if (mode_ == X_All_Avg) { - avg_h << x; - double val = 0; - if (avg_h.size_s() >= avg_size) { - for (int i = 0; i < avg_h.size_s(); i++) - val += avg_h[i]; - val /= avg_h.size(); - avg_h.clear(); - if (history.size() < cd_x_history_max_size) - history << val; - } - } - return *this; -} - - -PIString CDType::type() const { - if (type_.trimmed().isEmpty()) return "f"; - // piCout << "type =" << type_.trimmed() << ";" << type_ << "#"; - return type_; -} - - -PIString CDType::value() const { - if (type_ == "b") return PIString::fromBool(value_b); - return value_s; -} - - -PIVariant CDType::variantValue() const { - if (type_.isEmpty()) return PIVariant(value()); - switch (type_[0].toAscii()) { - case 'b': return PIVariant(toBool()); break; - case 'n': return PIVariant(toInt()); break; - case 'f': return PIVariant(toDouble()); break; - case 'c': return PIVariant(PIVariantTypes::Color(toInt())); break; - case 'e': { - PIVariantTypes::Enum e = enum_values; - e.selectValue(toInt()); - return PIVariant(e); - break; - } - default: break; - } - return PIVariant(value()); -} - - -void CDType::setValue(const PIString & value_) { - formula_ = value_; - value_d = formula_.toDouble(); - value_i = formula_.toInt(); - value_b = formula_.toBool(); -} - - -void CDType::setVariantValue(const PIVariant & value_) { - setValue(PIString::fromNumber(value_.toDouble())); -} - - -void CDType::setFormula(const PIString & f) { - formula_ = f; - calculated = false; - //PIEvaluator e; - //calculate(&e); -} - - -PIStringList CDType::pathString() const { - PIStringList ret; - CDSection * ps = CDCore::instance()->root(cd_type_); - if (!ps) return ret; - for (int i = 0; i < path_.size_s() - 1; ++i) { - ps = &(ps->section(path_[i])); - if (!ps->alias.isEmpty()) ret << ps->alias; - else ret << PIString::fromNumber(path_[i]); - } - if (!name_.isEmpty()) ret << name_; - else ret << PIString::fromNumber(index_); - return ret; -} - - -void CDType::readX(PIByteArray & ba) { - if (ba.size() < 5) return; - uchar t(0); ba >> t; - rmode_ = (XMode)t; - switch (rmode_) { - case X_Current: - ba >> value_d; - break; - case X_All_Avg: { - PIVector ah; - ba >> ah; - history << ah; - if (!history.isEmpty()) - value_d = history.back(); - } break; - default: break; - } - value_i = value_d; - value_b = value_d > 0.; -} - - -void CDType::writeX(PIByteArray & ba) { - ba << uchar(mode_); - switch (mode_) { - case X_Current: - ba << value_d; - break; - case X_All_Avg: - ba << history; - history.clear(); - break; - default: break; - } -} - - -bool CDType::calculate(PIEvaluator * e, PIVector stack) { - if (stack.contains(this)) { - error_ = "Circular dependencies: "; - piForeachC (CDType * k, stack) - error_ << k->name() << " -> "; - error_ << name(); - //piCout << error_; - return false; - } - stack << this; - if (calculated) return true; - calculated = true; - error_.clear(); - if (!parent) return true; - //piCout << "calc" << name_ << (parent ? parent->alias : "root"); - value_s = formula_.trimmed(); - for (;;) { - int ki = value_s.find("K["); - if (ki < 0) break; - int ke = value_s.find("]", ki + 2); - if (ke < 0) break; - PIString kp = value_s.mid(ki + 2, ke - ki - 2); - //piCout << kp; - CDType & k((*parent)[kp]); - k.calculate(e, stack); - value_s.replace(ki, ke - ki + 1, PIString::fromNumber(k.value_d)); - } - value_d = formula_.toDouble(); - value_i = formula_.toInt(); - value_b = formula_.toBool(); - double ev = 0.; - if (!e->check(value_s) && value_d == 0. && value_i == 0 && !value_b) { - PIString f = formula_.trimmed().toLowerCase(); - if (f != "off" && f != "false" && f != "no" && !value_b) { - error_ = e->error(); - return false; - } - } else - if (e->isCorrect()) - ev = e->evaluate().real(); - //piCout << value_s << value_i << value_d << ev; - //if ((value_d == 0.) || (piAbsd(value_d) < piAbsd(ev))) value_d = ev; - //if ((value_i == 0) || (piAbsd(value_i) < piAbsd(ev))) value_i = int(ev); - if ((value_d == 0.) || (ev != 0.)) value_d = ev; - if ((value_i == 0) || (ev != 0.)) value_i = int(ev); - value_b = value_b || (ev > 0.); - if (value_i != 0) { - if (value_d == 0.) value_d = value_i; - value_b = value_i > 0; - } - if (value_d != 0.) { - if (value_i == 0) value_i = value_d; - value_b = value_d > 0.; - } - if (value_b) { - if (value_d == 0.) value_d = 1.; - if (value_i == 0) value_i = 1; - } - value_s = PIString::fromNumber(value_d); - return true; -} - - -PIVariantTypes::Enum CDType::parseEnumComment(PIString c) { - PIVariantTypes::Enum ret; - if (c.isEmpty()) return ret; - if (type_ == "e") { - PIStringList sl = c.inBrackets('{', '}').split(","); - int cval = 0; - piForeach (PIString & s, sl) { - s.trim(); - if (s.isEmpty()) continue; - if (s[0].isDigit()) { - int ind = s.find("-"); - if (ind > 0) { - cval = s.left(ind).toInt(); - s.cutLeft(ind + 1).trim(); - } - } - ret << PIVariantTypes::Enumerator(cval, s); - ++cval; - } - } - //piCout << c << "=" << ret; - return ret; -} - - -//CDType::CDType(const CDType &cdt) { -// index_ = cdt.index_; -// name_ = cdt.name_; -// type_ = cdt.type_; -// value_s = cdt.value_s; -// formula_ = cdt.formula_; -// comment_ = cdt.comment_; -// value_d = cdt.value_d; -// value_i = cdt.value_i; -// value_b = cdt.value_b; -// cd_type_ = cdt.cd_type_; -// debug_cnt = cdtype_debug_cnt; -// cdtype_debug_cnt++; -// piCout << "[CDType] copy" << debug_cnt << "->" << cdt.debug_cnt << index_ << ":" << name_ << ":" << type_ << ":" << value_s << ":" << value_d << ":" << formula_ << ":" << comment_ << ":" << (cd_type_ == cdK); -//} - - -//CDType &CDType::operator =(const CDType &cdt) { -// index_ = cdt.index_; -// name_ = cdt.name_; -// type_ = cdt.type_; -// value_s = cdt.value_s; -// formula_ = cdt.formula_; -// comment_ = cdt.comment_; -// value_d = cdt.value_d; -// value_i = cdt.value_i; -// value_b = cdt.value_b; -// cd_type_ = cdt.cd_type_; -// piCout << "[CDType] assign" << debug_cnt << "=" << cdt.debug_cnt << index_ << ":" << name_ << ":" << type_ << ":" << value_s << ":" << value_d << ":" << formula_ << ":" << comment_ << ":" << (cd_type_ == cdK); -// //debug_cnt = cdt.debug_cnt; -// return *this; -//} - - -//CDType::~CDType() { -// piCout << "[CDType] delete" << debug_cnt << index_ << ":" << name_ << ":" << type_ << ":" << value_s << ":" << value_d << ":" << formula_ << ":" << comment_ << ":" << (cd_type_ == cdK); -//} - - - -CDSection::CDSection(CDType::cdT type_) { - cd_type_ = type_; - null.cd_type_ = type_; -} - - -CDSection & CDSection::section(int v) { - CDSection & ret(s[v]); - ret.cd_type_ = cd_type_; - return ret; -} - - -const CDSection CDSection::section(int v) const { - CDSection & ret(s[v]); - ret.cd_type_ = cd_type_; - return s[v]; -} - - -bool CDSection::exists(PIDeque path) const { - if (path.isEmpty()) return false; - if (path.size_s() == 1) return cd.contains(path[0]); - int si = path[0]; - if (!s.contains(si)) return false; - path.remove(0, 1); - return s[si].exists(path); -} - - -int CDSection::count(bool recursive) const { - int ret = cd.size_s(); - if (recursive) { - PIMap::const_iterator i; - for (i = s.constBegin(); i != s.constEnd(); ++i) - ret += i->second.count(recursive); - } - return ret; -} - - -int CDSection::sectionsCount() const { - return s.size(); -} - - -PIStringList CDSection::index_names() const { - PIStringList ret; - PIMap::const_iterator i; - for (i = cd.begin(); i != cd.end(); ++i) - ret << i->second.name(); - return ret; -} - - -void CDSection::calculate() { - prepareCalculate(); - if (cd_type_ != CDType::cdK) return; - PIEvaluator e; - calculateRecursive(&e); -} - - -CDType & CDSection::getByName(const PIString & name_) { - PIStringList np = name_.split("."); - if (np.isEmpty()) return null; - //piCout << np; - CDSection * cs = this, * ns = 0; - if (np.front().isEmpty()) { - if (np.size_s() < 2) return null; - cs = CDCore::instance()->root(cd_type_); - np.pop_front(); - } - for (int i = 0; i < np.size_s() - 1; ++i) { - if (np[i].isEmpty()) return null; - bool isd = np[i][0].isDigit() || (np[i][0] == '-'); - int dv = 0; - if (isd) dv = np[i].toInt(); - ns = 0; - PIMap::iterator it; - //piCout << np[i] << isd << dv; - for (it = cs->s.begin(); it != cs->s.end(); ++it) { - bool f = false; - if (isd) f = (dv == it.key()); - else f = (np[i] == it.value().alias); - //piCout << "s..." << it.key() << it.value().alias << f; - if (f) { - ns = &(it.value()); - break; - } - } - //piCout << ns; - if (!ns) return null; - cs = ns; - } - PIMap::iterator it; - if (np.back().isEmpty()) return null; - bool isd = np.back()[0].isDigit() || (np.back()[0] == '-'); - int dv = 0; - if (isd) dv = np.back().toInt(); - //piCout << np.back() << isd << dv; - for (it = cs->cd.begin(); it != cs->cd.end(); ++it) { - bool f = false; - if (isd) f = (dv == it.key()); - else f = (np.back() == it.value().name()); - //piCout << "k..." << it.key() << it.value().name() << f; - if (f) - return cs->cd[it.key()]; - } - return null; -} - - -CDType & CDSection::getByPath(const PIDeque & path_) { - if (path_.isEmpty()) return null; - CDSection * s = this; - for (int i = 0; i < path_.size_s() - 1; ++i) - s = &(s->section(path_[i])); - if (!s) return null; - return (*s)[path_.back()]; -} - - -void CDSection::write(PIIODevice * d, const PIString & prefix) { - if (!d) return; - if (cd.isEmpty() && s.isEmpty()) return; -// piCout << "[CDSection] write start"; - PIString l; - PIStringList cdtl; - cdtl << "null" << "k" << "x" << "c" << "m"; - if (prefix.isEmpty()) l = "[" + cdtl[cd_type_] + "]"; - else l = "[" + prefix + "." + cdtl[cd_type_] + "]"; - l += "\n"; - d->write(l.toUTF8()); - l = "name = " + name + " \n"; - d->write(l.toUTF8()); - l = "alias = " + alias + " \n"; - d->write(l.toUTF8()); - PIMap::iterator i; - for (i = cd.begin(); i != cd.end(); ++i) { - CDType & ck(i.value()); - if (ck.cd_type() != cd_type_) continue; - switch (cd_type_) { - case CDType::cdNull: break; - case CDType::cdK: - l.clear(); l << ck.index() << ".f = " << ck.formula() << " #s " << ck.comment() << " \n"; - d->write(l.toUTF8()); - l.clear(); l << ck.index() << ".v = " << ck.value() << " #" << ck.type() << " " << ck.name() << " \n"; - d->write(l.toUTF8()); - if (!ck.enumValues().enum_list.isEmpty()) { - l.clear(); l << ck.index() << ".ev = {"; - //PIVector el = ck.enumValues(); - piForeachC (PIVariantTypes::Enumerator & e, ck.enumValues().enum_list) - l << e.value << " - " << e.name << ", "; - l.cutRight(2); - l << "} \n"; - d->write(l.toUTF8()); - } - break; - case CDType::cdX: - l.clear(); l << ck.index() << ".name = " << ck.name() << " #s " << ck.comment() << " \n"; - d->write(l.toUTF8()); - l.clear(); l << ck.index() << ".mode = " << ck.xmode() << " #e (0 - cur, 1 - all_avg) " << "\n"; - d->write(l.toUTF8()); - l.clear(); l << ck.index() << ".avg = " << ck.avg() << " #n " << "\n"; - d->write(l.toUTF8()); - l.clear(); l << ck.index() << ".sel = " << (ck.isSelectedX() ? "1" : "0") << " #n " << "\n"; - d->write(l.toUTF8()); - break; - case CDType::cdC: - case CDType::cdM: - l.clear(); l << ck.index() << ".name = " << ck.name() << " #s " << ck.comment() << " \n"; - d->write(l.toUTF8()); - break; - } - } - if (!s.isEmpty()) { - if (prefix.isEmpty()) l = "s"; - else l = prefix + ".s"; - PIMap::iterator j; - for (j = s.begin(); j != s.end(); ++j) { - j.value().write(d, l + "." + PIString::fromNumber(j.key())); - } - } - if (prefix.isEmpty()) { - l = "[]\n"; - d->write(l.toUTF8()); - } -// piCout << "[CDSection] write end"; -} - - -void CDSection::read(const void * ep) { -// piCout << "[CDSection] read start"; - PIStringList cdtl; - cdtl << "null" << "k" << "x" << "c" << "m"; - cd.clear(); - s.clear(); - PIConfig::Entry & e(*(PIConfig::Entry*)ep); - name = e.getValue(cdtl[cd_type_] + ".name").value(); - alias = e.getValue(cdtl[cd_type_] + ".alias").value(); - PIConfig::Entry & cdl = e.getValue(cdtl[cd_type_]); - for (int i = 0; i < cdl.childCount(); ++i) { - const PIConfig::Entry * e(cdl.child(i)); - bool ok = false; - int id = e->name().toInt(-1, &ok); -// piCout << "[read]" << ke->name() << ke->value() << ok; -// PIString n = ke->getValue("v").comment(); -// PIString t = n.takeLeft(1); - if (ok) { - CDType c; - PIString ev; - switch (cd_type_) { - case CDType::cdNull: break; - case CDType::cdK: - c = CDType(id, e->getValue("v").comment(), e->getValue("v").type(), e->getValue("v").value(), e->getValue("f").value(), e->getValue("f").comment(), cd_type_); - ev = e->getValue("ev", ""); - if (!ev.isEmpty()) - c.enum_values = c.parseEnumComment(ev); - break; - case CDType::cdX: - c = CDType(id, e->getValue("name").value(), PIString(), PIString(), PIString() , e->getValue("name").comment(), cd_type_); - c.setXMode((CDType::XMode)e->getValue("mode", int(CDType::X_Current)).value().toInt()); - c.setAvg((CDType::XMode)e->getValue("avg", 1).value().toInt()); - c.x_enabled = e->getValue("sel", false).value().toBool(); - break; - case CDType::cdC: - case CDType::cdM: - c = CDType(id, e->getValue("name").value(), PIString(), PIString(), PIString() , e->getValue("name").comment(), cd_type_); - break; - } - cd[id] = c; - } - } - PIConfig::Entry & sl = e.getValue("s"); - for (int i = 0; i < sl.childCount(); ++i) { - const PIConfig::Entry * se(sl.child(i)); - int sid = se->name().toInt(); - CDSection & rs(s[sid]); - rs.cd_type_ = cd_type_; - rs.read(se); - } -// piCout << "[CDSection] read end"; -} - - -void CDSection::update(CDSection & v, UpdateModeFlags mode) { - if (mode[SaveByIndex] && mode[SaveByName]) { - piCout << "[CDSection] update error: SaveByIndex | SaveByName mode is denied!"; - return; - } - //piCout << "[CDSection] update start"; - //piCout << "before" << k.size() << v.k.size(); - - PIMap prev_cd_f_bi; - PIMap prev_cd_f_bn; - PIMap::iterator i; - if (mode[SaveByIndex]) { - for (i = cd.begin(); i != cd.end(); ++i) - prev_cd_f_bi[i.key()] = i.value().formula(); - } - if (mode[SaveByName]) { - for (i = cd.begin(); i != cd.end(); ++i) - prev_cd_f_bn[i.value().name_] = i.value().formula(); - } - if (!mode[Merge]) - cd.clear(); - for (i = v.cd.begin(); i != v.cd.end(); ++i) { - int id = i.key(); - PIString n = i.value().name(); - cd[id] = i.value(); - if (mode[SaveByIndex]) { - if (prev_cd_f_bi.contains(id)) - cd[id].setFormula(prev_cd_f_bi[id]); - } - if (mode[SaveByName]) { - if (prev_cd_f_bn.contains(n)) - cd[id].setFormula(prev_cd_f_bn[n]); - } - } - - PIMap prev_s_bi; - PIMap prev_s_bn; - PIMap::iterator j; - if (mode[SaveByIndex]) { - for (j = s.begin(); j != s.end(); ++j) - prev_s_bi[j.key()] = j.value(); - } - if (mode[SaveByName]) { - for (j = s.begin(); j != s.end(); ++j) - prev_s_bn[j.value().alias] = j.value(); - } - if (!mode[Merge]) - s.clear(); - for (j = v.s.begin(); j != v.s.end(); ++j) { - int id = j.key(); - PIString n = j.value().alias; - s[id] = j.value(); - if (mode[SaveByIndex]) { - if (prev_s_bi.contains(id)) - s[id] = prev_s_bi[id]; - } - if (mode[SaveByName]) { - if (prev_s_bn.contains(n)) - s[id] = prev_s_bn[n]; - } - s[id].update(j.value(), mode); - } - - /*PISet used; - for (i = k.begin(); i != k.end(); ++i) { - if (v.k.contains(i.key())) { - PIString f = k[i.key()].formula_; - CDType & cdt = v.k[i.key()]; - cdt.formula_ = f; - k[i.key()] = cdt; - used << i.key(); - } - if (mode) { - CDType & ck(k[i.key()]); - if (prev_k_f_bn.contains(ck.name_)) - ck.setFormula(prev_k_f_bn[ck.name_]); - } - } - //piCout << " after" << k.size(); - for (i = v.k.begin(); i != v.k.end(); ++i) { - if (!used.contains(i.key())) - k[i.key()] = i.value(); - CDType & ck(k[i.key()]); - ck.setFormula(prev_k_f_bn.value(ck.name_)); - } - used.clear(); - PIMap::iterator j; - for (j = s.begin(); j != s.end(); ++j) { - if (v.s.contains(j.key())) - j.value().update(v.s[j.key()], mode); - used << j.key(); - } - for (j = v.s.begin(); j != v.s.end(); ++j) { - if (!used.contains(j.key())) - s[j.key()] = j.value(); - }*/ -// piCout << "[CDSection] update end"; -} - - -bool CDSection::isSameStructure(CDSection & v) { - PIMap cd_ids; - PIMap::iterator i; - for (i = cd.begin(); i != cd.end(); ++i) - cd_ids[i.value().name()] = i.key(); - for (i = v.cd.begin(); i != v.cd.end(); ++i) { - if (!cd_ids.contains(i.value().name())) continue; - //piCout << i.key() << k[i.key()].name() << i.value().name(); - if (cd[cd_ids[i.value().name()]].index() != i.key()) - return false; - } - PIMap::iterator j; - for (j = v.s.begin(); j != v.s.end(); ++j) { - if (!s.contains(j.key())) continue; - if (!s[j.key()].isSameStructure(j.value())) - return false; - } - return true; -} - - -void CDSection::prepareCalculate() { - PIMap::iterator i; - for (i = cd.begin(); i != cd.end(); ++i) { - i.value().parent = this; - i.value().calculated = false; - } - PIMap::iterator j; - for (j = s.begin(); j != s.end(); ++j) - j.value().prepareCalculate(); -} - - -void CDSection::calculateRecursive(PIEvaluator * e) { - PIMap::iterator i; - for (i = cd.begin(); i != cd.end(); ++i) - i.value().calculate(e); - PIMap::iterator j; - for (j = s.begin(); j != s.end(); ++j) - j.value().calculateRecursive(e); -} - - -void CDSection::setSelectedX(bool yes) { - PIMap::iterator i; - for (i = cd.begin(); i != cd.end(); ++i) - i.value().x_enabled = yes; - PIMap::iterator j; - for (j = s.begin(); j != s.end(); ++j) - j.value().setSelectedX(yes); -} - - -PIVector > CDSection::collectX() const { - PIVector > ret; - PIMap::const_iterator i; - for (i = cd.begin(); i != cd.end(); ++i) { - if (i.value().x_enabled) - ret << i.value().path(); - } - PIMap::const_iterator j; - for (j = s.constBegin(); j != s.constEnd(); ++j) - ret << j.value().collectX(); - return ret; -} - - -void CDSection::makePath(PIDeque p) { - PIDeque tp; - PIMap::iterator i; - for (i = cd.begin(); i != cd.end(); ++i) { - tp = p; - tp << i.key(); - i.value().path_ = tp; - //piCout << "path for" << i.value().name() << tp; - } - PIMap::iterator j; - for (j = s.begin(); j != s.end(); ++j) { - tp = p; - tp << j.key(); - j.value().makePath(tp); - } -} - - -PIVector CDSection::children(bool recursive) const { - PIVector ret; - PIMap::const_iterator i; - for (i = cd.begin(); i != cd.end(); ++i) - ret << const_cast(&(i.value())); - if (!recursive) return ret; - PIMap::const_iterator j; - for (j = s.constBegin(); j != s.constEnd(); ++j) - ret << j.value().children(true); - return ret; -} - - -PIVariantTypes::Enum CDSection::enumValues() const { - PIVariantTypes::Enum ret; - PIMap::const_iterator i; - for (i = cd.constBegin(); i != cd.constEnd(); ++i) - ret << PIVariantTypes::Enumerator(i.key(), i.value().name()); - return ret; -} - - diff --git a/test/cd_utils/cdutils_types.h b/test/cd_utils/cdutils_types.h deleted file mode 100644 index 676020c..0000000 --- a/test/cd_utils/cdutils_types.h +++ /dev/null @@ -1,173 +0,0 @@ -#ifndef CDUTILS_TYPES_H -#define CDUTILS_TYPES_H - -#include "pistring.h" -#include "pimap.h" -#include "pivariant.h" - -class PIIODevice; -class PIEvaluator; -class CD_Pult; -class CDItem; -class CDItemModel; - -namespace CDUtils { - -class CDSection; - -enum UpdateMode { - SaveByIndex = 0x01, - SaveByName = 0x02, - Merge = 0x04 -}; - -enum MessageType { - Log = 1, - MessageBox, -}; - -typedef PIFlags UpdateModeFlags; - -class CDType { - friend class CDSection; - friend class CDCore; - friend class Interface; - friend class XInterface; -public: - enum cdT {cdNull, cdK, cdX, cdC, cdM}; - enum XMode {X_Current, X_All_Avg}; - - CDType(); - CDType(int i, const PIString & n, const PIString & t, const PIString & v, const PIString & f, const PIString & c, cdT cd_t); - - CDType & operator =(double x); - int index() const {return index_;} - PIString name() const {return name_;} - PIString type() const; - PIString value() const; - PIVariant variantValue() const; - PIString formula() const {return formula_;} - PIString comment() const {return comment_;} - double toDouble() const {return value_d;} - int toInt() const {return value_i;} - bool toBool() const {return value_b;} - cdT cd_type() const {return cd_type_;} - void setValue(const PIString & value_); - void setVariantValue(const PIVariant & value_); - void setFormula(const PIString & formula); - void setComment(const PIString & comment) {comment_ = comment;} - operator double() const {return value_d;} - const PIVariantTypes::Enum & enumValues() const {return enum_values;} - void setEnumValues(const PIVariantTypes::Enum & ev) {enum_values = ev;} - const PIString & errorString() const {return error_;} - PIDeque path() const {return path_;} - PIStringList pathString() const; - - void setXMode(XMode mode) {mode_ = mode;} - void setAvg(int avg) {avg_size = avg;} - XMode xmode() const {return mode_;} - XMode xmode_rec() const {return rmode_;} - int avg() const {return avg_size;} - bool isSelectedX() const {return x_enabled;} - void readX(PIByteArray & ba); - void writeX(PIByteArray & ba); - - PIVector history; - -protected: - bool calculate(PIEvaluator * e, PIVector stack = PIVector()); - PIVariantTypes::Enum parseEnumComment(PIString c); - cdT cd_type_; - int index_; - PIString name_, type_; - PIString value_s, formula_, comment_, error_; - PIVariantTypes::Enum enum_values; - CDSection * parent; - PIDeque path_; - double value_d; - int value_i; - bool value_b, calculated, x_enabled; - PIVector avg_h; - int avg_size; - XMode mode_, rmode_; -}; - - -class CDSection { - friend class CDCore; - friend class Interface; - friend class XInterface; - friend class ::CD_Pult; - friend class ::CDItem; - friend class ::CDItemModel; -public: - - CDSection(CDType::cdT type_ = CDType::cdNull); - - bool test(int v) {return cd.value(v).toBool();} -// CDType & operator [](int v) {if (!k.contains(v)) k[v].index_ = v; return k[v];} - CDType & operator [](int v) {return cd[v];} - const CDType operator [](int v) const {return cd[v];} - CDType & operator [](const PIString & name_) {return getByName(name_);} - const CDType operator [](const PIString & name_) const {return const_cast(this)->getByName(name_);} - CDType & operator [](const PIDeque & path_) {return getByPath(path_);} - const CDType operator [](const PIDeque & path_) const {return const_cast(this)->getByPath(path_);} - CDSection & section(int v); - const CDSection section(int v) const; - - bool isEmpty() const {return cd.isEmpty() && s.isEmpty();} - bool exists(PIDeque path) const; - int count(bool recursive = true) const; - int sectionsCount() const; - PIVector indexes() const {return cd.keys();} - PIStringList index_names() const; - void calculate(); - void makePath(PIDeque p = PIDeque()); - PIVector children(bool recursive = true) const; - PIVariantTypes::Enum enumValues() const; - - PIString name; - PIString alias; - -protected: - CDSection(PIMap k_, PIMap s_) { - cd = k_; - s = s_; - } - CDType & getByName(const PIString & name_); - CDType & getByPath(const PIDeque & path_); - void write(PIIODevice * d, const PIString & prefix = PIString()); - void read(const void * ep); - void update(CDSection & v, UpdateModeFlags mode = SaveByName); - bool isSameStructure(CDSection & v); - void prepareCalculate(); - void calculateRecursive(PIEvaluator * e); - void setSelectedX(bool yes); - PIVector > collectX() const; - - PIMap cd; - mutable PIMap s; - CDType null; - CDType::cdT cd_type_; -}; - -} - - -inline PICout operator <<(PICout s, const CDUtils::CDType & v) { - s.space(); - s.setControl(0, true); - switch (v.cd_type()) { - case CDUtils::CDType::cdK : s << "K["; break; - case CDUtils::CDType::cdX : s << "X["; break; - case CDUtils::CDType::cdC : s << "C["; break; - case CDUtils::CDType::cdM : s << "M["; break; - default : s << "Null["; break; - } - s << v.name() << "(" << v.index() << ")] = " << v.value(); - s.restoreControl(); - return s; -} - - -#endif // CDUTILS_TYPES_H diff --git a/test/cd_utils/cdutils_x.cpp b/test/cd_utils/cdutils_x.cpp deleted file mode 100644 index 2b2d24a..0000000 --- a/test/cd_utils/cdutils_x.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "cdutils_x.h" -#include "cdutils_core.h" - -using namespace CDUtils; - -XInterface X; - - -XInterface::XInterface(): Interface(CDType::cdX) { - CONNECTU(core, X_ReceivedX, this, receivedX); -} - - -void XInterface::setEnabled(const CDType & x, bool en) { - core->x_mutex.lock(); - CDType & t((*s)[x.path()]); - if (t.cd_type() != CDType::cdX) { - core->x_mutex.unlock(); - return; - } - t.x_enabled = en; - //piCout << t << "x_enabled" << en; - core->need_rebuild_x = true; - core->x_mutex.unlock(); -} - - -PIVector > XInterface::enabledList() const { - return CDCore::instance()->x_selected; -} - - -void XInterface::setEnabledList(const PIVector > & l) { - CDCore::instance()->x_selected = l; -} - - -void XInterface::lock() { - CDCore::instance()->x_mutex.lock(); -} - - -void XInterface::unlock() { - CDCore::instance()->x_mutex.unlock(); -} - - -void XInterface::start(double freq) { - core->startX(freq); -} - - -void XInterface::stop() { - core->stopX(); -} diff --git a/test/cd_utils/cdutils_x.h b/test/cd_utils/cdutils_x.h deleted file mode 100644 index bbfc56a..0000000 --- a/test/cd_utils/cdutils_x.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef CDUTILS_X_H -#define CDUTILS_X_H - -#include "cdutils_interface.h" - - -namespace CDUtils { - - -class XInterface: public Interface -{ - PIOBJECT_SUBCLASS(XInterface, Interface) -public: - XInterface(); - - EVENT1(keepNamesRequest, bool*, xn) - EVENT1(receivedX, PIVector >, pathes) - - void enable(const CDType & x) {setEnabled(x, true);} - void disable(const CDType & x) {setEnabled(x, false);} - void setEnabled(const CDType & x, bool en); - void setDisabled(const CDType & x, bool dis) {setEnabled(x, !dis);} - PIVector > enabledList() const; - void setEnabledList(const PIVector > & l); - void lock(); - void unlock(); - - void start(double freq = 20.); - void stop(); - -}; - -} - -extern CDUtils::XInterface X; - -#endif // CDUTILS_X_H diff --git a/test/cd_utils/cdutilstest.cpp b/test/cd_utils/cdutilstest.cpp deleted file mode 100644 index ff35970..0000000 --- a/test/cd_utils/cdutilstest.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "cdutils_k.h" -#include "cdutils_x.h" -#include "cdutils_c.h" -#include "cdutils_m.h" -#include "cdutils_core.h" -#include "cdtest.h" -#include "pip.h" -#include "k_description.h" - -using namespace CDUtils; - -class Core : public PIObject -{ - PIOBJECT(Core) - public: - Core() { - CDCore::instance()->initApp(); -// piCout << "testCore"; - CONNECTU(&timer, tickEvent, this, timerDone); - CONNECTU(&X, received, this, xrecv); - CONNECTU(&C, received, this, crecv); - t = 0.; - } - - void load() { - rf.open("k.dat", PIIODevice::ReadWrite); - K.read(&rf); - rf.close(); - } - - void save() { - rf.open("k_out.txt", PIIODevice::ReadWrite); - rf.resize(0); - K.write(&rf); - rf.close(); -// rf.open("k_out.txt", PIIODevice::ReadWrite); -// K.read(&rf); -// rf.close(); -// rf.open("k_out2.txt", PIIODevice::ReadWrite); -// rf.resize(0); -// K.write(&rf); -// rf.close(); -// rf.open("k_out2.txt", PIIODevice::ReadWrite); -// K.read(&rf); -// rf.close(); -// rf.open("k_out3.txt", PIIODevice::ReadWrite); -// rf.resize(0); -// K.write(&rf); -// rf.close(); - } - - void test() { - X.lock(); - X[KD::Frequency] = 100; - X.section(KD::Spectrometer)[KD::Temperature_default] = sin(t); - t += 0.01; - X.unlock(); - /*piCout << "count" << K.count(); - piCout << K[First]; - piCout << K[Second];*/ - } - - EVENT_HANDLER(void, ksend) {piCout << "sended k";} - EVENT_HANDLER(void, crecv) { - piCout << "received c"; - C.connect(C.section(KD::Logs).section(KD::Spec).section(KD::Formats)[KD::Binary], this, HANDLER(cmd)); - C.autoConnect(this); - } - EVENT_HANDLER(void, xrecv) { - piCout << "received x"; - if (!timer.isRunning()) timer.start(10); - X.start(); - } - EVENT_HANDLER(void, timerDone) {test();} - EVENT_HANDLER(void, cmd) {piCout << "command cmd";} - EVENT_HANDLER(void, c_Pause) { - piCout << "command pause"; - M[KD::Main] << "rec command" << C[KD::Pause]; - M.messageBox(M.root()[KD::Core], "init successfull"); - } - EVENT_HANDLER(void, c_Spectrometer_Connection) {piCout << "command spec_conn";} - -private: - PIFile rf; - PITimer timer; - double t; -}; - - -int main(int argc, char *argv[]) { - X.start(); - piSleep(1); - //CDCore::instance()->destroy(); - piCout << "DELETED"; - return 0; -} - diff --git a/test/cd_utils/k_description.h b/test/cd_utils/k_description.h deleted file mode 100644 index 09d53ce..0000000 --- a/test/cd_utils/k_description.h +++ /dev/null @@ -1,147 +0,0 @@ -#ifndef K_DESCRIPTION_H -#define K_DESCRIPTION_H - -namespace KD { - -enum Sections { - Startup, - Spectrometer, - Switch, - Formats, - Logs, - Detector, - CoreOutput, -}; - -enum LogFormat { - Text, //b text - Binary, //b binary -}; - -enum LogType { - Data, //b write data logs - Spec, //b write spectrogram logs - ARINC, //b ARINC -}; - -enum KLogConfig { - // LogFormat = Formats - StartupWrite, //b - ApplyBinaryLogHeader, //b Apply settings under ID = 255 for binary log - MaximumWriteFrequency, //f Maximum frequency for log in Hz, or 0 for unlimited -}; - -enum SwitchType { - BaySpec, - DiCon, -}; - -enum SpectrometerConnection { - TCP, - USB, -}; - -enum PeakSearchMode { - Left, - Max, - Right, -}; - -enum CoreMode { - ModeSpectrometer, - ModePlayer, - ModePeaks, -}; - -enum KSpectrometer { - Connection, //e ${SpectrometerConnection} - Temperature_compensation, //b Use temperature sensor or default temperature witout compensation - Temperature_default, //f Default temperature using if compensation disabled -}; - -enum KSwitch { - Enabled, //b 0 or 1 Use optical switch or not - Wait, //n Delay after switching channel, ms - Autoscan, //e {0 - scan with our forces, 1 - SDK autoscan} - Autoscan_offset, //n Offset for SDK autoscan - Type, //e ${SwitchType} -}; - -enum KDetector { - Threshold_Min, //f - Threshold_Max, //f - SideSize, //f - SideOffset, //f - PeaksSearch, //e ${PeakSearchMode} -}; - -enum KCoreOutput { - SendSpectrum, //b Send spectrum data or empty vector - SendOnlyCurrentValue, //b Send current values or all stored in 20Hz -}; - -enum CoreOutputChannel { - GUI, - SecGUI, - ThirdGUI, -}; - -enum KDescription { - // KSpectrometer = Spectrometer - // KSwitch = Switch - // KDetector = Detector - // KCoreOutput[CoreOutputChannel] = CoreOutput - // KLogConfig[LogType] = Logs - Gratings_history, //n Gratings peak values history, count - Amplitude_history_size, //n Count of history values to calculate sensors amplitude - Fourier_enabled, //b Global fourier enable flag - Fourier_size, //n Size of fourier window, in counts - Fourier_YScale, //f scale for fourier amplitude - Fourier_Max_or_Density, //n 0 - Maximum in fourier window, 1 - Density of fourier window - Mode, //e ${CoreMode} Work mode - SynchronizationEnabled, //b When enabled, start logs and reset time when sync signal received - SynchronizationMode, //e {0 - disabled, 1 - new file, 2 - column in log} - LambdasAutoReset, //b Set lambdas_0 to grating values on first data receive - Gauss_size, //n - //Peak_max_offset, //f in pixels - //Peak_LF_coeff, //f 1. - no filtering - GratingOverloadMax, //n - GratingOverloadMin, //n - SendLED, //b Send to LED Arduino serial port current state - SynchronizationClearValues, //b clear gratings and sensors values and history on sync - PeaksModeFrequency, //f - PeaksModeAdditionNm_1, //f Addition nm to peaks in ModePeaks, channel 1 - PeaksModeAdditionNm_2, //f Addition nm to peaks in ModePeaks, channel 2 - PeaksModeAdditionNm_3, //f Addition nm to peaks in ModePeaks, channel 3 - PeaksModeAdditionNm_4, //f Addition nm to peaks in ModePeaks, channel 4 -}; - -enum XDescription { - // KSpectrometer = Spectrometer - // KSwitch = Switch - // KDetector = Detector - // KCoreOutput[CoreOutputChannel] = CoreOutput - // KLogConfig[LogType] = Logs - State, //b - Frequency, //n cur freq - //Fourier_enabled, //b Global fourier enable flag -}; - -enum CDescription { - // KSpectrometer = Spectrometer - // KCoreOutput[CoreOutputChannel] = CoreOutput - // KLogConfig[LogType] = Logs - Halt, //b - Reboot, //n cur freq - Pause, //b Global fourier enable flag -}; - -enum MDescription { - Main, //b - Core, //s - Warnings, //b Global fourier enable flag -}; - -} - -#endif // K_DESCRIPTION_H diff --git a/test/kx_utils/CMakeLists.txt b/test/kx_utils/CMakeLists.txt deleted file mode 100644 index cf3a787..0000000 --- a/test/kx_utils/CMakeLists.txt +++ /dev/null @@ -1,76 +0,0 @@ -project(kx_utils) -cmake_minimum_required(VERSION 2.6) -if (POLICY CMP0017) - cmake_policy(SET CMP0017 NEW) -endif() -if (NOT LIBPROJECT) - find_package(PIP REQUIRED) -endif () -if (MINGW) - find_package(MinGW REQUIRED) -endif() -include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES}) -set(KX_PULT_NAME "kx_pult") -option(KX_PULT "Build ${KX_PULT_NAME}" 1) -option(LIB "System install" 1) -option(DEBUG "Build with -g3" 0) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall") -if (DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") -endif() -set(CPPS_UTILS "kx_coeffs.cpp" "piprotocol.cpp") -set(HDRS_UTILS "kx_coeffs.h" "kx_protocol_x.h" "kx_protocol_c.h" "piprotocol.h") -if (DEFINED ENV{QNX_HOST}) - add_library(${PROJECT_NAME} STATIC ${CPPS_UTILS}) -else() - add_library(${PROJECT_NAME} SHARED ${CPPS_UTILS}) -endif() -target_link_libraries(${PROJECT_NAME} ${PIP_LIBRARY}) -message(STATUS "Building ${PROJECT_NAME}") -if (NOT DEFINED ENV{QNX_HOST}) - if (KX_PULT) - find_package(Qt4 REQUIRED) - find_package(QAD REQUIRED) - find_package(OpenGL REQUIRED) - include_directories(${QT_INCLUDES} ${QAD_INCLUDES}) - set(CPPS "kx_pult.cpp" "kx_pult.h" "kx_pult.ui" "main_kx_pult.cpp") - set(MOCS "kx_pult.h") - file(GLOB UIS "*.ui") - file(GLOB RES "*.qrc") - qt4_wrap_cpp(CMOCS ${MOCS} OPTIONS -nw) - qt4_wrap_ui(CUIS ${UIS}) - qt4_add_resources(RESS ${RES}) - add_executable(${KX_PULT_NAME} WIN32 ${CPPS} ${CMOCS} ${CUIS} ${RESS} ${MOCS}) - set(LIBS ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${OPENGL_LIBRARIES} ${PIP_LIBRARY} qad_graphic4 qad_utils4 qad_widgets4) - target_link_libraries(${KX_PULT_NAME} ${LIBS} ${PROJECT_NAME}) - endif() -endif() -if (LIB) - if (WIN32) - set(CMAKE_INSTALL_PREFIX ${MINGW_DIR}) - install(FILES ${HDRS_UTILS} DESTINATION ${MINGW_INCLUDE}) - install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) - install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - else() - if(APPLE) - set(CMAKE_INSTALL_PREFIX /usr/local) - else() - if (DEFINED ANDROID_PLATFORM) - set(CMAKE_INSTALL_PREFIX ${ANDROID_SYSTEM_LIBRARY_PATH}/usr) - else() - set(CMAKE_INSTALL_PREFIX /usr) - endif() - endif() - install(FILES ${HDRS_UTILS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include) - install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - endif() - message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") -else() - install(TARGETS ${PROJECT_NAME} DESTINATION bin) - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") -endif() -if (NOT DEFINED ENV{QNX_HOST}) - if (KX_PULT) - install(TARGETS ${KX_PULT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) - endif() -endif() diff --git a/test/kx_utils/clean b/test/kx_utils/clean deleted file mode 100644 index e1d5feb..0000000 --- a/test/kx_utils/clean +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/bash -VERBOSE=1 make clean -rm -rvf CMakeFiles -rm -vf CMakeCache.txt Makefile cmake_install.cmake install_manifest.txt *.user* *~ *cxx moc_* ui_* qrc_* *.o diff --git a/test/kx_utils/clean.bat b/test/kx_utils/clean.bat deleted file mode 100644 index 3a657d9..0000000 --- a/test/kx_utils/clean.bat +++ /dev/null @@ -1,4 +0,0 @@ -#make clean -del /q /f /s CMakeFiles -rmdir /q /s CMakeFiles -del /q /f CMakeCache.txt Makefile cmake_install.cmake install_manifest.txt *.user* *~ *cxx moc_* ui_* qrc_* *.o *.exe *.a *.dll *.lib core *.qrc.depends diff --git a/test/kx_utils/icons/accessories-calculator.png b/test/kx_utils/icons/accessories-calculator.png deleted file mode 100644 index 1b1dd1e44dbf286667d71b20d0eb1a42b29a23ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1525 zcmYk6c~DbV7{yaE%2KRAt*F>)X?5I+3rrA@fEt7#U?4#VW#0r8AtnkVA_WY%v5G(@ zVG#%fOaj>m1TicjVF`pK?8q)_!ai!%La*)A>6v%mz4v?XkMExId+!m-!Fq?rJ`D&2 zvIA*@a02teFGCFq?ueqtVlYAR7mye=HMQZ1E8}3R9&UrhgX*0xF^BD|Ad3ia9!vV$8(o#B|{^G@pqM{-ymHPbo^Q^3_?Cfk3i9{xo zDHKX>Zf;sy+S8{`{rvo5Vq&_xyAu);Qc_Zql9G-bIdb~+=`&}}7#SJCU@&828X6i#xQ@f&ZsBowJf1)x+y=Ufi;O1RyLT@dC^j?M#OAJ_{FXVexlnM`1NMMVXR#bN^q zOW5_r?1mB$1gDY46_s*DWjvrpI!{yzV&aRKd{KE7kce3Y7ER!)s1nnwfy5QnVwON4 z0Lj)!xUYbkxv!cl0Ry!yd=P6LkhHqKz8-|$*x2|l6@U{!1z-kH0pI~F0YU&O|KbFa z?dj=}%jE#SzP`Tx{{Df1fx*GSp`oGS;o*^ykvDJNjE;_ujg5_uk55cYOioTtO-)Tt zPrrTpc4lT~c6N4dZf<^leqmu@adAi%?mDSbNwY9bN_4SR74W-8^ zUw|^4;N*aYs6f>;H23J~8yLb&&CaD2l+Xd2z#=xA!{Ksyynk8+2uuHK7W6CY?C$Md z`TTkF%6;8*@EM&zBF5(xI>F(P2ih z--}m+8hSiTh(6E0+ooz3#Z-1>2om{hjXkTH_0`W}#3%|nypRz-<#yb?nzSpobdeEG z!XIXwVsX4Bs1ut0kOL=Gl6EXs+_5Xy+b^K2*pp{^KH=6|%q_|~gR(IgIe)-crqXRq#Khf#;N-DQsWz-g@9p$5eA=I5N;A^qe@%0&ZJ6XD59E;MT5NA350 zY1`D=S_K-~$BfkJM>l7st4kk84bPwl;JEWMnL%`gTlq8&M53J0jTyPB%um%D Q`|?*sS~(z?7rf*C28+}ws{jB1 diff --git a/test/kx_utils/icons/alpha.png b/test/kx_utils/icons/alpha.png deleted file mode 100644 index 543566938cf5681db007530efc6b64c4ae67c096..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPaBR`)C--V~^b^?X8JzX3_G|ngA*^(*DZ1&*w>+aAw xosBLAs~RN^{P_RBevQy<^L#m8)nAzm45u$~80FZyPX%gY@O1TaS?83{1ONw+E@}V( diff --git a/test/kx_utils/icons/application-exit.png b/test/kx_utils/icons/application-exit.png deleted file mode 100644 index ed5f8b2515e72608d2de9d45fb80ff481926066e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmV-!1d;oRP)(xC=n00006VoOIv0RI600RN!9r;`8x1N%ut zK~#9!wUS?G990y?zx!uqcQ)CO3Qb9*q)kbepkNXsL>fp%(uUwejD?y8p{)=!q9{uI zgNUFMD`JgLd5}{2)TjDbX(&h)iK5opBqla%!fsPV$ZoQ`*`3+BGvk@tY+BYL;-3Q_ zbGUQA-}(0J;J>IK2tw^3)mP3K37K=}c6+n4r`M;ZdQ>*cgNlLlcl&$x?F+W`_y4@Q zyxhNgd^{yVZgTFam#l;R5QCNuU}|&|FIk9vK+Wf7}ljFCx0I0B)M_DpyEQn_xvs z?A=Q~uEAY2z;11YDwXs*lI}}%*4fvmp>$V!D(@6yRp3GaWzxc#GqBTX3h8TOTW>GW z*$HJAwfv3_Bzk(_c^;HfD5X-`LtYKmiMLikQ{7@wgTlHxF@gKW#vq%T^x3ZNZrqey z_l*xe6hd{cR#q@KIf=k^p*fBN@6N=&lzJ8Aiq_UJcj|qp8>tYY(>JttV*3LfVM;B3 zC5?rTKY+@u!KI`;5`mk~p={fCBo-WNi;EDJ1tVr5Y8ikJBu~AAJo`vlHhy9SSvSW$s^eS~DeuZ?2*i_g*i_>&r1 zfnT}w8N{XYaEdNU#3_a$6~JQA>QxAU0mO$XJP1_;ck)<&>?w2%4eOMoE%>g1C*T}= z1y+rLs0l<2@=5YbUJd5dF-Qrmh-JbbeGLyEAA=A=e|mK{=TQIKd^kYE6N4iNM&E=< zYcmLJgkUoS<2E=DoVWxI6H^51#kUFi93)NQoD*~w{KF$KCq~eaStO95b^qa`sD1ea z4D!%?$Ui4$y5pqA*WX3=v1dY~2FFrALY+K}7`IVtI2yivHHm063ez;ve&lJ~`^HJ_ z6%qtS6?pTYxn++|sdfE(WZyaj=GtK4Y!XuroD(!CJ&Q;rqVF{|H{XJVoJwNa84C=q z!F~Wtj}9aM&1KkEzrylMgK$eW$_gktK%oRUWx%x^{5n1aH8YKkZ@&Vh`t_^VZ(hB5^BM?%e;s-|%XY&(r4?7hUI(^vEK0iGCUi(hX!_KS+oi5OKgxHz zA69$ZW4tf^{_XSTlU;gzZ-0M(W6qE6i5CrBi@r}hc+vLcMqW2}v!;*_J1>9yoA>)% zEL-F^Gqp+Y`a>j2;zWCbZq7Jc#>i0j?orm>xb3;Kd6?(_-hOOnYnf+*n10B@hF1?t zcP9DRyS^8B@iXV_(-#lCcLvRfabvg>!T3OmA@1LvR)M6$4Iy5}uIEkG&tX|ssg*nH z-fwTdW45vkkBbgR&E97hx^>OUGd@?Fiun{LCS0v4v#L+yT(;Itxi@}}u8)}J(puS& z>}#K5Ha<;F*gRA5%Bi{(8QC@0b)?N=uhd;Ax?3qG#KU}Q?_;Gm`bs_X4Xy>dH0}EI zWU0SL+$lSCA(L5`f_M07J_$3FV7s4iT6msd-ON+RnPd$L7kKX!4SHE|!KtX>Wa ztAg8eSIBGBy>{SfiF@S`^GlNR5aZKkIY+({yO$0;8T-Fw{HxR3zM&*1T%zW9UCM(0 z0dk6ue{Xx~5Ieyx;ro*L78-lGYMj0@oa3s0G~tWZ3s?Kbo7;EP*F^lzP`I})=IQ&^ z>x|v3`FWE#_x-&SMGn4WLZx M>FVdQ&MBb@0Gy;gf&c&j diff --git a/test/kx_utils/icons/configure.png b/test/kx_utils/icons/configure.png deleted file mode 100644 index 5ce478b1adfefacc19d35d61e88a6c02ebe97454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L02{9W02{9XUK)`c00007bV*G`2iXAx z12+)F5m%`I00K=(L_t(|+KrN3NRx3C#*f?DM%ip+yqb-i;h^3{#n{|Ose_>C#@NE# z7GW2nLRnqZRk>l z!E^IGoWld>6hQ%)Ob;ZrwY8lTqK?F3D=U#m#6CX$#%MA3twKK3jp{=S3-bwzqR{g1 zWn_6|PHT0V4^ml84HUxVD;?&gUq4YYxrThci3GMzVQs_8wx>aE7+A7!I1H&&3b@>z z8%!qi9rhAf2rzWW0VzB{sMRWCC={ZTLLqRr7qhDNRaNlz?0&5`==X~y;%hk@XtmlC z)z#Ho0)bh$({nG|qLN>Ej>p>@6bJ+}b93`2b1k5YM55;Lw?1I9w}RI{3DeUbfmgwU zk`fL#FdNvgKDCcf%4E{WJ?36(INk6~Szl-8a=AAFK#9fNG~C_Y#rJsJGrheQ zBv;6hcfyN?hOCn~Qef@KUgduny7b2#PFv(s$3;Yx5y)(Lh@2zNPdMU39%!A08&{uL z2UAU&vxvjtpqADa^wRZWsl2>Q3i-Hgymh^|--2{HEh0%0sm`d7%`u#mNW_}#x8;FB z5JX#iH3q4425MvyP%7)Gf&RxmQ&aDUagOpXV6s?qkSO9GJthSE-4*}<0=h{= zK~#9!WzSn^)dc{@@z4K%&e_h+uIFq=%jRlhi`pDHEu;s75`r%D5=B@K77|LMhcYtB zu_)9aeCwfntVjt2>7mQOAXr+9^^#1|9GtD`ZtZrqbGCB}A8nt9-{Tj40h@h9LxO!V z9temQ$rQNw4io<8j=*th8yKhw!#7%Y@2*Yv^ax`yi{s-m!^7olE_Z&Nw~vw86c}Jj z6W_OP-`>~P->3c$VnnTx?4w_de8rShOxK5(ZQP zN|Z|!OC5~hy?t0~b6;C=n z)zxm_N=G8;IHwSVh$J|ijD%uMd4=Yrnr+*49Xe*Zv@SC@uH(%k>N`8dd%G=7PDs_) zOYq`*G)E4Q?%sk^EO23`--RVK`hNN^?k3WC<(delcw71NvYRrn(QjIEF!*z;P z2uhTT6iX}?Q+l6#4nX_Phs8U3RT`;kCQ?HTF$&>1CPG%%bL18opHJB{Fr;&U2HSaeDWsC5=5FFCVs!)oxmmJTNUXBK&;g!bWF-JV!{;2kpSPBY zt%j7V5fT=NZ_tEgE_}eDQKnIe0AT%Feu*)BAN9$KbX`#*QJ}75wan!|7&yquoBWFk r1U3tiK&qRTdZHuDlvzL)B>?yjfS~`FyINaO00000NkvXXu0mjf;$wU` diff --git a/test/kx_utils/icons/document-export.png b/test/kx_utils/icons/document-export.png deleted file mode 100644 index 9e1b6a620cf19c87ece3788fc8bdd77378f38d74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1106 zcmZA0c}$aM90zcY4k#^cCy+%3Z11KLmq9rlV3?FqkgI75-4Meu$244-WT4|v4H&-uLJ3BkKgyXRcuzqa2T^vEi-mMqf+1ZcNlhdf+H7Y8qxVRWR1Ox<-$>fNL zh!h$vJ3AXx{^jB6NhA`Tot-fl%zw52uXsG(6^9E83k?YkVlvYR1OkafVx%(i3-j{| z@+vCJW@ct!7~TdDLI zUtd4)_%V;i8yFZ62n2(JgHHwrhlYlRhlfW-o&lqyqtAhH8=+7*F)=YYIXN};5&)-6 zi(i4$XJ%1zb0U#QEE2r}=I0lHl{bJy@>VL9NCBBlwk};?m#x1;ZJ;(cH#asm<#PF^ zE#zBUav0tMKq?e4tbi3LB}#=tR4N2f+1f=AkZQH9cQs0*(WuoRG@x@dw6=-ZW@4j9 z?V=2*y*-23x(67IMuP!_30x+V*=)90EMRE&T-MgW2MH`;&{Dx_k8*ItV4S=U1O^2k z2|pS`jf*cjTUJ?F$zrz&w|DeLBiL#~Ts#8yI^YvxDQQ0~wlwQ2MA63|Le<0*l4p(z~?&nT5DT?HiBt$z16@z{{+d?v{PT_`BOOZH&! z;u-zOsZ;8rUW9Tz*U)gMb?QdBrSP^8>n^C-J<;rWFYRG|Smq52Hc?jHe40C z(|Axe{%OV6vslbQ=^qkkwmtY}IkRQ_X*x}nwa+DgEORW9A5zR>{^&>%f9Rtu>$U7n zb{M~Svp+ZYNSM1bG$1E1bmX$)6GZQ*`Z9!a^zw;MiQJ?F-*HLabu zC+K_q$XLhwndJ2Y*7WXXyxu>fFnS^g8awvugZ)kJ>5lWzY8$=2H!C#AkN4aO@*64` z`IeKjKvx-DLTWEgpH?jk%*dR$^zzlvOSy-W_GGP|{iNg^r)M4=?ZUaiY< zD2TpR*02w5Qe}Krf}OzKx=I=dPOjF^x`*3efw`9s7k`;`zgA+#(lDp#g?|cKeP3g% zYJGkB%*xg7o<>c~Hy4+e@y6{F?edvL*{D@Y&iNp*`N0#S!S<6UP-(HfF*!B=0F}aQ A^#A|> diff --git a/test/kx_utils/icons/document-import.png b/test/kx_utils/icons/document-import.png deleted file mode 100644 index 97e683ae5523e3f377a6a73be7f66d480f029ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1017 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 diff --git a/test/kx_utils/icons/document-save-.png b/test/kx_utils/icons/document-save-.png deleted file mode 100644 index 7fa489c0fe615ddfa1d1f8dae1de37c8ed858dcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1263 zcmVM8$}SF`)$W|Vz+h^3K1d&siN<^An_F5_&0!O z)Rzj0@&v6^_10 zg~*Nh4_Qv0^%;Z#{w#!k|1X#ZQ;;@Dp6+HDfFwzvR;z(y+w7a5d4<3CPl}Rf7-tVSvZMG^9)A0BAQf8V&LJ zVG9{>Z3|Y_U^M`ViOHx#!ZB013K_`6*9ZV_uqB#YC@zDZ2d0D?f6(P|tQ3#a@s(2L z01}P3@xh-TA45^onUU7wF%q&o*g97OmE=lL4uFOcKDoWQ{=CRE|L5o=qZ!D84eqm0 z(TY!}fpk-G0x@+f4Xgl&tX`6`UHUODLTUZqH4rBXBHE6TT3rHJy|_6BfHj~JeTEX? z(^0ITcRZGj$IvMk;Sv)L>kUjP&dLt6R- zyYa=Bbgatf8{D{glU698=svQ`7Y~CniEsL{qWLobmqjQA_hgE!!xHWaYvFXB9A-fFUE*Y87hrIt&Mc0u2-(v~0T& zKomz11c4+VD@>5(9wI1v4m741bguyr;G&{9J{<$#x*U9p55;jL|g$=_H zfzf=j5U4rdp6zxU`u#o_*fcf*z=O+|E`3m`*1o|~wbT1m=)U#UEdfQHwk8G7iBS9~ z3|T7zz%osq?{>Q^UTjrN8wdl&ql1G#H#RoD-hSocXL!RJi!cf~kv-Q!YQ;po(4Rhx zD7a`UT{6*-j6*c%v3CUk-TC)uH2Mye-|{@~A`$TRl`GZ{4<78euIssuZ~ diff --git a/test/kx_utils/icons/document-save.png b/test/kx_utils/icons/document-save.png deleted file mode 100644 index 8072aea3268164eb2028a0cebfe44da82b4f4aca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)XvKK@k7Ytwo{YB(9F? z;2_0Ku;{F~yQsL?!9iy?1;;|c4%SjZ%{70TwwHKcBH=J-%EN&+{;d zhN(E7P<- zOhP?!y}wyJm`;b*`kqJvqBiX|nL~L2fd*Ux1d!eYF6Tbg5P<9ZC&&uF5~UDVJ~Kya z$B9GKW9yGCk1)gXRIvtRXipPk@<6(R{ z10;&Qkze=csdPHpgO1qUX}3Wtm&>>~JBMXkI4Be#D>XTZ+DDB(A$cT#*xhj)kQiey zO%sM;K-YE1@`TY9(UZv}-m29|6TcYK$LKUNox!$kO4I`&Fl}aA7Py>1;e44jn~%EA z#v7jv1002ovPDHLkV1jI` B^11*3 diff --git a/test/kx_utils/icons/edit-clear-.png b/test/kx_utils/icons/edit-clear-.png deleted file mode 100644 index 631ed4457342d9e6f224012c842463ef09bfb8c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2066 zcmV+t2<`WYP)x*e)JWac-SH#wQ-nR8CQ z??V9a&birHyP>V2D6Oi1xANEi_WvUA?O=O#N1Yt{FO}b!bpZ~OI%n`&{aCwN2zNS9 z<;}Xl^-CIRSECYcHRXZsglPS&3*5WjSf$N705{Jm`}F5o6%ZbYHS29I`~HkF7JAMW z9h!B4-ixPvn@;edOOyWUnB?HHSr-`S)M$I}4mtW`5AwSp2HFJOx?;+$L~N8m^(Bff|Ht{ui9&=7Wp`+_rHI)*!@x7XeD= zg~}9-Dj8ZUgp)(O_~DmAA;#H!Tty@*5nA)#^~VwVxSGK4al`P7qet=I3Kh7;_ETI< zB;HCO%6|(-!i#t%PmY*8D?9w+No*|EXCf&P-%sP>910ptM#xTIn~somDMGgf#@e37#LwL%m)+;BfE*HhU`HL`UPBN&7IH zg6{4`C^QS9zW%5{{3vSQbj`!CP&}f_#V1V+AD%?We#Y=5wo7uolKVr0G9HxaQBab3 z0OanQ{(ghzgunFh!TnU~RBp2vxHE={1r&sDgi`Tf5OexFeeU!2;}Zm~LTKlVM-b22 zw!bbv?p3!o4Vp_6K`ROdb#??Kc-o&XHZ-``>-`zNzI{9Hb#}%*B-cGX@YmcB+~@77 z|7Z@}RYn4;mp0bn;M;a;fJP2ssoG ziJo0{xZCbexXae|O~}~}-w6uBePm4i@xfS0;Q7<=83>RUMf%0={<8(KaJf7QE|eya z90W}U6Lcav$Pf9p>FZ=fB3IuDuTA)>g9E<0Wee_dalu_X-EhOaxwy@71{#^bp8BM12vn=r`+xhI4vboUDhwTr_v+mZ|YjpPBLS4Rh1s zc9(U-H_ge}aL!P_0R<138sp2Kufyp?BArP5qJSW5o1#oW1O2V`d*M|Y<+xh z;oR@;n;H&1FfhR1n3>=!uA6Zxkq{7xpA|?B+7ezZ^m~>OxdU2?BS9@q|v_3JGcuf()^)G z9t@gvI@F1opi1_$fOX49 zMb2w@HL~D8W;m=4-SOUnp$?kI@DHX&L(ho7GlcNOMq8|Q-GQ?#EErSpcEMId`2ja4 z1=qFzQV|C-BAuZvKO8RRv!VWIAk<{hq3Y-!(5BI#DK`kTS%FXxEOyFAZ|kN;vCvQu;@{m4DddIe+e>emV{RWNwbfY^-qQI%}MY zP$?OM5mLv}%ue!sw|hESb)U+hy_6i-0hi<)&`BAS4e5bX5@mcJXe$f>ozM@|nR}qK zBpeD7sIA2Tn|mr4&QCjH111t3t)Jw1+l%TXtk3ImLN+vrLzdUcg669QG-I))B{gB0 z<->lK{~LIj9zL}LIuUzGd758v5@%~~ZI(Zr6EonPoIP1DrcX9zFyMR+lg!-@+7wJs z6M^p1Fz7tKcQQAASBX|c7pQ#fJ7tbmqXoX7iECxS+Zv=S>sm3xLM^44snxVO`imI| z1V%Yam+n4dZ2Ywzo{Nz2o6%2ophgzo%gv^!w-4V@Z#_QvJ+GxFmd8k&x zVrryx$1|Bs%l7=p-?j?`hI;T@Jrk;Fv^i7uQqIB}8U6hRF=M$}#I(zfbx%%WZ&OwA zcRxKL@P1hq?=>QfcJHf~F`XL}jO7)%f%D!1Je{At0f9cGD^0o4CKZCfdHOw3C3tK~ w4tEYMH2CfEFY~e(IA|La%m4rY07*qoM6N<$f+Lgg_5c6? diff --git a/test/kx_utils/icons/edit-clear-locationbar-rtl.png b/test/kx_utils/icons/edit-clear-locationbar-rtl.png deleted file mode 100644 index 6c4b83b7ac6e451f461973dac0c9a6c53dedef25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*(*`Bv~l~6?FSDYJaY8Nv17;1UpRl|%9VTf?mc|? z@cHxSFJHcV_3G8zw{Jgu`0)Aj=PzHr{QC9l_wV0-{`@KR`o0Pn77`^ve!&d#@_Ksq z_8}pusXI=cy7Kht(+?kh{P_EqYvr0*Ks9qcT^vIsBJkEM|1so z>*;dxIy;s3ojI&$kq&AP_I<(sjrDEsaU~GX3SIsdMei7bh)})pLEh`3!Xi^UM4W+LIZr$zxaOz7mw|A28X|&gK2(h zZfSoyEkX7Ar7SOshe$kJ@wtDv=f<5!bjpH@N4L9nR{6W;bYuBbX#H42w#$q|FGoYkR7TQxAVVC~AgvlcDbQ{K}v zz)cqHtE#WH+tMnPL>x$^K&cL@=%%l{d{cK)X)1KPX3v;gl4lwwgdERi@@M$WfsL{? zP3)eLTi{~|fOrH9%Ru@V9LpV0qngA+;sn5whQ6+jjvrr!>i^mx(;;26*la$T(-0mV zM6EV|5;_BFz$$UjH5GQd1)8dx zW$%Zmk#1*hIjlV+=?;EPa9k=7g`$b#;sWMW{kp}nRc!428shS@9j29Ip{OZjyKMj{ zG9;eH^E^zu)Bdikvh?_!mu@q(n3*v73Z?HG|HJ$KtcH9J10IQl4im gAunrc0{^W1Pl-(m{G3O!W1aTUgGKN%6@}cL`d0sS5o>yped=IE{-7;x28@w z?{(Ng;8?o(vZal2UCV9SDn2q^kz14h;ArvQ8^O9iIQDs;w`*7+VDp{f_ZlWKjr z)#jWRvnDK(uc_Jn=1hKh7{h^v8aJ_m2#-3&dS~D8ALfP$ET*!d=Iaj$ESaLv%HXJJ zadX**`|pc8)DD~|l;Q1I%+aL4pv!&XZJDLtiIt|8wDsLQZsnLs95p=my!g*?kHg2f ze}skYh-*HqEXlpecGB}onN3VDlz0sp?)p^E4K+@`E$^}V!kg~`uY(tgCWzj2SkAUA zhv5~wSpvTuPll7r+MOC)9ESz0WW}p&`9(OEY-(cc;=5QH8+dok<}z*b-~0I2y#2;5 zm%ceYifxa*+WiUnz4IqbQQ=IBY~#^CEhHY#9paTJbKGK|^!~uRnp-kXG?@4ro-by5 zaqMZ<%Gv6Zf0wV?sdn1z0IR9imMNmDb$a0zwKG0V)~~O%Gci?|KU*m}BkiApw!tmN Y4DJ^lh1J@%z&K#=boFyt=akR{0F^SkGXMYp diff --git a/test/kx_utils/icons/edit-delete.png b/test/kx_utils/icons/edit-delete.png deleted file mode 100644 index 87cd0b0125d6193c16c59f25b88396493e885f6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*<;sHJ( zuK)l4Z(v|p!N9PVfuWs&p^JfGA_Kz=28KBd467IzAX4jDSb*GiKE6H%hCBv_Tn2_L z28Klp4AZo=>*d6nRHQFelpgl-Jed$XS6*hniPlkf`z7+iOXNkDC`v6+mRl+(v`kK5 zwTk$9b?ME9YMZs?_j%bL_HsDk<9sU2r$Je2`?nP^4n zy$lTd7#Q|j8XpwoI%I5o$k*ermDN#8qhmrm$Ax%K+S#3Uu|MtSb;ix@0t3SZA)d=& zVVA>0E~h43Ns7Cc5PLm2@wTwQZ4try!urld@myOUR3yfXZwfVuCELX$$gHBz;HAv3GxeOFfuao00U1?PcLu(fWV*& z*YDnY^6b^8FJFJbz;6)v0|bBn{{8pwYTmshp#IsOE{-7*lD!9A#hMrxSP$@P+)yej zFHd4mDu4d>{K5|<=XpdH-eIeeoFkI5#Mch*eE5E3q& zsDJ)QWe~HZu=JPqwHHm!J!tPMoAuVM<=A|yGuL0$MD)r}t=B23K4h_=$wxfq{j{s6 zvbJ;1RM`0b{&%I*Q{~<_^9mg*KC_8ox^*ST366Hw_&MDTLh{a=g|okJNlO7blfl!~ K&t;ucLK6VLNBNWh diff --git a/test/kx_utils/icons/edit-find-.png b/test/kx_utils/icons/edit-find-.png deleted file mode 100644 index 64a1e28d3afe98367cfe6e0dc06e617fd3045772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1631 zcmV-l2B7(gP)MNw`U7%Rx2bK8Bi(|P{(xd5FTJ76}M;B+{UX?H*-l_BDd$m@K* z;M=q`5flm)BogV($cTt9+2j_Jne%fHIyY=Yds`af4F3(o!_k*TbFVhQ(|~VO{~eZVwoZ78xQj3UAZcnMB6)-8nqf0 zs=dQz<5Z}eRl$)-O-Y5xXn@ORfj@T!@_b%;u0<|2X>H9sR)v(1h=_=74BhlP9mrCP zu&~I3b&CV&ZD~MndlRb5ixE2|7CH(@yBwNUHlks9Jyb*>DKYUTZA{;>E8V;M9W+xp zJXvneCp9?*W&;B^BgLZ9Y^+~aLow^ov$_H0g}E@(WW639ekg?MbX%iT!X`>YZbmFh zB|N<85TmKkigmSq)R*`m7YZO2iMcW?U9uGW_wIw1nsMydvHqy2sHLpr-J82{{QZ7z z&oCQ}&?@9`O8M{zqfxFEV3|*Yb+digzM=+=vvZJ^B4Aa!N86|Nv0f#IE0r8GqS0(g zM5{ds9lms|^NLU@n+%sU8N8Snw!T5RO!kP%aVI)Ddi8IeOxNvFvE;5&p?v6ZdxC7! zDyQ?|PM(NG#%XA@@zLrMVuLpgOAJ#{rH+R&BZcdm5UOQRClR4IeG=*!9@g3u(U&hq zZ%#UzjIl&09wlZOSN{p)$5%b?aEXbDaq(h!Fp87m7e!&AE)MJ6LiEm@j?HcXHaVwa z`)md|W(_yuA$FVXd$v(3lnLl@C*wqg0+;LbxLCvBNQoG$iNO4_0&W6mS|+@}aXdzt znu;8kl@y(X&MX0rl*%wzt-)YGj-y4Sgl9Ttda~GZ4TX@iS*1{-wyGT6C3>9n3vsPh zjgKlsI8vO3zLsUk%gbXAqOXQc{_LrEot3w_t`gneR2(asjw^H3_#`04sYO}nT+;~h zp(ak6$-TfZjFa~J;JiQ;j&0k3&yMWCwSj#&+_wdDD#~H8SZ=Tf)r%4!8%Gh172dWVk78Vs16%!K^ z7Z;b1kN}Fy$jB%wE32resHrNetE+2hXlQF|>*(m{>gpO98JQRvnrX&tshF9W zS!l>x>ZsZnXt+8#cqlS>d3pKz`ub^d`uX_<8_R?S2Ze=&MS9p~MEGW8WMqcBWoBk( zWn~o=vQON3vRn3KWzqag8Vm&QB{TPb^AhC@(M9%goCzPEIUH)ypqRpZ(583aDtGr;B5V z#MI;j1+D__&jtn`IEoMd$ocec)*P8x?>^-S*iBzCZ{MahYc{Q$ry<^PUhnzJ?6r@c ztw>t?TJt!ch=9q~LgNj=AsY+}HXDkvWCav`{CMp`Sm@PjAHEd^K1vcOGB7Ou6mb1w z;O7D(<3fQXf$bakxeCGr1p^Deac?shPo7|~?Gyi(Nr{OQKXQH9YC0+5!PO#O&aF?9 z6CP~l;Vr!SC^g~HbfYO^326xlViU}!JV|G|b^639jzYybjq(f(=Z{Mqoh4|b5A+Fx Mr>mdKI;Vst0N7E%9smFU diff --git a/test/kx_utils/icons/edit-guides.png b/test/kx_utils/icons/edit-guides.png deleted file mode 100644 index d26483960a4dcbadb1f43e5338886914f179d9e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j|KP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iXV< z7c?snYm~(R00E#$L_t(|+KrMwYZO5khoASIo!yNm$8O|E8he{GqNU=uNN;Zus-Gb4P}#Y7A?ygXPKr96UOJL@!>R*>ELDtA1kf(LUSRwVPELmLx=%zus$aSl7`2@O146zfYCK8uCTp@eddeLoc{v>-MjzqkF`<&0000j6lR&1TgAAr&ZD!k+qP}W%jJ@CJRS#CRRM9ND9TBQ-xjmkjMQ-h5{U#%r&Fla zYOo82VSMr$Ij3T=SddLTjly+Z+O#GUI#oqsWi!YTYX~Mp1c=N6n29LEN`M@2&z|S8 zz?K6UxCItq2SjA@zXAxJ_(ltgM1XRn1uCLIxCJIj9r$!Vb_lQ|29qtzg5l3_{kb(5 zjm9I~{uX%RpAOcb`;j_K(Y$)So_lkBnZvay{frS1X+EDb*~^{h3eETC3$-v9491ub zaDdSvvJu4^P)Guu8^Mp^E`ked2vSpt|61su;L2ij z<;PH$U8o=m7C~3tWcNTG)J7{b*F~FWqfP8t%?xJ_=iHei07;UR(=|yPDj=vjL>=voHq|p#I-L?Qk>AmS zzPxvY0Nbw1lMihQArOM+`NlI`aTj%p_iiAI9|$Hw>+3_T2;aNL;`?_!mV=+Kn@kKz5^$Yl9iaBspAwx;pX{S z#-xlBhlq@bpn{6fn5pNER231WR;dAk=m>$JMxhWW_&>=E-TxetbB4~q4s4q*7xMMe z`tqTiLx#AA`>z)1x*vO%1$<bC>TR zB179YWoA}u9idFEyi8O1+r)8vEX%UVenCc{Z$RQW{+MOi)^7ts%?QYKD)s;X002ov JPDHLkV1m)``fdOK diff --git a/test/kx_utils/icons/expand_s_y.png b/test/kx_utils/icons/expand_s_y.png deleted file mode 100644 index c2e8f78173c175483a1a98bff2ef435bc6ac7265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)pZR(Utz}U)y$1I+ZZs8Kv2x`d2p3=gC8!C(U?VCUV@$jgNlX-R zi)>vH3`HxaDxCIkPE*eJy1>>DO^h(fY$ln%XXb@dnpG;5QW%Dp0RO+a<#PE0z(t+V zfU5zZnPq4++5|xkGXo4W!<>7ywV!9^->9c~@kvb{FRy zW;W{jL?$jwQm_)_97=QCzC43;H09FT60Ycx7pY?EYxQF^tCF;{(@^v4XHBi%)VCik zMeRLx;z&snD@kIdX{?2Jvr4-i^?Kc75CQN$Bap-5b9iOQgC|Gej#fZM+keOV48#4t zWuHN#@rh^aFGxrju@UCRrZAUdD9AIv@{ogEf)x|2TcVH^cyzsfoWb*rmn1IXaJWs! z#nj&{54tRj-($p|L2-ehUY-Zz_y1(Dxw)n7?JeDUJ)!1qsOD~{-LR#-{r!R8cy&cl z6lp(-1`G_SPCwQ9Ngio=+D1?N%40#LQu%0R*Zv|V{X(9S diff --git a/test/kx_utils/icons/expand_x.png b/test/kx_utils/icons/expand_x.png deleted file mode 100644 index 217e3eae51e02886363f3e14aeb62ec7435a1fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)%Z}XCd`boz{X>GMd&T3|I?#(&(&JlnpitEP6L9farDlW}D1A7>uj{~Xfc44i@Q zy3Rje=$xw?i+wqLhS);o#a$ZaYfG|#4LtWZ7IDu0!?nE%;KIwZj8KH2!QAU9hV?jm zKNPV-`PD@{j|MAHgeRxh3H%WHEzj-Z5;MgcG>yk;K=srrI$(_*1s=F_Zl0i-!>Gfk zBP)5zXRaY41JgF{z4xW%LxgF$6Q=RbZo)7;nx^T=c0dk5TY!XN_%=<``fn;9*V(uq Rx_tlu002ovPDHLkV1kJN18@KU diff --git a/test/kx_utils/icons/expand_y.png b/test/kx_utils/icons/expand_y.png deleted file mode 100644 index fedf9368a2fa13d85cb05ea6441438619a432d95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)o>cu7m&p0nSN8 zK~y-)rISBTR8bJcfAjX?%3F#xX7zhO43(}_R2F;%V_{(>5dUC8FmaVc#ER(0uu>aM zz)AxaHdcfL(3OV>Z};w7+KM-%U^Da$f>?+-V)803s37FHIBI_G)%{z(s9`E%_}jndC^JY1@AFngdw z4)E;LbFA2f%#-4n|1i%%pO{^mCFu9ai?$rKrP>iS2PJ89b3^rSUo`!8Qaiifl{9wM zbcxc`DNUW)ZKs*VTWaq&)#>aX5fK3IGeQM4{0}nUrC`ESAPlTW(P;P`yw5OxGq>Ib z%ePcllnnT?fy3T+vVXcVM zS&_TdoB1y@qf-p{2wX(5Tjc)ey+1WrU0u`q`kKaG4y(QutG*R$E8f=b-d>(#uZEQ* ziT08t*T8_m@yA*|&LPc>TlJ);d^xOCDxb}4Px#24YJ`L;wH)0002_L%V+f000SaNLh0L00VXa00VXbebs`@00007bV*G`2ipf2 z5f1MO_vl!NDy2!q(wRLC{lU>hk|7A?&#&NUx#3*NsEGh#?SNe z;e`kO5T(>j03J~;Y!}|myq)P3w~KYQF!|eTeA>7-S(}XK_vV#SNQYh!3z!VQ7k4G!;ogP ziSPSFQA8qV{b)8Hm!|3QJxm*tUCM>uMWb@|N zk(VREhnPkjVsVErLm!x?xwOB(zj$zP(C_m3JQEWW%g!z5DgQg-IL=C=(Rh4XTRNSl zQmJfOmNnaMw^wVm+T0+Yo}S(;7K^j8wzhU$E|-%)Ut1ikil9pxRc^=(v7tizPbUN6!eXiEiT>GUh2m+!gLPXFsjUWil)S61AP)hZ=mP{rC zUDq#anuds=RL^xbn;p`6nrAYZ-hg2kD~{tVA08h5rfqzDd>Oznj3vi$7SH1-rQ}~U Z{sb_v1Uf{wNjd-k002ovPDHLkV1mj;9L)d# diff --git a/test/kx_utils/icons/item.png b/test/kx_utils/icons/item.png deleted file mode 100644 index 50bfddbfa29e1b8edd2d07e365d3d554eb40581b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x37?{gIn6dV1(;1*3dx@v7EBkGB2|+ytC)E5ZC#9Ta_AqPjcJ8oi=#E=; z?DoPf3(O=mmZtwX|FHcq`=9Rt<{pz$>aFI+E!JSV_`J$!X2Q-Gxt!Z^{9-JQ3gX?Y z9ULw#%Q6f0-=C<$8FT&Z-OYIdZHhjZT>?ckP777eQ$B6v68PmY_ui&WI)ZJAU5gxI zuS@j0CGIgTv)5&$)aq-#J#eXJ_2{`!`Fhj@H=?B%}-8@m+M``_=&9uH*Pa^sRo>+4-6M^5QY@6L)8`()!D z8fv>uG3?t>wHBal3X8;U3up(2hH7+uIwX<3@#U_6BHG40$;U0f=WUPf&NZ7|$&es% lY+CWY$}R0vCeSATx?0 z4$ACc7(^1B6N8F^5>P=@_#xFcX*|1YeYp_A1C;0U<^6ak**RX%Ip1D;?X}nU@r$3Y z5nj3#fRqtrbzGSaEEv~=gyt5>V9UAy)earg4&%XueGobcmo-wK?5=FFMn%F4=$ zkW4OIxFF}wozoD)ICJKVl$4anl`B`ePM$m&MiBP)_CH+m0|ySwL*oAx6&0z3IXO9U z`0!ylbm)*|WMn7+1XWmAsPP>zR6B9v#4!#I4!W;So|>8(!m5uRJu0hKt?F2?U_qXT zhsVFBOqmkMz`vt>e0(yOFJIogfB$}hP*Gl9-o0$uGG|LmOWpTQo|Kg2&+5?krfJir zEyn+iGchr-!J?*SW@ZM4g@uJF!Wz$h?d0U-9T*r`zGu%KDJUq=z{Gz5!UgRZ83;#5 zN8S4M>!+uurwgjv$;EAKY|K9Q9e@~c8}01uJa5H{6)jm=S=7eA=gyt$IDY*25n-?f zogJ>OuD*J`-e#oA23S+v9Q^(Lvl9~&38EFht-g51*R5NZIcd_QKiJvXSq$L;dIYOA zHHKl35#+yr>E-1Wy>H(>inmz3Gu&k`7<4OFuKd&d`SbsXDn1q9f@Y@jUE??Ef>^Bp;%^YOczb(0>U2YN)WyX`H;_hDz*2sd zo12@)WKcGP356hdrwLuWcu@tP;oVGpGZy;cw>l#eR&(ae36G15t0xOzG=`)UA5De1 zv=C>k*0>U`^vnBniwt}w|vNOZ&be0g-Jfrn$TefVGty{Osix)5C#*G{D?AbH9fB(Kp zUW?!N?%k6|j~+=~U7du5g$b-%0m#qK*T4uF3NtdHM=Jyv=w;4V&TGt9;A_r zkY>{U?%g}7uCA5`4<1NkW2017RVfxKpo5y)TB*N%TRkH?+1c6Jh7B8p0FEC&u7MF2 z@DC#sI$K*?LuhE|jNstlF$43Pz|9;%V-M7>vCpKjy}e!DzJ1HSDhBSN;!+6m*s)_m z+buDQ^3I(*eL84sYtz=QT}wf7^U_!ZChRZ$G@*}*iW)nRdUL#Zi^!9clQksJ*k=MD z#q2c~uSWIppc$3QrcIlaAX#O6e7s!0eqB(tVyvU1L%@WVnVBiDW$o0dQ-aNG2FB35 zH)nr~R=r2k$E1x6AfeXU+A6PKzgB&&si~3DvNDMQy+J`ivUKTEf!zwu3Iapoc|hra zV49norK_t;Iy*aMVTzW$1MY7%0LW=KvMhrrBG`!Mijj9My!B6Eu^PJqDRvy?Qn6 znC%c)b8N3DzcUDQzLb=dTcna>hzhj#@846=N(Tf+TaCbkVB=y!bzq@B_ze?$`0zmh zTqP%q3<{VajvP6n)(Qv+@EFPuOc3^%=PHaNM@z9#Sy`z@DlILIASgsCT*AY{IkKuc z26fQg-AxvhfM33RDJ?B6avP%xuu9+r0kOBR6+>mKQ%ow7l9N@n zWPzY|?b@Zzi9J0%y}j=P@bKY7C1QFD-(>(u8%|da1TdT>TR@z@2OAXx!C7YoFcyur zylvYy+AT#U2M->k@<~0D_fgM@sIRZ5D{>_19|YTgwSS8Z%VdzegP#NN^7P%icV}Tb zdT2bX0%rmZ{bvGJ-q&{qK|Fc#M1wHZShHRH2Is^?>Wu4-^sgaV)ciO09ULzpYEf5oNe0>-dF*iD!)VKPS2%h%WU zuZtEf3c}sr&CSgR&t@2n$Jz+q@Gbwe)Aa*qVDtmZXFuKR|9|r7A=3LD`2YX_07*qo IM6N<$f}#jh3;+NC diff --git a/test/kx_utils/icons/layer-visible-on.png b/test/kx_utils/icons/layer-visible-on.png deleted file mode 100644 index b24055207626a181301366abbf9c9992d6cfb1f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2001 zcmV;?2QK)DP)U5({sLAW~f0Da+&l;-5${=cTUBtIK+XlUq53WXx)^&S5;N1&zw1}|3ySZ1Tr!*P+ngC@Yu0qVH||Hx%rO=o}Qk*=IGI*Pvhd^ z5E&VX&6_vF)6)|hH*UnHO`F63Vq#(t6%{39Wo4nVvhpK)dwUBCLh^&bv$M0e78Dd9 zARquvPENhHwzdjOOUrl*3kyHqR#sMVGiJ=FSh8fvy$u^SV8@Of*tKgHh^=8_XpWwq zp5%Lj@7=rCCnqNdME_j^+ai%jtc{F}OpJ|<^$ZOSrM&5XJrffXV_jWcEBel=*|TR~ z@bdCPN=k}ADH){{{btHcSX*05D9=mj5X_u8GlxF1B2fKrdvDsbX;QkeIkB>a*y@zY zWX!~)l`B`;+Su4kDF$Q8r^d|8%!6+{Rb?|nIyyQwbLY;jWNlE@bkWB~-?_#qmlXu= zNYolW#{+a|OKIzAw{(IMl+ZG>v$NX~9UYD8>gxCSJCh^RTDx|w>%4jMmYbTI>Q4at z0yE9GnLmI2@2C>|eSCZZU0hsVrO!*wb;pXg(t@k`2}q=%PNQ&X!B9z6Jj#mTi#LPc(FF7os9zuv!pe=SwRA}!t0aoRAV zO4*c_mIilsciZQpQ|(HgrICW+tNd#B?%kzqLhJ<;Bv|R*-rn%_^@YE`KY2r-`0UW3 zL!jU)=p9RbckDcUeSM=jbLK=OCMGJGh3`~`9Q=X>3l-hN26Ey#A6c^QB;Pi!d#K_*p>eZ{r6~jfVrko3u zb9P4`ZA!)fjn=JO_b!t%S*M#u;#x!C>}-OEhX+zqQ_$Pfg_4HPaQ*fu&VMqDs@8u& z(WF7$pNG(J;|rX8{}!BAcwkFlfEYkhQj$m&K>mj_Tm#|3l5y?N6d*nB-D38QCf_@wzi_Qv;<-P zeh58(3*l++p}775f?_f;I52?z{(g`N2~>Vu8GIgyQ3tXcgE34h&;QOnwbR?weg&#= zp{c1!=<4bc54!l_Rpd1c!ROoq{5mQdaoeMDw73{lo^V;R2v+jbaBtQi;YtreQVO8H zc?-kC!x$VK6m>+Gf?O^aXn+|eoat;>6FH&2v$OMh?&(~1H1!C4`vJO5Zrr$up`jr$fWE#y?A*CiAOizU zPCPGM=aw;%HS4fY!otE7oI9qjt*uQM=YK9!shd+(gf;|ot%p2 zwRX2 zDu=_?6L`hzAQrBX!80h44U51B7@VmW_q}`fpj0XaEjX2KDRBGFPO<9QgxHolXh4F>VD7qi>MM`_m-tGi%nYwe-wEYdpr<;H5w1PdmxD j;H13A0u`VAFR%Xq565XnM?5ki00000NkvXXu0mjf-tF2E diff --git a/test/kx_utils/icons/list-add.png b/test/kx_utils/icons/list-add.png deleted file mode 100644 index 1e03be9bc896c5f6d8a943ff9d153b42b67e6b16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?Yl0P)8Z)0JRB|3DF3=|YfF7jDEZ>IVpdRI~vVL~%?rHj{Mb-aA4?aN$HkpY6+e zIJ}%A@;qlRND8>Ne);a1hpoZcM@ORNcT0CDpm2lpt8;$t;5m`HA+Mts_V&s9W~>cf zetj;y8B(ff-fq3o6i^ss-tluMK}bpJ9RCvtKmqnoV4WvU2M7e2b^n@kK&}DWEA7Qj z+`01X%TpaFO`sJG5esISB#+&7>@2gVH>sP%}a+DuI`p-7R~pI$1Y5x z9J%rcDSiulyep{dI#Oy%ghc%waq@#~ax=Pj`qhjEu-38}b?Q6+eS$+ zxgkjtHlh#o1_P#oDl|xq z)$=3opuA-AQ-@kiO_W*dZ1Abw6Jy@#*R^Fg!5P*sA&3jgil^7k&X>BCo8zhBfN|0000j diff --git a/test/kx_utils/icons/media-playback-pause.png b/test/kx_utils/icons/media-playback-pause.png deleted file mode 100644 index 5c7d128ee8728707a6193eb41af32b4e28890533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmV-<1cv*GP)kdg00002b3#c}2nbc| zMg#x=010qNS#tmY19kua19ky@)q>0b000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S* zE^l&Yo9;Xs000B{Nkl^Bw_qq@)F2oWehM>5RxKr%Hm6}!%+eJ5;P+bTi3lS*+iMTL0p`m}$nM`IT^X~QY zaG4NCay|}k4)2`reDBVC=eR(>eVF$r-4qj)1*i$D;c~M0PMbdKBbY0P8D8 zNRZe0(#=lS4j`Bv4AY$T#V)(F>5$@qgbX?I43H&hGVkVQTK`M%-dOl9R8v}PlTfBY zi6Kx_XPp{e(V)oOvODwsMjyfSW8sRgbZCm;7>{s>LF)-A9bt!GSz(YOIg)jEYVNmv z1n0)Wim$Y|!zjl&!d>KX1_-1=S4uXx!c9g*BZ^}mZ1f1;9t>A~RnmD}-Nz`9B_lW? z0AARoLt71gX2l*QS$4-iYC!^!PWx(`EtOXpXIQuMLe5;j%?k_(ck>KSD6@^PrqfZu zTjj9UEjB3e5=Y{bXGp9+X2H-k6+2RKUOr5==^p;LmOwhwEw*SeNk!$kNFa(HGKK-u zRZ!`3w1jRkodNeoK5Xumws?wX8B=*yiC?HsOV_htc8-SPJfF~|t$W)nvB)6?>h9je zpGZp`B~LIKJ2`?1ZgB&mdA7LD28rp&2~X$v@KS(GB*rNxdAP4PAj zxg#Mfs#4O^iJuSw4-k|P?C3C|O?k9NW=@#Snlh&M2Y27mKA zEr?d9!3_>$)>9G;NvH)J4GS>GWR~PWe;o5}V-&T-|4X2-ix-T>&Ur*`wm-HEFKilt zuO(p>asSD#JyU84ISQ2I(R#6!$GlZj6jqaPDd^{#{VCl@kf+FqJX$X{f|z$rRf;Yp zVTpQ%9ad=4p(}V53{#Rv>&23686AG2DFW(Y$pv2iG`yw>$eTRG5QX?gI{s@akKaO# zckR=1pMCXu0%0~Z#l`}6XweZQ5l`4(Y|?dCIiC~I12n@dB=B{O`HcAf;wlaCw*?)k z!5dP8Cbjkdfj`KLfO%Dt1z?WJOtrxGI3}@zeM2oyMbus8-%>#3%c|NNsxNA&2Aj$E z^C}f`g1y`TNQISea-KDt%T7aeVQ;7!g~ocQ=#cPC@ifIam82kQ`jKyNcEl<_wXkoj zo4qiG7K=BbLmcH%?&C0yTk3pGXxP9Lkdg00002b3#c}2nbc| zMg#x=010qNS#tmY19kua19ky@)q>0b000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S* zE^l&Yo9;Xs000CGNklrkmC6Jy9WesR^^K8P&yuG_6BOq91w;O z0FIbYMal#}U|XkRx6FwT6Tku#*>#;1HyPf+y_n^2g($1BtyaSfaR;8k6ZA~sI(gSC zc%vyhSu{W$FX5Pt^Vi%%4psu)qlr?gpwL-XKAv1R_HEJ~1I0WF4?Jpm~W5GYEj ztH#jhkPumvF9GJYitJ75H}MpnMT6lX9Y15XR54~N2ULy4d;0$f``E+=_o>u3cZcqz ztB)Df#=OsD0F^qVjg&%)$pL|--KDEznj~;+%&Pn%Kky?%Ctk&nW;j|!4e%6}nAfZ3nxTO315g7c|Bk-L zfaG<;pbU5l8X*cRv9L2JXw=|y1iD;xnjS1dKkxTfK@nT`F9Ew5D9F>4bh~(rnSG8{ z9IwEKi+b)Ufs3v5z@c9-(K+Snz+2!?KjqVA*sc&7?)`d7C_O6|h0Pt^l*|)UbjczO zpHqs6{c1tr{jM{Ly^B^h(GM`fHiqD-BOIzeI|&rCUIitq#~4@XO$B|~3_nj_UbE*a z_zsUE(wSO(Of&e;r{TG7?{D~uDlKGfEwz9w%aCkX=Os-r_7})Orh+paP4EeXiDW3t zT2Q`-u^N!^S6smWBcueERN)jwd!i#FYW(a`Q(s>b2 zBl1;=3cRN8@g?$5rZwm&>RT`nX;=;&DABsmLiTnzs1o-Ne$v fC9`oMo%a0)Lk#jiOZi|800000NkvXXu0mjfdhQk9 diff --git a/test/kx_utils/icons/media-record.png b/test/kx_utils/icons/media-record.png deleted file mode 100644 index f926a8f27f85ef68165ae570e0237c53aabe19a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1843 zcmV-32h8}1P)lUEc!{aPp#3JQ)<`D13Lv)N_>h<(9s;-2Q_ zc+qG;l5J#}ye#g?=tMywWZBd$S+)lRkr9X?WFwinEWq?ZW{{XD22Dsb+oUx%LH?B% zXuI>f>G^W0aS(5Ma_@J0@A>`Cx#!+{t|b ztgp{7jQ%4>j)YgEcSQnCO-(KyQ^(CpCg8+)t|@UI6C(zedWO3?x!rK|=uzKG5ol~| zOyU2&;^tunbSy0`(c7p-5vo}5l6rKP12%G}%>&CJZu#KZ*od_Lu!^z?K^ z#%i@<-c6Q@IXM~L_?Jn%f8xZ6yDubg^5jWaJ`8Xunx39kfL^bc3JVKq&6+i2 zx7%TnDJakZ5)dp6Nc;VMx_b30O-)TvMn(q62#He0@jpkPuC5Mi{wITb01lUL-MW>w zZQDkmIJziJpXmxX+9$!M0EhiU_|`RojWN% zKOf)-Af14aNEGyoU_2~^!0pQY6%`dqH!y$&Oki8N)6T3rxYG`%rKP3H{cG2*1-Q7> z1cu#Hm#FT_xGQ%ac4P; z6F~!zEnBuwR#uj7k*O>?`HXyDe?viDPYb)(2rp2K=Y=PHH23=-^sJ|s3V-;Xl5$@K zfOrEQR!idXcvMg_7XEj#lp75G5f4Bo0#3G?oMg)^_n-ZaLcGUqOeP6pSSZwa_`wPS*uUZd z5K$uiL^Ho#NhDx;bKSaiz!Cy38-uvyhC{T9>&1F0f%Xov!815aQaOm2Xp)T;$D*{v z@et+cw#u$Y z6{9g8#DX?ND~bAaOoKsv0xWAUu175;t)v(#2wgnd#0#?$)cEF~`aiX}NXOUp;gr=+ zPak5yCjo~)<(`M=WHLYefFf8b7FfK*vcRZe7S#AgKmK>}SREW9Is<_Ku%u5B7{fpW z$fHM(^Z-F^DtM*l6LP%cr6q1JGN;8ja5$of;9K?Ey*nuT(~ouVW%};lzpt=RfNgO7 zD+_`T1Z0cA6FLDbAief;JEeHN3>G!P!y1X?9c5I|(XPho1ay559y~Df2w+=_i;Mr^ zL0=G)M-1S=z&(KNn7AXX8BWTst|EgoBDD;B{KnEa^I@yAzC28M=e|{AP{i#3#-)UN z;M%ooG&(wp`$6)?T6G)N)YSaQ_2+U~)YjJ0#*G_sD`K#mj3$v4iVhBsLMKu+q3ym-<7!nFM0!GkI-XUT^$SOLYmckiaMvNEwmPtWwV zhp6T2?d`>X2sjW%Tczb49UXU9e3(>LR_1ag4-Bt=iG-&4fjeP hxBD+$y0oh2`F|miFh-s2`rH5j002ovPDHLkV1mqrSN#A0 diff --git a/test/kx_utils/icons/node-add.png b/test/kx_utils/icons/node-add.png deleted file mode 100644 index 80b5c61c6e67c8a593e30a12114e28a2a61bb3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 zcmV;n0!jUeP)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L00VXa00VXbebs`@00007bV*G`2ipf2 z5f3`g(CHQc00K5iL_t(I%cYP@NK|nYhrj=wJ2O5KhrmV+O)Mmhlm>MXZNf!uf(UAx z6lS$-QBD{HNkR}-q!O04&^Fb=AXLxp(H?`)`r9i~+yp zIp_DC!x3ZAXII`ux>~2^hg|?dfOkh(!dGccheug%Iz#N=D^J^(HoxxBmCTutC+N_ ztLyN2CO}+U$1oFY7%Rk$MK%l-FgpSF?C;qk?Xvby*jE<>{W*#m?eEPx#24YJ`L;wH)0002_L%V+f000SaNLh0L00VXa00VXbebs`@00007bV*G`2ipf2 z5fC$bR$nXt00I(8L_t(I%Z-vvNK|1IhM(`=J2Pg9Hj$$vSr|!RB}j{cHZ_ZC(WXV) zKo=FXkTxM03dsmT1QHlTwustjyMjn^jEaIpltx1`bDYY*adMoQJNN%Y&7MB!(?{Hy|+JvrK6b+ZUkBpG$_M~zsD{cTcl!J|7yw#lpT=av`O_d3kS-`D3&Uy8&ju3c&rZH#-5oavqOAF`G1HOS{3y~Q)>I;>C20TpF$?lLs3;?- z2m;MynFR`EV1FVF(^N{CsdMh$ZTIfp-LKu~EQdcYOOq?nITHLN!8`?=p5W^0+A7AZt-IFOoa=th)A$ z-9%_J04aD-)B}|aqZo#gB1(za<^~p&ypVLnhq--B#K%Pan8y#5m2uRC`#d-VD-(W< zAcz2g1xS(%;51D$l$W7!h9VdMScYLCIF1E?qXQgE^FcpPlRN`S@hru2Ojr;^o)iUM z1VG{_Nnj;Wlq4w<=AsfGjfk?y%Mvd~Lb4nM0s}-I$RdC>5C90nB>*A-Kq~_Pw4ok& zbVS`&Q&o#3BqklsFDxo9(H6!YgI$I7beYk%H>r9zG~Y}{eO=moqs7wH+^#%#N~KcW z`=ooJOYuvYva?%PtG_USq?~zszIxF9rlG~$tv6Wj#xLyHpOu-SwC&R7=MARY8nQ3F zJ`kL%e{9y+zC8b9+Bv6PdSGrpwDNnrf*Hm$PIlTmRAcwY)B7L2%KYAIiBhvirdjvJ u#=&`}$)5F4Wz8KypA;;;wDrx;G2l7IA&y5dTpJOVmGCB;F+kXKm7Lqgo diff --git a/test/kx_utils/icons/view-refresh.png b/test/kx_utils/icons/view-refresh.png deleted file mode 100644 index afa2a9d77403a12cf6808fd4e551f8582e2599d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2182 zcmV;12zmF3P)Dnz#_!jKNQq7A*Lpp`badk2@PWXqYX-|G^Br&q=F$>Qi+zP5MsM!mpA*k zuf20;?#!HXoIAVOWm%yVoA{l4@5#OM_&bhbJb6n1`H5BQ;7S*8aYsrg z(%8Ii3;uED#FnEM{<>~)`;y+z_k9UfuL=Wd3^^--)HY-9vi9Yh?_cu(n!Jfy$zTS8 zFo2)}vyvn?9M|-r={nrdg{hj@bLQ6=E!AfxklAj3tAllJUis0Fqv}*~qbQ*$kCrho zG=SmJ;ke;A=O|2uVNMJp+ zu;cEWP$ayjH}ek0J-mASRn(kXt0W9x0rd%pBpxKBqw^{10_ z%oVjGo>@EUS*iKf;$&9;O=?7MYMcQXV9*`JiNOiUq?uH19(+43b^r%Qh*N0-8PySL@{C>NTq zmAl*&&j?%;7m=-I(Us~#EHN?vgcGQQ0hk0J4Qw(qsrZhsSEW?J(B&a8Ns-d@z$hB4 z&i!^|7&j3whr5FWPw_8BZN)_edGBODPKjlmU)OlN& z4dJ>|3B=t!-WZQFVw^yzWIt}A)jJn2p(fkv>~xUJ=8+4c!VW>LUW;RQ#vRl~YN%eT z0!}M&0-I$B!U~}7K&Z}?pjDR^9 zW{w1fBn%*okZ2@|Mo`dfPy?U|ddU}J(~;eB;yI9g(5#EJY7>RVjYkxMPzh1xRX_*Q zgGN}L>lt#-?Jo$$M-mwReI4(mI02!^YNO`Zp&|eVz{136M>f%FB&97#EC=ugZbOBQ z1{xQHVXx5y)hVYs5kve(BsILL3O2L2eVrEoM3QY?Kgcb3@949XR>=y| zN9HIt>tOA)An!&l_%Kg4mvO7o?ddELGctBk@|Iqbzuk#2Bo z&hBJ8ZldsmjWTmA?MYAi&~*-)hk2IVeh$Mc&Y~^q*Rk^U(roGHs0>XDKJW)w2D&} zLr@aI9y*b6*=b_SODgY>+mHwoplwY`2+TZC2}AP}PN!W?UpF;VD9pM2G~W zv=zcESwU4AVsN?%Clyk$t6K5CULaO>RB3=w+Hwq`F$PVc@dDDMA*^l<0R@VEwgoBC zK!`SB>s*LjR9s;~MEqP3GO_+i2^oFJ_AnvesgxX9l+N^$J}LPp={csqlMPa&i2+9F zj44oKhzaYFr6Ez$U5wc-8i@dIWNt}C(P%E(pO2sm(K&6A^9rN6E-jV4e5RI?33*KZ zT*_Gq#1IGMUb2DoFS?k2bZmYj#*0&+QxLHOlOr$$LS29}0T6%)0v1HT&Bz{0YhaLo z5K{6CO^Wlcm!ukdMp#^1ui8avBL6 zumS>~gG4_FIunN4<@%g)A+7>w`9$QyDB!rPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iOG+ z3Mv{e5wxxV00EmxL_t(|+Le(#OT$nUhToeAqSPt~7F=}E#m&jxk6AiZaa0lNq(4P} zfH)N?Iu^vKpin^+#eYycXiYUqwMmnEJh|qgUb6VW!%Z%{Cnx6!d^5(*;eR}`Z%A3D zf0AUt3?L=Bt5&OcX}2K&OcV-OT3iH#fJjXcY%Z76kFfBIHit{464ut&@$&o(%d%kG zHf%mwez&n(k>~~l%>WEIr1U}yH&26j?*UCmqS;}c7-zQH5XsWG;o0^C8zPoE9-x+R<0fk-=e?aDu)R;z_Zqk()ruN)c~ z1ruc!Na%Fw_nitCi$x^xkg>PFe*xgi+=80=&ap@Na)&mLe2Qbq##F1-NJ>eb=TUjL zd=Fp}8nb}og|vF$(W@6FA+@%8y-u#{>hKISMuAMiD5mSX2in@+I?wvD-pM#SuimqX d*h@Bm!56}ZCMId;HE{p{002ovPDHLkV1lrt=VJf> diff --git a/test/kx_utils/icons/zoom-fit-height.png b/test/kx_utils/icons/zoom-fit-height.png deleted file mode 100644 index 32e2190094920b70541fc499e4e801322af1de40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0V5|-B32_B-@q^H?(2$Vey!^bJ z+??9FnvTx)a~CfiK5^>i&6~IH+`e=74rj)Dft>fM74Ow5-m6!A(5ZcI)cDc4`=i%{ z&;FA>MbG*YJM&%KtanNCzm}~0TD9(58vQ_3PJf*sx*a#*KTge&2WP$Eh2yPv3fb=FHi1=gyx$f8o-lOINO3 zxpwW^bs)HL{l<+OK=<6b1w^;*-o0}l2wwhp@apHoXK$XoeE;m(^XD&KymxLU<_se!oOSSHJy=wt8P$>76RpzF=_0L5$_~N$m z`N%+;Pog9dqk_ z`_6gKQZ7x3dQkCC^3xjQC1PLnO#DssMfYtw(Z#o~a=Ei2@29IX9w>aAy|9D#%bND) z1(IF{Z2JmWWm?30A0JD7>#4Ng@__i9OVve{ZGYCV3d$@^c<@=|*S_cVPaHff&g}dB z;oshyH{JcW<*#UZ@3iW#)d@Kf`NogF*%l02r!#%3EZY7-IQl|(Ba7);{toLW<$130 ztSf82m;Ac<+sNZi^b7g?WPippK4&km-qO2wz_yx8h%;Pmeb~X*vkex$f309S?bU;C zKb~F9(LC`}Kj!DxuV?#u-*8_uYm3~U^~C-MbLupf$NA@OJpg4iPgg&ebxsLQ0G2=) A&;S4c diff --git a/test/kx_utils/kx_coeffs.cpp b/test/kx_utils/kx_coeffs.cpp deleted file mode 100644 index 940ff36..0000000 --- a/test/kx_utils/kx_coeffs.cpp +++ /dev/null @@ -1,194 +0,0 @@ -#include "kx_coeffs.h" -#include "kx_protocol_x.h" - -double X[KX_X_COUNT]; -PIVector K; - - -KX_Coefficients::KX_Coefficients(const PIString & config, const PIString & name, bool _pult) { - setName("kx_coeffs"); - PIConfig conf(config, PIIODevice::ReadOnly); - fname = conf.getValue(name).getValue("file", "k.dat"); - readCoeffs(); - int ns = piMaxi(conf.getValue(name).getValue("count", 0), K.size_s()); - if (ns > K.size_s()) { - K.resize(ns, 0.f); - formulas.resize(ns); - writeCoeffs(); - } - config_ = config; - name_ = name; - pult_ = _pult; - k_protocol = 0; - renew(); - //readCoeffs(); -} - - -KX_Coefficients::~KX_Coefficients() { - stop(); - k_protocol->stop(); - delete k_protocol; -} - - -void KX_Coefficients::readCoeffs() { - { - PIConfig conf(fname, PIIODevice::ReadOnly); - int cnt = conf.rootEntry().childCount(); - K.resize(cnt); - formulas.resize(cnt); - PIString kn, cf; - for (int i = 0; i < cnt; i++) { - kn = "k" + PIString::fromNumber(i); - K[i] = (double)conf.getValue(kn, 0.f); - cf = conf.getValue(kn + ".formula", ""); - if (cf.isEmpty()) cf = PIString::fromNumber(K[i]); - formulas[i] = cf; - } - } - k_content = PIFile(fname, PIIODevice::ReadOnly).readAll(); - //piCout << k_content.size(); - piCoutObj << "Readed" << K.size_s() << "coefficients in" << k_content.size_s() << "bytes"; - coeffs_cnt = K.size_s(); -} - - -void KX_Coefficients::writeCoeffs() { - PIFile::remove(fname); - PIFile conf(fname, PIIODevice::ReadWrite); - //conf.clear(); - for (int i = 0; i < K.size_s(); i++) { - conf << "k" + PIString::fromNumber(i) << " = " << PIString::fromNumber(K[i]).replaceAll(",", ".") << "\n"; - conf << "k" + PIString::fromNumber(i) << ".formula = " << formulas[i] << "\n"; - } - //conf.close(); - //conf.writeAll(); - k_content = conf.readAll(); - //piCout << k_content.size(); - piCoutObj << "Written" << K.size_s() << "coefficients in" << k_content.size_s() << "bytes"; - coeffs_cnt = K.size_s(); -} - - -void KX_Coefficients::setKFile(const PIString & f) { - fname = f; - readCoeffs(); -} - - -void KX_Coefficients::sendCoeffs() { - stop(); - int curcnt, pcnt = (k_content.size_s() - 1) / __BYTES_IN_PACKET + 1; - k_protocol->to_k.full_count = k_content.size_s(); - for (int i = 0; i < pcnt; i++) { - k_protocol->to_k.first_index = i * __BYTES_IN_PACKET; - if (i == pcnt - 1) curcnt = k_content.size_s() % __BYTES_IN_PACKET; - else curcnt = __BYTES_IN_PACKET; - //cout << "send " << curcnt << " coeffs\n"; - k_protocol->to_k.count = curcnt; - memcpy(k_protocol->to_k.coeffs, k_content.data(k_protocol->to_k.first_index), curcnt); - //for (int j = 0; j < curcnt; j++) k_protocol->to_k.coeffs[j] = K.at(k_protocol->to_k.first_index + j); - k_protocol->send(); - piMSleep(5); - } - //cout << "waiting for commit ...\n"; - waitingCommit = true; - tm.reset(); - start(10); -} - - -void KX_Coefficients::receiveCoeffs() { - stop(); - k_protocol->to_k.full_count = k_protocol->to_k.first_index = k_protocol->to_k.count = -6; - k_protocol->send(); - //cout << "request send\n"; - //cout << "waiting for receive ...\n"; - waitingCommit = false; - tm.reset(); - start(10); -} - - -void KX_Coefficients::received(bool correct) { - //cout << "kpi received " << correct << endl; - if (!correct) return; - k_syns = k_protocol->from_k; - if (waitingCommit) { - if (k_syns.first_index != -1 || - k_syns.full_count != -1 || - k_syns.count != -k_content.size_s()) return; - //cout << "commit received\n"; - waitingCommit = false; - stop(); - //cout << "send succeed\n"; - //emit sendSucceed(); - sendSucceed(); - return; - } else { - if (k_syns.first_index == -6 && k_syns.full_count == -6 && k_syns.count == -6) { - //cout << "request received\n"; - sendCoeffs(); - return; - }; - } - if (k_syns.first_index < 0 || k_syns.count < 0) return; - if (k_syns.first_index == 0) { - //cout << "first receive\n"; - k_tmp.resize(k_syns.full_count); - received_cnt = 0; - } - //for (int i = 0; i < k_syns.count; i++) K.at(k_syns.first_index + i) = k_syns.coeffs[i]; - //piCout << k_tmp.size() << k_syns.first_index << k_syns.count; - memcpy(k_tmp.data(k_syns.first_index), k_syns.coeffs, k_syns.count); - received_cnt += k_syns.count; - tm.reset(); - //cout << "received " << k_syns.count << " bytes with " << k_syns.first_index << " first\n"; - if (received_cnt < k_syns.full_count) return; - //cout << "finally received " << received_cnt << " bytes\n"; - stop(); - PIFile::remove(fname); - PIFile conf(fname, PIIODevice::ReadWrite); - conf.write(k_tmp.data(), k_tmp.size_s()); - conf.close(); - readCoeffs(); - //writeCoeffs(); - k_protocol->to_k.full_count = k_protocol->to_k.first_index = -1; - k_protocol->to_k.count = -received_cnt; - k_protocol->send(); - waitingCommit = false; - //emit receiveSucceed(); - receiveSucceed(); - //cout << "receive succeed\n"; -} - - -void KX_Coefficients::renew() { - if (k_protocol != 0) { - k_protocol->stop(); - delete k_protocol; - } - k_protocol = new __KPi(config_, name_, pult_); - CONNECT1(void, bool, k_protocol, received, this, received) - waitingCommit = false; -} - - -void KX_Coefficients::tick(void * , int ) { - //piCout << "timer" << tm.elapsed_s(); - if (tm.elapsed_s() < 10.) return; - if (waitingCommit) { - //cout << "commit timeout\n"; - //cout << "send failed\n"; - //emit sendFailed(); - sendFailed(); - } else { - //cout << "receive timeout\n"; - //cout << "receive failed\n"; - //emit receiveFailed(); - receiveFailed(); - } - waitingCommit = false; - stop(); -} diff --git a/test/kx_utils/kx_coeffs.h b/test/kx_utils/kx_coeffs.h deleted file mode 100644 index e6d31b7..0000000 --- a/test/kx_utils/kx_coeffs.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef KX_COEFFS_H -#define KX_COEFFS_H - -#include "piprotocol.h" - -#define __BYTES_IN_PACKET 4000 - -extern PIVector K; - -class __KPi: public PIProtocol -{ - PIOBJECT_SUBCLASS(__KPi, PIProtocol) -public: -#pragma pack (push, 1) - struct KX_K_Sync { - uchar type; - uchar addr_to; - int count; - int full_count; - int first_index; - uchar coeffs[__BYTES_IN_PACKET]; - uint checksum; - }; -#pragma pack (pop) - __KPi(const PIString & config, const PIString & name, bool _pult = false): PIProtocol(config, name, &from_k, 2, &(from_k.count), sizeof(from_k) - 2, &to_k, sizeof(to_k)) { - PIConfig conf(config, PIIODevice::ReadOnly); - PIConfig::Entry ce = conf.getValue(name); - to_k.type = from_k.type = ce.getValue("type", 0xA); - to_k.addr_to = ce.getValue("addr_k", 0x15); - from_k.addr_to = ce.getValue("addr_pult", 0x75); - if (_pult) piSwap(to_k.addr_to, from_k.addr_to); - packetExtractor()->setHeader(PIByteArray(&from_k, 2)); - start(); - } - KX_K_Sync to_k, from_k; -private: - bool validate() { - return (from_k.checksum == checksum_i(&from_k, sizeof(from_k) - 4)); - } - bool aboutSend() { - to_k.checksum = checksum_i(&to_k, sizeof(to_k) - 4); - return true; - } -}; - - -class KX_Coefficients: public PITimer -{ - PIOBJECT_SUBCLASS(KX_Coefficients, PITimer) - friend class KX_Pult; -public: - KX_Coefficients(const PIString & config, const PIString & name = "k", bool _pult = false); - ~KX_Coefficients(); - - void readCoeffs(); - void writeCoeffs(); - - void sendCoeffs(); - void receiveCoeffs(); - - bool isReady() const {return !waitingCommit;} - const PIString & fileName() const {return fname;} - const PIString * fileName_ptr() const {return &fname;} - int coeffsCount() {coeffs_cnt = K.size_s(); return coeffs_cnt;} - const int * coeffsCount_ptr() const {return &coeffs_cnt;} - - const PIString & formula(int index) const {return formulas[index];} - void setFormula(int index, const PIString & f) {formulas[index] = f;} - - void setKFile(const PIString & f); - - EVENT(sendSucceed) - EVENT(sendFailed) - EVENT(receiveSucceed) - EVENT(receiveFailed) - - - __KPi * k_protocol; - -private: - EVENT_HANDLER1(void, received, bool, correct); - void renew(); - void tick(void *, int); - - __KPi::KX_K_Sync k_syns; - bool pult_, waitingCommit; - int received_cnt, coeffs_cnt; - PIString fname, config_, name_; - PIStringList formulas; - PIByteArray k_content, k_tmp; - PITimeMeasurer tm; - -}; - -#endif // KX_COEFFS_H diff --git a/test/kx_utils/kx_protocol_c.h b/test/kx_utils/kx_protocol_c.h deleted file mode 100644 index 66a5441..0000000 --- a/test/kx_utils/kx_protocol_c.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef KX_PROTOCOL_C_H -#define KX_PROTOCOL_C_H - -#include "piprotocol.h" - - -#pragma pack (push, 1) - - -struct KX_C_Header { - uchar type; - uchar addr_to; -}; - - - -struct KX_C_Command: KX_C_Header { - KX_C_Command() {command = -1;} - int command; - uint checksum; -}; - - -struct KX_C_Event: KX_C_Header { - KX_C_Event() {event = -1;} - PISystemTime time; - int event; - uint checksum; -}; - - -#pragma pack (pop) - - -// Client side - -class KX_Protocol_C: public PIProtocol -{ - PIOBJECT_SUBCLASS(KX_Protocol_C, PIProtocol) -public: - KX_Protocol_C(const PIString & config, const PIString & name = "c"): PIProtocol(config, name, &from_buff, 2, &(from_buff.command), sizeof(from_buff) - 2, &to_pult, sizeof(to_pult)) { - PIConfig conf(config, PIIODevice::ReadOnly); - PIConfig::Entry ce = conf.getValue(name); - to_pult.type = from_buff.type = ce.getValue("type", 0xC); - to_pult.addr_to = ce.getValue("addr_pult", 0x15); - from_buff.addr_to = ce.getValue("addr_c", 0x75); - from_pult = from_buff; - packetExtractor()->setSplitMode(PIPacketExtractor::Header); - packetExtractor()->setHeader(PIByteArray(&from_buff, 2)); - startReceive(); - } - - void sendEvent(int ev) { - to_pult.time = PISystemTime::current(); - to_pult.event = ev; - send(); - } - EVENT1(commandReceived, int, command) - - KX_C_Command from_pult; - KX_C_Event to_pult; - -private: - bool validate() { - if (checksum_i(&from_buff, sizeof(from_buff) - 4) != from_buff.checksum) return false; - from_pult = from_buff; - commandReceived(from_pult.command); - return true; - } - bool aboutSend() { - to_pult.checksum = checksum_i(&to_pult, sizeof(to_pult) - 4); - return true; - } - - KX_C_Command from_buff; - -}; - - - -// Pult side - -class __KX_Protocol_C: public PIProtocol -{ - PIOBJECT_SUBCLASS(__KX_Protocol_C, PIProtocol) -public: - __KX_Protocol_C(const PIString & config, const PIString & name): PIProtocol(config, name, &from_buff, 2, &(from_buff.time), sizeof(from_buff) - 2, &to_c, sizeof(to_c)) { - PIConfig conf(config, PIIODevice::ReadOnly); - PIConfig::Entry ce = conf.getValue(name); - to_c.type = from_buff.type = ce.getValue("type", 0xC); - to_c.addr_to = ce.getValue("addr_c", 0x75); - from_buff.addr_to = ce.getValue("addr_pult", 0x15); - from_c = from_buff; - packetExtractor()->setSplitMode(PIPacketExtractor::Header); - packetExtractor()->setHeader(PIByteArray(&from_buff, 2)); - startReceive(); - } - - void sendCommand(int cmd) { - to_c.command = cmd; - send(); - } - EVENT2(eventReceived, int, event, PISystemTime, time) - - KX_C_Event from_c; - KX_C_Command to_c; - -private: - bool validate() { - if (checksum_i(&from_buff, sizeof(from_buff) - 4) != from_buff.checksum) return false; - from_c = from_buff; - eventReceived(from_c.event, from_c.time); - return true; - } - bool aboutSend() { - //piCout << "send command" << to_c.command; - to_c.checksum = checksum_i(&to_c, sizeof(to_c) - 4); - return true; - } - - KX_C_Event from_buff; - -}; - - -#endif // KX_PROTOCOL_C_H diff --git a/test/kx_utils/kx_protocol_x.h b/test/kx_utils/kx_protocol_x.h deleted file mode 100644 index 4805a50..0000000 --- a/test/kx_utils/kx_protocol_x.h +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef KX_PROTOCOL_X_H -#define KX_PROTOCOL_X_H - -#include "piprotocol.h" - -#define KX_X_PACKET_NUM 20 -#define KX_X_COUNT 16384 - -extern double X[KX_X_COUNT]; - - -#pragma pack (push, 1) - - -struct KX_X_Header { - uchar type; - uchar addr_to; -}; - - - -struct KX_X_Numbers: KX_X_Header { - int x_num[KX_X_PACKET_NUM]; - uint checksum; -}; - - -struct KX_X_Data: KX_X_Header { - int x_num[KX_X_PACKET_NUM]; - double x_data[KX_X_PACKET_NUM]; - uint checksum; -}; - - -#pragma pack (pop) - - -// Client side - -class KX_Protocol_X: public PIProtocol -{ - PIOBJECT_SUBCLASS(KX_Protocol_X, PIProtocol) -public: - KX_Protocol_X(const PIString & config, const PIString & name = "x"): PIProtocol(config, name, &from_buff, 2, &(from_buff.x_num[0]), sizeof(from_buff) - 2, &to_pult, sizeof(to_pult)) { - PIConfig conf(config, PIIODevice::ReadOnly); - PIConfig::Entry ce = conf.getValue(name); - to_pult.type = from_buff.type = ce.getValue("type", 0xB); - to_pult.addr_to = ce.getValue("addr_pult", 0x15); - from_buff.addr_to = ce.getValue("addr_x", 0x75); - from_pult = from_buff; - for (int i = 0; i < KX_X_PACKET_NUM; ++i) - to_pult.x_num[i] = from_pult.x_num[i] = -1; - packetExtractor()->setSplitMode(PIPacketExtractor::Header); - packetExtractor()->setHeader(PIByteArray(&from_buff, 2)); - start(); - } - - KX_X_Numbers from_pult; - KX_X_Data to_pult; - -private: - bool validate() { - if (checksum_i(&from_buff, sizeof(from_buff) - 4) != from_buff.checksum) return false; - from_pult = from_buff; - return true; - } - bool aboutSend() { - for (int i = 0; i < KX_X_PACKET_NUM; ++i) { - to_pult.x_num[i] = from_pult.x_num[i]; - to_pult.x_data[i] = from_pult.x_num[i] < 0 ? 0. : X[from_pult.x_num[i]]; - } - to_pult.checksum = checksum_i(&to_pult, sizeof(to_pult) - 4); - return true; - } - - KX_X_Numbers from_buff; - -}; - - - -// Pult side - -class __KX_Protocol_X: public PIProtocol -{ - PIOBJECT_SUBCLASS(__KX_Protocol_X, PIProtocol) -public: - __KX_Protocol_X(const PIString & config, const PIString & name): PIProtocol(config, name, &from_buff, 2, &(from_buff.x_num[0]), sizeof(from_buff) - 2, &to_x, sizeof(to_x)) { - PIConfig conf(config, PIIODevice::ReadOnly); - PIConfig::Entry ce = conf.getValue(name); - to_x.type = from_buff.type = ce.getValue("type", 0xB); - to_x.addr_to = ce.getValue("addr_x", 0x75); - from_buff.addr_to = ce.getValue("addr_pult", 0x15); - from_x = from_buff; - for (int i = 0; i < KX_X_PACKET_NUM; ++i) - to_x.x_num[i] = -1; - packetExtractor()->setSplitMode(PIPacketExtractor::Header); - packetExtractor()->setHeader(PIByteArray(&from_buff, 2)); - start(); - } - - KX_X_Data from_x; - KX_X_Numbers to_x; - -private: - bool validate() { - if (checksum_i(&from_buff, sizeof(from_buff) - 4) != from_buff.checksum) return false; - from_x = from_buff; - return true; - } - bool aboutSend() { - to_x.checksum = checksum_i(&to_x, sizeof(to_x) - 4); - return true; - } - - KX_X_Data from_buff; - -}; - - -#endif // KX_PROTOCOL_X_H diff --git a/test/kx_utils/kx_pult.conf b/test/kx_utils/kx_pult.conf deleted file mode 100644 index e69de29..0000000 diff --git a/test/kx_utils/kx_pult.cpp b/test/kx_utils/kx_pult.cpp deleted file mode 100644 index 2e5fab9..0000000 --- a/test/kx_utils/kx_pult.cpp +++ /dev/null @@ -1,848 +0,0 @@ -#include -#include -#include -#include "kx_pult.h" -#include "ui_kx_pult.h" -#include "piqt.h" -#include "qpiconfig.h" - - -bool isNormalDouble(const double & v) { -#ifdef WINDOWS - return true; -#else - return !isnan(v) && !isinf(v); -#endif -} - - -XCheck::XCheck(int index): QWidget() { - index_ = index; - setProperty("index", index); - setMouseTracking(true); - check.setText(QString::number(index + 1) + " "); - check.setAutoFillBackground(true); - spin.setMaximum(KX_X_COUNT - 1); - QBoxLayout * l = new QBoxLayout(QBoxLayout::LeftToRight); - l->setMargin(0); - l->setSpacing(2); - l->addWidget(&check); - l->addWidget(&spin); - setLayout(l); - //check.installEventFilter(this); - //spin.installEventFilter(this); - connect(&spin, SIGNAL(valueChanged(int)), this, SLOT(spinChanged(int))); - connect(&check, SIGNAL(toggled(bool)), this, SLOT(checkChanged_(bool))); -} - - -bool XCheck::eventFilter(QObject * o, QEvent * e) { - if (e->type() == QEvent::Enter) - qApp->postEvent(this, new QEvent(e->type())); - return QWidget::eventFilter(o, e); -} - - - - -KX_Pult::KX_Pult(): QMainWindow(), config_("kx_pult.conf"), name_x("x"), name_c("c"), -config(piqt(config_), QIODevice::ReadWrite), coeffs(config_, "k", true) { - //cout << sizeof(coeffsK.k_protocol->to_k) << endl; - ui = new Ui::KX_Pult(); - ui->setupUi(this); - ui->configWidget->setQPIConfig(&config); - ui->configWidget->expandAll(); - ui->list->viewport()->installEventFilter(this); - ui->treeK->viewport()->installEventFilter(this); - ui->scrollArea->setAutoFillBackground(false); - ui->scrollAreaWidgetContents->setAutoFillBackground(false); - ui->widget->setAutoFillBackground(false); - ui->label_17->setFixedSize(preferredIconSize(1.25, this)); - log_menu.addAction(ui->actionClear); - prot_x = 0; - prot_c = 0; - show_x = config.getValue("show_x", true); - if (!show_x) - ui->tabWidget->removeTab(1); - session.setFile("session_KX_Pult.conf"); - session.addEntry(this); - session.addEntry(ui->tabWidget); - session.addEntry(ui->checkKHideEmpty); - session.addEntry(ui->checkKHideNormal); - session.addEntry(ui->checkKHideExpressions); - session.addEntry(ui->checkKAutoCalculate); - needWrite = isPause = false; - timer = 0; - //x.resize(KX_X_PACKET_NUM); - //k.resize(K_NUM); - QPalette pal = palette(); - QColor col; - ui->graphic->setGraphicsCount(0); - for (int i = 0; i < KX_X_PACKET_NUM; ++i) { - XCheck * xc = new XCheck(i); - xc->installEventFilter(this); - connect(xc, SIGNAL(valueChanged(int, int)), this, SLOT(changedX(int,int))); - connect(xc, SIGNAL(checkChanged(int, bool)), this, SLOT(toggledX(int, bool))); - col = QColor::fromHsv(360 / KX_X_PACKET_NUM * i, 255, 200); - pal.setColor(QPalette::Button, col); - pal.setColor(QPalette::Window, col); - pal.setColor(QPalette::WindowText, invertColor(col)); - xc->check.setPalette(pal); - ui->graphic->addGraphic(QString::number(i), col); - ui->graphic->setGraphicVisible(false, i); - checks << xc; - ((QGridLayout * )(ui->widgetChecks->layout()))->addWidget(xc, (i / 10) * 2, i % 10); - QLabel * lbl = new QLabel("0"); lbl->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); - values << lbl; - ((QGridLayout * )(ui->widgetChecks->layout()))->addWidget(lbl, (i / 10) * 2 + 1, i % 10); - //xc->show(); - } - renew(); - icon_record = QIcon(":/icons/media-record.png"); - icon_stop = QIcon(":/icons/media-playback-stop.png"); - outdir = dir.absolutePath(); - if (!dir.exists()) dir.mkdir(outdir); - outdir += "/"; - ui->treeK->setColumnWidth(0, 60); - ui->treeK->setColumnWidth(1, 250); - ui->treeK->setColumnWidth(3, 100); - ui->treeK->setColumnWidth(4, 100); - //ui->table->setK(coeffsK.k()->data(), coeffsK.count()); - ui->spinSize->setValue(K.size_s()); - addToList(trUtf8("Read K file \"%1\": %2 coeffs, %3 bytes").arg(PI2QString(coeffs.fileName())).arg(K.size_s()).arg(coeffs.k_content.size_s()), Qt::darkMagenta); - CONNECT(void, &coeffs, sendFailed, this, pip_sendFailed); - CONNECT(void, &coeffs, sendSucceed, this, pip_sendSucceed); - CONNECT(void, &coeffs, receiveFailed, this, pip_receiveFailed); - CONNECT(void, &coeffs, receiveSucceed, this, pip_receiveSucceed); - connect(this, SIGNAL(q_k_sendFailed()), this, SLOT(k_sendFailed()), Qt::QueuedConnection); - connect(this, SIGNAL(q_k_sendSucceed()), this, SLOT(k_sendSucceed()), Qt::QueuedConnection); - connect(this, SIGNAL(q_k_receiveFailed()), this, SLOT(k_receiveFailed()), Qt::QueuedConnection); - connect(this, SIGNAL(q_k_receiveSucceed()), this, SLOT(k_receiveSucceed()), Qt::QueuedConnection); - connect(&timer_diag, SIGNAL(timeout()), this, SLOT(updateDiag())); - connect(&session, SIGNAL(loading(QPIConfig&)), this, SLOT(loading(QPIConfig&))); - connect(&session, SIGNAL(saving(QPIConfig&)), this, SLOT(saving(QPIConfig&))); - connect(ui->checkKHideEmpty, SIGNAL(toggled(bool)), this, SLOT(filterTree())); - connect(ui->checkKHideNormal, SIGNAL(toggled(bool)), this, SLOT(filterTree())); - connect(ui->checkKHideExpressions, SIGNAL(toggled(bool)), this, SLOT(filterTree())); - connect(ui->lineKSearch, SIGNAL(textChanged(QString)), this, SLOT(filterTree())); - session.load(); - updateKDesc(); - updateCDesc(); - timer_diag.start(40); - timer_update = startTimer(25); -} - - -KX_Pult::~KX_Pult() { - session.save(); -} - - -void KX_Pult::loading(QPIConfig & conf) { - kdesc_file = conf.getValue("kdesc_file").stringValue(); - cdesc_file = conf.getValue("cdesc_file").stringValue(); -} - - -void KX_Pult::saving(QPIConfig & conf) { - conf.setValue("kdesc_file", kdesc_file); - conf.setValue("cdesc_file", cdesc_file); -} - - -bool KX_Pult::eventFilter(QObject * o, QEvent * e) { - if (o == ui->list->viewport()) { - if (e->type() == QEvent::ContextMenu) { - clear_target = 0; - log_menu.popup(((QContextMenuEvent*)e)->globalPos()); - } - return QMainWindow::eventFilter(o, e); - } - if (o == ui->treeK->viewport()) { - if (e->type() == QEvent::ContextMenu) { - clear_target = 1; - log_menu.popup(((QContextMenuEvent*)e)->globalPos()); - } - return QMainWindow::eventFilter(o, e); - } - int ind = o->property("index").toInt(); - //qDebug() << "event" << i << e->type(); - switch (e->type()) { - case QEvent::Enter: - ui->graphic->setAutoUpdate(false); - for (int i = 0; i < KX_X_PACKET_NUM; ++i) - ui->graphic->setGraphicLineWidth(ind == i ? 3. : 1., i); - ui->graphic->setAutoUpdate(true); - ui->graphic->update(); - break; - case QEvent::Leave: - ui->graphic->setAutoUpdate(false); - for (int i = 0; i < KX_X_PACKET_NUM; ++i) - ui->graphic->setGraphicLineWidth(1., i); - ui->graphic->setAutoUpdate(true); - ui->graphic->update(); - break; - default: break; - } - return QMainWindow::eventFilter(o, e); -} - - -void KX_Pult::timerEvent(QTimerEvent * e) { - if (e->timerId() == timer_update) { - if (need_update) { - need_update = false; - ui->graphic->updateGraphics(); - } - } - if (e->timerId() == timer) { - static QString sPI = QString::number(atan(1) * 4., 'f', 14).leftJustified(14); - static int cnt = 0; - int si = qMax(cnt - 6, 0); - ++cnt; - cnt %= 23; - ui->labelWait->setText(QString(si, QChar(' ')) + sPI.mid(cnt - 6, 6).trimmed()); - if (!coeffs.isReady()) return; - //ui->table->setK(coeffsK.k()->data(), coeffsK.count()); - //ui->table->showK(); - } -} - - -void KX_Pult::setControlsEnable(bool enable) { - foreach (XCheck * i, checks) - i->setEnabled(enable); - ui->buttonShowAll->setEnabled(enable); - ui->buttonHideAll->setEnabled(enable); -} - - -void KX_Pult::setX(const KX_X_Data & data) { - if (!show_x) return; - //ui->graphic->lock(); - for (int i = 0; i < KX_X_PACKET_NUM; ++i) { - if (!isNormalDouble(data.x_data[i])) continue; - ui->graphic->addPoint(data.x_data[i], i, false); - values[i]->setText(QString("(%1): %2").arg(data.x_num[i]).arg(data.x_data[i])); - } - //ui->graphic->unlock(); - if (!isPause) { - need_update = true; - } - if (!needWrite) return; - stream << QString::number(tm.elapsed() / 1000., 'f', 3) << " " << QTime::currentTime().toString("hh:mm:ss") << " " << wcnt++; - for (int i = 0; i < KX_X_PACKET_NUM; ++i) - stream << " " << QString::number(data.x_data[i], 'f', 4); - stream << "\n"; -} - - -void KX_Pult::addToList(const QString & s, const QColor & c) { - ui->list->addItem(QDateTime::currentDateTime().toString("dd/MM/yyyy hh:ss - ") + s); - ui->list->item(ui->list->count() - 1)->setTextColor(c); - ui->list->scrollToBottom(); -} - - -void KX_Pult::on_buttonRecord_clicked() { - static bool isRec = false; - int cinc = 0; - QString str; - isRec = !isRec; - setControlsEnable(!isRec); - if (isRec) { - tm.restart(); - file.close(); - file.setFileName(outdir + getNewFileName(cinc)); - while (file.exists()) - file.setFileName(outdir + getNewFileName(cinc++)); - file.open(QIODevice::ReadWrite); - stream.setDevice(&file); - stream << "T V C"; - for (int i = 0; i < KX_X_PACKET_NUM; ++i) - stream << " X" + QString::number(checks[i]->spin.value()); - stream << "\n"; - wcnt = 0; - needWrite = true; - ui->buttonRecord->setText(trUtf8("Finish record")); - ui->buttonRecord->setIcon(icon_stop); - emit recordStarted(QFileInfo(file).completeBaseName()); - } else { - needWrite = false; - stream.setDevice(0); - file.close(); - ui->buttonRecord->setText(trUtf8("Start record")); - ui->buttonRecord->setIcon(icon_record); - emit recordStopped(QFileInfo(file).completeBaseName()); - } -} - - -void KX_Pult::on_actionClear_triggered() { - switch (clear_target) { - case 0: - ui->list->clear(); - break; - case 1: - clearSelected(); - break; - default: break; - } -} - - -void KX_Pult::clearSelected() { - QList si = ui->treeK->selectedItems(); - ui->treeK->setUpdatesEnabled(false); - ui->treeK->blockSignals(true); - foreach (QTreeWidgetItem * i, si) { - int ki = i->text(0).toInt(); - i->setText(2, ""); - coeffs.setFormula(ki, ""); - } - ui->treeK->blockSignals(false); - ui->treeK->setUpdatesEnabled(true); - if (ui->checkKAutoCalculate->isChecked()) { - QApplication::processEvents(); - calculate(); - } -} - - -QString KX_Pult::typeName(const QString & n) const { - if (n.isEmpty()) return ""; - switch (n[0].toLatin1()) { - case 'l': return trUtf8("list"); break; - case 'b': return trUtf8("bool"); break; - case 'n': return trUtf8("int"); break; - case 'f': return trUtf8("double"); break; - case 'c': return trUtf8("color"); break; - case 'r': return trUtf8("rect"); break; - case 'a': return trUtf8("rect"); break; - case 'p': return trUtf8("point"); break; - case 'v': return trUtf8("vector"); break; - case 'i': return trUtf8("IP"); break; - case 'e': return trUtf8("enum"); break; - case 'F': return trUtf8("file"); break; - case 'D': return trUtf8("dir"); break; - } - return ""; -} - - -void KX_Pult::received(bool ok) { - if (!ok) return; - setX(prot_x->from_x); -} - - -void KX_Pult::on_treeK_itemClicked(QTreeWidgetItem * item, int column) { - Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable; - if (column == 2) f |= Qt::ItemIsEditable; - item->setFlags(f); -} - - -void KX_Pult::on_treeK_itemChanged(QTreeWidgetItem * item, int column) { - if (column != 2) return; - int ki = item->text(0).toInt(); - coeffs.setFormula(ki, piqt(item->text(column))); - if (ui->checkKAutoCalculate->isChecked()) - calculate(); -} - - -QString KX_Pult::getNewFileName(int inc) { - dir.refresh(); - dir.setNameFilters(QStringList("Experiment_*.txt")); - return "Experiment_" + QDateTime::currentDateTime().toString("dd_MM_yy__hh_mm_ss") + "__" + - QString::number(dir.entryList().count() + inc) + ".txt"; -} - - -void KX_Pult::on_buttonSendK_clicked() { - on_buttonWrite_clicked(); - coeffs.sendCoeffs(); - if (timer != 0) killTimer(timer); - timer = startTimer(100); -} - - -void KX_Pult::on_buttonReceiveK_clicked() { - coeffs.receiveCoeffs(); - if (timer != 0) killTimer(timer); - timer = startTimer(100); -} - - -void KX_Pult::on_buttonShowAll_clicked() { - for (int i = 0; i < KX_X_PACKET_NUM; ++i) { - checks[i]->check.setChecked(true); - //ui->graphic->setGraphicVisible(true, i); - } -} - - -void KX_Pult::on_buttonHideAll_clicked() { - for (int i = 0; i < KX_X_PACKET_NUM; ++i) { - checks[i]->check.setChecked(false); - //ui->graphic->setGraphicVisible(false, i); - } -} - - -void KX_Pult::on_buttonRead_clicked() { - coeffs.readCoeffs(); - addToList(trUtf8("Read K file \"%1\": %2 coeffs, %3 bytes").arg(PI2QString(coeffs.fileName())).arg(K.size_s()).arg(coeffs.k_content.size_s()), Qt::darkMagenta); - updateTree(); -} - - -void KX_Pult::on_buttonWrite_clicked() { - coeffs.writeCoeffs(); - addToList(trUtf8("Write K file \"%1\": %2 coeffs, %3 bytes").arg(PI2QString(coeffs.fileName())).arg(K.size_s()).arg(coeffs.k_content.size_s()), Qt::darkMagenta); -} - - -void KX_Pult::on_buttonResize_clicked() { - K.resize(ui->spinSize->value()); - coeffs.formulas.resize(ui->spinSize->value()); - ui->spinSize->setStyleSheet(""); - updateTree(); -} - - -void KX_Pult::on_buttonSetKDesc_clicked() { - QString ret = QFileDialog::getOpenFileName(this, trUtf8("Select *.h file with K description"), kdesc_file, "C/C++ header files(*.h *.hpp);;All files(*)"); - if (ret.isEmpty()) return; - kdesc_file = QDir::current().relativeFilePath(ret); - updateKDesc(true); -} - - -void KX_Pult::on_buttonSetCDesc_clicked() { - QString ret = QFileDialog::getOpenFileName(this, trUtf8("Select *.h file with C description"), cdesc_file, "C/C++ header files(*.h *.hpp);;All files(*)"); - if (ret.isEmpty()) return; - cdesc_file = QDir::current().relativeFilePath(ret); - updateCDesc(); -} - - -void KX_Pult::on_spinSize_valueChanged(int) { - ui->spinSize->setStyleSheet(""); -} - - -void KX_Pult::k_sendFailed() { - stopWait(); - addToList(trUtf8("K not sended"), Qt::darkRed); -} - - -void KX_Pult::k_sendSucceed() { - stopWait(); - addToList(trUtf8("K sended"), Qt::darkGreen); -} - - -void KX_Pult::k_receiveFailed() { - stopWait(); - addToList(trUtf8("K not received"), Qt::darkRed); -} - - -void KX_Pult::k_receiveSucceed() { - stopWait(); - addToList(trUtf8("K received"), Qt::darkGreen); - addToList(trUtf8("Write K file \"%1\": %2 coeffs, %3 bytes").arg(PI2QString(coeffs.fileName())).arg(K.size_s()).arg(coeffs.k_content.size_s()), Qt::darkMagenta); - ui->spinSize->setValue(K.size_s()); - updateTree(); - //ui->table->setK(coeffsK.k()->data(), coeffsK.count()); -} - - -void KX_Pult::on_spinBuffer_editingFinished() { - ui->graphic->setHistorySize(ui->spinBuffer->value()); -} - - -void KX_Pult::stopWait() { - killTimer(timer); - timer = 0; - ui->labelWait->setText(" "); -} - - -void KX_Pult::updateGraph() { - ui->graphic->updateGraphics(); -} - - -void KX_Pult::updateDiag() { - ui->labelKReceiver->setText(piqt(coeffs.k_protocol->receiverDeviceName() + " - " + coeffs.k_protocol->receiverDeviceState())); - ui->labelKSender->setText(piqt(coeffs.k_protocol->senderDeviceName())); - ui->spinKSended->setValue(coeffs.k_protocol->sendCount()); - ui->spinKReceived->setValue(coeffs.k_protocol->receiveCount()); - ui->spinKWrong->setValue(coeffs.k_protocol->wrongCount()); - ui->spinKMissed->setValue(coeffs.k_protocol->missedCount()); - ui->labelKType->setText("0x" + QString::number(coeffs.k_protocol->from_k.type, 16).toUpper().rightJustified(2, '0')); - ui->labelKAddrPult->setText("0x" + QString::number(coeffs.k_protocol->from_k.addr_to, 16).toUpper().rightJustified(2, '0')); - ui->labelKAddr->setText("0x" + QString::number(coeffs.k_protocol->to_k.addr_to, 16).toUpper().rightJustified(2, '0')); - - ui->labelXReceiver->setText(piqt(prot_x->receiverDeviceName() + " - " + prot_x->receiverDeviceState())); - ui->labelXSender->setText(piqt(prot_x->senderDeviceName())); - ui->spinXSended->setValue(prot_x->sendCount()); - ui->spinXReceived->setValue(prot_x->receiveCount()); - ui->spinXWrong->setValue(prot_x->wrongCount()); - ui->spinXMissed->setValue(prot_x->missedCount()); - ui->labelXType->setText("0x" + QString::number(prot_x->from_x.type, 16).toUpper().rightJustified(2, '0')); - ui->labelXAddrPult->setText("0x" + QString::number(prot_x->from_x.addr_to, 16).toUpper().rightJustified(2, '0')); - ui->labelXAddr->setText("0x" + QString::number(prot_x->to_x.addr_to, 16).toUpper().rightJustified(2, '0')); - - ui->labelCReceiver->setText(piqt(prot_c->receiverDeviceName() + " - " + prot_c->receiverDeviceState())); - ui->labelCSender->setText(piqt(prot_c->senderDeviceName())); - ui->spinCSended->setValue(prot_c->sendCount()); - ui->spinCReceived->setValue(prot_c->receiveCount()); - ui->spinCWrong->setValue(prot_c->wrongCount()); - ui->spinCMissed->setValue(prot_c->missedCount()); - ui->labelCType->setText("0x" + QString::number(prot_c->from_c.type, 16).toUpper().rightJustified(2, '0')); - ui->labelCAddrPult->setText("0x" + QString::number(prot_c->from_c.addr_to, 16).toUpper().rightJustified(2, '0')); - ui->labelCAddr->setText("0x" + QString::number(prot_c->to_c.addr_to, 16).toUpper().rightJustified(2, '0')); -} - - -int KX_Pult::parseHeader(const QString & file, QMap & map) { - map.clear(); - QFile f(file); - if (!f.open(QIODevice::ReadOnly)) { - updateTree(); - addToList(trUtf8("Update descriptions from \"%1\": error").arg(file), Qt::darkRed); - return 0; - } - addToList(trUtf8("Update descriptions from \"%1\"").arg(file), Qt::darkMagenta); - QTextStream s(&f); - int cind = -1; - bool found = false; - //qDebug() << "\nparse" << file; - while (!s.atEnd()) { - QString line = s.readLine().trimmed(), num, name, type, comment; - int i = line.indexOf("//"); - if (i >= 0) { - comment = line.right(line.length() - i - 2); - type = comment.left(1); - comment = comment.right(comment.length() - 1).trimmed(); - line = line.left(i).trimmed(); - } - if (line.isEmpty()) continue; - if (line.contains("enum")) { - found = true; - continue; - } - if (!found) continue; - if (line.contains('}')) - break; - line.remove(',').remove(' ').remove('\t'); - i = line.indexOf("="); - if (i >= 0) { - num = line.right(line.length() - i - 1).trimmed(); - line = line.left(i).trimmed(); - } - name = line; - if (num.isEmpty()) - ++cind; - else - cind = Q2PIString(num).toInt(); - KDesc kd; - kd.index = cind; - kd.name = name; - kd.type = type; - kd.comment = comment; - map[kd.index] = kd; - //qDebug() << name << cind << type << comment; - } - cind++; - return cind; -} - - -void KX_Pult::updateKDesc(bool ask_move) { - int cind = parseHeader(kdesc_file, kdesc); - if (K.size_s() < cind) { - ui->spinSize->setValue(cind); - ui->spinSize->setStyleSheet("background-color: rgb(220, 220, 255);"); - } - bool move = false; - if (ask_move) - move = (QMessageBox::question(this, "KX Pult", "Save values at associated names?", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes); - updateTree(move); -} - - -void KX_Pult::updateCDesc() { - parseHeader(cdesc_file, cdesc); - updateCommands(); -} - - -bool stringComp(const QString & s1, const QString & s2) { - if (s1.size() != s2.size()) - return s1.size() > s2.size(); - return s1 > s2; -} - - -void KX_Pult::updateTree(bool move) { - int sp = ui->treeK->verticalScrollBar()->value(); - QApplication::setOverrideCursor(Qt::WaitCursor); - //qDebug() << "fill tree ..."; - QMap prev_val; - if (move) { - for (int i = 0; i < ui->treeK->topLevelItemCount(); ++i) { - QTreeWidgetItem * ti = ui->treeK->topLevelItem(i); - if (!ti->text(1).isEmpty()) - prev_val[ti->text(1)] = ti->text(2); - } - } - ui->treeK->clear(); - ui->treeK->setUpdatesEnabled(false); - eval.clearCustomVariables(); - for (int i = 0; i < K.size_s(); ++i) { - QTreeWidgetItem * ti = new QTreeWidgetItem(); - KDesc kd = kdesc[i]; - QString kn = QString("k%1").arg(i); - knames[kn] = i; - knames_sort << kn; - if (eval.content.findVariable(kn) < 0) - eval.content.addVariable(kn, 0., false); - if (!kd.name.isEmpty()) { - knames[kd.name] = i; - knames_sort << kd.name; - eval.content.addVariable(kd.name, 0., false); - } - if (move && !kd.name.isEmpty()) { - if (prev_val.contains(kd.name)) - coeffs.setFormula(i, Q2PIString(prev_val[kd.name])); - } - ti->setText(0, QString::number(i)); - ti->setText(1, kd.name); - ti->setText(2, PI2QString(coeffs.formula(i))); - ti->setText(3, QString::number(K[i])); - ti->setText(4, typeName(kd.type)); - ti->setText(5, kd.comment); - ui->treeK->addTopLevelItem(ti); - } - eval.content.sortVariables(); - //qDebug() << "fill tree ok"; - //qDebug() << "sort ..."; - qSort(knames_sort.begin(), knames_sort.end(), stringComp); - //qDebug() << "names" << knames_sort; - //qDebug() << "sort ok"; - QApplication::restoreOverrideCursor(); - ui->treeK->setUpdatesEnabled(true); - ui->treeK->verticalScrollBar()->setValue(sp); - calculate(); - filterTree(); -} - - -void KX_Pult::updateCommands() { - while (ui->layoutCommands->count() > 0) - delete ui->layoutCommands->itemAt(0)->widget(); - QMapIterator it(cdesc); - while (it.hasNext()) { - it.next(); - KDesc kd = it.value(); - QPushButton * b = new QPushButton(); - QString text = kd.name; - if (!kd.comment.isEmpty()) - text += QString("\n(%1)").arg(kd.comment); - b->setText(text); - b->setProperty("_command", kd.index); - connect(b, SIGNAL(clicked()), this, SLOT(commandClicked())); - ui->layoutCommands->addWidget(b); - } -} - - -void KX_Pult::filterTree() { - bool he = ui->checkKHideEmpty->isChecked(); - bool hn = ui->checkKHideNormal->isChecked(); - bool hs = ui->checkKHideExpressions->isChecked(); - bool ok = false; - QString fl = ui->lineKSearch->text(); - int lc = ui->treeK->topLevelItemCount(); - for (int i = 0; i < lc; ++i) { - QTreeWidgetItem * ti = ui->treeK->topLevelItem(i); - if (ti->text(1).isEmpty() && he) - ti->setHidden(true); - else - if (fl.isEmpty()) - ti->setHidden(false); - else - ti->setHidden(!ti->text(0).contains(fl, Qt::CaseInsensitive) && - !ti->text(1).contains(fl, Qt::CaseInsensitive) && - !ti->text(2).contains(fl, Qt::CaseInsensitive) && - !ti->text(3).contains(fl, Qt::CaseInsensitive) && - !ti->text(4).contains(fl, Qt::CaseInsensitive)); - if (hn) - if (ti->data(0, Qt::UserRole).toBool()) - ti->setHidden(true); - if (hs) { - ti->data(2, Qt::DisplayRole).toDouble(&ok); - if (!ok) - ti->setHidden(true); - } - } -} - - -void KX_Pult::calculate() { - calculated.clear(); - ui->treeK->setUpdatesEnabled(false); - ui->treeK->blockSignals(true); - QApplication::setOverrideCursor(Qt::WaitCursor); - progress(0, 100); - ui->buttonCalculate->setEnabled(false); - QApplication::processEvents(); - for (int i = 0; i < K.size_s(); ++i) { - ui->treeK->topLevelItem(i)->setToolTip(2, QString()); - ui->treeK->topLevelItem(i)->setToolTip(3, QString()); - } - for (int i = 0; i < K.size_s(); ++i) { - progress(i, K.size_s()); - calculateExpression(i, QVector()); - } - ui->buttonCalculate->setEnabled(true); - ui->progress->setValue(100); - QApplication::restoreOverrideCursor(); - ui->treeK->blockSignals(false); - ui->treeK->setUpdatesEnabled(true); -} - - -bool KX_Pult::calculateExpression(int i, QVector trace) { - if (calculated.contains(i)) return true; - trace << i; - QTreeWidgetItem * ti = ui->treeK->topLevelItem(i); - QString expr = ti->text(2); - if (expr.isEmpty() || expr == "0" || expr == "0,00000000" || expr == "0.00000000") { - markNormal(ti); - calculated << i; - K[i] = 0.; - ti->setText(3, "0"); - return true; - } - //ti->setToolTip(2, QString()); - if (!eval.check(expr)) { - markError(ti, eval.error()); - return false; - } - foreach (const QString & n, knames_sort) { - if (expr.contains(n)) { - int ki = knames.value(n, -1); - if (trace.contains(ki)) { - QString strace; - trace << ki; - for (int j = 0; j < trace.size(); ++j) { - //calculated << trace[j]; - if (j > 0) strace += " -> "; - strace += "k" + QString::number(trace[j]); - } - for (int j = 0; j < trace.size(); ++j) { - QTreeWidgetItem * pti = ui->treeK->topLevelItem(trace[j]); - markError(pti, QString("Circular dependency: %1!").arg(strace)); - } - return false; - } - if (ki < 0) { - markError(ti); - return false; - } - if (calculated.contains(ki)) { - eval.setVariable(n, K[ki]); - } else { - if (calculateExpression(ki, trace)) - eval.setVariable(n, K[ki]); - else { - markError(ti); - return false; - } - } - } - } - markNormal(ti); - calculated << i; - complexd ret = eval.evaluate(); - K[i] = ret.real(); - ti->setText(3, QString::number(K[i])); - return true; -} - - -void KX_Pult::markError(QTreeWidgetItem * item, const QString & tool_tip) { - int cc = item->columnCount(); - for (int i = 0; i < cc; ++i) - item->setBackgroundColor(i, QColor(255, 200, 200)); - if (item->toolTip(2).isEmpty()) - item->setToolTip(2, tool_tip); - if (item->toolTip(3).isEmpty()) - item->setToolTip(3, tool_tip); - item->setData(0, Qt::UserRole, false); - item->setText(3, "Error"); -} - - -void KX_Pult::markNormal(QTreeWidgetItem * item) { - int cc = item->columnCount(); - for (int i = 0; i < cc; ++i) - item->setBackground(i, Qt::NoBrush); - item->setToolTip(2, QString()); - item->setToolTip(3, QString()); - item->setData(0, Qt::UserRole, true); -} - - -void KX_Pult::progress(int val, int max) { - if (ctm.elapsed() < 50) return; - ctm.restart(); - ui->progress->setValue(qRound(val * 100. / max)); - QApplication::processEvents(); -} - - -void KX_Pult::renew(bool write) { - addToList(trUtf8("Update settings from \"%1\"").arg(PI2QString(config_)), Qt::darkMagenta); - dir.setPath(config.getValue("x.output_dir", "./Experiments/").stringValue()); - setWindowTitle(config.getValue("title", "Noname").stringValue() + trUtf8(" - KX Pult")); - //if (write) ui->configWidget->write(); - if (prot_x != 0) { - prot_x->stop(); - delete prot_x; - } - if (prot_c != 0) { - prot_c->stop(); - delete prot_c; - } - prot_x = new __KX_Protocol_X(config_, name_x); - prot_c = new __KX_Protocol_C(config_, name_c); - ui->graphic->setAutoXIncrement(prot_x->expectedFrequency() > 0. ? 1. / prot_x->expectedFrequency() : 1.); - coeffs.renew(); - CONNECT1(void, bool, prot_x, received, this, received); -} - - -void KX_Pult::toggledX(int index, bool on) { - ui->graphic->setGraphicVisible(on, index); -} - - -void KX_Pult::changedX(int index, int num) { - prot_x->to_x.x_num[index] = num; -} - - -void KX_Pult::commandClicked() { - QPushButton * b = qobject_cast(sender()); - if (!b) return; - prot_c->sendCommand(b->property("_command").toInt()); -} diff --git a/test/kx_utils/kx_pult.h b/test/kx_utils/kx_pult.h deleted file mode 100644 index 2e2d21b..0000000 --- a/test/kx_utils/kx_pult.h +++ /dev/null @@ -1,170 +0,0 @@ -#ifndef KX_PULT_H -#define KX_PULT_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "kx_coeffs.h" -#include "kx_protocol_x.h" -#include "kx_protocol_c.h" -#include "piqt.h" -#include "session_manager.h" -#include "qpievaluator.h" - - -class XCheck: public QWidget { - Q_OBJECT -public: - explicit XCheck(int index); - QCheckBox check; - QSpinBox spin; -private: - bool eventFilter(QObject * o, QEvent * e); - int index_; -private slots: - void spinChanged(int value) {check.setChecked(true); emit valueChanged(index_, value);} - void checkChanged_(bool value) {emit checkChanged(index_, value);} -signals: - void valueChanged(int index, int value); - void checkChanged(int index, bool on); -}; - - -namespace Ui { - class KX_Pult; -}; - -class KX_Pult: public QMainWindow, public PIObject -{ - Q_OBJECT - PIOBJECT(KX_Pult) -public: - KX_Pult(); - ~KX_Pult(); - -private: - struct KDesc { - KDesc() {index = -1;} - int index; - QString name; - QString type; - QString comment; - QString value; - }; - - bool eventFilter(QObject * o, QEvent * e); - void timerEvent(QTimerEvent * ); - void setControlsEnable(bool enable); - void setX(const KX_X_Data & data); - void addToList(const QString & s, const QColor & c); - QString getNewFileName(int inc); - QColor invertColor(QColor col) {return QColor(255 - col.red(), 255 - col.green(), 255 - col.blue());} - void stopWait(); - bool calculateExpression(int i, QVector trace); - void markError(QTreeWidgetItem * item, const QString & tool_tip = QString()); - void markNormal(QTreeWidgetItem * item); - void progress(int val, int max); - void clearSelected(); - QString typeName(const QString & n) const; - int parseHeader(const QString & file, QMap & map); - - EVENT_HANDLER1(void, received, bool, ok); - EVENT_HANDLER(void, pip_sendFailed) {emit q_k_sendFailed();} - EVENT_HANDLER(void, pip_sendSucceed) {emit q_k_sendSucceed();} - EVENT_HANDLER(void, pip_receiveFailed) {emit q_k_receiveFailed();} - EVENT_HANDLER(void, pip_receiveSucceed) {emit q_k_receiveSucceed();} - - QVector checks; - QVector values; - - Ui::KX_Pult * ui; - PIString config_, name_x, name_c; - QDir dir; - QString outdir, kdesc_file, cdesc_file; - QFile file; - QTime tm, ctm; - QIcon icon_record, icon_stop; - QTextStream stream; - QTimer timer_diag; - QMap kdesc, cdesc; - QMap knames; - QSet calculated; - QStringList knames_sort; - QPIEvaluator eval; - SessionManager session; - QPIConfig config; - QMenu log_menu; - //QVector k, x; - KX_Coefficients coeffs; - __KX_Protocol_X * prot_x; - __KX_Protocol_C * prot_c; - int csize, wcnt, timer, timer_update, clear_target; - bool needWrite, isPause, need_update, show_x; - -private slots: - void loading(QPIConfig & conf); - void saving(QPIConfig & conf); - void updateGraph(); - void updateDiag(); - void updateKDesc(bool ask_move = false); - void updateCDesc(); - void updateTree(bool move = false); - void updateCommands(); - void filterTree(); - void calculate(); - void renew(bool write = true); - void toggledX(int index, bool on); - void changedX(int index, int num); - void commandClicked(); - void k_sendFailed(); - void k_sendSucceed(); - void k_receiveFailed(); - void k_receiveSucceed(); - void on_spinBuffer_editingFinished(); - void on_buttonSendK_clicked(); - void on_buttonReceiveK_clicked(); - void on_buttonShowAll_clicked(); - void on_buttonHideAll_clicked(); - void on_buttonRead_clicked(); - void on_buttonWrite_clicked(); - void on_buttonResize_clicked(); - void on_buttonSetKDesc_clicked(); - void on_buttonReparseKDesc_clicked() {updateKDesc(true);} - void on_buttonSetCDesc_clicked(); - void on_buttonReparseCDesc_clicked() {updateCDesc();} - void on_buttonCalculate_clicked() {calculate();} - void on_buttonApply_clicked() {renew();} - void on_spinSize_valueChanged(int); - void on_buttonPause_toggled(bool on) {isPause = on;} - void on_buttonRecord_clicked(); - void on_treeK_itemClicked(QTreeWidgetItem * item, int column); - void on_treeK_itemChanged(QTreeWidgetItem * item, int column); - void on_actionClear_triggered(); - -signals: - void q_k_sendFailed(); - void q_k_sendSucceed(); - void q_k_receiveFailed(); - void q_k_receiveSucceed(); - void recordStarted(const QString & fileName); - void recordStopped(const QString & fileName); - -}; - -#endif // KX_PULT_H - diff --git a/test/kx_utils/kx_pult.qrc b/test/kx_utils/kx_pult.qrc deleted file mode 100644 index 99f4688..0000000 --- a/test/kx_utils/kx_pult.qrc +++ /dev/null @@ -1,40 +0,0 @@ - - - icons/dialog-close.png - icons/edit-clear-.png - icons/edit-guides.png - icons/view-grid.png - icons/zoom-fit-best.png - icons/configure.png - icons/alpha.png - icons/document-save.png - icons/edit-clear-locationbar-rtl.png - icons/edit-find.png - icons/list-add.png - icons/edit-delete.png - icons/item-add.png - icons/item.png - icons/node-add.png - icons/node.png - icons/edit-copy.png - icons/edit-paste.png - icons/expand_s_x.png - icons/expand_s_y.png - icons/expand_x.png - icons/expand_y.png - icons/media-playback-pause.png - icons/media-playback-stop.png - icons/media-record.png - icons/application-exit.png - icons/document-save-.png - icons/view-refresh.png - icons/document-open.png - icons/archive-extract.png - icons/document-export.png - icons/document-import.png - icons/zoom-fit-height.png - icons/layer-visible-off.png - icons/layer-visible-on.png - icons/accessories-calculator.png - - diff --git a/test/kx_utils/kx_pult.ui b/test/kx_utils/kx_pult.ui deleted file mode 100644 index ab30c52..0000000 --- a/test/kx_utils/kx_pult.ui +++ /dev/null @@ -1,1311 +0,0 @@ - - - KX_Pult - - - - 0 - 0 - 1759 - 852 - - - - KX Pult - - - - - - - 0 - - - - Coefficients (K) - - - - - - - - Reparse K desc - - - - :/icons/view-refresh.png:/icons/view-refresh.png - - - - - - - Resize - - - - :/icons/zoom-fit-height.png:/icons/zoom-fit-height.png - - - - - - - Read file K - - - - :/icons/archive-extract.png:/icons/archive-extract.png - - - - - - - Send - - - - :/icons/document-export.png:/icons/document-export.png - - - - - - - Write file K - - - - :/icons/document-save-.png:/icons/document-save-.png - - - - - - - - 0 - 0 - - - - Qt::CustomContextMenu - - - QAbstractItemView::NoEditTriggers - - - QAbstractItemView::NoSelection - - - QAbstractItemView::ScrollPerPixel - - - QAbstractItemView::ScrollPerPixel - - - - - - - Receive - - - - :/icons/document-import.png:/icons/document-import.png - - - - - - - Set K desc file ... - - - - :/icons/document-open.png:/icons/document-open.png - - - - - - - 65536 - - - - - - - - 0 - 0 - - - - - 200 - 0 - - - - - - - - - - - - - - - Hide empty - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - Hide expressions - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - Hide without errors - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - :/icons/edit-find.png - - - true - - - Qt::AlignCenter - - - - - - - Search: - - - - - - - - 0 - 0 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 40 - 20 - - - - - - - - Auto calculate - - - true - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - Calculate - - - Calculate - - - - :/icons/accessories-calculator.png:/icons/accessories-calculator.png - - - - - - - 100 - - - Calculate %p% - - - - - - - - - Qt::CustomContextMenu - - - QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed - - - true - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::ScrollPerPixel - - - QAbstractItemView::ScrollPerPixel - - - false - - - false - - - 6 - - - 200 - - - 20 - - - - Index - - - - - Name - - - - - Expression - - - - - Calculated - - - - - Type - - - - - Comment - - - - - - - - - Commands (C) - - - - - - - - Set C desc file ... - - - - :/icons/document-open.png:/icons/document-open.png - - - - - - - Reparse C desc - - - - :/icons/view-refresh.png:/icons/view-refresh.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Commands - - - - - - QFrame::NoFrame - - - true - - - - - 0 - 0 - 1370 - 655 - - - - - 0 - - - 0 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 66 - 441 - - - - - - - - - - - - - - - - - - Graphics (X) - - - - - - - 10 - - - - - - - - - - - 0 - 0 - - - - Show all - - - - :/icons/layer-visible-on.png:/icons/layer-visible-on.png - - - - - - - - 0 - 0 - - - - Hide all - - - - :/icons/layer-visible-off.png:/icons/layer-visible-off.png - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Start record - - - - :/icons/media-record.png:/icons/media-record.png - - - - - - - - - - - Pause - - - - :/icons/media-playback-pause.png:/icons/media-playback-pause.png - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Show - - - - - - - - 0 - 0 - - - - с - - - 1 - - - 0.100000000000000 - - - 9999.000000000000000 - - - 10.000000000000000 - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 40 - 20 - - - - - - - - Save - - - - - - - - 0 - 0 - - - - с - - - 1 - - - 0.100000000000000 - - - 9999.000000000000000 - - - 60.000000000000000 - - - - - - - - - Graphic::Autofit|Graphic::BorderInputs|Graphic::Clear|Graphic::Configure|Graphic::CursorAxis|Graphic::Grid|Graphic::OnlyExpandX|Graphic::OnlyExpandY|Graphic::Save - - - false - - - false - - - 60.000000000000000 - - - 10.000000000000000 - - - - - - - - Configuration - - - - - - K - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - receiver: - - - - - - - - - - - - - - sender: - - - - - - - - - - - - - - sended count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - wrong received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - type: - - - - - - - - - - - - - - address K: - - - - - - - - - - - - - - - - - - - - - missed received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - address pult: - - - - - - - - - - X - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - receiver: - - - - - - - - - - - - - - sender: - - - - - - - - - - - - - - type: - - - - - - - - - - - - - - address X: - - - - - - - address pult: - - - - - - - - - - - - - - sended count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - wrong received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - - - - - - - - missed received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - - - - C - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - receiver: - - - - - - - - - - - - - - sender: - - - - - - - - - - - - - - type: - - - - - - - - - - - - - - address C: - - - - - - - address pult: - - - - - - - - - - - - - - sended count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - wrong received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - - - - - - - - missed received count: - - - - - - - true - - - 0 - - - 1999999999 - - - - - - - - - - - - true - - - true - - - true - - - false - - - 20 - - - - - - - Apply - - - - :/icons/document-save-.png:/icons/document-save-.png - - - - - - - - - - - - - - - :/icons/edit-clear-.png:/icons/edit-clear-.png - - - Clear - - - - - - Graphic - QFrame -
graphic.h
-
- - CLineEdit - QLineEdit -
clineedit.h
-
- - QPIConfigWidget - QTreeWidget -
qpiconfigwidget.h
-
-
- - - - - - spinHistory - valueChanged(double) - graphic - setMaxVisibleTime(double) - - - 919 - 107 - - - 932 - 132 - - - - -
diff --git a/test/kx_utils/main_kx_pult.cpp b/test/kx_utils/main_kx_pult.cpp deleted file mode 100644 index e5c1786..0000000 --- a/test/kx_utils/main_kx_pult.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "kx_pult.h" - - -int main(int argc, char *argv[]) { - QApplication a(argc, argv); - KX_Pult w; - w.show(); - return a.exec(); -} diff --git a/test/kx_utils/make_lib.bat b/test/kx_utils/make_lib.bat deleted file mode 100644 index 0148a43..0000000 --- a/test/kx_utils/make_lib.bat +++ /dev/null @@ -1 +0,0 @@ -cmake -G "MinGW Makefiles" -DLIB=1 && make install . %* diff --git a/test/kx_utils/piprotocol.cpp b/test/kx_utils/piprotocol.cpp deleted file mode 100644 index 111654e..0000000 --- a/test/kx_utils/piprotocol.cpp +++ /dev/null @@ -1,718 +0,0 @@ -/* - PIP - Platform Independent Primitives - Protocol, input/output channel (COM, UDP) - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "piprotocol.h" - -/** \class PIProtocol - * \brief - * \details - * \section PIProtocol_sec0 Synopsis - * - * - * - * */ - - /// DEPRECATED -PIProtocol::PIProtocol(const PIString & config, const PIString & name_, void * recHeaderPtr, int recHeaderSize, void * recDataPtr, int recDataSize, void * sendDataPtr_, int sendDataSize_): PIObject() { - init(); - protName = name_; - PIObject::setName(name_); - PIConfig conf(config, PIIODevice::ReadOnly); - if (!conf.isOpened()) { - piCoutObj << "Can`t open \"" << config << "\"!"; - devReceiverState = devSenderState = "Config error"; - return; - } - PIConfig::Entry & b(conf.getValue(name_)), - & rb(b.getValue("receiver")), - & sb(b.getValue("sender")); - - init_receiver(b, rb, config); - init_sender(b, sb, config); - - headerPtr = (uchar * )recHeaderPtr; - headerSize = recHeaderSize; - dataPtr = (uchar * )recDataPtr; - dataSize = recDataSize; - sendDataPtr = (uchar * )sendDataPtr_; - sendDataSize = sendDataSize_; - packet_ext->setHeader(PIByteArray(recHeaderPtr, recHeaderSize)); - packet_ext->setPayloadSize(recDataSize); - packet_ext->setPacketSize(recDataSize); - packet_ext->setSplitMode(PIPacketExtractor::Header); - bool null_h = (recHeaderPtr == 0 || recHeaderSize == 0), null_d = (recDataPtr == 0 || recDataSize == 0); - if (null_h && null_d) packet_ext->setSplitMode(PIPacketExtractor::None); - else { - if (null_h) packet_ext->setSplitMode(PIPacketExtractor::Size); - } -} - - -PIProtocol::~PIProtocol() { - delete diagTimer; - delete sendTimer; - delete secTimer; - delete packet_ext; - if (eth != 0) delete eth; - if (ser != 0) delete ser; -} - - -void PIProtocol::init() { - packet_ext = new PIPacketExtractor(0, PIPacketExtractor::None); - packet_ext->setThreadedReadData(this); - packet_ext->setThreadedReadSlot(receiveEvent); - packet_ext->setHeaderCheckSlot(headerValidateEvent); - packet_ext->setName("__S__PIProtocol::packet_ext"); - work = new_mp_prot = false; - eth = 0; - ser = 0; - ret_func = 0; - mp_owner = 0; - net_diag = PIProtocol::Unknown; - cur_pckt = 0; - packets[0] = packets[1] = pckt_cnt = pckt_cnt_max = 0; - diagTimer = 0; - timeout_ = 3.f; - sendTimer = new PITimer(sendEvent, this); - diagTimer = new PITimer(diagEvent, this); - secTimer = new PITimer(secEvent, this); - sendTimer->setName("__S__PIProtocol::sendTimer"); - diagTimer->setName("__S__PIProtocol::diagTimer"); - secTimer->setName("__S__PIProtocol::secTimer"); - wrong_count = receive_count = send_count = missed_count = 0; - packets_in_sec = packets_out_sec = bytes_in_sec = bytes_out_sec = 0; - immediate_freq = integral_freq = ifreq = 0.f; - headerPtr = dataPtr = sendDataPtr = 0; - headerSize = dataSize = sendDataSize = 0; - type_rec = type_send = PIProtocol::None; - devSenderState = devReceiverState = "Unknown"; - devSenderName = devReceiverName = "no device"; - secTimer->start(1000.); - /*addEvent("receiver started"); - addEvent("receiver stopped"); - addEvent("sender started"); - addEvent("sender stopped"); - addEvent("received"); - addEvent("quality changed"); - addEventHandler(HANDLER(PIProtocol, startReceive)); - addEventHandler(HANDLER(PIProtocol, startSend)); - addEventHandler(HANDLER(PIProtocol, start)); - addEventHandler(HANDLER(PIProtocol, stopReceive)); - addEventHandler(HANDLER(PIProtocol, stopSend)); - addEventHandler(HANDLER(PIProtocol, stop));*/ -} - - -void PIProtocol::init_sender(PIConfig::Entry & b, PIConfig::Entry & sb, const PIString & config) { - int ps, gps; - bool ok, gok, flag, gflag, has_dev = false; - float freq, gfreq; - PIFlags pp(0); - PIString dev, gdev; - - if (sb.isEntryExists("ip") && sb.isEntryExists("device")) { - piCoutObj << "Ambiguous sender type in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - dev = sb.getValue("ip", "", &ok); - gdev = b.getValue("ip", "", &gok); - has_dev = false; - if (ok || gok) { - if (gok && !ok) dev = gdev; - if (gok && ok && (dev != gdev)) { - piCoutObj << "Ambiguous sender type in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - ps = sb.getValue("port", 0, &ok); - gps = b.getValue("port", 0, &gok); - if (ok || gok) { - if (gok && !ok) ps = gps; - if (gok && ok && (ps != gps)) { - piCoutObj << "Ambiguous send port in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - type_send = PIProtocol::Ethernet; - if (eth == 0) eth = new PIEthernet(); - eth->setName("__S__PIProtocol::eth"); - setSenderAddress(dev, ps); - //setReceiverAddress(dev, ps); - has_dev = true; - flag = sb.getValue("reconnectEnabled", true, &ok); - gflag = b.getValue("reconnectEnabled", true, &gok); - if (ok || gok) { - if (gok && !ok) flag = gflag; - if (gok && ok && (flag != gflag)) { - piCoutObj << "Ambiguous \"reconnectEnabled\" flag in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - eth->setReopenEnabled(flag); - } - freq = sb.getValue("reconnectTimeout", 1., &ok); - gfreq = b.getValue("reconnectTimeout", 1., &gok); - if (ok || gok) { - if (gok && !ok) freq = gfreq; - if (gok && ok && (freq != gfreq)) { - piCoutObj << "Ambiguous \"reconnectTimeout\" value in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - eth->setReopenTimeout(freq * 1000); - } - /*if (sendDataPtr_ == 0) - piCoutObj << "Warning: null send data pointer!"; - if (sendDataSize_ == 0) - piCoutObj << "Warning: null send data size!";*/ - } else { - piCoutObj << "Can`t find \"" << name() << ".sender.port\" or \"" << name() << ".port\" in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - } - dev = sb.getValue("device", "", &ok); - gdev = b.getValue("device", "", &gok); - if (ok || gok) { - if (gok && !ok) dev = gdev; - if (gok && ok && (dev != gdev)) { - piCoutObj << "Ambiguous sender type in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - ps = sb.getValue("speed", 0, &ok); - gps = b.getValue("speed", 0, &gok); - if (ok || gok) { - if (gok && !ok) ps = gps; - if (gok && ok && (ps != gps)) { - piCoutObj << "Ambiguous send \"speed\" in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - flag = sb.getValue("parity", false, &ok); - gflag = b.getValue("parity", false, &gok); - if (ok || gok) { - if (gok && !ok) flag = gflag; - if (gok && ok && (flag != gflag)) { - piCoutObj << "Ambiguous send \"parity\" in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - pp.setFlag(PISerial::ParityControl, flag); - } - flag = sb.getValue("twoStopBits", false, &ok); - gflag = b.getValue("twoStopBits", false, &gok); - if (ok || gok) { - if (gok && !ok) flag = gflag; - if (gok && ok && (flag != gflag)) { - piCoutObj << "Ambiguous send \"twoStopBits\" parity in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - pp.setFlag(PISerial::TwoStopBits, flag); - } - } else { - piCoutObj << "Can`t find \"" << name() << ".sender.speed\" or \"" << name() << ".speed\" in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - type_send = PIProtocol::Serial; - if (ser == 0) ser = new PISerial(dev); - ser->setName("__S__PIProtocol::ser"); - setSenderDevice(dev, (PISerial::Speed)ps); - ser->setOutSpeed((PISerial::Speed)ps); - ser->setParameters(pp); - has_dev = true; - /*if (sendDataPtr_ == 0) - piCoutObj << "Warning: null send data pointer!"; - if (sendDataSize_ == 0) - piCoutObj << "Warning: null send data size!";*/ - } - freq = sb.getValue("frequency", -1.f, &ok); - gfreq = b.getValue("frequency", -1.f, &gok); - if (gok && !ok) freq = gfreq; - if (gok && ok && (freq != gfreq)) { - piCoutObj << "Ambiguous sender frequency in \"" << config << "\"!"; - devSenderState = "Config error"; - return; - } - if (freq > 0.f && !has_dev) - piCoutObj << "Warning: no sender device and not null send frequency!"; - setSenderFrequency(freq); -} - - -void PIProtocol::init_receiver(PIConfig::Entry & b, PIConfig::Entry & rb, const PIString & config) { - int ps, gps; - bool ok, gok, flag, gflag, has_dev = false; - float freq, gfreq; - PIFlags pp(0); - PIString dev, gdev; - - if (rb.isEntryExists("ip") && rb.isEntryExists("device")) { - piCoutObj << "Ambiguous receiver type in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - dev = rb.getValue("ip", "", &ok); - gdev = b.getValue("ip", "", &gok); - if (ok || gok) { - if (gok && !ok) dev = gdev; - if (gok && ok && (dev != gdev)) { - piCoutObj << "Ambiguous receiver type in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - ps = rb.getValue("port", 0, &ok); - gps = b.getValue("port", 0, &gok); - if (ok || gok) { - if (gok && !ok) ps = gps; - if (gok && ok && (ps != gps)) { - piCoutObj << "Ambiguous receive port in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - type_rec = PIProtocol::Ethernet; - eth = new PIEthernet(); - eth->setName("__S__PIProtocol::eth"); - packet_ext->setDevice(eth); - //setSenderAddress(dev, ps); - setReceiverAddress(dev, ps); - has_dev = true; - flag = rb.getValue("reconnectEnabled", true, &ok); - gflag = b.getValue("reconnectEnabled", true, &gok); - if (ok || gok) { - if (gok && !ok) flag = gflag; - if (gok && ok && (flag != gflag)) { - piCoutObj << "Ambiguous \"reconnectEnabled\" flag in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - eth->setReopenEnabled(flag); - } - freq = rb.getValue("reconnectTimeout", 1., &ok); - gfreq = b.getValue("reconnectTimeout", 1., &gok); - if (ok || gok) { - if (gok && !ok) freq = gfreq; - if (gok && ok && (freq != gfreq)) { - piCoutObj << "Ambiguous \"reconnectTimeout\" value in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - eth->setReopenTimeout(freq * 1000); - } - /*if (recDataPtr == 0) - piCoutObj << "Warning: null receive data pointer!"; - if (recDataSize == 0) - piCoutObj << "Warning: null receive data size!";*/ - } else { - piCoutObj << "Can`t find \"" << name() << ".receiver.port\" or \"" << name() << ".port\" in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - } - dev = rb.getValue("device", "", &ok); - gdev = b.getValue("device", "", &gok); - if (ok || gok) { - if (gok && !ok) dev = gdev; - if (gok && ok && (dev != gdev)) { - piCoutObj << "Ambiguous receiver type in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - ps = rb.getValue("speed", 0, &ok); - gps = b.getValue("speed", 0, &gok); - if (ok || gok) { - if (gok && !ok) ps = gps; - if (gok && ok && (ps != gps)) { - piCoutObj << "Ambiguous receive \"speed\" in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - flag = rb.getValue("parity", false, &ok); - gflag = b.getValue("parity", false, &gok); - if (ok || gok) { - if (gok && !ok) flag = gflag; - if (gok && ok && (flag != gflag)) { - piCoutObj << "Ambiguous receive \"parity\" in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - pp.setFlag(PISerial::ParityControl, flag); - } - flag = rb.getValue("twoStopBits", false, &ok); - gflag = b.getValue("twoStopBits", false, &gok); - if (ok || gok) { - if (gok && !ok) flag = gflag; - if (gok && ok && (flag != gflag)) { - piCoutObj << "Ambiguous receive \"twoStopBits\" parity in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - pp.setFlag(PISerial::TwoStopBits, flag); - } - type_rec = PIProtocol::Serial; - type_send = PIProtocol::Serial; - ser = new PISerial(dev); - ser->setName("__S__PIProtocol::ser"); - packet_ext->setDevice(ser); - //setSenderDevice(dev, (PISerial::Speed)ps); - setReceiverDevice(dev, (PISerial::Speed)ps); - ser->setInSpeed((PISerial::Speed)ps); - ser->setParameters(pp); - ps = rb.getValue("vtime", 1, &ok); - gps = b.getValue("vtime", 1, &gok); - if (ok || gok) { - if (gok && !ok) ps = gps; - if (gok && ok && (ps != gps)) { - piCoutObj << "Ambiguous receive \"vtime\" in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - ser->setVTime(ps); - } - has_dev = true; - /*if (recDataPtr == 0) - piCoutObj << "Warning: null receive data pointer!"; - if (recDataSize == 0) - piCoutObj << "Warning: null receive data size!";*/ - } else { - piCoutObj << "Can`t find \"" << name() << ".receiver.speed\" or \"" << name() << ".speed\" in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - } - freq = rb.getValue("frequency", -1.f, &ok); - gfreq = b.getValue("frequency", -1.f, &gok); - if (gok && !ok) freq = gfreq; - if (gok && ok && (freq != gfreq)) { - piCoutObj << "Ambiguous expected frequency in \"" << config << "\"!"; - devReceiverState = "Config error"; - return; - } - if (freq > 0.f && !has_dev) - piCoutObj << "Warning: no receiver device and not null expected frequency!"; - float tm = b.getValue("disconnectTimeout", 3.f); - if (tm <= 0.f) - piCoutObj << "Warning: diconnect timeout <= 0 s!"; - timeout_ = (tm < 0.f) ? 0.f : tm; - setExpectedFrequency(freq); -} - - -void PIProtocol::setReceiverDevice(const PIString & device, PISerial::Speed speed, bool force) { - if (force) { - type_send = type_rec = PIProtocol::Serial; - if (ser == 0) { - ser = new PISerial(); - ser->setName("__S__PIProtocol::ser"); - packet_ext->setDevice(ser); - } - } - if (type_rec == PIProtocol::Serial && ser != 0) { - ser->setDevice(device); - ser->setSpeed(speed); - devReceiverName = device; - devSenderName = device; - } -} - - -void PIProtocol::setReceiverAddress(const PIString & ip, int port, bool force) { - if (force) { - type_rec = PIProtocol::Ethernet; - if (eth == 0) { - eth = new PIEthernet(); - eth->setName("__S__PIProtocol::eth"); - packet_ext->setDevice(eth); - } - } - if (type_rec == PIProtocol::Ethernet && eth != 0) { - eth->setReadAddress(ip, port); - if (ip.trimmed().isEmpty()) devReceiverName = "no ip"; - else devReceiverName = ip + ":" + PIString::fromNumber(port); - } -} - - -void PIProtocol::setSenderDevice(const PIString & device, PISerial::Speed speed, bool force) { - if (force) { - type_send = type_rec = PIProtocol::Serial; - if (ser == 0) ser = new PISerial(); - ser->setName("__S__PIProtocol::ser"); - } - if (type_send == PIProtocol::Serial && ser != 0) { - ser->setDevice(device); - ser->setSpeed(speed); - ser->open(); - devSenderName = device; - } -} - - -void PIProtocol::setSenderAddress(const PIString & ip, int port, bool force) { - if (force) { - type_send = PIProtocol::Ethernet; - if (eth == 0) eth = new PIEthernet(); - eth->setName("__S__PIProtocol::eth"); - } - if (type_send == PIProtocol::Ethernet && eth != 0) { - eth->setSendAddress(ip, port); - if (ip.isEmpty()) devSenderName = "no ip"; - else devSenderName = ip + ":" + PIString::fromNumber(port); - } -} - - -void PIProtocol::setSenderIP(const PIString & ip, bool force) { - if (force) { - type_send = PIProtocol::Ethernet; - if (eth == 0) eth = new PIEthernet(); - } - if (type_send == PIProtocol::Ethernet && eth != 0) { - eth->setSendIP(ip); - if (ip.isEmpty()) devSenderName = "no ip"; - else devSenderName = ip + ":" + PIString::fromNumber(eth->sendPort()); - } -} - - -void PIProtocol::setSenderPort(int port, bool force) { - if (force) { - type_send = PIProtocol::Ethernet; - if (eth == 0) eth = new PIEthernet(); - eth->setName("__S__PIProtocol::eth"); - } - if (type_send == PIProtocol::Ethernet && eth != 0) { - eth->setSendPort(port); - if (eth->sendIP().isEmpty()) devSenderName = "no ip"; - else devSenderName = eth->sendIP() + ":" + PIString::fromNumber(port); - } -} - - -void PIProtocol::setExpectedFrequency(float frequency) { - exp_freq = frequency; - changeDisconnectTimeout(); -} - - -void PIProtocol::changeDisconnectTimeout() { - pckt_cnt_max = int(piRound(timeout_ * exp_freq)); - if (pckt_cnt_max < 3) pckt_cnt_max = 3; - last_packets.resize(pckt_cnt_max); -} - - -void PIProtocol::startReceive(float exp_frequency) { - if (exp_frequency > 0.f) exp_freq = exp_frequency; - //if (type_rec == PIProtocol::Serial) ser->start(); - //if (type_rec == PIProtocol::Ethernet) eth->start(); - packet_ext->startThreadedRead(); - msleep(1); - check_state(); - if (exp_freq <= 0.f) return; - setExpectedFrequency(exp_freq); - diagTimer->start(1000. / exp_freq); - diag_tm.reset(); - receiverStarted(); -} - - -void PIProtocol::startSend(float frequency) { - //cout << "** start send " << send_freq << ", " << frequency << endl; - if (frequency > 0.f) send_freq = frequency; - msleep(1); - check_state(); - if (send_freq <= 0.f) return; - sendTimer->start(1000. / send_freq); - diag_tm.reset(); - senderStarted(); -} - - -void PIProtocol::stopReceive() { - //if (type_rec == PIProtocol::Serial) ser->stop(); - //if (type_rec == PIProtocol::Ethernet) eth->stop(); - packet_ext->stop(); - diagTimer->stop(); - receiverStopped(); -} - - -bool PIProtocol::receiveEvent(void * t, uchar * data, int size) { - PIProtocol * p = (PIProtocol * )t; - if (!p->receive(data, size)) return false; - p->work = true; - //p->lock(); - if (p->validate()) { - p->received(true); - //p->unlock(); - p->ifreq = p->diag_tm.elapsed_m(); - if (p->ifreq > 0.) p->ifreq = 1000. / p->ifreq; - p->diag_tm.reset(); - p->receive_count++; - p->packets_in_sec++; - p->bytes_in_sec += size; - p->cur_pckt = 1; - if (p->ret_func != 0) p->ret_func(p); - if (p->mp_owner != 0) PIMultiProtocolBase::receiveEvent(p->mp_owner, p, true, data, size); - return true; - } - p->received(false); - //p->unlock(); - p->wrong_count++; - if (p->mp_owner != 0) PIMultiProtocolBase::receiveEvent(p->mp_owner, p, false, data, size); - return false; -} - - -void PIProtocol::diagEvent(void * t, int) { - PIProtocol * p = (PIProtocol * )t; - p->calc_freq(); - p->calc_diag(); - p->check_state(); - if (p->ser != 0) p->missed_count = p->packet_ext->missedPackets(); -} - - -void PIProtocol::secEvent(void * t, int ) { - PIProtocol * p = (PIProtocol * )t; - p->speedIn = PIString::readableSize(p->bytes_in_sec) + "/s"; - p->speedOut = PIString::readableSize(p->bytes_out_sec) + "/s"; - p->bytes_in_sec = p->bytes_out_sec = p->packets_in_sec = p->packets_out_sec = 0; - if (p->ser != 0) p->missed_count = p->packet_ext->missedPackets(); -} - - -void PIProtocol::calc_diag() { - PIProtocol::Quality diag; - if (!work) { - diag = PIProtocol::Unknown; - return; - } - if (pckt_cnt < pckt_cnt_max) { - last_packets[pckt_cnt] = cur_pckt; - pckt_cnt++; - } else { - packets[(int)last_packets.back()]--; - if (!last_packets.isEmpty()) last_packets.pop_back(); - last_packets.push_front(cur_pckt); - } - packets[(int)cur_pckt]++; - cur_pckt = 0; - float good_percents; - good_percents = (float)packets[1] / pckt_cnt * 100.f; - if (good_percents == 0.f) diag = PIProtocol::Failure; - else if (good_percents <= 20.f) diag = PIProtocol::Bad; - else if (good_percents > 20.f && good_percents <= 80.f) diag = PIProtocol::Average; - else diag = PIProtocol::Good; - if (diag != net_diag) { - qualityChanged(diag, net_diag); - net_diag = diag; - } -} - - -void PIProtocol::calc_freq() { - float tf;// = float(1000.f / diagTimer->elapsed_m()); - tf = immediate_freq = ifreq; - ifreq = 0.f; - if (last_freq.size_s() >= pckt_cnt_max && last_freq.size_s() > 0) last_freq.pop_front(); - last_freq.push_back(tf); - tf = last_freq[0]; - for (uint i = 1; i < last_freq.size(); ++i) - tf += last_freq[i]; - integral_freq = tf / last_freq.size(); -} - - -void PIProtocol::check_state() { - if (type_rec == PIProtocol::Serial) { - if (ser != 0) { - if (ser->isOpened()) devReceiverState = "Opened"; - else devReceiverState = "Not opened"; - } - else devReceiverState = "Not exists"; - } - if (type_rec == PIProtocol::Ethernet) { - if (eth != 0) { - if (eth->isOpened()) devReceiverState = "Opened"; - else devReceiverState = "Not opened"; - } - else devReceiverState = "Not exists"; - } - if (type_send == PIProtocol::Serial) { - if (ser != 0) { - if (ser->isOpened()) devSenderState = "Opened"; - else devSenderState = "Not opened"; - } - else devSenderState = "Not exists"; - } - if (type_send == PIProtocol::Ethernet) { - if (eth != 0) { - if (eth->isOpened()) devSenderState = "Opened"; - else devSenderState = "Not opened"; - } - else devSenderState = "Not exists"; - } -} - - -void PIProtocol::send(const void * data, int size, bool direct) { - if (!direct) { - if (data == 0 || size == 0) return; - if (!aboutSend()) return; - } - if (type_send == PIProtocol::Serial) - if (ser->send(data, size)) { - send_count++; - packets_out_sec++; - bytes_out_sec += size; - } - if (type_send == PIProtocol::Ethernet) - if (eth->send(data, size)) { - send_count++; - packets_out_sec++; - bytes_out_sec += size; - } -} - - -void PIProtocol::send() { - //lock(); - //memcpy(packet, sendDataPtr, sendDataSize); - //unlock(); - if (!aboutSend()) return; - if (sendDataPtr == 0 || sendDataSize == 0) return; - if (type_send == PIProtocol::Serial) - if (ser->send(sendDataPtr, sendDataSize)) { - send_count++; - packets_out_sec++; - bytes_out_sec += sendDataSize; - } - if (type_send == PIProtocol::Ethernet) - if (eth->send(sendDataPtr, sendDataSize)) { - send_count++; - packets_out_sec++; - bytes_out_sec += sendDataSize; - } -} diff --git a/test/kx_utils/piprotocol.h b/test/kx_utils/piprotocol.h deleted file mode 100644 index 2c41fa0..0000000 --- a/test/kx_utils/piprotocol.h +++ /dev/null @@ -1,238 +0,0 @@ -/*! \file piprotocol.h - * \brief Highly configurable from file I/O channel -*/ -/* - PIP - Platform Independent Primitives - Protocol, input/output channel (COM, UDP) - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef PIPROTOCOL_H -#define PIPROTOCOL_H - -#include "piserial.h" -#include "piethernet.h" -#include "pipacketextractor.h" -#include "pitimer.h" -#include "piconfig.h" -#include "pifile.h" - -class PIProtocol; /// DEPRECATED - -class PIP_EXPORT PIMultiProtocolBase: protected PIObject /// DEPRECATED -{ - PIOBJECT_SUBCLASS(PIMultiProtocolBase, PIObject) - friend class PIProtocol; -public: - PIMultiProtocolBase() {;} /// DEPRECATED - virtual ~PIMultiProtocolBase() {;} - -protected: - virtual void received(PIProtocol * prot, bool corrected, uchar * data, int size) {;} - -private: - static void receiveEvent(PIMultiProtocolBase * p, PIProtocol * prot, bool corrected, uchar * data, int size) {p->mutex_receive.lock(); p->received(prot, corrected, data, size); p->mutex_receive.unlock();} - - PIMutex mutex_receive; - -}; - -typedef void (*ReceiveFunc)(void * ); - -/// events: -/// void receiverStarted() -/// void receiverStopped() -/// void senderStarted() -/// void senderStopped() -/// void received(bool validate_is_ok) -/// void qualityChanged(PIProtocol::Quality old_quality, PIProtocol::Quality new_quality) -/// -/// handlers: -/// void startReceive(float exp_frequency = -1.f) -/// void stopReceive() -/// void startSend(float frequency = -1.f) -/// void stopSend() -/// void start() -/// void stop() -/// void send() -/// void send(const void * data, int size, bool direct = false) -class PIP_EXPORT PIProtocol: public PIObject /// DEPRECATED -{ - PIOBJECT_SUBCLASS(PIProtocol, PIObject) - friend class PIMultiProtocolBase; - friend class PIMultiProtocol; - enum Type {None, Serial, Ethernet}; -public: - - //! Contructs an empty unconfigured protocol - PIProtocol(): PIObject() {init();} /// DEPRECATED - - //! Contructs protocol configured from file "config", config file section "name" - PIProtocol(const PIString & config, const PIString & name, void * recHeaderPtr = 0, int recHeaderSize = 0, - void * recDataPtr = 0, int recDataSize = 0, void * sendDataPtr = 0, int sendDataSize = 0); // from config - - virtual ~PIProtocol(); - - //! Connection quality - enum Quality { - Unknown /** Unknown, no one packet received yet */ = 1, - Failure /** No connection, no one correct packet received for last period */ = 2, - Bad /** Bad connection, correct packets received <= 20% */ = 3, - Average /** Average connection, correct packets received > 20% and <= 80% */ = 4, - Good /** Good connection, correct packets received > 80% */ = 5 - }; - - EVENT_HANDLER0(void, startReceive) {startReceive(-1.f);} - EVENT_HANDLER1(void, startReceive, float, exp_frequency); // if "frequency = -1" used last passed value - EVENT_HANDLER0(void, stopReceive); - void setExpectedFrequency(float frequency); // for connection quality diagnostic - void setReceiverDevice(const PIString & device, PISerial::Speed speed, bool force = false); // for Serial - void setReceiverData(void * dataPtr, int dataSize) {this->dataPtr = (uchar * )dataPtr; this->dataSize = dataSize; packet_ext->setHeader(PIByteArray(headerPtr, headerSize)); packet_ext->setPayloadSize(dataSize); packet_ext->setPacketSize(dataSize);} - void setReceiverDataHeader(void * headerPtr, int headerSize) {this->headerPtr = (uchar * )headerPtr; this->headerSize = headerSize; packet_ext->setHeader(PIByteArray(headerPtr, headerSize)); packet_ext->setPayloadSize(dataSize); packet_ext->setPacketSize(dataSize);} - void setReceiverAddress(const PIString & ip, int port, bool force = false); // for Ethernet - void setReceiverParameters(PIFlags parameters) {if (type_rec == PIProtocol::Serial || type_send == PIProtocol::Serial) ser->setParameters(parameters);} // for Serial - void setReceiveSlot(ReceiveFunc slot) {ret_func = slot;} - float expectedFrequency() const {return exp_freq;} - - EVENT_HANDLER0(void, startSend) {startSend(-1.f);} // if "frequency = -1" used last passed value - EVENT_HANDLER1(void, startSend, float, frequency); // if "frequency = -1" used last passed value - EVENT_HANDLER0(void, stopSend) {sendTimer->stop(); senderStopped();} - void setSenderFrequency(float frequency) {send_freq = frequency;} - void setSenderDevice(const PIString & device, PISerial::Speed speed, bool force = false); // for Serial - void setSenderData(void * dataPtr, int dataSize) {sendDataPtr = (uchar * )dataPtr; sendDataSize = dataSize;} - void setSenderAddress(const PIString & ip, int port, bool force = false); // for Ethernet - void setSenderIP(const PIString & ip, bool force = false); // for Ethernet - void setSenderPort(int port, bool force = false); // for Ethernet - void setSenderParameters(PIFlags parameters) {if (type_send == PIProtocol::Serial) ser->setParameters(parameters);} // for Serial - float senderFrequency() const {return send_freq;} - - EVENT_HANDLER0(void, start) {startReceive(); startSend();} - EVENT_HANDLER0(void, stop) {stopReceive(); stopSend();} - EVENT_HANDLER0(void, send); - EVENT_HANDLER2(void, send, const void *, data, int, size) {send(data, size, false);} - EVENT_HANDLER3(void, send, const void *, data, int, size, bool, direct); - - void setName(const PIString & name) {protName = name; PIObject::setName(name);} - PIString name() const {return protName;} - void setDisconnectTimeout(float timeout) {timeout_ = timeout; changeDisconnectTimeout();} - float disconnectTimeout() const {return timeout_;} - const float * disconnectTimeout_ptr() const {return &timeout_;} - float immediateFrequency() const {return immediate_freq;} - float integralFrequency() const {return integral_freq;} - const float * immediateFrequency_ptr() const {return &immediate_freq;} - const float * integralFrequency_ptr() const {return &integral_freq;} - ullong receiveCountPerSec() const {return packets_in_sec;} - const ullong * receiveCountPerSec_ptr() const {return &packets_in_sec;} - ullong sendCountPerSec() const {return packets_out_sec;} - const ullong * sendCountPerSec_ptr() const {return &packets_out_sec;} - ullong receiveBytesPerSec() const {return bytes_in_sec;} - const ullong * receiveBytesPerSec_ptr() const {return &bytes_in_sec;} - ullong sendBytesPerSec() const {return bytes_out_sec;} - const ullong * sendBytesPerSec_ptr() const {return &bytes_out_sec;} - ullong receiveCount() const {return receive_count;} - const ullong * receiveCount_ptr() const {return &receive_count;} - ullong wrongCount() const {return wrong_count;} - const ullong * wrongCount_ptr() const {return &wrong_count;} - ullong sendCount() const {return send_count;} - const ullong * sendCount_ptr() const {return &send_count;} - ullong missedCount() const {return missed_count;} - const ullong * missedCount_ptr() const {return &missed_count;} - PIProtocol::Quality quality() const {return net_diag;} // receive quality - const int * quality_ptr() const {return (int * )&net_diag;} // receive quality pointer - PIString receiverDeviceName() const {return devReceiverName;} - PIString senderDeviceName() const {return devSenderName;} - PIString receiverDeviceState() const {return devReceiverState;} - const PIString * receiverDeviceState_ptr() const {return &devReceiverState;} - PIString senderDeviceState() const {return devSenderState;} - const PIString * senderDeviceState_ptr() const {return &devSenderState;} - PIString receiveSpeed() const {return speedIn;} - const PIString * receiveSpeed_ptr() const {return &speedIn;} - PIString sendSpeed() const {return speedOut;} - const PIString * sendSpeed_ptr() const {return &speedOut;} - - void * receiveData() {return dataPtr;} - void * sendData() {return sendDataPtr;} - - PIPacketExtractor * packetExtractor() {return packet_ext;} -// PIByteArray lastHeader() {return packet_ext->lastHeader();} - - EVENT0(receiverStarted) - EVENT0(receiverStopped) - EVENT0(senderStarted) - EVENT0(senderStopped) - EVENT1(received, bool, validate_is_ok) - EVENT2(qualityChanged, PIProtocol::Quality, new_quality, PIProtocol::Quality, old_quality) - -protected: - virtual bool receive(uchar * data, int size) {if (dataPtr != 0) memcpy(dataPtr, data, size); return true;} // executed when raw data received, break if 'false' return - virtual bool validate() {return true;} // function for validate algorithm and save data from dataPtr to external struct - virtual bool headerValidate(uchar * src, uchar * rec, int size) {for (int i = 0; i < size; ++i) if (src[i] != rec[i]) return false; return true;} // function for validate header (COM-port and headerSize > 0) - virtual uint checksum_i(void * data, int size) { // function for checksum (uint) - uint c = 0; - for (int i = 0; i < size; ++i) - c += ((uchar*)data)[i]; - return ~(c + 1); - } - virtual uchar checksum_c(void * data, int size) { // function for checksum (uchar) - uchar c = 0; - for (int i = 0; i < size; ++i) - c += ((uchar*)data)[i]; - return ~(c + 1); - } - virtual bool aboutSend() {return true;} // executed before send data, if return 'false' then data is not sending - - void init(); - void init_sender(PIConfig::Entry & b, PIConfig::Entry & sb, const PIString & config); - void init_receiver(PIConfig::Entry & b, PIConfig::Entry & rb, const PIString & config); - void check_state(); - void calc_freq(); - void calc_diag(); - - PISerial * ser; - PIEthernet * eth; - uint dataSize, headerSize, sendDataSize; - uchar * dataPtr, * headerPtr, * sendDataPtr; - -private: - static void sendEvent(void * e, int) {((PIProtocol * )e)->send();} - static bool receiveEvent(void * t, uchar * data, int size); - static bool headerValidateEvent(void * t, uchar * src, uchar * rec, int size) {return ((PIProtocol * )t)->headerValidate(src, rec, size);} - static void diagEvent(void * t, int); - static void secEvent(void * t, int); - - void setMultiProtocolOwner(PIMultiProtocolBase * mp) {mp_owner = mp;} - PIMultiProtocolBase * multiProtocolOwner() const {return mp_owner;} - void changeDisconnectTimeout(); - - ReceiveFunc ret_func; - PIPacketExtractor * packet_ext; - PITimer * diagTimer, * sendTimer, * secTimer; - PITimeMeasurer diag_tm; - PIMultiProtocolBase * mp_owner; - PIProtocol::Type type_send, type_rec; - PIProtocol::Quality net_diag; - PIDeque last_freq; - PIDeque last_packets; - PIString protName, devReceiverName, devReceiverState, devSenderName, devSenderState, speedIn, speedOut; - bool work, new_mp_prot; - float exp_freq, send_freq, ifreq, immediate_freq, integral_freq, timeout_; - int packets[2], pckt_cnt, pckt_cnt_max; - char cur_pckt; - ullong wrong_count, receive_count, send_count, missed_count, packets_in_sec, packets_out_sec, bytes_in_sec, bytes_out_sec; - -}; - -#endif // PIPROTOCOL_H diff --git a/test/logo.png b/test/logo.png deleted file mode 100644 index e08b36a7bd5d92b148d581a713d99f72979dcf35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13843 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 VA4M$F<+T6+002ovPDHLkV1iYT0IC20 diff --git a/test/make_android.bat b/test/make_android.bat deleted file mode 100644 index 470a994..0000000 --- a/test/make_android.bat +++ /dev/null @@ -1,45 +0,0 @@ -@echo off -rem please add to environment ANDROID_QT5_DIR (path to Qt directory) and ANDROID_NDK_HOME (path to android ndk directory) -rem execute with Android API version and arch e. g. : #make_android.bat 24 arm ../libs -set _usage_=0 -if [%~1]==[] set _usage_=1 -if [%~2]==[] set _usage_=1 -if [%~3]==[] set _usage_=1 -if %_usage_%==1 ( - echo Usage: make_android.bat ^ ^ ^ - echo ^ ^ ^ - number of API ^(e.g. 19^) - echo ^ ^ ^ - architecture ^(arm, arm64, x86, x86_64^) - echo ^ ^ ^ - path to sources - echo. - echo You also have to set next env variables^: - echo ^ ^ ANDROID_QT5_DIR - path to Qt dir, contains subdirs for arch - echo ^ ^ ANDROID_NDK_HOME - path to android ndk directory - exit /b -) -set QARCH= -set AARCH= -if %~2==arm ( - set QARCH=armv7 - set AARCH=armeabi-v7a -) -if %~2==arm64 ( - set QARCH=arm64_v8a - set AARCH=arm64-v8a -) -if %~2==x86 ( - set QARCH=x86 - set AARCH=x86 -) -if %~2==x86_64 ( - echo Qt doesn`t support x86_64, building without Qt - set AARCH=x86_64 -) -set Qt5_ROOT=%ANDROID_QT5_DIR%\android_%QARCH%\lib\cmake -set Qt5_DIR=%Qt5_ROOT%\Qt5 -if NOT [%QARCH%]==[] ( - @echo on - cmake_mgw -Wno-dev -DCMAKE_TOOLCHAIN_FILE=%ANDROID_NDK_HOME%\build\cmake\android.toolchain.cmake -DANDROID_STL=c++_shared -DANDROID_PLATFORM=android-%~1 -DANDROID_ABI=%AARCH% -DICU=0 -DQt4=0 -DQt5=1 -DQGLVIEW=0 -DQt5_DIR=%Qt5_ROOT%\Qt5 -DQt5LinguistTools_DIR=%Qt5_ROOT%\Qt5LinguistTools -DQt5UiPlugin_DIR=%Qt5_ROOT%\Qt5UiPlugin -DQt5Widgets_DIR=%Qt5_ROOT%\Qt5Widgets -DQt5Core_DIR=%Qt5_ROOT%\Qt5Core -DQt5Gui_DIR=%Qt5_ROOT%\Qt5Gui -DQt5Sql_DIR=%Qt5_ROOT%\Qt5Sql -DQt5OpenGL_DIR=%Qt5_ROOT%\Qt5OpenGL -DQt5PrintSupport_DIR=%Qt5_ROOT%\Qt5PrintSupport -DQt5Script_DIR=%Qt5_ROOT%\Qt5Script -DQt5Positioning_DIR=%Qt5_ROOT%\Qt5Positioning %~3 %~4 %~5 %~6 -) else ( - @echo on - cmake_mgw -Wno-dev -DCMAKE_TOOLCHAIN_FILE=%ANDROID_NDK_HOME%\build\cmake\android.toolchain.cmake -DANDROID_STL=c++_shared -DANDROID_PLATFORM=android-%~1 -DANDROID_ABI=%AARCH% -DICU=0 -DQt4=0 -DQt5=0 -DQGLVIEW=0 %~3 %~4 %~5 %~6 -) diff --git a/test/make_android.sh b/test/make_android.sh deleted file mode 100755 index e4e0fef..0000000 --- a/test/make_android.sh +++ /dev/null @@ -1,11 +0,0 @@ -export Qt5_ROOT=/mnt/data/Qt_5.9.1_linux/5.9.1/android_armv7/lib/cmake -export Qt5_DIR=${Qt5_ROOT}/Qt5 -export Qt5LinguistTools_DIR=${Qt5_ROOT}/Qt5LinguistTools -export Qt5UiPlugin_DIR=${Qt5_ROOT}/Qt5UiPlugin -export Qt5Widgets_DIR=${Qt5_ROOT}/Qt5Widgets -export Qt5Core_DIR=${Qt5_ROOT}/Qt5Core -export Qt5Gui_DIR=${Qt5_ROOT}/Qt5Gui -export Qt5Sql_DIR=${Qt5_ROOT}/Qt5Sql -export Qt5OpenGL_DIR=${Qt5_ROOT}/Qt5OpenGL -export Qt5Designer_DIR=${Qt5_ROOT}/Qt5Designer -rm -rf * && cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE=/mnt/data/Distrib/Android/android-sdk-linux/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-24 -DICU=0 -DQt4=0 -DQt5=1 -DQt5_DIR=${Qt5_ROOT}/Qt5 -DQt5LinguistTools_DIR=${Qt5_ROOT}/Qt5LinguistTools -DQt5UiPlugin_DIR=${Qt5_ROOT}/Qt5UiPlugin -DQt5Widgets_DIR=${Qt5_ROOT}/Qt5Widgets -DQt5Core_DIR=${Qt5_ROOT}/Qt5Core -DQt5Gui_DIR=${Qt5_ROOT}/Qt5Gui -DQt5Sql_DIR=${Qt5_ROOT}/Qt5Sql -DQt5OpenGL_DIR=${Qt5_ROOT}/Qt5OpenGL ../libs diff --git a/test/make_libs.bat b/test/make_libs.bat deleted file mode 100644 index dd57e1a..0000000 --- a/test/make_libs.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -set ARCH=%~1 -set PATH=%SDK_MINGW_DIR%%ARCH%\bin;%SDK_QT4_DIR%%ARCH%\bin;%SDK_CMAKE_DIR%\bin -if defined SDK_QT5_DIR set Qt5_DIR=%SDK_QT5_DIR%%ARCH% -mkdir ..\libs_build_win%ARCH% -cd ../libs_build_win%ARCH% && cmake_mgw -Wno-dev -DQGLVIEW=1 ../libs && make install -j4 && cd ../libs && pause diff --git a/test/make_libs.sh b/test/make_libs.sh deleted file mode 100755 index ec03987..0000000 --- a/test/make_libs.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/bash -cd .. -mkdir libs_build_linux -cd libs_build_linux -cmake ../libs -make install $@ diff --git a/test/make_libs32.bat b/test/make_libs32.bat deleted file mode 100644 index c1103ef..0000000 --- a/test/make_libs32.bat +++ /dev/null @@ -1 +0,0 @@ -make_libs.bat 32 \ No newline at end of file diff --git a/test/make_libs64.bat b/test/make_libs64.bat deleted file mode 100644 index f12abc1..0000000 --- a/test/make_libs64.bat +++ /dev/null @@ -1 +0,0 @@ -make_libs.bat 64 \ No newline at end of file diff --git a/test/make_libs_all.bat b/test/make_libs_all.bat deleted file mode 100644 index b6bd18b..0000000 --- a/test/make_libs_all.bat +++ /dev/null @@ -1,2 +0,0 @@ -start cmd /C make_libs32.bat -start cmd /C make_libs64.bat diff --git a/test/make_libs_android.bat b/test/make_libs_android.bat deleted file mode 100644 index 20513cc..0000000 --- a/test/make_libs_android.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -mkdir ..\libs_build_android_%~1 -cd ..\libs_build_android_%~1 -call ..\libs\make_android 19 %~1 ..\libs "-DUTILS=0" -call make install -j4 -cd ..\libs diff --git a/test/make_libs_android_all.bat b/test/make_libs_android_all.bat deleted file mode 100644 index 54eb321..0000000 --- a/test/make_libs_android_all.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -for %%a in (x86,arm) do ( - call .\make_libs_android %%a -) diff --git a/test/piqt/CMakeLists.txt b/test/piqt/CMakeLists.txt deleted file mode 100644 index ec9888b..0000000 --- a/test/piqt/CMakeLists.txt +++ /dev/null @@ -1,46 +0,0 @@ -project(piqt) -cmake_minimum_required(VERSION 2.6) -if (POLICY CMP0017) - cmake_policy(SET CMP0017 NEW) -endif() -if(NOT LIBPROJECT) - find_package(PIP REQUIRED) - option(LIB "System install" 0) - option(DEBUG "Build with -g3" 0) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall") - if(DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") - endif() -endif() -find_package(QAD REQUIRED) -list(APPEND QT_MULTILIB_LIST ${PROJECT_NAME}) -set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE) -include_directories(${PIP_INCLUDES} ${QAD_INCLUDES}) -file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts") -find_qt(${QtVersions} Core Gui Positioning) -qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) -qt_add_library(${PROJECT_NAME} SHARED out_CPP) -qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets) -message(STATUS "Building ${PROJECT_NAME}") -if(LIBPROJECT) - sdk_install("pip" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}") -else() - if(LIB) - if(WIN32) - install(FILES ${out_HDR} DESTINATION ${MINGW_INCLUDE}/pip) - if(NOT "x${out_QM}" STREQUAL "x") - qt_install(FILES ${out_QM} DESTINATION QtLang) - endif() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION QtBin) - else() - install(FILES ${out_HDR} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/pip) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - endif() - message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") - else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin) - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") - endif() -endif() diff --git a/test/piqt/clean b/test/piqt/clean deleted file mode 100644 index b687351..0000000 --- a/test/piqt/clean +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/bash -VERBOSE=1 make clean -rm -rvf CMakeFiles -rm -vf CMakeCache.txt Makefile cmake_install.cmake install_manifest.txt *.dll *.a *.so *.user* *~ *cxx moc_* ui_* qrc_* *.o *.bak diff --git a/test/piqt/clean.bat b/test/piqt/clean.bat deleted file mode 100644 index f4b0eb0..0000000 --- a/test/piqt/clean.bat +++ /dev/null @@ -1,4 +0,0 @@ -#make clean -del /q /f /s CMakeFiles -rmdir /q /s CMakeFiles -del /q /f CMakeCache.txt Makefile cmake_install.cmake install_manifest.txt *.user* *~ *cxx moc_* ui_* qrc_* *.o *.exe *.a *.dll *.lib core *.bak diff --git a/test/piqt/make_lib.bat b/test/piqt/make_lib.bat deleted file mode 100644 index 0148a43..0000000 --- a/test/piqt/make_lib.bat +++ /dev/null @@ -1 +0,0 @@ -cmake -G "MinGW Makefiles" -DLIB=1 && make install . %* diff --git a/test/piqt/piqt.cpp b/test/piqt/piqt.cpp deleted file mode 100644 index 76e14c8..0000000 --- a/test/piqt/piqt.cpp +++ /dev/null @@ -1,141 +0,0 @@ -#include "piqt.h" -#include "qvariantedit.h" -#if QT_VERSION >= 0x050200 -# include -#endif - - -const QAD::Enum PI2QADEnum(const PIVariantTypes::Enum & el) { - QAD::Enum ret; - piForeachC (PIVariantTypes::Enumerator & e, el.enum_list) - ret << QAD::Enumerator(e.value, PI2QString(e.name)); - ret.selectValue(el.selectedValue()); - return ret; -} - - -const PIVariantTypes::Enum QAD2PIEnum(const QAD::Enum & el) { - PIVariantTypes::Enum ret; - foreach (const QAD::Enumerator & e, el.enum_list) - ret << PIVariantTypes::Enumerator(e.value, Q2PIString(e.name)); - ret.selectValue(el.selectedValue()); - return ret; -} - - -const QVariant PI2QVariant(const PIVariant & v) { - switch (v.type()) { - case PIVariant::pivBool: return QVariant(v.toBool()); - case PIVariant::pivChar: - case PIVariant::pivUChar: - case PIVariant::pivShort: - case PIVariant::pivUShort: - case PIVariant::pivInt: return QVariant(v.toInt()); - case PIVariant::pivUInt: return QVariant(uint(v.toInt())); - case PIVariant::pivLLong: return QVariant(v.toLLong()); - case PIVariant::pivULLong: return QVariant(ullong(v.toLLong())); - case PIVariant::pivFloat: return QVariant(v.toFloat()); - case PIVariant::pivDouble: return QVariant(v.toDouble()); - case PIVariant::pivLDouble: return QVariant(v.toDouble()); - case PIVariant::pivByteArray: return QVariant(PI2QByteArray(v.toByteArray())); - case PIVariant::pivString: return QVariant(PI2QString(v.toString())); - case PIVariant::pivStringList: return QVariant(PI2QStringList(v.toStringList())); - case PIVariant::pivTime: return QVariant(PI2QTime(v.toTime())); - case PIVariant::pivDate: return QVariant(PI2QDate(v.toDate())); - case PIVariant::pivDateTime: return QVariant(PI2QDateTime(v.toDateTime())); - case PIVariant::pivEnum: return QVariant::fromValue(PI2QADEnum(v.toEnum())); - case PIVariant::pivFile: return QVariant::fromValue(PI2QADFile(v.toFile())); - case PIVariant::pivDir: return QVariant::fromValue(PI2QADDir(v.toDir())); - case PIVariant::pivColor: return QVariant::fromValue(PI2QColor(v.toColor())); - case PIVariant::pivPoint: return QVariant(PI2QPoint(v.toPoint())); - case PIVariant::pivRect: return QVariant(PI2QRect(v.toRect())); - case PIVariant::pivIODevice: return QVariant::fromValue(PI2QADIODevice(v.toIODevice())); - case PIVariant::pivMathVector: return QVariant::fromValue(PI2QMathVector(v.toMathVector())); - case PIVariant::pivMathMatrix: return QVariant::fromValue(PI2QMathMatrix(v.toMathMatrix())); - //case PIVariant::pivSystemTime: return QVariant(v.to()); - default: return QVariant(); - } - return QVariant(); -} - - -const PIVariant Q2PIVariant(const QVariant & v) { - switch (v.type()) { - case QVariant::Bool: return PIVariant(v.toBool()); - case QVariant::Int: return PIVariant(v.toInt()); - case QVariant::UInt: return PIVariant(v.toUInt()); - case QVariant::LongLong: return PIVariant(v.toLongLong()); - case QVariant::ULongLong: return PIVariant(v.toULongLong()); - case QVariant::Double: return PIVariant(v.toDouble()); - case QVariant::ByteArray: return PIVariant(Q2PIByteArray(v.toByteArray())); - case QVariant::String: return PIVariant(Q2PIString(v.toString())); - case QVariant::StringList: return PIVariant(Q2PIStringList(v.toStringList())); - case QVariant::Time: return PIVariant(Q2PITime(v.toTime())); - case QVariant::Date: return PIVariant(Q2PIDate(v.toDate())); - case QVariant::DateTime: return PIVariant(Q2PIDateTime(v.toDateTime())); - case QVariant::Color: return PIVariant(Q2PIColor(v.value())); - case QVariant::Point: - case QVariant::PointF: return PIVariant(Q2PIPoint(v.toPointF())); - case QVariant::Rect: - case QVariant::RectF: return PIVariant(Q2PIRect(v.toRectF())); - default: break; - } - if (v.canConvert()) return PIVariant(QAD2PIEnum(v.value())); - if (v.canConvert()) return PIVariant(QAD2PIFile(v.value())); - if (v.canConvert()) return PIVariant(QAD2PIDir(v.value())); - if (v.canConvert()) return PIVariant(QAD2PIIODevice(v.value())); - if (v.canConvert()) return PIVariant(Q2PIMathVector(v.value())); - if (v.canConvert()) return PIVariant(Q2PIMathMatrix(v.value())); - return PIVariant(); -} - - -const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v) { - PIVariantTypes::IODevice d; - d.set(Q2PIPropertyStorage(v.props)); - d.prefix = Q2PIString(v.prefix); - d.mode = v.mode; - d.options = v.options; - return d; -} - - -const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v) { - return QAD::IODevice(PI2QString(v.prefix), PI2QPropertyStorage(v.get()), v.mode, v.options); -} - - -const QAD::File PI2QADFile(const PIVariantTypes::File & v) { - return QAD::File(PI2QString(v.file), PI2QString(v.filter), v.is_abs); -} - - -const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v) { - return QAD::Dir(PI2QString(v.dir), v.is_abs); -} - - -const PIVariantTypes::File QAD2PIFile(const QAD::File & v) { - return PIVariantTypes::File(Q2PIString(v.file), Q2PIString(v.filter), v.is_abs); -} - - -const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v) { - return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs); -} - - -#if QT_VERSION >= 0x050200 -const QGeoCoordinate PI2QGeoPosition(const PIGeoPosition & v) { - PIGeoPosition p(v); - p.transformTo(PIGeoPosition::Cartesian); - p.setEllipsoidModel(PIEllipsoidModel::WGS84Ellipsoid()); - p.transformTo(PIGeoPosition::Geodetic); - return QGeoCoordinate(p.latitudeGeodetic(), p.longitude(), p.height()); -} - - -const PIGeoPosition Q2PIGeoPosition(const QGeoCoordinate & v) { - return PIGeoPosition(createVectorT3d(v.latitude(), v.longitude(), v.altitude()), PIGeoPosition::Geodetic); -} -#endif diff --git a/test/piqt/piqt.h b/test/piqt/piqt.h deleted file mode 100644 index 1960a9c..0000000 --- a/test/piqt/piqt.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef PIQT_H -#define PIQT_H - -#include "pimathmatrix.h" -#include "pipropertystorage.h" -#include "qad_types.h" -#include -#include -#include -#if QT_VERSION >= 0x050200 -# include "pigeoposition.h" -#endif - - -class QGeoCoordinate; - - -const QVariant PI2QVariant(const PIVariant & v); -const PIVariant Q2PIVariant(const QVariant & v); - -//inline const QString PI2QString(const PIString & v) {return QString::fromLocal8Bit(v.data());} -inline const QString PI2QString(const PIString & v) {return QString::fromUtf8(v.dataUTF8());} - -//inline const PIString Q2PIString(const QString & v) {return PIString(v.toLocal8Bit().data());} -inline const PIString Q2PIString(const QString & v) {return PIString::fromUTF8(v.toUtf8().data());} - - -inline const QStringList PI2QStringList(const PIStringList & v) {QStringList ret; piForeachC (PIString & s, v) ret << PI2QString(s); return ret;} - -inline const PIStringList Q2PIStringList(const QStringList & v) {PIStringList ret; foreach (const QString & s, v) ret << Q2PIString(s); return ret;} - - -inline const QByteArray PI2QByteArray(const PIByteArray & v) {return QByteArray((const char *)(v.data()), v.size_s());} - -inline const PIByteArray Q2PIByteArray(const QByteArray & v) {return PIByteArray(v.constData(), v.size());} - - -inline const QPointF PI2QVector2(const PIMathVectorT2d & v) {return QPointF(v[0], v[1]);} -inline const QVector3D PI2QVector3(const PIMathVectorT3d & v) {return QVector3D(v[0], v[1], v[2]);} - -inline const PIMathVectorT2d Q2PIVector2(const QPointF & v) {return createVectorT2d(double(v.x()), double(v.y()));} -inline const PIMathVectorT3d Q2PIVector3(const QVector3D & v) {return createVectorT3d(double(v.x()), double(v.y()), double(v.z()));} - -inline const QPointF PI2QPoint(const PIPointd & v) {return QPointF(v.x, v.y);} -inline const PIPointd Q2PIPoint(const QPointF & v) {return PIPointd(v.x(), v.y());} - -inline const QRectF PI2QRect(const PIRectd & v) {return QRectF(v.x0, v.y0, v.width(), v.height());} -inline const PIRectd Q2PIRect(const QRectF & v) {return PIRectd(v.x(), v.y(), v.width(), v.height());} - -inline const QAD::MathVector PI2QMathVector(const PIMathVectord & v) { - QVector q = QVector(v.size()); - memcpy(q.data(), v.data(), q.size()*sizeof(double)); - return QAD::MathVector(q); -} -inline const PIMathVectord Q2PIMathVector(const QAD::MathVector & v) { - PIMathVectord p = PIMathVectord(v.v.size()); - memcpy(p.data(), v.v.data(), p.size()*sizeof(double)); - return p; -} - -inline const QAD::MathMatrix PI2QMathMatrix(const PIMathMatrixd & v) { - PIVector > p = v.toVectors(); - QVector > q = QVector >(p.size()); - for (int i = 0; i < q.size(); ++i) { - q[i].resize(p[i].size()); - memcpy(q[i].data(), p[i].data(), q[i].size()*sizeof(double)); - } - return QAD::MathMatrix(q); -} -inline const PIMathMatrixd Q2PIMathMatrix(const QAD::MathMatrix & v) { - PIVector > p = PIVector >(v.m.size()); - for (int i = 0; i < v.m.size(); ++i) { - p[i].resize(v.m[i].size()); - memcpy(p[i].data(), v.m[i].data(), p[i].size()*sizeof(double)); - } - return PIMathMatrixd(p); -} - - -inline const QDate PI2QDate(const PIDate & v) {return QDate(v.year, v.month, v.day);} -inline const QTime PI2QTime(const PITime & v) {return QTime(v.hours, v.minutes, v.seconds, v.milliseconds);} -inline const QDateTime PI2QDateTime(const PIDateTime & v) {return QDateTime(PI2QDate(v.date()), PI2QTime(v.time()));} - -inline const PIDate Q2PIDate(const QDate & v) {return PIDate(v.year(), v.month(), v.day());} -inline const PITime Q2PITime(const QTime & v) {return PITime(v.hour(), v.minute(), v.second(), v.msec());} -inline const PIDateTime Q2PIDateTime(const QDateTime & v) {return PIDateTime(Q2PIDate(v.date()), Q2PITime(v.time()));} - - -inline const QColor PI2QColor(const PIVariantTypes::Color & v) {return QColor::fromRgba(v.rgba);} -inline const PIVariantTypes::Color Q2PIColor(const QColor & v) {return PIVariantTypes::Color(v.rgba());} - - -inline PIPropertyStorage Q2PIPropertyStorage(const PropertyStorage & props) { - PIPropertyStorage ret; - foreach (const PropertyStorage::Property & p, props) - ret.addProperty(Q2PIString(p.name), Q2PIVariant(p.value), Q2PIString(p.comment), p.flags); - return ret; -} - -inline PropertyStorage PI2QPropertyStorage(const PIPropertyStorage & props) { - PropertyStorage ret; - piForeachC (PIPropertyStorage::Property & p, props) - ret.addProperty(PI2QString(p.name), PI2QVariant(p.value), PI2QString(p.comment), p.flags); - return ret; -} - - -const QAD::Enum PI2QADEnum(const PIVariantTypes::Enum & el); -const QAD::File PI2QADFile(const PIVariantTypes::File & v); -const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v); -const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v); -const PIVariantTypes::Enum QAD2PIEnum(const QAD::Enum & el); -const PIVariantTypes::File QAD2PIFile(const QAD::File & v); -const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v); -const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v); - -//inline const PIVariant QString2PIVariant(const QString & v) {return PIVariant::readFromString(QString2PIString(v));} - -#if QT_VERSION >= 0x050200 -const QGeoCoordinate PI2QGeoPosition(const PIGeoPosition & v); -const PIGeoPosition Q2PIGeoPosition(const QGeoCoordinate & v); -#endif - -template -class __PIQtConverter { -public: - __PIQtConverter(const From & v): val(v) {} - template operator To() {return To();} - From val; -}; -template inline __PIQtConverter __PIQtConvert(const From & f) {return __PIQtConverter(f);} - -#define _PIQt_CONVERT(ft, tt, ftc, tfc) \ -template<> template<> inline __PIQtConverter::operator tt() {return ftc(val);} \ -template<> template<> inline __PIQtConverter::operator ft() {return tfc(val);} -#define _PIQt_CONVERT_S(t) _PIQt_CONVERT(PI##t, Q##t, PI2Q##t, Q2PI##t) - -_PIQt_CONVERT_S(String) -_PIQt_CONVERT_S(ByteArray) -_PIQt_CONVERT_S(Time) -_PIQt_CONVERT_S(Date) -_PIQt_CONVERT_S(DateTime) -_PIQt_CONVERT(PIMathVectorT2d, QPointF, PI2QVector2, Q2PIVector2) -_PIQt_CONVERT(PIMathVectorT3d, QVector3D, PI2QVector3, Q2PIVector3) - -#define piqt __PIQtConvert -#define qtpi __PIQtConvert - -#endif // PIQT_H diff --git a/test/piqt_utils/CMakeLists.txt b/test/piqt_utils/CMakeLists.txt deleted file mode 100644 index c1a7c3c..0000000 --- a/test/piqt_utils/CMakeLists.txt +++ /dev/null @@ -1,70 +0,0 @@ -project(piqt_utils) -cmake_minimum_required(VERSION 2.6) -if (POLICY CMP0017) - cmake_policy(SET CMP0017 NEW) -endif() -set(PIQT_UTILS_UTILS 1) -if(LIBPROJECT) - include(PIPMacros) - include(SDKMacros) - set(PIQT_UTILS_UTILS ${UTILS}) -else() - find_package(PIP REQUIRED) - option(LIB "System install" 0) - option(DEBUG "Build with -g3" 0) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall") - if(DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") - endif() -endif() -set(LIBTYPE SHARED) -if(DEFINED ENV{QNX_HOST}) - set(LIBTYPE STATIC) -endif() -find_package(QAD REQUIRED) -list(APPEND QT_MULTILIB_LIST ${PROJECT_NAME}) -set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE) -include_directories(${PIP_INCLUDES} ${QAD_INCLUDES}) -file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts") -pip_code_model(CCM "../pip/src_main/io_devices/piiodevice.h" "../pip/src_main/io_utils/pipacketextractor.h" OPTIONS "-DPIP_EXPORT" "-Es") -find_qt(${QtVersions} Core Gui) -qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) -qt_add_library(${PROJECT_NAME} ${LIBTYPE} out_CPP CCM) -qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets qad_blockview piqt) -message(STATUS "Building ${PROJECT_NAME}") - -if (LIBPROJECT) - foreach(_v ${_QT_VERSIONS_}) - if (LOCAL_FOUND${_v}) - add_dependencies(piqt_utils${_v} pip_cmg) - endif() - endforeach() -endif() - -if (NOT DEFINED ENV{QNX_HOST}) - if (PIQT_UTILS_UTILS) - add_subdirectory(piconnedit) - add_subdirectory(pidumper) - add_subdirectory(piintrospector) - endif() -endif() - -if(LIBPROJECT) - sdk_install("pip" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}") -else() - if(LIB) - if(WIN32) - install(FILES ${out_HDR} DESTINATION ${MINGW_INCLUDE}/pip) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION QtBin) - else() - install(FILES ${out_HDR} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/pip) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - endif() - message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") - else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin) - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") - endif() -endif() diff --git a/test/piqt_utils/piconnedit/CMakeLists.txt b/test/piqt_utils/piconnedit/CMakeLists.txt deleted file mode 100644 index a8c7770..0000000 --- a/test/piqt_utils/piconnedit/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -project(piconnedit) -file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts") -find_qt(${QtVersions} Core Gui) -qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) -qt_add_executable(${PROJECT_NAME} WIN32 out_CPP) -qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets piqt_utils) -message(STATUS "Building ${PROJECT_NAME}") -if(LIB) - if(WIN32) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - else() - if(APPLE) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION /usr/local/bin) - else() - if (DEFINED ANDROID_PLATFORM) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${ANDROID_SYSTEM_LIBRARY_PATH}/usr/bin) - else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin) - endif() - endif() - endif() - #message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") -else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin) - #message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") -endif() diff --git a/test/piqt_utils/piconnedit/icons/Apps-accessories-calculator-icon.png b/test/piqt_utils/piconnedit/icons/Apps-accessories-calculator-icon.png deleted file mode 100644 index 37a303523edfb12dc581be38e29835d52f44661b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9661 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

`1wA0LNvU0ZM46;*CiDnG|ED(~o^Jn(`L=>A(e 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 C`rU~D diff --git a/test/piqt_utils/piconnedit/icons/DALI-designer.png b/test/piqt_utils/piconnedit/icons/DALI-designer.png deleted file mode 100644 index 23b1946f385f18232c55505c4c048e7e49cb6e12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7837 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 diff --git a/test/piqt_utils/piconnedit/icons/application-exit.png b/test/piqt_utils/piconnedit/icons/application-exit.png deleted file mode 100644 index ed5f8b2515e72608d2de9d45fb80ff481926066e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmV-!1d;oRP)(xC=n00006VoOIv0RI600RN!9r;`8x1N%ut zK~#9!wUS?G990y?zx!uqcQ)CO3Qb9*q)kbepkNXsL>fp%(uUwejD?y8p{)=!q9{uI zgNUFMD`JgLd5}{2)TjDbX(&h)iK5opBqla%!fsPV$ZoQ`*`3+BGvk@tY+BYL;-3Q_ zbGUQA-}(0J;J>IK2tw^3)mP3K37K=}c6+n4r`M;ZdQ>*cgNlLlcl&$x?F+W`_y4@Q zyxhNgd^{yVZgTFam#l;R5QCNuU}|&|FIk9vK+Wf7}ljFCx0I0B)M_DpyEQn_xvs z?A=Q~uEAY2z;11YDwXs*lI}}%*4fvmp>$V!D(@6yRp3GaWzxc#GqBTX3h8TOTW>GW z*$HJAwfv3_Bzk(_c^;HfD5X-`LtYKmiMLikQ{7@wgTlHxF@gKW#vq%T^x3ZNZrqey z_l*xe6hd{cR#q@KIf=k^p*fBN@6N=&lzJ8Aiq_UJcj|qp8>tYY(>JttV*3LfVM;B3 zC5?rTKY+@u!KI`;5`mk~p={fCBo-WNi;EDJ1tVr5Y8ikJBu~AAJo`vlHhy9SSvSW$s^eS~DeuZ?2*i_g*i_>&r1 zfnT}w8N{XYaEdNU#3_a$6~JQA>QxAU0mO$XJP1_;ck)<&>?w2%4eOMoE%>g1C*T}= z1y+rLs0l<2@=5YbUJd5dF-Qrmh-JbbeGLyEAA=A=e|mK{=TQIKd^kYE6N4iNM&E=< zYcmLJgkUoS<2E=DoVWxI6H^51#kUFi93)NQoD*~w{KF$KCq~eaStO95b^qa`sD1ea z4D!%?$Ui4$y5pqA*WX3=v1dY~2FFrALY+K}7`IVtI2yivHHm063ez;ve&lJ~`^HJ_ z6%qtS6?pTYxn++|sdfE(WZyaj=GtK4Y!XuroD(!CJ&Q;rqVF{|H{XJVoJwNa84C=q z!F~Wtj}9aM&1KkEzrylMgK$eW$_gktK%oRUWx%x^{5n1aH8YKkZ@bQ9%$&{Sz-KQY)<$WQoy6H`v`YyN&rXNhX`! znK$qG+jR+wE2alQzwqI~@a8kW`Mo!9nARHqMhxOVB)&K*@DJHiE4~@a-N&QgTq96L ztvBK-3YiLZE1s~wQ*7h-{u6rcw#1j;+4i&%b5EP@V0L)VVK97;^3@ASra2r-z+bY| ziXZxS74LnnaQNy+TM?5qJDwcccBFXl3~V=z@|Bk``@^?*=zxapFhtTo*s!rYo5a-g z#)b^yPaHj2n?N@`dv)op%m=wb-;o^;KLuuwnV&9V_%>Zz^7ywfWrY(`~3lX<@ z;mq?+{%T>H>GLDyrA(DC`CF5{W_p*6&i?1fUo=SKy|?P%35a-Ywq; zaG+3}L-fs6!vPhud&0nVURTSznjL<|(VW`L6=5wl@i@*Zl3=qVOl-|xgD zsBn>FAp{I)kQgK)3H0VjbIcApv`8wD&9dZ+hmz^Ph~ImbIaZ?aASYF}Us1&hg3*nV z1Pww8=r$3D3apM)HnUK!3p-ba8?2fyyqrJzrygH?gNg0?*tM7yB;-0EY@p!@IEIVR zW8iiR%nZSphSmn6Xo&Xl8UTsNn}X+=;HjKy1uNCfeSH2L8+3hkt-l}nrpH+_Dd8pn zi{!%D1&0ZU0TaRUJVF^EQYN%NhoA|>QUjsDS7fw%>!!dIHDnJ?3IGY$q z505-@3V}b5TIm#O3n2`H%zqRn{p&s!e1W066^0X{vqr6uBjegYltI|c0PB&So>`jzWPG{w*~E>~ zm7j4LKwEl?@Cmuu3dTBH|MAzJ5hsd8RTvpD2J?BAG0DdqM6zjxwTkJLXLNn+(^l#8 zubPtpW{5fB7s4YVO#$VPVh*66*g@CC5 zB1WVMi-@`cpJ=w}%G7P2$K8i?zlu&&8%@C$^Z)zj{RS|9lbb}P^g93m002ovPDHLk FV1ha$)&T$j diff --git a/test/piqt_utils/piconnedit/icons/archive-extract.png b/test/piqt_utils/piconnedit/icons/archive-extract.png deleted file mode 100644 index aa7b1fa1743f1bfbfdcab8a9dc2531208234c799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~&H|6fVxZ#d zAk65bF}ngN$X?><>&kwUNlZvidizCNPoN&w0G|+7pcH-(6B82~8=H}tk)DyBUywgx z!i0&FKwvTuOqnus)~q>m=FDHPU?C7JTC{la;w4L#EC+%WD^>%+nl&3XY}mYc^R{i< z_JF`%AUJT~z~RG(Pn^4W^5n@=r%s)}eD%`h%h#@7zj+G;?%cU^_wL>M_wPS=@Zj;| z$4{R=efI3x^A{lS^3|)CuU@|bg4eHKzX5}{Z{NNHgZCit2?#y|0f_kW<;&NvU%!3( z_Wk?!A3*RE41WLl_3PK~-@pI-`STYD{(->%|NoncRxJjGfy*VR{6VV@&dPcM0R-ec1`*obq&W43UszJ$TUTu!Bh3#rOAqD&O=lKc>|o zUAUM-?}*qhF1x(=MQ*!-HM*KKLIs_JWTK_gY}|J+OwKjFpdNVd!12GL<UVN*UyPkIYsOQzD2TA{GuZShC zui~BV&0@v-E0p8#DHf(DaT;$T3LF|(*LzuinZm;|V(W2OTNt;_msIW!n2rPbRim<2O<%;x#PU*+N!kT6X;9h3+>UHx3vIVCg!0ObWW Ay#N3J diff --git a/test/piqt_utils/piconnedit/icons/archive-insert-directory.png b/test/piqt_utils/piconnedit/icons/archive-insert-directory.png deleted file mode 100644 index 06722056a99c86b7011621051bacfac6797d666d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L0Nr%}0Nr%~tcSyc00007bV*G`2iXD^ z5D63^X>cF_00GQNL_t(|+NG1fOB_KQ#ou>kc5X+{sCP;HdFH?$Tp2;${D@?d6) zna|_R8wUR?GSlFD#|I!T?R^F?^6_&SS{tRFyfiV4oiRh-!3rz6xNC7D@VAqCNczD6YKIcm|~NeLUyA&HnE zl7ivKpCWV(&37g&7*-gVGeX?1p5VM>tx;wSTfTy{7~<;RaQ7_>{T%{E-+%kaorEx~ zF@PNzpvnu}O-U?mzlqLT810(Ex>JB*qYfA;$szdF4WyGCT?r12sI;9mG}hH)ECmc@ zY@B+koS>v)jN7_Wbb;rqW7s)%aHq8mMIB;t?J-jEZoJ4$Yauy(%e($Sd%^}?(Kcg* z&8!1A$V1tHQXE^kT?DtaDSns6->%$GcJ$1thUPRy!X;(eY}`xR&lq?4V+omX|mX$dS6{%PE2D<;ickfNXOv5~p6lPl4rDN&$ - - - EnvironmentId - {948faa78-0b50-402e-a285-1bca3b08de64} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - false - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - DesktopBuild - DesktopBuild - {3c749452-9483-442d-b011-933a1b5dac10} - 0 - 0 - 0 - - false - D:/work/qpicalculator-build - - - - - false - true - Сборка - - CMakeProjectManager.MakeStep - - 1 - Сборка - - ProjectExplorer.BuildSteps.Build - - - - clean - - true - true - Сборка - - CMakeProjectManager.MakeStep - - 1 - Очистка - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - all - - CMakeProjectManager.CMakeBuildConfiguration - - 1 - - - 0 - Установка - - ProjectExplorer.BuildSteps.Deploy - - 1 - Локальная установка - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 3 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - qpicalculator - - false - - 2 - - qpicalculator - - CMakeProjectManager.CMakeRunConfiguration.qpicalculator - 3768 - false - true - false - false - true - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 16 - - - Version - 16 - - diff --git a/test/qad/graphic/qpicalculator/icons/Apps-accessories-calculator-icon.png b/test/qad/graphic/qpicalculator/icons/Apps-accessories-calculator-icon.png deleted file mode 100644 index 37a303523edfb12dc581be38e29835d52f44661b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9661 zcmW-n1ymK?*T&DibX-!pF8xYKcU=TYk?xk3?uJWBq>RVX zd?}xjPizJEuwNx6CSH$?#Zr;fY`N_8)$Uq6_;Md$x0rQ#QGEzM4{nrjwQaR4*;~?` z(4CN?dL9tQZAkTf52t3c=Wn>l+(cjqEuvy>QYAnyr zrcFyuF38Nxls@o1OqHJ#6c(do1R!-S% z_1>GTL+yRv-%^y)p*ujj!?5Tx82f*kwD~wEoZSQw+nL%9XSk=Ag}YKbdPMtQ7oN}C zhu-l*re|n69i7$#@32BI8uNZ8FQxsduTV^+H~r!;R?b{&Wr8-zO+HdUw@qM&uEj8ky+wxzn@b(iFpyeNReFI?q_IG_?Y+Ywy zv_P&h;PTM)i`UMdKCi{b1(Rg@T=#AWmUXr97lKXSJYnbAma$UxE}x^0OFhbPDE_@x zxe~HYC0-{l>&4S7GIH{Y)>d)Wrj*u$rn#D~wFC*|&6k&FdiT;qtJ#EP`;v9w0qa|vN+SbAOe7jv+kfcF&N!~t@U1;;w-^vT^B#{#jz=u=T!iyk~?lcd-FsCeQ z9o;8QWYXa;u#gW8YDTCTeI6D11jwtEQ3=@E_t=VjC&A2%yFL$<1Np73MhDaNa&!UP z1^VT-AZXMO(v1yp+`<9;PmyBce;}?oWaTx*`2I|z%=IJ;CnxZ*<<)qZ=I^Bh^kyT1 zpYNShkj2l%HMg(;1a1uFGN?niMvXe>J##>0o$ZV%?u7_Ek785HEPf%n5?MxP0Y;f1 z-!K3V*>Pg%T||HS;txI+IjXd@l+wN&pX%L-BJ80jH@sAndE50FDbiay#%O#!EpXrQ-i~#WH2$VdvFpwt@ou0s?K<*@988Ud4&! zeMnn?hLvnKOlDcz+CDp4n4X3|vzp^j9TcW;)`G$6<#zEOQ*d)`Q5zo`8?(n%mg#>? zi-#f=f=4Q1>G*6sPw{kLxKMPMn;I5U?>bi7{n9aw4cM_W_xb0gYg(_Z3hBFf0y6U? z`Y^FYfW>A}qVy~#Fl{^6+xpq8J~1^}CO(rHX;>{KrAkKbJtk6C_1{FCph)qeQ!;&v z|8+%EiP6NAb`u#KwR?1y3j*wHFTh261gT7M^dCkynOc(UtGbH8~W` zwmQghisIr<xn;NY35z{IB{q5!ColY#IuKm#aD1Qd1kbzk*uZTa$< zXnmAus#vA(IEShDIB6~foW)G)a#|GldOzmU(oNfFRYb#-W7TRh9$5@n8Yks8HvJgr z-N{?r(5~}-=+{7e?ox~M+rh&>+G%)WdHzlb)c$9w+bx$ORpg)3Dlce7pLblWuDv?C z?}8tV-k5OaHk;E)KRkyaEB@yESqrSl-pAL~Nvd89wR*j~*qAu$n0G(H;3DcM0`S3; z_6vwEvlL#*78SrwJ8-fwDF^w}P(%(UB8Oue3I;PFN#;aSuIA>u$kLKltvv%6Naj+C z7_KtW)t)NzzD@thQ2A|j^Y%&TD#W|@N}$kYDY%FV++)GCYpVBfA z%b3}-C#rfJRdkj*gLTbbc+#}D9*RwLD4KsR1s0R%cIePZL3Hf8u6%&zmSTIvqsjA{r5fx`Lk(z7;aaBz%A4;FERZtfd2sq4{ z(suy+Qdge4A1VI#>7dBY-={<5|CH%GSH(DFMC4SFg{!$YqS*o72cAr6H?MHqro6R% zOmUW>-3A+rVEbdIZ;#0WC(Z7j71w>h&dPTWGl7rRf#XIAiw0gUvhQnNI>nf|#0ssK zRhAi#WHfxz3zkc%sCLzXsTp#x*CGbfMY7I)4EYXm-v(~qll==(BDohn{}i8t*Sk7#p5z-*NtYUUXSFfi@j-k5w*(iLdEv z=2-zOjPXH&%!8lzY7G0KIB>fMAt2+TvBfCc%6(3*o$We@{UtRNZm?BNI9D7mU@E7sg7(Xbo$tv8np8Ik1_LBqM?$^|sKb6VP z=R`vD1EO=1Q*z27hy&I+X}#c!`7blrsSTe$PgL7%1SbJgj11r5V@%`{uiMq}$_f;j z2Rj}KeGtF|um5CFj0EvkK>u>nbPF%G>j08Mz+Cs#3F)MR2%|p~Qdv8g@6?T`RQ9I{ zqlQCkIQXERw9KPT41?BP{jEpFd-?;P#a=B#dM0LV-i|-Kp)JW9I{O=Xzh>rr7Nae6 z%Aw*L9k5NteLLG~b7O>he14%<8xMd-m9{+s?JNK^TW`v71B*u*lpTwDSw16uy zC2+jjh&PcWr_d)kMVk0aZ>`I{h8;}S`q%hBsyl-0UR0_luj~-01Ikj;fAPeW9H7du zk?mz+n2+eRHb!(!$NpAmilv1yjs=aY#Os&^zwhM z$e*C>6$CNFtKsG6<5J^m_yZZVwvk576+u8-qjzUlAP&IUD~#@Uinf(F>^YTtJUnE~ zb%7(>E&6(RAmCi{9s_*2JF|u*`2k)Ii@7G}l~@c)fZhN>2QsbKmd^c_TrV}KINsB1 z&Hsr|@pT%TqW)%UkAe6wxivFW{haH4ANS#JEuYdh29hlq6-}|P_wOqSeqyuVvmpaB}-_X~@w)$u`+P=_sb)C<@Ip5oI zM5C1Ho~$;Wpy)h)eGCB3Xq&IAx(pHmc3z4q6Hp18$Zv|hQgz6ws8Tl0G%jUp53iN_ z7j4wCigErGi(#9~q8|?^A-Rp4BJn^Cdfh$11k;$-UqLwR$VHE4@j*%6Gq_@eh=YTx zUpL~COK0W}=H-H~xy}|E(lz8X%h?Gz3R(V6VIBvcU5$t4qeRy(J|)SsIsl!ree-@>fhjlZgd+1k|h&s2?r)^TFUAN!8F{Bgg11Uva@#t6E zMTy@qkZGLy3jMe~y4|R^)MX+0{h_Yyae99eoB7}62tt=4Xn(%+eqGNuG$a|Pp1hJ5 zDtnCn6j`du4Sn!`UD@1N;uHD~y-_n1rE2uvn}_%hyUTz_wW>Z5BXAvDaqUcjI;$iF!B-$O13+z?(&ioS!1;2$RR;1WLhq>Hi4 zNh$P7=L#&BLjRmgOsth_wFb5Y4y$9J0_)}aGXokpJ&;yY9yNQVKBE2%qfVh4C1Q!` z0he(T*SCF(DMBLdQQ2YjQo5vy2X%IAe1M%v=f9r3f`JhKkjJ$)#tK`7FfB+e-3beW zu^u@LK(*=suHvDqe4hm>!xKpEV^E2NQYyg957eQQKXyon3>lHODCG1WSWuUD>@u33 zVDYfA;XyAK@If?19F+iDJK*KHSo-&%e}7&ZI?)1TqeZWGO7mW@R9!1@pH~@wc_DS& zjW!!RC@w!NP+ZWQyKf%&jWu%bdRSnDrJSiG_p{?vg_!5&)f1f+k{4M=L0b~Lo_V(> z-^{vfe^Q@s$@~-B@uiav^856p2>Ni@^{*b&$`2gxH;yP^!l=hF!B&p1nU^ItwZ~dt zyh_c+#&{B=+<4x@S*dVZk41*{<#OYQv~iny!P_UTO6<=iua+Y+2L#s{9**A#pDzde z&)r!ixJ#YiUHy=m#M8gKKMI|4n8Bj+N^0FH$&xfrKmIKBeW6xgTST?PpLpbD?vhjp zDhTBF_&|P6g7|LPF<6%Qcdc%Hy!_RfR`z)iuh+rnsaJdCC3)VHhPd5s`0p4KjZh!` zZ1(ze%Q5iV=v3#$=k5Q!NieLU>;AxXcU&8#@a|DpE`vrx|J^R}btOvQ*x%>D@#VOS z2U8zwpUrpd)pjj560i)fet&C~&;mzL^G(dX1*0e_ZFr-GGIuRMuV3R)C|t%fz(4)3 zK$5aOk3L*->w(?aXp(J6g-bSWl&F_v3Gi=fS@F4aS zN=Yzi?}Pgfx~(~jg;sBER#w*BE&9;AlkLuW$WtufP}LuDdr%6opz$dAAuC|_Yg{T9 zd%8B{oU=o65LGnBuTItsee^mWZuX2WrA~TD#r>>-g#f|LfO<$_;2mlxrZ8%~nX8|! zAw>t6;atceE)`iYDEvv3(A~9(v$kDJh60&i(?cj@Qc0eL;uDfJFaVq$+hAvPv$7

`1wA0LNvU0ZM46;*CiDnG|ED(~o^Jn(`L=>A(e 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 C`rU~D diff --git a/test/qad/graphic/qpicalculator/icons/application-exit.png b/test/qad/graphic/qpicalculator/icons/application-exit.png deleted file mode 100644 index 4839c614294e7f16637751bdfd0b80064641a574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)0b000McNliru*9;pL3I!7>cy9mz0@q1I zK~#9!jgrr6R96(oKli>jZ(e3Hlc^*fCy5YsTr{;m)T)1h3l$fk=qk`fZ5M$q+LgOX zc3l+&L5ntBbdh4|9}tLcT!^5k*piTRh#`}xGchyc%gnrA_j!19A<~5h4(Go6?)P)Q z=WtbPe*S3h?%kWMg@t_p$y*6vfOq$uy?gD-^tAVCW#x>jU%GTJJaFJ-S1H~%5~a|s z7B8<~yQ3Dg-qo;zUHAS2oAj-K^&YfehSR@X^^o+N*MkIg`u%nEf zIzWWa@82if_1ORQMcjOz(eoGNHiMJPVMJV;yGiru-+&@p8cG4yR5tTN;AD%j0F;R_ z%{uW$jr?cFFj|AQ&|-P#k6-CLc}TC>q`khu`r;yfzyI2fEQ|Kz$CxChSac}uaq0E9 zQD?qnu=D|ufOlSPv$^mW$?`vVUGVyv*mem49orU(0_lXT4p95XnYes~((nit1}iaS z2Mc`o<5e<~hmn!sW)-%rNdd-I3axN#a1VdV$5-bW85_sZkh?y^(A;;jRtyPn;-}xp zesToI0V|{abCA&}4MlkaU)=bUkx>y_!o2bg?(%I4|K4Hv_wOm@a}1A;@%gn|6sm`? z1rVhUgbv_08aS;67BaBeukar(k^m-w_|a|5&)+iOWXQCdgxd|21qM(zj#i)dYV~qX z$8y6EmB}h@x(D+F4fp+wCOtqmTKE|+b!>3H$hZZ-3~ny^I~n+a07*qoM6N<$g1mZ)LjV8( diff --git a/test/qad/graphic/qpicalculator/icons/arrow-left.png b/test/qad/graphic/qpicalculator/icons/arrow-left.png deleted file mode 100644 index 0a74ecf7ee841819c5c56bf5c70165bf1ab3f68f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxN&P)Px#32;bRa{vGWVE_OEVFAG~Rr&w`00(qQO+^RV3l$U%2VaBZ7XSbP*-1n}R7l6| zmQQFDR~*Mb@4eaG>?XU}k-F4sQmfTnFV=&xp+QihC$Z3a2^3lo(cF3n;;EMw!K){c z1}ox0$VHHPQ%Vp-OAieQO^QU*7!R7Px|!_E&imtGx5`GLibF`jAN=4A^Ly}_@9(|e zci?@zTZp%+-jC?r&^tQ6IB$Zn;OI&K$~Uh3lFrh)(!}u4@L|8x-?LH*dT&&9kgb)T z%B`WVh6*ApuvoWx01xs_|Mvb1gL?*LL_|;vuqnG@XV5E;lwbQ|a$-`*E_r6(7yFJ? zwpFNxRg5)gqXD*-N6Lw-XpJQf;@kIrzW4bHz=6JjR|?NvI@j4%>bkLaVDEN+taww+~1zZdknYc5tt4%?hZg1E5i{~qAOQoBAJ9ZXiPRfOF0V51X z7&ICo1O-(f7BNDJWEG4pCZpS1JX4=}@o@dhZ{KeG_>*5g-LRRut;XbGEqQ{Cdw=WoL1A#l|nsOm}Bbx6rw0lMTIB`bWUS)7P64erV&!$c^(3RwmMnY z@C4~hx*aeqhRxL>jxSygCJP^QpRLyeViij~pabY^W}~A45*n%j0-Q_sBFji30DIc&x*bCS8&e98g+Z0TyPqD5{DBfl2iuGvn}YWZI+ z;KV027-4R|-KHPZ_aBY+n2swQhHE&+ai!69vnyqF|2-#uGNPx#32;bRa{vGWVE_OEVFAG~Rr&w`00(qQO+^RV3l$U$Ifwbr{Qv+0ut`KgR7l6| z*3WAkWgN%x_dL%tna$2NbS^huVuClxSU3+Fdru>}Hago#*@QVRI<-r#Ou{^fNq%IXpZso@bu# zci=_-TY}A6C_Wy4y`#3n-frFggiGkN&NG_@tjG1~Gbhf>j_(@3#S!8y2NXnuTEMxF z&P_BM%@#B4+giX-==Qo~Waik>W7`i-9{iOVK6u(Z_u$K(Q+uw4aX4jc`RKr# zS%)>2sY6p{Z2Q=Em)+%eq%UXpPwv;JUXtdgO`UvWl3H9V73Tv_swuhVn7|O(2)pqt zwU^||&sT2sSNm_zo|s*IB5?18*Y(Yb1Em9VpR=ZGBt?R%;&52C!{IH1bRgGn-bmV= zdxuVbc=ET$0vn$C*hfzW4Ti_DEpM zwNR_20-bRvN}&ZRO1_@M8kp4JQimprU-sy-5^t+Ph+VJ?5AWchIv^X%kVwjHS3v*@ z>J?;TRRbbIp66g8tb{W9T1?VUPIFY|JjKI6AA5Ki7%jKNXrZ9M04M+pcpw8psK(X8 zR>Cw{N)B^cetB#ilt_lhTXq>7VF(;~02vOU_0g9kTN^C&x~p$-N|GlQY9IJ(beMWB z{UrmM8#skP0<<5nnyi1Hchcj$kFfYZ{x*%z?P@WP@*`ULq2gbeYj`f&^Z%;VJ#l;vkCQJV$qWxe@o?y4(`og;jO c@FJU(`?vQUSDxfEi2wiq07*qoM6N<$f^rRnApigX diff --git a/test/qad/graphic/qpicalculator/icons/axes.png b/test/qad/graphic/qpicalculator/icons/axes.png deleted file mode 100644 index 11a059d313094a8bbbd8682c7512dce1f1272f4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G^tAk28_ZrvZCAbW|YuPgg)W^o=d&CKHVRG=v#o-U3d8Ta1K zaP&GHAken|h#AMCgzs_()-KA6KL7BTaRtM{R%vnDw&MbKmfzj+N>`*SBm428{Q`@c zw#^J@OH=TPQ+WS$_Q^A|D-*PBAGqCGdWUK1md+=~7}$B=di6DQ+8A8CG1Z14nX$*T zEcLI@3+@H$H%jY=Tq2H4h$F=ic zs4(4N`_}MW^nU!bN2(u~cwRBE7BH3YRy7&lm1oL7FxjCje9mVsiB-q6MkUp zR5xwbPa2_Or>>o_s<+iJxXZpQ``N$Vyp)|xw^KDQZq<^W+jpfV<&J5A> z7>gbpHa?(~q`<%gLaGPWEWGP^@cKsI#H|O^nGa=g-Zykw2n=!tPgg&ebxsLQ0Bpm% Ar2qf` diff --git a/test/qad/graphic/qpicalculator/icons/axes_1.png b/test/qad/graphic/qpicalculator/icons/axes_1.png deleted file mode 100644 index cb54382b16f573c401d63135723256280fb459c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2ipS| z3>p@5pygBm00EjwL_t(&-tC#aN&`U<$A5Q;C&cdvc2*)-ih`9z6blQV!Z+|01Z^yQ z3=1DXu(7etN1evT#zKOkV4~(M{2#6{XNV?vgFDTz?B3n}W@mQxcHpxVfqiL{atOrI zCM4`=&v$53vI5k#0(G@b$pugqKviv1)-MAk0hH7>vkI}a3y?sW2;!hiUj4=+2_PpOSp`V`g=ee+Tua|r1sL@~>;e8cK-)S%19-IxPyi;B%w{bD zJUN;8)*3)4|Ib;Bfe}6~woL9qFV+FfPTpr?5Aa6-Im-ZH){Ywe0<^R4Ld(+YbT4`g zQu=v+QZ4#Y^2(g#@l6?L?g!wfl{T!B;91&Y9dKCqY3yj7;70H1fP(o%o`JZEt7u>!gB-Jl3q c!_eL68^}IMOguMCf&c&j07*qoM6N<$f+XqKssI20 diff --git a/test/qad/graphic/qpicalculator/icons/character-set.png b/test/qad/graphic/qpicalculator/icons/character-set.png deleted file mode 100644 index 9be1a10b0980ddcca5ab4bdb61533d75d7ccf1cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmVI0z3gy)Gl_dXyIyk0%&c9T)1$>C>vV2+e*iK>vs+vF4TPL)%Wc8Yv13W&XIIo zw>1;H@gPZ36nR`i`*R0&&_FIQ4h>gg+(a@+!i`;=)W?-?y&RBHgB{ka;s$e25wh+; zLqX8$V^(AvI+Dg%)0b#=mlb6Ux)8ChZkJ^h>nPwIkJvZw!0B?u#Th%0K-QS^sH&Iw z9FIO6V*@qFjU%+QwR`wc!X~;ffxv6&xoRW6R)31JjN!MJa-M2N5v$KoJUBonmN1F5 zm>;FwK0Vy$e|?dhPFEZi3?YCIB)*R4R^jdL=~aF-=pPsivO*MP%wrZsXw3P=4$cuo z%-TTV#uvm+R<3i|QyU3|BQeSm7O|x`9Bb4Oq?ntc9-<1l{>M0qID?T4DoDUa<2y

nzcDod5s;07*qoM6N<$f@a>(Pyhe` diff --git a/test/qad/graphic/qpicalculator/icons/configure.png b/test/qad/graphic/qpicalculator/icons/configure.png deleted file mode 100644 index 5ce478b1adfefacc19d35d61e88a6c02ebe97454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L02{9W02{9XUK)`c00007bV*G`2iXAx z12+)F5m%`I00K=(L_t(|+KrN3NRx3C#*f?DM%ip+yqb-i;h^3{#n{|Ose_>C#@NE# z7GW2nLRnqZRk>l z!E^IGoWld>6hQ%)Ob;ZrwY8lTqK?F3D=U#m#6CX$#%MA3twKK3jp{=S3-bwzqR{g1 zWn_6|PHT0V4^ml84HUxVD;?&gUq4YYxrThci3GMzVQs_8wx>aE7+A7!I1H&&3b@>z z8%!qi9rhAf2rzWW0VzB{sMRWCC={ZTLLqRr7qhDNRaNlz?0&5`==X~y;%hk@XtmlC z)z#Ho0)bh$({nG|qLN>Ej>p>@6bJ+}b93`2b1k5YM55;Lw?1I9w}RI{3DeUbfmgwU zk`fL#FdNvgKDCcf%4E{WJ?36(INk6~Szl-8a=AAFK#9fNG~C_Y#rJsJGrheQ zBv;6hcfyN?hOCn~Qef@KUgduny7b2#PFv(s$3;Yx5y)(Lh@2zNPdMU39%!A08&{uL z2UAU&vxvjtpqADa^wRZWsl2>Q3i-Hgymh^|--2{HEh0%0sm`d7%`u#mNW_}#x8;FB z5JX#iH3q4425MvyP%7)Gf&RxmQ&aDUagOpXV6s?qkSO9GJthSE-4*}<0=h{= zK~#9!WzSn^)dc{@@z4K%&e_h+uIFq=%jRlhi`pDHEu;s75`r%D5=B@K77|LMhcYtB zu_)9aeCwfntVjt2>7mQOAXr+9^^#1|9GtD`ZtZrqbGCB}A8nt9-{Tj40h@h9LxO!V z9temQ$rQNw4io<8j=*th8yKhw!#7%Y@2*Yv^ax`yi{s-m!^7olE_Z&Nw~vw86c}Jj z6W_OP-`>~P->3c$VnnTx?4w_de8rShOxK5(ZQP zN|Z|!OC5~hy?t0~b6;C=n z)zxm_N=G8;IHwSVh$J|ijD%uMd4=Yrnr+*49Xe*Zv@SC@uH(%k>N`8dd%G=7PDs_) zOYq`*G)E4Q?%sk^EO23`--RVK`hNN^?k3WC<(delcw71NvYRrn(QjIEF!*z;P z2uhTT6iX}?Q+l6#4nX_Phs8U3RT`;kCQ?HTF$&>1CPG%%bL18opHJB{Fr;&U2HSaeDWsC5=5FFCVs!)oxmmJTNUXBK&;g!bWF-JV!{;2kpSPBY zt%j7V5fT=NZ_tEgE_}eDQKnIe0AT%Feu*)BAN9$KbX`#*QJ}75wan!|7&yquoBWFk r1U3tiK&qRTdZHuDlvzL)B>?yjfS~`FyINaO00000NkvXXu0mjf;$wU` diff --git a/test/qad/graphic/qpicalculator/icons/document-close.png b/test/qad/graphic/qpicalculator/icons/document-close.png deleted file mode 100644 index d3937b907eb2e7664713e8720c03c7b639f703dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$KfuP)MBl7oyO#i z1sL4}==vX=y0(DHLLu1#p798v(9Wu=LWvsC>^TmcAK#J6xcF3B!PN&_pjUWv>pH~# z7o-_3Dg%Jn1X5{ssOkx(psNNDTpmvVR zpU>lvc%w zayewP*=fqwc)x)R{DXxaY{og40c0|n5TH(PmBVM%YL%uV?ys-ElbOgv0Nb|5 z0t~|tzxMXT-LxWQXOOT7r%~U`?UE{n*aa+ M07*qoM6N<$f+OfH9smFU diff --git a/test/qad/graphic/qpicalculator/icons/document-edit.png b/test/qad/graphic/qpicalculator/icons/document-edit.png deleted file mode 100644 index 84e345d22430175e80c4ea1f1f17e6790649ee35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmV;{0xA88P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iOY{ z7a2C-AH01400LG?L_t(|+KrK2NK3O( zt1}KT&;|T(yOCwtC`po#_0k7ph9JvdOL^V;h3l;{2P{)smPaJXL|`(R!U9vMn@q;+ zw^z~I)5VRZcy?}fbNa00YRQt%#X%S&(MZ=zpTpfZ^$5qeH`waqS#O@X&Ms zw`tRn7yOwXN}hd>GX8`M)jn289%?QISxBuwU-kf#VSyA%jF1G>A++hoT)FFEUQwwo zQP5J$P~{x}4q!3nf{-NOa}u0>i0#f8pNHMtJT-@T(?Mned04GhfF)xm>J5w%nu5@m zs~QJ+*X_i1bdD|CavAj%l9rZ+#bN;`sfO)fEBL3U=RORhjYIsrZ*KpF%%I5;2-G}5B+rgH8ftEQWJ zr6;VKZ<^Jd1Cn;lS8Q5tyLI09|NlRO&tfLO6-@ps_#;*cBs?;C@>$)am331$ z)~$WfvHA6cxoan^yE1XZwTZjlP1*Ts>dsg5_CB6>=p@#DW=0W~2Qw=_Z<-(=lCxE)X>IRX_YX{#^Y^ZG-?%l>k-H0Y5I8=7U$4?S0+h`Skgt!>_*E*B@CjYj4U?PQ#TQ6QeX&F5*{%jteKDEzq-GBtFzuWL`)Qv3Orr?T-G@yGywnw%tg!q diff --git a/test/qad/graphic/qpicalculator/icons/document-revert.png b/test/qad/graphic/qpicalculator/icons/document-revert.png deleted file mode 100644 index b224e05e831017316c6c6be820d8d9773e65a1fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmV+#1LgdQP)+|i(1ZcMK zPdT8~5w%PJE|*F_{GCAknZkjrB+<_|l?2)!j!mayjedE>;F~9m4)*dRIz?VVF`F9? zP_=a*!IFxV1WGOU%O|#dh(*WmboR^+A8V?A6e_c+YbeKGn2Xn+!(uGX%(obW{gX`0 z6m#gzOI}!Z42h2fhe$T zNK6hgH}Z**QJd)~MM^ zvg+-W*X&>+eva_E?5ex?$=BvXy#7KDfgyFbGFegLhxx!&!|()Yw>qZ0oSlT<1thGB?lnqpa& z*tRV%yKYN&XNNOiz0@)cWIKDbbT|bxBogzIn4gnmGPw${xDc0t?z{4?=ee}EwG09I zX`f<64o)czO#_i%Uuu~oViAIc0qJ`7qVIg`#kwV9G;PXUXAiIiGWR7DjtTUOh(U&a Y0(K8NqN1}yW&i*H07*qoM6N<$g7~*@9RL6T diff --git a/test/qad/graphic/qpicalculator/icons/document-save-as.png b/test/qad/graphic/qpicalculator/icons/document-save-as.png deleted file mode 100644 index 821ca125fc1ca42a00dad89e15841e0044667e59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxN&P)nu~K~#9!os(NgQ*j)}Kj&=erZ$hYk*7#(3o?udr2AMcyNK0O zVi$|9^R==@7bGaUM+HHJy+m{`4Jws_z=CcFCEYJ}ql>j_bJOiC-8rs#Kwb0_ec}6d zz8}87@1G;Y<8l5))obKIdC&73)JXJAKUpr%udejB1l3QGH-(y;BMH7W(hJZM0992H zMOa)o3IX&cuNte!wLGP`q67cW@0{J5Mkr+(x8JlRG8zD4PXkTUXpeRh?Nm_`e*e6d zywu~AZSCaU#{fsxn;|Wa#xD~vnau$7ouFxYgKz?H{@OiKWAE`yeogrwmGsVy0bDy}|6k^Hr2=0P(E;h{|f5dPK#=E+| z*PS$?hNh})TepG(-l3en{*|iJFDS_UOj)6k<$FYekp>(N2XCJ|peNHeqLv_PoormH zaqGq<_MXZjcc70Qn0SeudkjHE%(_&(u=Q~&L2%M;oVYAtAI-P_Hxr@e~noV!m<65F1LMku?h>?!UBhs3wg8QWnL<#e~D*UO*%g(SuP%(MJa`_A_N{uH0G0 ztg#mLY`xFuE-GdDN&^6aK!9X@X=wrCJZx%0G>Aa}DpnOO@|28obpMtAXvKK@k7Ytwo{YB(9F? z;2_0Ku;{F~yQsL?!9iy?1;;|c4%SjZ%{70TwwHKcBH=J-%EN&+{;d zhN(E7P<- zOhP?!y}wyJm`;b*`kqJvqBiX|nL~L2fd*Ux1d!eYF6Tbg5P<9ZC&&uF5~UDVJ~Kya z$B9GKW9yGCk1)gXRIvtRXipPk@<6(R{ z10;&Qkze=csdPHpgO1qUX}3Wtm&>>~JBMXkI4Be#D>XTZ+DDB(A$cT#*xhj)kQiey zO%sM;K-YE1@`TY9(UZv}-m29|6TcYK$LKUNox!$kO4I`&Fl}aA7Py>1;e44jn~%EA z#v7jv1002ovPDHLkV1jI` B^11*3 diff --git a/test/qad/graphic/qpicalculator/icons/edit-clear-locationbar-rtl.png b/test/qad/graphic/qpicalculator/icons/edit-clear-locationbar-rtl.png deleted file mode 100644 index 6c4b83b7ac6e451f461973dac0c9a6c53dedef25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*(*`Bv~l~6?FSDYJaY8Nv17;1UpRl|%9VTf?mc|? z@cHxSFJHcV_3G8zw{Jgu`0)Aj=PzHr{QC9l_wV0-{`@KR`o0Pn77`^ve!&d#@_Ksq z_8}pusXI=cy7Kht(+?kh{P_EqYvr0*Ks9qcT^vIsBJkEM|1so z>*;dxIy;s3ojI&$kq&AP_I<(sjrDEsaU~GX3SIsdMei7bh)})pLEh`3!Xi^UM4W+LIZr$zxaOz7mw|A28X|&gK2(h zZfSoyEkX7Ar7SOshe$kJ@wtDv=f<5!bjpH@N4L9nR{6W;bYuBbX#H42w#$q|FGoYkR7TQxAVVC~AgvlcDbQ{K}v zz)cqHtE#WH+tMnPL>x$^K&cL@=%%l{d{cK)X)1KPX3v;gl4lwwgdERi@@M$WfsL{? zP3)eLTi{~|fOrH9%Ru@V9LpV0qngA+;sn5whQ6+jjvrr!>i^mx(;;26*la$T(-0mV zM6EV|5;_BFz$$UjH5GQd1)8dx zW$%Zmk#1*hIjlV+=?;EPa9k=7g`$b#;sWMW{kp}nRc!428shS@9j29Ip{OZjyKMj{ zG9;eH^E^zu)Bdikvh?_!mu@q(n3*v73Z?HG|HJ$KtcH9J10IQl4im gAunrc0{^W1Pl-(m{G3O!W1aTUgGKN%6@}cL`d0sS5o>yped=IE{-7;x28@w z?{(Ng;8?o(vZal2UCV9SDn2q^kz14h;ArvQ8^O9iIQDs;w`*7+VDp{f_ZlWKjr z)#jWRvnDK(uc_Jn=1hKh7{h^v8aJ_m2#-3&dS~D8ALfP$ET*!d=Iaj$ESaLv%HXJJ zadX**`|pc8)DD~|l;Q1I%+aL4pv!&XZJDLtiIt|8wDsLQZsnLs95p=my!g*?kHg2f ze}skYh-*HqEXlpecGB}onN3VDlz0sp?)p^E4K+@`E$^}V!kg~`uY(tgCWzj2SkAUA zhv5~wSpvTuPll7r+MOC)9ESz0WW}p&`9(OEY-(cc;=5QH8+dok<}z*b-~0I2y#2;5 zm%ceYifxa*+WiUnz4IqbQQ=IBY~#^CEhHY#9paTJbKGK|^!~uRnp-kXG?@4ro-by5 zaqMZ<%Gv6Zf0wV?sdn1z0IR9imMNmDb$a0zwKG0V)~~O%Gci?|KU*m}BkiApw!tmN Y4DJ^lh1J@%z&K#=boFyt=akR{0F^SkGXMYp diff --git a/test/qad/graphic/qpicalculator/icons/edit-cut.png b/test/qad/graphic/qpicalculator/icons/edit-cut.png deleted file mode 100644 index f4a55e3d8a9df86b0da8e7377eb4b21620e42580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n2Mb|LpV4>-?)JUISV`@i-D@I zgD|6$#_S59pk#?_L`iUdT1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$MejXb978H@ z<@Oq8F$Ida_AlUg=iqzbmh20?rl|@>J}bFBvZddo?kbdj=ip)NEYWoIwxfrjspE&I zf7kzXeO5gCv;OnD{r8;bw;$;L!puHH-#BVsl-uWB6J%O8F5eg^B)IOC*`2?k$%mE* zZGZSqJ26OnS7zPD-qf;-Cd;FRd6qBT6YZ6_>Ilp2AJ^pTp`U_QHfz-`{!$52l`)9UY%*8-9&1?@*h#)SHUM zk6ZgL_O)%DJ$u9RPC53rhxZrmt-AK^znEXmL=D9W5yeH^`@hV2(!JrW#zdgk89ZJ6 KT-G@yGywp$wU*=n diff --git a/test/qad/graphic/qpicalculator/icons/edit-delete.png b/test/qad/graphic/qpicalculator/icons/edit-delete.png deleted file mode 100644 index 87cd0b0125d6193c16c59f25b88396493e885f6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*<;sHJ( zuK)l4Z(v|p!N9PVfuWs&p^JfGA_Kz=28KBd467IzAX4jDSb*GiKE6H%hCBv_Tn2_L z28Klp4AZo=>*d6nRHQFelpgl-Jed$XS6*hniPlkf`z7+iOXNkDC`v6+mRl+(v`kK5 zwTk$9b?ME9YMZs?_j%bL_HsDk<9sU2r$Je2`?nP^4n zy$lTd7#Q|j8XpwoI%I5o$k*ermDN#8qhmrm$Ax%K+S#3Uu|MtSb;ix@0t3SZA)d=& zVVA>0E~h43Ns7Cc5PLm2@wTwQZ4try!urld@myOUR3yfXZwfVuCELX$$gHBz;HAv3GxeOFfuao00U1?PcLu(fWV*& z*YDnY^6b^8FJFJbz;6)v0|bBn{{8pwYTmshp#IsOE{-7*lD!9A#hMrxSP$@P+)yej zFHd4mDu4d>{K5|<=XpdH-eIeeoFkI5#Mch*eE5E3q& zsDJ)QWe~HZu=JPqwHHm!J!tPMoAuVM<=A|yGuL0$MD)r}t=B23K4h_=$wxfq{j{s6 zvbJ;1RM`0b{&%I*Q{~<_^9mg*KC_8ox^*ST366Hw_&MDTLh{a=g|okJNlO7blfl!~ K&t;ucLK6VLNBNWh diff --git a/test/qad/graphic/qpicalculator/icons/edit-find.png b/test/qad/graphic/qpicalculator/icons/edit-find.png deleted file mode 100644 index 9a462c0b9a40035c6c0cccb0491276d18098ac6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vk7#J9t0(?ST z|Ns9Flpzl=GBN@+vaqmlae?d=5D*X)6y)aS=HufN5)zV@mX?>72dWVk78Vs16%!K^ z7Z;b1kN}Fy$jB%wE32resHrNetE+2hXlQF|>*(m{>gpO98JQRvnrX&tshF9W zS!l>x>ZsZnXt+8#cqlS>d3pKz`ub^d`uX_<8_R?S2Ze=&MS9p~MEGW8WMqcBWoBk( zWn~o=vQON3vRn3KWzqag8Vm&QB{TPb^AhC@(M9%goCzPEIUH)ypqRpZ(583aDtGr;B5V z#MI;j1+D__&jtn`IEoMd$ocec)*P8x?>^-S*iBzCZ{MahYc{Q$ry<^PUhnzJ?6r@c ztw>t?TJt!ch=9q~LgNj=AsY+}HXDkvWCav`{CMp`Sm@PjAHEd^K1vcOGB7Ou6mb1w z;O7D(<3fQXf$bakxeCGr1p^Deac?shPo7|~?Gyi(Nr{OQKXQH9YC0+5!PO#O&aF?9 z6CP~l;Vr!SC^g~HbfYO^326xlViU}!JV|G|b^639jzYybjq(f(=Z{Mqoh4|b5A+Fx Mr>mdKI;Vst0N7E%9smFU diff --git a/test/qad/graphic/qpicalculator/icons/edit-guides.png b/test/qad/graphic/qpicalculator/icons/edit-guides.png deleted file mode 100644 index d26483960a4dcbadb1f43e5338886914f179d9e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j|KP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iXV< z7c?snYm~(R00E#$L_t(|+KrMwYZO5khoASIo!yNm$8O|E8he{GqNU=uNN;Zus-Gb4P}#Y7A?ygXPKr96UOJL@!>R*>ELDtA1kf(LUSRwVPELmLx=%zus$aSl7`2@O146zfYCK8uCTp@eddeLoc{v>-MjzqkF`<&0000j6lR&1TgAAr&ZD!k+qP}W%jJ@CJRS#CRRM9ND9TBQ-xjmkjMQ-h5{U#%r&Fla zYOo82VSMr$Ij3T=SddLTjly+Z+O#GUI#oqsWi!YTYX~Mp1c=N6n29LEN`M@2&z|S8 zz?K6UxCItq2SjA@zXAxJ_(ltgM1XRn1uCLIxCJIj9r$!Vb_lQ|29qtzg5l3_{kb(5 zjm9I~{uX%RpAOcb`;j_K(Y$)So_lkBnZvay{frS1X+EDb*~^{h3eETC3$-v9491ub zaDdSvvJ-f{HKXqXOVUsMh>g{Fm38Z8Qn zsEFDGZQ8UhvUNerpno7-6$Ig?O-OCZAcUYVBpM^NPct)}nS1ZtxpU7wZ`0MvMd6|c z-o-iReV_ANoI}ivrO-8MC!*7qA@>qQmmn!jDPFpPe?QXt2KV#F#lAKGIuXP^yGsPkXpA4yj=jcrVLkFMzX$T>)v3>(A z0>~ho*mKZ;7WkFisNKFpkhrij*O{2|zQvJWJL8xw&4A{a>&!ajSBw!16Wh}5NEvoK zC|NED0G!F#E0YD`0s-*O|Ag{eN4u^cfG|`#|c1v ziImB6L9trVfmeq9Q3zc~B|y*%2^gG<()vw7mA-q* zn-jCqDiA;73-NFcz(CLT4OYO+hBg329O)`pX$59wphhVyj=2=fYSzViZCdz){8=N< zC(U@J5kR4Ys8$LEL>MptjEXsSqf9goz_BydL^&Uxrz_OLmv|IFGin?d+-yuWmB^1m zHF;>Bv50{JZnCBHbo1MP;Wz0EAXK54)Pxl|$9E2%NB?_cZp~4ajOyOqe zsAJ8W?5|$3;xAGF|HrM{0LOS~m0q^oYKY8h@9Y|M83@4XWHY zECcUdwx+H6y0*Dw@~Eb3Ei2<|uWan=tLI~$=WkaMu7g5T-YL9`nX{*XHh^>zs;}ePFs;~PxDud5m0G&V*hkWWOq-{Z?)8y0!<{$YI z7r*@s>}^cUXuG+C)`o3N1Ja_=m{~5(AJK>aoLmxwTLg&?1e;r-aTQ>59ZIIjTm9#~ zgRxd;wbh0^^W*DuIh9Cxwq0xrGblT3hvqIi;?wMeJM;dfOn#h{3u#W0A{6fonT)ZU z>dY=xR+cewR|NHc>YXa-q=Fc3yA!i#|2ks!VJ?SiT6A(Uni zHXU1_w?nHjV-s`BcBHMbmRZOfk@FBb-29pMYNm4HwrR?~s$eHL%3}H?zh4$V6F{d!s7&8>3Hq5QWDof7Tt33K<8dCg)0ru5k&9s^DKt sKJG!8&0Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipb& z5+ev3->mik00JUOL_t(I%T1GAZX8Dpgg^H7&g^Jq*?{~WpCLdFltbhaxrmMuB*-}u zIFT(F`kCo&l9h*9S$QC;(G3=h#imWu^xHhoKP}60Ff%Ztn2{JrAV>ow+#Po(GKq+Y z(f_cUn;XBoyR+MmAItj>A2?r~p%mIkUN&d#!H{SPZ5Ur4SH3C+Efov)eZ1yNXgaMcD+&1nJ6;i);jyfCct?eXPsoK93Lg?BgaIiIho$0HJi zlE@?hFr*|?WF}al9#2fmg3PD}T)(^FI4?-xDMlnC5)Tp5_dCx-7>8OpPA7^P#Y%x< z$O<82gmBlMoFWo3L_`uH5>Po{rGktK#x|0*CmG4`z*BTjdc1|_|CGdj22o|OwP0-n z>8)~)qz}n+a07*qo IM6N<$g7~v2xBvhE diff --git a/test/qad/graphic/qpicalculator/icons/format-fill-color.png b/test/qad/graphic/qpicalculator/icons/format-fill-color.png deleted file mode 100644 index 6601f53c3ece4e5437fef9f7aec4a854bf67061e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmV;~119{5P)P(;2>*xT4ebXW2R=J?Uu^O6H-EjXt`-)6_k+@X7eV>2fa3R8 z$>GCGu8z=02V2(LS{l)@7T*?)#`b?#+n)o zyLORMRU8fnPNx%5=lJ>b)WF48)<5osERZ%RA*B`QO`Q6)Wt;CS-AxgaKmu4Xnb?2) zIPQJ>&@>He@lWHBTO-+fWX>teJttq*BcCRdl4~dpI zFU8yqN&eciak0twL=c}vcM_%A=b^La#iApT%l%}u+0g6t02I?dkRLz5R=Ld5LXeHj zILbyGOT_~QXYcsi9*)%NfHuHe*2p8eL?SXjKmTJcm%Du!n-{aqfyH7&%U(fE{(_qR zjRK_@YuE0dce|h00pA0cGSdv|N=l3q6BGT>XmkTWF_clP?!j!eaZkCG>E8onmx2`5 z;;dWta<#4P1|oup&;YfcIGuhGVQ6URR4f+zXA4CsTq2163k|-|v5KWMo8=$)qeVFH36rLy66e$=KM~x!&I1iaR{T2d~w*-5vLO zJhfY_)^atQRpY_nY~=d&q2jymG&`NHMtikAzM5VAE*uV@>FeveBqG{o13rfy9kl16 zQnzCV8y3s0R3Z@>PNmL$3k!O^eoLWH;PxyCkOx+PB_Q)R8yT^+u=-nh00000NkvXX Hu0mjfBqq## diff --git a/test/qad/graphic/qpicalculator/icons/format-text-bold.png b/test/qad/graphic/qpicalculator/icons/format-text-bold.png deleted file mode 100644 index 3abb164d1f5926973993f0d9df78088527b7d6e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)MzCV_|S* zE^l&Yo9;Xs0003_NklnODn`-6o)5Mc2YL%eF0y8V=7IMM;pNAZ;DL|4&f--cfQqigniN z_i&UH{YMl9Wmx+uvBXkYh*z?rH}4YsYTb)zrs~5IGo7x`J#=snwHQ4r<}2f&AWsLu7nTO zl`UKl;~2Yj30YFYP+i(Uk^@e#Oi?he;gA!CRa{qa`5v0JUXrhaNj$d-l zI2Qa9(7*A{?givL*QoN*7(KpjiY#40KSdHmJ0P5}`^Zq0O|N(D8XDOsS?5DEPt0 zxr;kz<}OAkrO=7UnthB6eXHh;R#p@Z&h>efUq%Oe1<2)c9~mPcEB1A4Iw>UN7o4;g zVXv?&@Eg(dZ`vt@_*N>FhCn1doKz}aOD5m*bx diff --git a/test/qad/graphic/qpicalculator/icons/format-text-italic.png b/test/qad/graphic/qpicalculator/icons/format-text-italic.png deleted file mode 100644 index 93ec082a87fab6b1542803cf27916f54d345260f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf67>k44ofy`glX(f`a29w(7BeuI z$AU1UWP=-!!N6YP>FdgVlUZ7Tk$GumUlUM>DaqU2h2ejD|C#+j-g!?K#}En0(u4c8 zTNq`If9&5B;p29AE!#hV(`#Qfuke=q;~`lRYdC|iw3)};{%D4X=B|i$uTH-5+rc`! zn&;f)>e=h}#p&}}&s`Invu*F9|0?O_C6Rx=tw{R1<+Sl0WbcEP)Px#0%A)?L;(MXkIcUS000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipV*4kIR7 zpKy=>00C4;O*fb<2m6wTt=8EGQ6<$jNn8MX%K>EV1xo9amLSLe8XzKmj74p<(&i)^GGX zcFh3|4Im5xP)fAU7uwbBOSlA};BI)@BHvmt2nYc_oSy##k`Ul(aKMX73Fg4nq_mGB zfG3c^g!!-^|H50^n=)mv31D=57>OhW&SCA<4`Y?h0LrOde9TODIT^N-T~1~jhG1F0 z>gZ0daKd2!cfbpu&1xTIQu=w%W9a}f<_QDO+;gd$?)(?(mVUBuUSoy;0000MzCV_|S* zE^l&Yo9;Xs0003vNklMrKNhJ?s3A-(Ng~ur^Abjp`GmKNAAvl}Iq!M+otI-k$7S4{JBWr0 z@$aY_y4wqRrvBdbvDLH`^OK`Ql~;;n*m&s?l=T2AY0gMA5+teOp+}JW5^s2G$D;wG z-|V|Av(hbyNom%3XREn8)9SYsPt#famr&uWwfSc)xH^HsIc^_r3+{-UK14LZPNU5S zHJ*9mLBozFSRxkspe1x6L*kH>lO$Tu$>RF;l zv?B~!xj|H!*1A~-Wqim^kMPJjE~Fx=lPhkq)y3QqjLNl_7+LZZ$Pi@VQ|5awIU>t) jDmkf1RZ?;&W9XA#BMzCV_|S* zE^l&Yo9;Xs00038NklY7z1F3DAAWTA^2p3^&l@b z8VA?B=!4eG5*_Zwz|Rf$Sj@E6Y>@})5Hv1%VjHt=Ce4&NKAKtLYpqGHiMMM->B+WdQ94jnf$PzgP8NU67 mywjz{qb`GjluPl?EA#GaEY#J3AXECnq--H!lx2FCRA_9}gcd zFFzl@06)JVzkrZ{ppbx&s3t#CwI-NlO%mt&4Qn@d2W;yN+7ZdR zJDTxu9Mh3w$Brg49zA~iVwW{re9dJ$mr?!NbQO@bvlf=PzD7fBEvwn>X*?z5Dd()3YwVk~K9A7~u2g-@pHY!M}gX;$^^e!zk_P z;us=vIXU47mxO?it7^_6uB=yHGY%EqTDR`jr=DkKd?yYC&AMk=Y8SOha&M@|p-I2q zrB0nH`mSoBuP#R-C-41hc?ucdxASN>aCb*nTs3cYY@Qvd;1hAgWI?@>h|dRO!B!4# z$(Lnc4meKlTWH`Bam=gql8A~y_NQ;3D&n}#W$KIIrF3u?{bDau>Bc6ocTddE~A(Xyf< zE+G6CK4;eCypf5yV^i~IkIkJqGH-Hpe0Uh1{Vh^Cl_$;%${(JtelF{r G5}E+933O@z diff --git a/test/qad/graphic/qpicalculator/icons/go-next.png b/test/qad/graphic/qpicalculator/icons/go-next.png deleted file mode 100644 index aa7cbb91e667c2f24b5371887943ceec0bd3cf87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV;d15^BoP)>-%*UQ^@((w+ey2zFy3Ku>s8+8vR%1*6lP&biBT)<*^3^mlfv*F+MI)kP1s) ze-`gI&27vC=xA8^_2PT3qV}aNjt~y4mY}2vvPuXY={;ZUKw>P20OCtVF%JK9m9F>8 z&mo*oE+1T_?wWYxwy#>JRffhIWo#miDUKN(4QW*vMZTaQB|Bypim(K{@#;*m@R^!s z0duNha&JX8u(roDZ zZq2v2CAU1Nd3syJQ?pQrHIxRl1q|C-!KTvK@T6uZiGflHTLYx=L~Rfb42?Hc%w93G zdd`X;M=u;w-ef1Hv`Ai<2EnrVPCW0REIR==JZ~(byu!_~aSRWS^3EAVZfp$3&8!uf z8T0GkYH6GV3yTY#H&Fd(4YE~LNT&hMw+!YwXaYEqRHMjAqevo_5>ghp^B4qyR62zy z*5LIa;rf`&BW$ULNE&{CP$*i&iWmei4`!kga!TEMegH3Edp>;MM@1%$NP!ag`xrd0 z`_QId@9#fs!FyYgnO=#?N3zIH%c6o4gn97G@;-?Buux(e$*-p?SzRV0Xuid}>vh2PHng1(;K zR>$?%4gR`+2)C)+@wp@W-o!sBTl*S?VZh0C>C1cv7|HeH)Unn`#>p1P3tJe9vdZA8 z6r>O^7(ze<0v$gb$N9FCXW@pca-Bynp{)A^J7EPxI>c}^f+H<^P5<@oot$!ezUyf6 zz{h4p9){``ynP^D_xxw!j;;EmaOqG|jHDZgh1o2e9X_zzv(yH6kdqH_fVDvtwNo z67d+$rElP`DxS9W(wZ1y?HgCmu4$Y*1%h+9+RV+24jvhJ*@BWM#*dA+Y+f~sR+g6_ z?-fBXEbeAeF>kv;s0m`k6^+>d2>KqJme8UJc24<#NfnqGcr+p2n+uqfPukAfGP zMdn@(Jm1GfF~?<45Q_VvtRyD(9=*^3E%HN?wp`q5TcmZx+={ZgaVZ$43BxczX=n;U zhL0$vA`2n3Id~9&F&}MLI`H=HSz>-SMkRncTkWV_jnhlv*aUf9rD;i+rlsL3f)h$Y zcm$PFMqnOr1dPGcQGL!0e9O3DL)!$&S=Zz-!HoJ^8$M$IA&A8QOArmG+C;-CXb6VV zAD|>q^aVZ-xajT6;C;_0XwEmVlmQfH%FX-e`BZ@8l)`o#*tSAEL10-S92zR2Kp><- zz$FSr7Uf>_Jmg)Du#rj(gAHiqUUUwo>Q|f}EU@zaTz-*PWW-|j#-wD zCZ?-5qeu|KgoxHsDfoIXY_6TOkdJnMqUy#yRZ;|Pl~vWvGv_QoDpiJLGJ!-quHhC; z)4-_%&Efolm`M;Tq1Q=_t*n4j^47=h>+1+cQ00Q1klf#`f8R3;m#lOq)-@oR(C|b& zs`}*qX0Xi55zkYMpiFlf{ZFs9xr6=l?{!{&^yFbzG!3SXC9a=MsD;r)@e2*Sxcypk zvF!1~uH)Czr^G;iUjzp+@XwSSzj#S$-O@MBM_SdSru7P==#Q@DLmxj7yC$9O{a_3Y hxzGLVyAJ#}`U0KDUItL)W}5&2002ovPDHLkV1gOknz;Y~ diff --git a/test/qad/graphic/qpicalculator/icons/graphic_add.png b/test/qad/graphic/qpicalculator/icons/graphic_add.png deleted file mode 100644 index a002a95849d8e9d84fd5a70bb0be2de3014259af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmV-d0;v6oP)DlTBz7Q4q&}Z?k6G?3!#% ztVV1hY9Ss9A&nJUM2Lzf1+54kL>i?CUcGwoB%VAdUcBg4uvo+ouoOfQ5ev0~h)NY> zqgE|R8nPzY?DLRaO+zch|7GSs^JdfLe3XpR36mZJb(*S2-i-hiN=O6a`w7+4AGS3&D z382?Kmr#LemrOV5Q6Y(?Qje2y}D_Oeb zYe3~Pq$e|4$J)b(?iQRyR8=8t1mzl^LcMMaKLKjB3iZzULA9k_TY?J2F9j+u_1r94 zK*Q7x94s`|N3~}2c5#j_Ey((Hj?D)1giSK@i6A-xX++mf-Lt zcmyRFBnAWTfGNfI6>zvBNC*ajCvA8Fa3q8v5C{ZMPy#qIi1y&R;hL7uY;Jb;`_Jso zF;o~=YufKDIh^^2nj@2D!MOz;j)S8|3a~X#th(m{LTBFf%h2OpZD(l(H1DJfC`I=!Gu9V!r)}0rt07# zi-W<$82{6Jl0F5e$N49I?XE4}pO7?(2G18Ra__-o{)ZRE6`oHo zjsd>~>vPr5^W9v#a)GdKl+4Ht8ezn4U}>YJ6W=2M!k~d_)cXM>Ek5RY`>!sScgUJN z>Fz!*59Js=nI#A<*^EnPN-{OQ!d$5iz|ZpPGJwNAq9DL^9C96+ht~&LSoL`Nro^L{ zOMLy|^W@eL8KW>tqLkvWAPR9^m$5U)$Y>`Hx)`m{aro7T3deJrOCvqayHpwg$v&*L z$hg7lnJT?qn%N~kJ`FW5q%fQZ0ZZ#atAR`qfQ=hC1d+?L_hkT#bm-}l+&p(QUT2N9 zT0~0kHBg5I4j`pVCZ*ZW_}M(upSE~6?=_zZAyC>R2%NpWHJ#}cZ90v^z!Agb+bY?3 z9svT-34&&=Ts}`n+R)}iuVl6q#&1pmmdIK_pmoAGP_85$2Q$X}ok@q4iY28ruGkX@ zEEc7b8c2y_Eoq}^(}=(dXqOVgHU}!Hfh%2nzmAMgfDQw93WAMom@L|s;7>N;FCZNJ z9iN@uMk@rADk@$fif7@$sBjMmzHQa2c-xzlH#S-LvPhemc@D7~2Gl+8JHRiy*|}Cj SeHG>a0000!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmwDZ2Fi(`nz z>Ewij1Pg{E|34;7u!;Nd|3D-2|N8%bzyJSxJ^ugueSd!a|8e*GfAcxjANQAB(wd?8 zgZIbZ=lB1=-~azl{pX+8|IgOn_s72K_uv1e4$NutH9m6~-|zp+mR?OtAWc6hn6dZ@g{uZ@CQD z@9C8$kK%7FobcbW{n5YW?|Ib)4s7K)wrlg2f3tNA|GeLH@7wda{x>mkm5)P%nE0YaJUM(4 zELP}={LbI+_|^WuNg3m$^T*S-JoK diff --git a/test/qad/graphic/qpicalculator/icons/history_brick_del.png b/test/qad/graphic/qpicalculator/icons/history_brick_del.png deleted file mode 100644 index da4845833dda253be226170bd64fd7de6c645309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 747 zcmZ`$dq|UU6#dQVa6Td_EyGd?H5Bo4D$2CwWVX#zR18!^KVMrR+SFO5)m8)|Qc9_a z&Idw{$iztqX*zq5=40z&Dr#6hrbX*hY`V>F-oEu;f5he7!#$V7xo~Te68X*!Cmaw$ z&O!k%h2q0j*fXf^xdS;A*^0RdT!d70j%1DrkjVmBjnOrjV}j-nQf+zWgj0&8^+D<4t{QzA$&L&))n6*SbMIBpfM zO1NT*{~m%e-#&d!Wljot+|-E4JRHX(&>Pss>!Y%^VDvT}WMJ6?%Um`PBcvIOU-lqe zQMIj>e)MnlHaZ(E8_Phbft2l-=AbobggjTdZ-Me?y2$fJyn;rkEsVljM%_L*)^RM$ zW%_AwRkm9?M!>s-v2@d*hrrHhuj%UIVLBVu!Nl(%JNouHB@6{Jo5tI&;jQ5cnMw9x zTM0^il~G+ac6P;S-hSrUsm+Z>Wjl1p)|hE!TFpKz4lMa-mh;>G=SIztCrQ{W zEDacb!P@R4o_jQQ(&NyUK7C>oxBb*-JI-l*F!L_jsaZRkw1-9N!7yWlCw3J*x*f?v zR!yxDdInb@s?&o@@1_?;;)P~N5sa&++wX(l^F@pLsM{`4Q9lQd1--8vyH%`=;?Eb& zvZ+}exQNG~_1?^Z78k4Xz1*Y{RYq~c3dovkzJbemyhq3+iLbe*HFAFjV|AF-1)jke zS=itT*+Bs`5z*L4W@{%zaqs1E%$Kv(4*d{59tU;ny8hY~UFrN8za40QF$J80b>FVc zZk5l%(g;Z(VWXlMn%svD)bZ4dk&iSsO`4x0Enw%B7Epv(Sa5J477`d7 vmdXlYhlaATumCKCjbTlzN#6e$imv2e7G3|pVPj;o%^D$$P2}~);CKE2*Wg=A diff --git a/test/qad/graphic/qpicalculator/icons/history_brick_move.png b/test/qad/graphic/qpicalculator/icons/history_brick_move.png deleted file mode 100644 index 7d42f91b275d5fb2ba7f4fe2fabb3c48128f301e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmV;c0aX5pP)TlD$eKQ4mItjz0q?ipj!; zf{B5VfhfL(nY+Pmu#u4nCT5x$iBDnVBeaNUWMVwIvf{wlJ>6Y(tIA;ffe{@?JW#=< z_|Bz@0?2^)pfUy!S(b&GN4t<{-4=1tYRAddO>7??KTFf%(Pd zL7y`Qkc(j!6tz)`Q>r1!N$#H$+~=U}&cQ#UvXs z@-o7(RLWj+f^~qA{^r7N{BdK!91|l{00>n=08<3`>o8lCERFRGW~Vry!HgQ1fhw3l zo#?c$WL&Y!Prx|Ya0#Xr9FXT#1gZ<_>$&BA$Spjo9vGrp!R=yPO=Ml}6 V=Mu8*$4&qM002ovPDHLkV1hYVut)#^ diff --git a/test/qad/graphic/qpicalculator/icons/history_conn_add.png b/test/qad/graphic/qpicalculator/icons/history_conn_add.png deleted file mode 100644 index 1f2839fe83cfcc44760468689020e2d22f87d9fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmv@^xi#WBR< zbaH|Mt4@LeTap~xCI*+!vI=>ONxDv5x(zoNd8-*eCMnc$9!YPgP_#Syzw=1&2FV8u zQ*|7Q8`URqpLeP|I6p;|C?WIF++Ynx6B38=7t+OW{sDEIsZ%RrTjCG z*4A|hxs_>q?bMWw#?CVqPIhdl*IHe3>fna|JC85=FTHNcgzfhYOvYZ9uz&)i=k+gNKKd`J z=6NuejY0e6#@J4m{=2}yS1oakC`m~yNwrEYN(E93Mh1q4x(3F&hNdA#Mph=KRwhQ; n2F6wf22Z0dy+hHEo1c=IR*74~6!t7oI%Dv3^>bP0l+XkKhk^FU diff --git a/test/qad/graphic/qpicalculator/icons/history_conn_del.png b/test/qad/graphic/qpicalculator/icons/history_conn_del.png deleted file mode 100644 index 48284dc7137c710988690c890c38db199d1e501a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmwA0_y#WBR< zbaH|Mt4@LeTap~xCI*+!vI=>ONxDv5x(zoNd8-*eCMnc$9!YPgP_#Syzw=1&2FV8u zQ*|7Q8`URqpLW???`RDIiBpPSXJN07G>UEd?CvP+R z-)~|4?|#mbZ}n`}-KrN??r845TC`Z?|Np~2JpcO*jQ-r$Q2nsKxx3ebd6k4j&-YUu z|LTt%_^>`O>`(pPH7qmshKGHsx7D7l>By|5$`UQFb>iQB1?|7~(`KL6>zaK!aq*lp z|EoV4{r^2>>gox!Y diff --git a/test/qad/graphic/qpicalculator/icons/history_conn_edit.png b/test/qad/graphic/qpicalculator/icons/history_conn_edit.png deleted file mode 100644 index 74ecd006e0c0b44b722ec8c85305b51e1de3893e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmV+$0_6RPP)5lRrpXQ5eO4i4Tp9mRdoS zpoT_-4kf7~#88M`ih_gH;!|7jVNek|)JX^bfP$b1mV&jRqM4KgjJmWGEOihRVyFTC z;G|eVt)PgD(ZY4851%ncJ=5iU=R4=SANRt2;2|FmNm?rIUd`YI9#O_FQ|triZV=l6 zLj?N(s0LmEe}EMfYOfpoZ=S#7T!T^+QcZ3KmNa}KP;)WCHn5Ds`)CF#mQa}0OqLH6 z0$+h~6jlIY8C-=z5D!(rIts@st;0i6gwzHMuy1|MV&^78NcbuiwF0qhHD@?iXTl<- zLjrz9P297m0|$T!*>A&JKCG5P2MwVD`((n#+DwxKyo}O*LceoWARA zN;-Bt)7Kdtr#k@pThe7t3_rJ~(`xIw!f&5GNj}RpOPxkX@VhFBZ2+xfFGk`%dc*Bm z=?RC8rANN(;@~H(;O5U%Igx`-zpXeko!O?;5>sMevOxJ;A1RBqgFOTv+I$ diff --git a/test/qad/graphic/qpicalculator/icons/history_conn_retrace.png b/test/qad/graphic/qpicalculator/icons/history_conn_retrace.png deleted file mode 100644 index 427f1ce9d346fe5fc7e9e82954b42d3ecb335370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)5lRZpRaTLXWuYHfUR7#(s zrGSm!ipGk;D0M;9_%(>5m=K;W#E+P;JDE5-I5>z)nTSl15EUJCP$4E_L%`2OjYU%^ z7D6p;-=pvEK%3OsRypIzJ?EaAoC_;KkY<9c%BQR=62m>f%^4!xCkh~y7;XXV1#BhI z0UQIuz$6-7e;X`|NB%R{ZMg`U+uQ?$@^}YuE}LKqm_Xx7F@qdJXgteH)(ixIyFfo0 zlK|xm{)EPBf}90Dpb^i}GC>X%j5ZZ&<=rnYpF9vhzjsFX!_%4feY@0NGcn%hsNUKo z5k!>O89-yy+d3S+adB;fz$y&GkQ7A`U`jXplWg=Pk%6`%;uIRAj+UoaFSY9pk?C1+ zYalJzY)RsaRZ@4mB07&+rJ)f-@g8Kc{nX%_zz(Hp@I?k)skok)wGKE{X~I{#jl=#a z9*^lIij+ld+aq&zg)V)Wvyxn}ZF0MQMP;?_n%&~I%tRN&5{sY9R@tcOI30<3ypnwb zO67b!@l$`7PAzRtOZ5*7)BaF(|9D>3K(6m}$ac>OtJ5Xc?{v3T`CL7|M(;t3tkhvK z)w%EUV`WbOu@Qb1lCr%9A00000NkvXXu0mjfXDtP9 diff --git a/test/qad/graphic/qpicalculator/icons/history_convert.png b/test/qad/graphic/qpicalculator/icons/history_convert.png deleted file mode 100644 index b84e2b775887f5f308f319e4e8c2fb13fac4198d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmV?dOq_EFs)h8y$IRyYF)#w)_z=>OLJP+tC7D8G zW>}kROsGf2X7bx4ExTJ7I6c7O;$hx?ev3&G(pCW|DM7*X+B9dM zoTX`N6RT>Kj-Z3hVlx;R85^OkyNxSnu3%%!ozg8*@&P9wK*Q|M+3eoFy`7n^8MM}< z_`Z+ld4yreaPKg4-`+9t^>IF+r348G^3#C@v%t{Y5Jg?Y)-9%LxLCYMduuzTku}g{sY_r<{F%SVE-~&H_3Q*1O zNA@1!_1bItANEtP*C{9sV3oC0cQv(6C>fneYyv;>0lN-XkYNqnn7afq?2a2yZZjfO r6KN{|TF#*bYykxShqX{$e@^rZO#Lf0n5^ diff --git a/test/qad/graphic/qpicalculator/icons/history_freq.png b/test/qad/graphic/qpicalculator/icons/history_freq.png deleted file mode 100644 index 2b68fac3961467bbee4059eeb31a58e93804f7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 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 diff --git a/test/qad/graphic/qpicalculator/icons/history_point_add.png b/test/qad/graphic/qpicalculator/icons/history_point_add.png deleted file mode 100644 index 89f738ba815e5323f90c4e180d2c91b9fbadadbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmwA01Y#WBR< zbaH|Mt4@LjLlQUJCI*+!^#-;gChzkZ9{uHE)3rWv^^bg?W7`C_1~X-8hG&zR4wx;H zxWFLvZs&zFPxb^}KULm7@#ehauV;KEWtwyPD&IqKvND+82|CHAJB7-;e?>4^p-=?kl zWUaXu*O^^6m3pqHt@G2nJVRITf35k>zx;QeeYAfXaAW_O#e)AY@wNUrZz=NKzBd0y zJzK%8W1{D`@*LZ>dCR}qI);DVZ@Tww|9`XJ^@+RZ{A118`g{G>h-dr1YOVcWq1>`@ z-o%Lu8yn{@>~(Bd*zR~QqxDh!cHOA|sn0*1l3qVasNlw;6aF<{m<~IZF1%6yn|Ia! zpUXFLPne^+X8H*(F284g^lfAR>_4QUx#KK@634u4e{ZOj0|QsJ#5JNMC9x#cD!C{X zNHG{07#ivt80#9Eh8P)H8JSv{SZW&>TNxPezwil1(U6;;l9^VCTSMK}FRy_b7(8A5 KT-G@yGywqBh4o$l diff --git a/test/qad/graphic/qpicalculator/icons/history_point_del.png b/test/qad/graphic/qpicalculator/icons/history_point_del.png deleted file mode 100644 index 970d0d7dc0b85bb7cbba469c627f7c1693f64e91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmv{T>H#WBR< zbaH|Mt4@LjLlQUJCI*+!^#-;gChzkZ9{uHE)3rWv^^bg?W7`C_1~X-8hG&zR4wx;H zxZqIL;K*~6|8kARf$iy<%*}#6H-!{_hj<042QIXo-?;EyV%e?#uUCHjAI|+D;_UN> zTlNZxfBYX=dh~y#gJn~oscgn=#^}rcr#m_Q%l%gJ$NuEqcmJ1e*ie7GdCxz8*4) z&AmAPynm3iSw$;mwS+{^_fsAJ>W>`wus$&CPyOCCEHn0ohkdHI)t;^C$gHKx5-qQF z;@^D*?Z5WZW}nvUnteKP@tiaNt3Mh2|2<{u?2aPW-ZdH7R?N+!J@O|HB!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmki^ZliNWP_y@9QW$@_eUM}K+PbgfTZ{UhJ!*fxQ!!Ax12;n`%S17?dP zE;v**IP%=|pO>b@~*Muda#xZST4HRsH&?qyP01Vn`ud{lCBI@&EeG*Z%+K zmHzkt`s!c*DP`cytm#qKG8Db|d3j1pB zy6{E4Q9$x0mw*3L7I-H$u-UL|djDzJ|LMxw@tWa(^rxNpn}61Umx19u&#dN;n?=3= z{jXZ$8c~vxSdwa$T$Bo=7>o=I4RsBSbq!5JjEt;|EUkzopr00uF|h5!Hn diff --git a/test/qad/graphic/qpicalculator/icons/history_seg_add.png b/test/qad/graphic/qpicalculator/icons/history_seg_add.png deleted file mode 100644 index 2862e21599ac4a89cdffc6b1a2736eb46f815e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmwA0tq#WBR< zbaH|Mn@&Oo!=t}Eyjk259&7?<|393O;_P6iEY0v}GRvp6WeX%PI5fTc%j)n)KI=r? zCzIyPNsPQE-(xb;iteq*e!BbciJbF~OMPxUmV6Q}W7eKq{`|c~_`m(1Yd-#;bNJw& z9gih*IMf7YA5{ye(t22bxb@8cwCts<9bM0_C9n07v^H*$w31}`v3%31q z&v7pNfBAdc|MnFv5>1llxAGj@wRy|G**b=Q-fz11ZU29>-}Q;R=lo;M+4_6^)`(~O zziO@hU-7tk2pt~n#ZZCKG@(oasH1RtZmJ& zoHqXdCLQwsvwyOo=I4RsBSbq!5JjEt;|Ev-xqv<-}{3=DcR%tBB!!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmwA0Gd#WBR< zbaH|Mn@&Oo!=t}Eyjk259&7?<|393O;_P6iEY0v}GRvp6WeX%PI5fTc%j)n)KI=r? zCzIyPNsM<*4?mK860S3gpZ&)-ozw(_rjOGZZY~d+WVP|Q@eKi%8RriKd^fOu`~T~e zAOBagR;+pUx!_h@XZMf)Yj!>QZ?iz=V8uMXEpHpvzWnd4sQBNk+Uno@Cwbrh2Swc2 z|JX6^|MI3-R8{|b6-RC!~W*(vy)bQSeuk!a8FzL*MC9g!~5MLKmPx^Nhsl4T;$3B zU)SU;W8qyfMIfhkg~IRp<~3jbN95`4*2vRq?=3R=|Ni9ZKktLX@{~@Anr>RO_9YKb zm_eNibMsd|_TPE}(hTSQ7S`7poyZ3UscMO9L`h0wNvc(HQ7VvPFfuSS)HN{HH8c$| wGO{wZv@*5SHZZm_Fp&6A+>W9lH$NpatrE9}%(bVjff^V*UHx3vIVCg!0DRu)ZvX%Q diff --git a/test/qad/graphic/qpicalculator/icons/history_seg_move.png b/test/qad/graphic/qpicalculator/icons/history_seg_move.png deleted file mode 100644 index 594711ea8d2fe4215236c867105f8f1da3beb816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3H^TNs2H8D`Cq011{AIHm(>utOMPj;%cmw3K-&y&8KXdHD<{S=-d2g-$?ce}Tudn{~Uq0hO{nJbT|3B^e_h0<nWwNc|`<+W>s;JopyV(koaaTYDeBUP-HHpRJMD|3eRx2cuNtEl-ZntT!dj#hL7{P)e zpnZ>vm&RGCt?^}k5!<#|T4_+J|K{wuQ49e?dIc;1&+`z0a5%)9w?zO<)9BRx_u#wt zrEZYtdH*uVOck|K3hBIPK-1_5Y(b?|*9D`Tn~pE;1*u_20pE+{6WJhgMu{bf?(6(i=;VSvO`i((5v9o~O7b)B> zT**GoejrS8?C`Pg!|@0omwy~h4-7P)Tzz$6=L|OE0jcBr)AfVNB(pyk2Ag-B26S3^ pHz?gKj8$7}d|hfWsD`@V{13lO)HpF@FTVf)002ovPDHLkV1hUs6LSCn diff --git a/test/qad/graphic/qpicalculator/icons/history_text_del.png b/test/qad/graphic/qpicalculator/icons/history_text_del.png deleted file mode 100644 index 7f6eb679f1b11bfeaa9dc60168a2e97f637bab88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmV-n0-pVeP)S#)-G z3V;(pDaGkCUG+Yz!Pvb!)pJ!q1T4$K?{%===c8d=1NnT84SqjrWrgMCWr|BCw!aO- zHW&ihGC6qYF!O~k%x32BcszWV|4eSNMEl--7y^c@7H|TXrilo+-7X#{CjoFcj7sf4 z9Vec>s0Nv)`749A{z5*_qEQG%7M?D*E5!Kz(=lGw%)_1SEPPx4uFB=+Z5Sk9 vznNK62^YeFi??F2Ui*F)jyyURjRX7u+RNDZR(hiH00000NkvXXu0mjfm{AG* diff --git a/test/qad/graphic/qpicalculator/icons/history_text_edit.png b/test/qad/graphic/qpicalculator/icons/history_text_edit.png deleted file mode 100644 index b2c973e1456dac37a38808faa5524d07756e38fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)0EM3V>q6BB@NIIKm4d;|~?lu~G|u`G+O zt}X#^0w|?u>j>mawg$tG2Xp6~fe2WZg=e#aqT*uQo7}`=QMPzIs7!`bDn;^_iLJL` z*cXO?woDEjY+~-m0$(P+<8rx}otr0`Sj4w)KZbxIs|}n0rfDJqg@pyYd>sM6;V`nb zF9}E9zRx`}O>_AN^*s@-ltQu{wdpXj2J28Mm79X`vA_()GmYh`Vr(L@Cgye| zh}}Q@bz7;oJJ$mda*V~I?C~EWqn#Y-ILYnd&lm<2IG4D$x`@W6mhxR&=gzO1f(@^? zjO4d>0KEDXWhVX`hXJWnn)HWGuHTsC-oPcJjn_38z6PMjYHpoqtyp+|$Cp@q<8S-dyJZ9)2I+iybZW?Z>h$sQ z`OBfY_~bMHg_ROx1B;6zXUFRX9{lO8+~G=`YflbV9UHxA2esDC`3(Z$T9E#@>8WmM z?XGF4jlZa9p9!s$h)5)V?m)PNz@t%Lckeh*qP1>VPxco#$kYyY;kZ!%00005lD%tGK@`P*ciw(QgR5v3 zF(8O#R*WEOQ0#3i7PN|u);24Gjin$WOA7ylRDo@5ENm1BYhf9%5VR46-HkD>#P;_^fNLc}5K!F#Y4`~c#R z>^;O51|H&=m$`9)Ud#<((R+dimXC8{^DXZK!=hm66Y-#w$30nPZK}t=;p9ENbM&@e g{I4QaJv%M_3rJ?xa-T(jq07*qoM6N<$f|*Px#32;bRa{vGdga7~ugaNAJV|f4o00(qQO+^RU2nzr<0(pkp-T(jq24YJ`L;(K) z{{a7>y{D4^00dx3L_t(|+O3lfOj}hLhA*%pE(8Oab9QAhZbl(GBVl1El7M2exj~4t zF)Yq4Ok^-22q7}SjyR_&NL<1IB_&-Ubc~`fwIj4(C{UpE|Bt`6tOXiEL4FhxMeggl zH=>ddNW?dJa?Z^?-}`;%JLgb4skODWY+_>ww*E_u6bWS7KsftXi!W&(F`(tE;PE@cDcjJv}{jd_Mmbx7+RYcsw)V z;o+gXnR84glXr1(k!Dz1Tf@@Q63g=PGFFyXHow^yT%jLq@ z*ccv8K7`vnMMe*t4i_v|BSt4|m~>6DNjV%&0=1j!>+9Q{PAA9>0BH**iK#~03#D3& z?m;mIH9ui|d;$iej_kk)onDXX>gtBgc#>qRAvtXUIjDZUUjN7F=qO0vSQOpuXz9y@ zeW4EHOJa1G^3mDV0-aWef&LzhTZb`W*Zw|Y?C~nFc=Js zAzQ7@I)X~cIfxA>A$OgJeDVVBnBq`z_Y~BF7w>Rc;xk-$1Utb^k2YT>>q7|K;N+^|G=vDQ?X0u{u%889N9|Df& zKqytBto{K@xwH!*Cvvwn<|q^jw@Rg=8Dpj;Cejk-mXIgTj?MC69Di4W;KW-vlp;pf zry{Zw5iS$5Ziv85xkGc`tU~+;Qt*r0MY4Y!bb8Xq^g^78V^8yXs>2%ZnGUM-`Dg2Ll2KK{ZPWPYVa;Wq{piA>13tpzVC8G(nQu2FkY zKv;w#KCPIpyzfQT10POb5z^Ftu3=B6k38`b<#*&{0JZP2-*T(E=u(NErl>%0LZ1oY zgdU^zBtQQU%0HMJcQE1v!ebKQ7ZjFE{hx~FXS^4kmX)>Lzdr#Nh&stgnKo+x0000< KMNUMnLSTX@6*=Vq diff --git a/test/qad/graphic/qpicalculator/icons/insert-image.png b/test/qad/graphic/qpicalculator/icons/insert-image.png deleted file mode 100644 index 9a1b32113ee777036adb913693ff54156d8423f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmV;q0!ICbP)eb zEdrPBTSbfhfS~_DXyIybDG}u+TxD(gf&vpA$|S{M#`&Dh!}72=kKN?j<_1!JJ5FeK7;4^x#&`Neeh zEL~0r!{aRDXg@sk%tLykkrBWo4F-`R;mFrXkNO;hU9NnoDxm=Fiw^^(cW@he_$z-Ngb=`D+ z+4p@kR$Q#~Sc^nHO_EGZPO`MLL^_@3{nk4^ZGXh`JPL)vA}}Vv?M9>VGKyoYG3-y{ zAwGQdfVIL31O2^NE0im{j1FGq(fE^H2jsKa>|Iqob{CeHm!GZ`^68bIYi#cMBs?Vy zBTo3q)`Y0)-#D(SMOD?|$EWqy?1;8eQq`7c{0 fwrW{bvz_>F7G5O{14>~L00000NkvXXu0mjfvu`%Q diff --git a/test/qad/graphic/qpicalculator/icons/insert-text.png b/test/qad/graphic/qpicalculator/icons/insert-text.png deleted file mode 100644 index 65d645df9ea64331fdad658fac835eedeef7d5a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1772 zcmVNQ~T0a~fer$|i+ZBeNdsg)>3;i0Zgg9Ab2VY!Xk zTEclW#E}ht?Q`Z%?@ZRrE}LYt+SO+HY5$(_&Ye5w%sJ=Iy*pyVPeyEV=^y=NI6?_* z+;gmAeQGG$SJbg<>q^Q+CHuVMKyw}UZzfnXwlBJz zY`(rKt`sYxkNo|o-@28nrI6w5WEtPLuDOQhRbTQl_X-7%J#be%=h&LY5REH*`R91& z6+E`H?L3zj^r6$2d{M68ZiQ`o0XTg4uzknsbvUXvP8@v`Wo!SgUArP=VUUIEjFO=G z$iC6nb--;Vs?q^R*LOfl34FC9;MGl);oMx0GS=-Ii3Sv3YE!&;S0B-=yK&C zafoVwyGYpoqcAQu)rn_kehvKR!YpteMcM9}rj<7W*>>hTaBY$Pkrv zpyVR{!|x9?Xo-|Kh+O>^ujVnO4mQi#R08$HO$>Elcq zr*5Nt;t>$nsVy@lF)hhlI*vnHq%qT0 z&UxW*7{wz>+ms$u8g(7WeQ|IPCytzDl4cAr}|w4d?&{cH9g-A_ZX zfq@;*^2f1Pu#rkm#3hEIlZYkJgdk0l+nd_(836)@AHN>p!S-IH73Yn!ukeG8eSEjG zaWx7f`^ABCv5Ca;=raS~j8FnE?>W|&-RII}%O-#|hfW^i$*sE?nHr&~;Wp6KM;92H z#_-hJYAf7m9-EHR)VPA6wuH|XW*MLQAK&@wBm839)0~P8x(;k^4K*)1;9SI2`N-{4 zW~NxCX)-xC$!D=y^ni{qz%O-b{XvApO(Usxq_dSar>9SGac+v4c!H#zWI8cL%1q~s z0p1G^k0>RR+ovh*8Q{L2_8$K9!JpaQwq2!5!cCh{Ua@$=4gPV(m!e!5LSi7Ng3xo-{7+_o0O@X>rr6CEvg@@&t* zV!^&%Xt8{=wNdH6c0Om7wiY^HIDe`Dp|n%!?#%wjN^cg*fA2x|73Tk0sh&D?2r4ZA O0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L0B*Vf0B*Vg*50uf00007bV*G`2iXY{ z02>=Ewir|Z00NImL_t(|+ND!ZNLq0m|30T<{zngiHO!T@!=N$U#Zk=7)-ExI-Mk3e z!9xte4r2`Qu!EE3wo8Oyw@Nddj5)N!vbqdg9)caF;79_?lBf18W6In2_gL@-ZI?bE z?~A8_hh zrYA!~L(dY4gc+Of5}|Mr{C@ujkx0}F7enTDyH_HS$TvWEymJ|w_{&1Ta% z9FBfc^He?$g+lL1Ef5HRfWkeg@$qpp#O@C=`k>fk5CZN5FGm7LUi*tJSKZ*=({Zm5SjSm?(OaE0D>c67^Z7rV1QNP zw064<8=IT3vb+o!9aL$WBh_d$FfuYiNP5x8kLh&!7f0ap`CxHz(TclLG)=SUE|~@r znT&hN<#MRk>)cVHxnM9D06lty2j@N~AQ$)pQ!r$+S(>OQ?e4N;V`E%H71vR#)kGQj zk(!XQn8aJse+3Y^Tn_U2{641e4)48<-@$F1D#jCrzP>)zY&LU=;CT~Ih)4BQDm98q zN)-G9Q&Us-F!P74R_o@$!GRKQp;IoGD`?)v?CflGW@e`C@p$0U_zlzSGG8;ai&Fpq N002ovPDHLkV1k_*Wv&1K diff --git a/test/qad/graphic/qpicalculator/icons/layer-visible-on.png b/test/qad/graphic/qpicalculator/icons/layer-visible-on.png deleted file mode 100644 index ea53bd1c0b39c86e89eba3b2c32b5b4772bc19eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmV-M1G)T(P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L0B*Vf0B*Vg*50uf00007bV*G`2iXY{ z023CQ-tOT500PEIL_t(|+NG0SNRwd{$N#Uct-Tw#IWsnC8nY&C?)Qq;m3uT`*41|PM7&QKeqPvI1pA~ zH~!$jb8(*kIsbDwI4Tqp;5ZHxMWL;&Et|*VT^0xgtlRB&+H5w~=kp;mGxPrfg@uL3 zi;Ii9mzS5XkpNB8P%4#>N~N~)@^Z^Tfkb!*kFv5dnk3FU9FFeE$w?i{vOcj`tjx*D zxk2Kg-EO}`KA#7`A&~@u_W-gEu`1T-bZ=T)TPHxMsj0zVXtmlB05lTNXf&q^3JS9S zvG};LvC$4fQc@E3p=2@{m6w-C4-E}%flyglSrLsyo^0>zr0__RP$Xi>Fzf5;>YjsO zG#abqa`|9KN5|K=K*IFJwY9awGcz;i#3?7Zj58W4%>IIB<{Ouuo<=F;a(9c>TC~2t z{?lMERP^@twj^#rSYKa1dF^F(4FyR2;*{mkpqKVNRt|F`b>Axui%) zuh(n(`ubdPBTY?BJq*LBs;jH8vMs^)z%C?9!eP^Z{SCqu8TGNKKWYw6v5827_7c?d^_% zfq_U|z+^Ikv~qK9ZjSOT_&J(mA-`}1ul#EmQ>u|FN&^${5CI7k3dR1$5Dtg0Ha9mv z0wLMua_z5dZF+jzL2TSA%vTF12B$co`ZgsxmH|5GLy??=IyW18dy)9SNf#WS&o?-o z&Zo&B%+AhYadB~Ze0=-`v&uv@D)HIfzz<<`#S8su0cXBzq$1H6LZJ}IZR`td^!NAc zHa9nY6b_-}y5VBOvj*+P)^?8HA4nm`^xNz8GDKvgtE=m^)oP7eEEXJ@KceF}5O#Zz Q)&Kwi07*qoM6N<$g3GCaPXGV_ diff --git a/test/qad/graphic/qpicalculator/icons/list-add.png b/test/qad/graphic/qpicalculator/icons/list-add.png deleted file mode 100644 index 1e03be9bc896c5f6d8a943ff9d153b42b67e6b16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?Yl0P)8Z)0JRB|3DF3=|YfF7jDEZ>IVpdRI~vVL~%?rHj{Mb-aA4?aN$HkpY6+e zIJ}%A@;qlRND8>Ne);a1hpoZcM@ORNcT0CDpm2lpt8;$t;5m`HA+Mts_V&s9W~>cf zetj;y8B(ff-fq3o6i^ss-tluMK}bpJ9RCvtKmqnoV4WvU2M7e2b^n@kK&}DWEA7Qj z+`01X%TpaFO`sJG5esISB#+&7>@2gVH>sP%}a+DuI`p-7R~pI$1Y5x z9J%rcDSiulyep{dI#Oy%ghc%waq@#~ax=Pj`qhjEu-38}b?Q6+eS$+ zxgkjtHlh#o1_P#oDl|xq z)$=3opuA-AQ-@kiO_W*dZ1Abw6Jy@#*R^Fg!5P*sA&3jgil^7k&X>BCo8zhBfN|0000j diff --git a/test/qad/graphic/qpicalculator/icons/mbricks.svg b/test/qad/graphic/qpicalculator/icons/mbricks.svg deleted file mode 100644 index 38ed473..0000000 --- a/test/qad/graphic/qpicalculator/icons/mbricks.svg +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - MB - diff --git a/test/qad/graphic/qpicalculator/icons/mbricks_128.png b/test/qad/graphic/qpicalculator/icons/mbricks_128.png deleted file mode 100644 index 7eb729b28f4f95b249e303582029fa917fe31a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9458 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 diff --git a/test/qad/graphic/qpicalculator/icons/mbricks_256.png b/test/qad/graphic/qpicalculator/icons/mbricks_256.png deleted file mode 100644 index 22c4f53895b5ada786797fd0cd87b2d9f3ac61d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24538 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 RaC7(p`r0PoubM8e{|7+R0UZDU diff --git a/test/qad/graphic/qpicalculator/icons/mbricks_64.png b/test/qad/graphic/qpicalculator/icons/mbricks_64.png deleted file mode 100644 index 11fbb756a703f9eea1872317af3180103f7c0397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3764 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 eV>*g4EdL935w^0AH9$H50000MzCV_|S* zE^l&Yo9;Xs0004FNklB9I38p(Iz6IO^dEMQjt>}>^t3llMXiwcw)!{H|)}++uwH(K|-~|IrqGh@yQpO zH=a3ThfpD++=dBxU5K?1eFDKBVp?BowuED$I} zkR>PRm)K&!hzw1}kQOC^{*qJ33LIZ~rbLxp_E@EaXM7bn6PpN9cKz5(7SqMlOZ>Pz a(ftDwiElIZXxcXb0000MzCV_|S* zE^l&Yo9;Xs0004WNkl zYnIH1=*_xx>SF|Ngh5}Rs6lxM@#19}#d-$sFy8p}`-Kof9M%r9Ebou{qbxtj4r@XP z5kmBny|h<$Z0qaW*3m2X(taXDh~1<&*z(MYp&!nCcVfqu-e5NoA-d^?SHAga?8-ld zU(Oxd&`m|8wav2Y)E}jHu1r-X3KzC*mT4{4vt=LsR+>6?KYoWuxj3n8IOEc8GB)A6pN#dQ-vvRyY8A>?)zk_@Y3Qa+WC^9 zu?lzGbVJ8qRK}iY=h4m@-n%rxJ$HQoOq^+G@5jShvwZ4Yq4Guns1&-I<-=NtRyya% zg~CK-sxnb{YfdW_Ar_L>VAh(UOJjwxGaa*9gM~zd5Ur$<*2`Ioc0Bjkta{lYIBdh20qxn%iZ)DAy5JLP1do6CCFD*BW00000NkvXXu0mjf%^}{d diff --git a/test/qad/graphic/qpicalculator/icons/media-playback-stop.png b/test/qad/graphic/qpicalculator/icons/media-playback-stop.png deleted file mode 100644 index 180280e8ba359d2a4389e93284454cf943b27dbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVMzCV_|S* zE^l&Yo9;Xs0004UNklyX+scBW;@{ixB;GHteD? zi4zVk%KMm2d+-vpg@ZO1m$9PhNBs_CwvU6gp6B-T^cklp z%LPGv>rmBAl^Q-iHLBFjq4KSMp<&gV+w9V!%@Z9SXtBdK^=89D1o6}c7u@qo%qL%H z-gxGm4LpU2vNw&#BOe&P>Cq!4LGwb5O`~jC4;H!Q9m5r89H7`jk)mm{$oi2~!WHh& zq+HUVf=iBBAfd||l~Br&N1K?GJ(kHa#W>SIO3XgxNJ>$aM>IXMj535U#3;~1b3iGQ zVp#4kxJ)p@Fe6O#7nUi8QVbk!=#sF+43ms8$qbOt!J&90^LD|k@{A_sUnv@of|<7k zaaER6UeF|@gCDNR;wnUtIm>NkSffps7)?xvDjD47oYjZrT8_$_3?+8hV}T5L<0#h} p&_s}e?F9KS7v-XS=mdoU?jMapX0!E+{+R#(002ovPDHLkV1o6$+0Fm} diff --git a/test/qad/graphic/qpicalculator/icons/media-skip-forward.png b/test/qad/graphic/qpicalculator/icons/media-skip-forward.png deleted file mode 100644 index 0d22924eef18d1f675d39e9c1468682f47365f5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVMzCV_|S* zE^l&Yo9;Xs0004bNklPHu8N*UY6P4s` zVoj6z5W7`$3L^Rz8)eWJ2x3qkLcDl+8P$3TJFJagzh4L;#9`?m%etMslV{z7?64$+ z5Ftb-*-P8QrY#*ETbkO#y|j}E5n?B4_clFpr0<&(Ume-DsomR2M2J?p?zu0%8~E!& z;fGVttZStr($dDT<=A__{4+5zHc~jVWn-9@Vl7+p(NAx^atzp1SLj=^wjayg6`vJe z+V#*I7g#ZEabo4 zQA=k%b*3;fHZe9*cx_fK6(Q!6T5raxzHqLoy+I)a<`IIOF{_oABo&%w-$tV_5c6?07*qoM6N<$g1p4kZvX%Q diff --git a/test/qad/graphic/qpicalculator/icons/object-flip-horizontal.png b/test/qad/graphic/qpicalculator/icons/object-flip-horizontal.png deleted file mode 100644 index 6b428d04b760ca5ecd9c10e342cee7be389b931f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iO7` z3K%0ugA-~100L}DL_t(I%eB%^NEC4t2k`fPv$H!pv+K;dj=Q$*Xt*Nz56MFoB2sh; zgsxT)wfW~@5EOKfz^LfbDGQ7i*+^3Q<00xGq!9%jJ5*#sb?6|`AN-R$)6BfrAzTzi zy!3AG@%ZqC_W=G!<#PG*T<*^E)&Ac;0RTH!JI^P}_vz%efYH&r z8X_KBJ99loB0f4e_942B1l(1+5RVAiJbYx2)pC1nZVAirK*Dd)ztL#$2U5rLrwq}mEK?R#)|Q($D|F(P7Lb+sjQU5~6|iNW1+zpdCM8l`%8Bo=0t&i0l*huLH)$CYr)wr9GKU2qN-{$c@KK<<_BvBp`f! z_A#Udl&BWf!ojL|fTD_M%ieg?QUnmOFP*LwhGFPYJyxpgx{*kj!GWsDd1g3wbH;(z zi;HmU6^4=tv#g^&7G(aH0>{Vir-hJSc6PRFDrs^#P1L(BZ83F)$aAM-YYa*^BB2bi&l*!bni9~r&Rn@}m?6 diff --git a/test/qad/graphic/qpicalculator/icons/player-time.png b/test/qad/graphic/qpicalculator/icons/player-time.png deleted file mode 100644 index 77ba33c8c48cf0fd537057f57183ff8d4d6f2319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 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 VB+=-fo9O@m002ovPDHLkV1gmzbans$ diff --git a/test/qad/graphic/qpicalculator/icons/run-build.png b/test/qad/graphic/qpicalculator/icons/run-build.png deleted file mode 100644 index d5fa88f9044395b63b392b540dc6ef985f123018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmV-$1CRWPP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXV< z0RcEJPsnco00QtyL_t(|+Fes!NK;`Le$M_}ZaS9P#(vTYZ3NwPQO=u12w@j_84=i3 z(#;|-{2^~7h>&&B&xK%DlMqBi5DIjNE6t{r&ymKo}hzeb&*@FA-66d<;gTk+HMc zY%G`adcBXS_FH04jGT|F&s(T2X?xLs*(}RSDOst6*u#+_! z4F$7oA(h+4?=?5dpc^GcNK;hN<&PU`8ReGu3r61e&K`42e3+}zw4l_QAecDp?Q zBqwnPU8)TNF*YJ!(oAD<>UW*D)Ar; zkX?6YXJ%*aOjpSeTYKoh;huB&?stCfJrw+>7>0q!(MJ6X)Ox?6nsq9zYf)qJQ#iU@ zSy^oKw)Bm-!Sx4|k>GT9?SVkR+NDtPDQv=MIikRixC}bSfmzA!d)hp7WeZDZBG^}^ z^tkf%dJGa0V-m=c479F6HctWa$d~IL)OTmBpzYq7@}gq8jX|vfETAV^V{Xl!l+*MWCG?SWBcp)eX=$$d)P44GdPxMin%OgalI<5{d#~ z5^~Vn*(JJyO@TL`g#s53b2B15>HiAZQWAVN4ooQ(R_Y5t@OuDA!w!ama3T$hi}DAU z48LFsDgvU$%97hD~4qPh09Jb=%AqgqYaOvkSZ7m`uSN=Z^Rp zHQ7!+&}$vzEQ+E^YN`*j=R*x&hDRslU0c`^Z&~^D)mv|l{a#xj1n?--V#dIwcVd45 XRT33xW~UZ_&NX3>AthWo87#K=~N(Q4maJLnuRpo75@fkDa7%2gk-2T;Mm@k1YA8 z=kC1|fH;mjNs>GOl>dvwaeS5}$+Y}%pj&zIs+r3G2LS%2;0oaTw*hNiV=W8@yUZ@f zj4$i#bIZ1f@9tIqn7Y^d&!^1E2&~2TJzA}n!%MT`^vgSEEl$A&DJN%#wEYeug0UTk z`(F>q?eyk?$V9x||G>&D0ReJ{U+;h9wsf6>at{>X_|Y-=g6DyVfZ%Y)?$CSOYb>Dm z28P2OJkO9X4fpR|@%-f-Mky7~=7NY2Mt{!riK^=PXsDCPxh`fSeb!&7>crtJo9b#c zFUR<_!JxZk(5@M@|81b_AF4W5)l`rAxvKu!;)SYa%?1FY3xjVxT7lV|X^(8773X<>&kwEM@EE6bfwcCMxan*fKP}kkcNOI3=BJMY*jVa zDClTx?9sTmV?dOUa3Uq;WP1Af^A~SSo_uTi^jkA#+@3k}&YU@S=FYt{Z{FSc^Y1QL zaBtzldy5v`yZ7M!(xneptoZ!-%hxAQzCC^V?b)+$&!2w>q8Bf|zkK=Q)vJGh{`~v< z_us#N|NsBL_bKNd&;`sTL4Lsu62`~(+D-&=8I!!-U9^JtU6}{ulzO^2hE&{2J%5+U z$w8p)p=q>^Qm2mVQ}x?-{<9iQo_w;}J&q(E0Q_QkpHv4UT-(p-D fn>oJS|F@l?IZvF!-8SMR&;bmdu6{1-oD!M<5oavqOAF`G1HOS{3y~Q)>I;>C20TpF$?lLs3;?- z2m;MynFR`EV1FVF(^N{CsdMh$ZTIfp-LKu~EQdcYOOq?nITHLN!8`?=p5W^0+A7AZt-IFOoa=th)A$ z-9%_J04aD-)B}|aqZo#gB1(za<^~p&ypVLnhq--B#K%Pan8y#5m2uRC`#d-VD-(W< zAcz2g1xS(%;51D$l$W7!h9VdMScYLCIF1E?qXQgE^FcpPlRN`S@hru2Ojr;^o)iUM z1VG{_Nnj;Wlq4w<=AsfGjfk?y%Mvd~Lb4nM0s}-I$RdC>5C90nB>*A-Kq~_Pw4ok& zbVS`&Q&o#3BqklsFDxo9(H6!YgI$I7beYk%H>r9zG~Y}{eO=moqs7wH+^#%#N~KcW z`=ooJOYuvYva?%PtG_USq?~zszIxF9rlG~$tv6Wj#xLyHpOu-SwC&R7=MARY8nQ3F zJ`kL%e{9y+zC8b9+Bv6PdSGrpwDNnrf*Hm$PIlTmRAcwY)B7L2%KYAIiBhvirdjvJ u#=&`}$)5F4Wz8KypA;;;wDrx;G2l7IA&y5dTpJOVmGCB;F+kXKm7Lqgo diff --git a/test/qad/graphic/qpicalculator/icons/view-mode-compact.png b/test/qad/graphic/qpicalculator/icons/view-mode-compact.png deleted file mode 100644 index d02228c0ed7ccb7e5f11cdaf5073878dffba3076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipb& z5;rQ~5jsZz00Le~L_t(I%cYaQi(FL{$3OSJH}B2tuCu!{8<8MrAt=~rB!xi?7J_z) z7K(p?ogxS}B4V(yv9_{aP!M4oVx&y38wDW{L%<1;GY*h5s*0*&?wFaGq#sq}QUDl_$GX42Urf*K zvA1`Qx*n1&(=3E}rzFpG9=Wqnj!tiKdVGVA-+IH^#iEP=qtU3CPN!UL5714a88mF~ zOxWI?Fy7f^YkNYm*)kX}`D=8*aBG)AH7o!kK!}m)-u=A#=%93!D9 z$wYpg9rE_!^E@?qiE3ku90LCXfO<5fCPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipb& z5;z`4J<>e@00NasL_t(I%SDsFi(FL{$3N%J+nIgY%eTGppq%nayUpySpp%?d`O=wZ+D% z4M>Sxon^0d#i$Wvhg^k+Cmj!uj(Biy&p!L;GELjIqxpP}eDgJpMG`!PD>JnMhqj<2$l?cINz%J(G>SP^iuf7^E zRP!O?#sPI9D|k5Sfm={~u#?rv<`i|RI_lsNc%)SZDUm&B4BUe-#XRU0ss;Tj3*3TVg+g}^CommWW)V0e4&BMm zoT1y=;rQULTj@i_P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipb& z5<4-*!Mvvc00I+9L_t(I%Z<}dNK{c2$MNrd^PD$BlYby_#)VK~i-^FYMJ3X%g+&lp z*g~XDi)hm>f>v$X7A=JmLNIcX3N=AO1W^Qniy$;j3nR!(obkPP|D6_}0sR4?mk~|q3qpet^(9}$v3csr<6(juINLl)}!tJXUsI0AS<-+ZN0$SUO z>}zeKAl>mxjh*KMQS{;`P)KlJgK&*-CDrIm!+>1T3QLCJk~>M z9NIyuE$hEl5vc`s3{vzi%tlAEQ7%+LfcO626@?(^WYb!mey~QL*aFJq^Zhe#R?aSe zT0iz+>fGUaM)}(LiJ6YhrrGYE_Q^m&Ff}?iSUOPnSnn=$bT-XSjm`}s5{9pyEnK;E tulF({0r%?zx_jCuyHAy#Pfsik{Q(Kd45_pm-?#t(002ovPDHLkV1lbNAmac4 diff --git a/test/qad/graphic/qpicalculator/icons/view-refresh.png b/test/qad/graphic/qpicalculator/icons/view-refresh.png deleted file mode 100644 index 86b6f82c1ddd53740bd95cd9a252d6d0341b0656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmV;U16=%xP)4TMNw)Y6{994!H+hHY0`A;By%&J`*F@a z_jpGPX3-x!yYsx~<$2$ij4{{`Jx5hAT(G*VCr2tHljW{5TiIM$s&CaVL*qm9nfdd- zcS8Vpr@)?(f$&OswEV{T6X)GZe+7emgRq!|AP8{d_6^Kjor$;Cwl5*WkEKfSlO#yu zPJw^T%%N|mPMw-MGx?NYHpBhUQse5v74_@-FLd$gm-u@hzYC5WVtBPS_VCn+vByLZ z2B478Xf&{Kdjn($)!{0<9uFNRj@HCPwT8?XFc5hD`-A-hJ(rFi85fOa13J~1|9KvN zto#l~3wXAND|6qYw^GK*<0sKu>;(*984HXUI1yf`l!lyk+(t)>*B9}3ebW?NAw#Jy zCz;Yd6K9)o!=7E8rRni$xW)xZf<*-G_~MMwpzY>1c7t7P+**h4i)c4W9_=KacQ^?P z&zMJu9yojuE#5+OFG8>rfHD{^99E09LK+09->t*a3~i~t-Wyk!=k|#r^F*(Q^iG1c z;3iskS}^SlX{^5_|ALTN+Y;b_aukFjNU3M_Om=qPZnywS0v3Uc&T?sEl=;-Om`wCF zgehVXLzgwoDB!r(bSGT=&ml(i5lv8^u4P;dTdKS0#K_^P%)W4K@i-2oggzka&QLB2 zhnCn+?0NbeMC91~Txr;yONX-4iK5lGlx|wfY>O_^CgE8;twq17uc8msD$B!Kj$-w?zax~(J9FoG0Riq43dd}+ zCK$>7OcZ>(+U3~eCEFiM7W8ZJR(b?EdprA1V=Mfo=cb$VFb}Q}paNm{V2qtZ5t@TB zTKx%%+^I&_<>{~~mjHZ+oc+f{0AB7s;J)RJa<4L0Wbv^S?XrY*i{b8E+vsaq7~WHF z0(d*`Tq5Uw=X@Bzi@Bb#7#%kTlo_)C;D=oA=f-vH;~!CSYaU5(-z)$C002ovPDHLk FV1l!GvY-F} diff --git a/test/qad/graphic/qpicalculator/icons/view-restore.png b/test/qad/graphic/qpicalculator/icons/view-restore.png deleted file mode 100644 index 7726c3546aa71ad49c31755dd4fcacaf848eee2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~&H|6fVxZ#d zAk65bF}ngN$X?><>&kwEM@HCM-YMps0#GPFz$e5NNJD_?9LeBK-r<}5(s#vY>`o}z zpIdq`ukuh)?cvh3w^pvZwQ9rd)f;ZF*?4E|raNo5-rczE?xxeH&zwGe_RQ(Cw{PFQ zckjWQZ?E5efBo*=hj-uKzWe_E{jawleth`w>;1=H??3(g`03Zj|NsAol~#TO+Q(cH z zCF<+GLZ@3(EJU6PaA|nGxL_xxmoa6PcJSJeV#YJlH~K_Pbn2$PST6D}gP}+)>wyo0 z#DqIn9~5RjJm(}>{lopFl1VcECz0HlRU3Nmp1<&Z>wCWmY9a^u=9gH30>RVO&t;uc GLK6UKbD~uM diff --git a/test/qad/graphic/qpicalculator/icons/view-tooltips.png b/test/qad/graphic/qpicalculator/icons/view-tooltips.png deleted file mode 100644 index ca5652c1de11789dcfa70cd3647b566eff977065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 zcmV;E0&M+>P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipY+ z6CgV~DpnZ)00I+9L_t(I%bk+XOH@%9hM(`8bFXu*(~S{Z7|g<^qL3EVLYSnDSSuli zKpk4NaVKFy3-_*Cx$O@qVMN-uZE&S+42?+W*APSCU|l8ko_ku%XiK#h4(HpPhxdEm zBa@SpZ__l5jWM?u7Z+2`D7Ck@H#9Rdb0bNTkNk&}bB=PkEE5wG{bOTe8)pR=?>zw3 zYLz5Ot}CV9EiW(MIyFE<0I1jNOifLZB*{&sRDEe_Y3Njdqd{xU>gp=f)6?wk?%olR zH?>;r-ia9iWLZW&pC=4M*4NjWot>prDvgYfkH0<gbN~=V(J=&|*=#a8I_lFj9X?eH)>@o%WLd`ck2O-)*|^J6Em>m->oGSMObwD}Wa$oKB7B%fcb!ARZcqX3)C7Va1i0Ke!QkLvWnf_7 z@xzhW-!E^7OLq{RLm7(%7EuQ8JtES+O^gN-paFbsG#YExTCESaO2Z@lkr;ytx)GB@ zls*ow-JD09LjeaJ$S>f_%F4>~f^EFQU(HvFXc}|vPWCy=VcRv67i5;cDw~H4{ t6SB6=cCvT?pOLwJ{GS$wtu3^6`~~LTzHo>F`)mLJ002ovPDHLkV1jvG8)^Um diff --git a/test/qad/graphic/qpicalculator/icons/window-new.png b/test/qad/graphic/qpicalculator/icons/window-new.png deleted file mode 100644 index 426818910dfbef525c3133dea3bed328593c62f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zFzyCnMyofE9{~j=OI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kpe3E=IP=X zQgQ3;<&9pM3~6?eyAhn|Ii~7gPxisAHULea71h{!f}<$onI~yWvxc(c1?b zOJodh&-uIK^t?Uo42v&H%+Ih?vJnbve7!2jyG5F{Yfl?P=B!7X!&Y7Tap!5}yoYy~ z$|D(?->@uLW4T2xI%}63_j6X$>2A0Eb4w%tu-55GfAId#TEEbN;eYz4>K{xeO<&z^ TQO}$L3;_mDS3j3^P6Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iOG+ z3Mv{e5wxxV00EmxL_t(|+Le(#OT$nUhToeAqSPt~7F=}E#m&jxk6AiZaa0lNq(4P} zfH)N?Iu^vKpin^+#eYycXiYUqwMmnEJh|qgUb6VW!%Z%{Cnx6!d^5(*;eR}`Z%A3D zf0AUt3?L=Bt5&OcX}2K&OcV-OT3iH#fJjXcY%Z76kFfBIHit{464ut&@$&o(%d%kG zHf%mwez&n(k>~~l%>WEIr1U}yH&26j?*UCmqS;}c7-zQH5XsWG;o0^C8zPoE9-x+R<0fk-=e?aDu)R;z_Zqk()ruN)c~ z1ruc!Na%Fw_nitCi$x^xkg>PFe*xgi+=80=&ap@Na)&mLe2Qbq##F1-NJ>eb=TUjL zd=Fp}8nb}og|vF$(W@6FA+@%8y-u#{>hKISMuAMiD5mSX2in@+I?wvD-pM#SuimqX d*h@Bm!56}ZCMId;HE{p{002ovPDHLkV1lrt=VJf> diff --git a/test/qad/graphic/qpicalculator/icons/zoom-in.png b/test/qad/graphic/qpicalculator/icons/zoom-in.png deleted file mode 100644 index 6b7a6826a5dfceacd46838d29fe3641993a4c252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)p@A6^g+~yr4T(3bu-rza>ca$fvG!nPTk$+*6ojXmxK`5D)If~^WY0Fz7W_6 zMN#lZtIHyA;v$T|hggg($q;2-@0T3W84jZIB`W;@;X#X-Xi2k|J+f|Kcq zd|?iz(P_1}2L}hDe*>WBFZwm3=FoLUBHOG|=EH1!+!hjv@Ka+Jj#;!PsftAXt*tlO z008`M0J+)TUO-2ZG9!U_|LP~Hn=1)0MplgYgs zfH8?g{e2Y*pr?*aEehhMT|8o;0|;0Gh@BJ&zink_7_I9Fg<+T)#7Mw#9KpqlX(UNZ zy?Z>|AxJq6Sf2>=UF~UL18z{!{oqMJB%uIUB4PsJaF|RH!*Om1MAZ))?xZImp=Wn( zPj9{K>R1kQ!UgAsl)wZ+h6$0e0N8B)I+QEr4*Zy3#e-3nhhQj75IjHxaEM`fo*~y$ z@}z9)%*@PCEC6vjooj`8IpPv|+GUG}_e8Kne?e9L5E+PyJhRJLD#WWUk|zi=Gvu#y zIvx230JfW)G)$b%Nkdf`2e09wErrMzI3eHkR+R9|#j}RDbF`1nK6k#lQB_-O(d+eA zzu*5G*jd(K&`*qyei%qaqw}oWKEGi8IMVm1`<~5a)j$9wcs!n}(z3Ek+sK;DW}9}o zTwu@1<#MRGx%qx)XD4g?Wa5lQV~<*`hIc;re>6>lU@$mN5X8E7W1|Kqh_gziGHv_x z9szrdqA1{SI6f;Bin&NQT!*4)ad~-pE(G>bZ*Olkj^nR=K3^BuZWdP)Fe|P6?o_}^~>fM~ZP*b5avtYUet#pXS+=~JQO^}Mvd{>|^EQ$mn ze7!g3OMO*}kr2L+bhFJBxe5NeE&Q`hr%vxSw{E-bertsgn3ni?@jNe{FCQNGBH$1l z$HBXi(F-(1-$pT1E{fvTw%a}4(4et{fACw-(sB=PY-;Ma+PIE6JBRWRiQ-WaTs)r` zy;?}>Mn^`T4i687PZA&lZw7Uf*5CtPrZ}ilm!Oc4M$nKDHGW!v{Dv*H{u(jZ-u|c~ zmW>`2V2?XHOF1D`XM^;HN>lFqKL1T_(i=&oTE$4I49EHw9~9XA8dYiD2eaAiJ}N*- znM}L9jrj3P`Nq{a$t+AsojW)Xqb`6ks~B#H6y%y#JQz!oq!t_l3L&Ind@={gBu{{l zI?i1$8*}YRfIkAQJRxY;wNx4 zj9{oplW`KB4?2$(SgrG8#hEaLU)!co5lROizIZL{E+YeNPx>%HNZ_5G^vjuIhQ(qT zJF$hXuI@g0an1b+Bx^LUM6r>cB=NI9A_>gmR#vs(zEeU)5;tAW+Sb-q<6kZO8Z$G7 z=_`fVcwKH7<-hBEN*n&`Hzty@2j_xHW*W|$Qn0zksf&Q4XiN_96T*<~2!tHa>{rzR&S2Wf6@ ze%{m5BbsK-&}1^b(rUHn;RpYR<2Voq1g2=3_U!NN)lxKlL#4N}rx3{;PN@iQV0WXUO5bt?Ax z`Ny6~jUI+*60o5~z-*Dg`0&9CTB3*nuugy@LRpse=gMJm5QezMdoBIAR76XVa~#7p zppm_lG_aXa5lU3VFbV%r0PJ@E94plbs=bvE&S3~Ek)!cEbyh^ClErzclx6&zxn&wY zZ*FdG>?i`&g|uun}+d>YQfxD`I=U0HR19Upx5YAGC86@KIcz%#1367mk zr-M2>JNx_k`grFzm*8|dpIR&yc>f3gkD@3*)AS@k5S!7ht!p?zG?+}L{LIq_1RS$i zECzf&-*07*qoM6N<$f>N$(i2wiq diff --git a/test/qad/graphic/qpicalculator/icons/zoom-range.png b/test/qad/graphic/qpicalculator/icons/zoom-range.png deleted file mode 100644 index c052512129ec092362c7e45a3f4ea72d09c3d87e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1311 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 diff --git a/test/qad/graphic/qpicalculator/main.cpp b/test/qad/graphic/qpicalculator/main.cpp deleted file mode 100644 index afb41cf..0000000 --- a/test/qad/graphic/qpicalculator/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "mainwindow.h" - - -int main(int argc, char *argv[]) { - QApplication a(argc, argv); -#if QT_VERSION >= 0x050000 - a.setAttribute(Qt::AA_UseHighDpiPixmaps, true); -#endif - MainWindow w; - w.show(); - return a.exec(); -} diff --git a/test/qad/graphic/qpicalculator/mainwindow.cpp b/test/qad/graphic/qpicalculator/mainwindow.cpp deleted file mode 100644 index 3ebdf57..0000000 --- a/test/qad/graphic/qpicalculator/mainwindow.cpp +++ /dev/null @@ -1,260 +0,0 @@ -#include "mainwindow.h" - - -MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow() { - setupUi(this); - active_ = false; - lineInput->setFocus(); -#if QT_VERSION >= 0x050000 - treeGraphics->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - treeGraphics->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); -#else - treeGraphics->header()->setResizeMode(0, QHeaderView::ResizeToContents); - treeGraphics->header()->setResizeMode(1, QHeaderView::ResizeToContents); -#endif - npal = epal = lineInput->palette(); - epal.setColor(lineInput->backgroundRole(), QColor(Qt::red).lighter(150)); - connect(&session, SIGNAL(loading(QPIConfig & )), this, SLOT(loading(QPIConfig & ))); - connect(&session, SIGNAL(saving(QPIConfig & )), this, SLOT(saving(QPIConfig & ))); - session.setFile("session_qpicalc.conf"); - session.addEntry(this); - session.addEntry(lineInput); - session.addEntry(tabWidget); - session.load(); - ans = evaluator.setVariable("ans"); - on_lineInput_returnPressed(); -} - - -MainWindow::~MainWindow() {session.save(); -} - - -void MainWindow::changeEvent(QEvent * e) { - QMainWindow::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - retranslateUi(this); - break; - default: - break; - } -} - - -void MainWindow::updateGraphics() { - graphic->setGraphicsCount(treeGraphics->topLevelItemCount()); - for (int i = 0; i < treeGraphics->topLevelItemCount(); ++i) - graphic->setGraphicColor(treeGraphics->topLevelItem(i)->data(0, Qt::DecorationRole).value(), i); - redrawGraphics(); -} - - -void MainWindow::redrawGraphics() { - QRectF sr = graphic->visualRect(); - double dx = (sr.right() - sr.left()) / graphic->width(), sx = sr.left(), fx = sr.right(), cx; - QPolygonF pol; - evaluator.setVariable("x"); - int vi = evaluator.variableIndex("x"); - graphic->setAutoUpdate(false); - for (int i = 0; i < treeGraphics->topLevelItemCount(); ++i) { - QTreeWidgetItem * ti = treeGraphics->topLevelItem(i); - graphic->setGraphicName(ti->text(1), i); - pol.clear(); - if (ti->checkState(0) == Qt::Checked) { - if (evaluator.check(ti->text(1))) { - cx = sx; - while (cx < fx) { - evaluator.setVariable(vi, complexd(cx, 0.)); - pol << QPointF(cx, evaluator.evaluate().real()); - cx += dx; - } - } - } - graphic->setGraphicVisible(ti->checkState(0) == Qt::Checked, i); - graphic->setGraphicData(pol, i); - } - graphic->setAutoUpdate(true); - graphic->update(true); -} - - -void MainWindow::loading(QPIConfig & conf) { - active_ = false; - QStringList vars = conf.getValue("variables", QStringList()); - int vc = vars.size() / 2; - for (int i = 0; i < vc; ++i) { - QTreeWidgetItem * ti = new QTreeWidgetItem(treeVariables); - ti->setText(0, vars[i * 2]); - ti->setText(1, vars[i * 2 + 1]); - ti->setFlags(ti->flags() | Qt::ItemIsEditable); - treeVariables->addTopLevelItem(ti); - } - buttonVarClear->setEnabled(treeVariables->topLevelItemCount() > 0); - QByteArray ba = QString2QByteArray(conf.getValue("graphics")); QDataStream s(ba); - QVector g; - if (!ba.isEmpty()) s >> g; - graphic->setAllGraphics(g); - for (int i = 0; i < graphic->graphicsCount(); ++i) { - graphic->setCurrentGraphic(i); - QTreeWidgetItem * ti = new QTreeWidgetItem(treeGraphics); - ti->setFlags(ti->flags() | Qt::ItemIsEditable); - ti->setCheckState(0, graphic->graphicVisible() ? Qt::Checked : Qt::Unchecked); - ti->setData(0, Qt::DecorationRole, graphic->graphicColor()); - ti->setText(1, graphic->graphicName()); - treeGraphics->addTopLevelItem(ti); - } - buttonGraphicClear->setEnabled(treeGraphics->topLevelItemCount() > 0); - graphic->setVisualRect(conf.getValue("graphicRect", QRectF(-1., -1., 2., 2.))); - ba = conf.getValue("graphic_state", QByteArray()); - if (!ba.isEmpty()) - graphic->load(ba); - on_tabWidget_currentChanged(0); - redrawGraphics(); - active_ = true; -} - - -void MainWindow::saving(QPIConfig & conf) { - QStringList vars; - int vc = treeVariables->topLevelItemCount(); - for (int i = 0; i < vc; ++i) { - QTreeWidgetItem * ti = treeVariables->topLevelItem(i); - vars << ti->text(0) << ti->text(1); - } - conf.setValue("variables", vars); - - QVector g; - vc = treeGraphics->topLevelItemCount(); - for (int i = 0; i < vc; ++i) { - QTreeWidgetItem * ti = treeGraphics->topLevelItem(i); - vars << QString::number(ti->backgroundColor(1).rgb()) << ti->text(2); - } - QByteArray ba; QDataStream s(&ba, QIODevice::WriteOnly); - s << graphic->allGraphics(); - conf.setValue("graphics", QByteArray2QString(ba)); - conf.setValue("graphicRect", graphic->visualRect()); - conf.setValue("graphic_state", graphic->save()); -} - - -void MainWindow::on_lineInput_textChanged(QString text) { - if (evaluator.check(text)) lineInput->setPalette(npal); - else lineInput->setPalette(epal); - labelParsed->setText(evaluator.expression()); - labelError->setText(evaluator.error()); -} - - -void MainWindow::on_lineInput_returnPressed() { - bool ret = evaluator.check(lineInput->text()); - if (ret) lineInput->setPalette(npal); - else lineInput->setPalette(epal); - labelParsed->setText(evaluator.expression()); - labelError->setText(evaluator.error()); - if (!ret) return; - complexd val = evaluator.evaluate(); - evaluator.setVariable(ans, val); - if (val.imag() == 0) labelResult->setText(QString::number(val.real())); - else { - if (val.real() == 0) labelResult->setText(QString::number(val.imag()) + "i"); - else { - if (val.imag() > 0) labelResult->setText(QString::number(val.real()) - + " + " + QString::number(val.imag()) + "i"); - else labelResult->setText(QString::number(val.real()) - + " - " + QString::number(fabs(val.imag())) + "i"); - } - } - if (lineInput->text().trimmed().isEmpty()) return; - QTreeWidgetItem * ti = 0, * pti = 0; - if (treeHistory->topLevelItemCount() > 0) - pti = treeHistory->topLevelItem(treeHistory->topLevelItemCount() - 1); - if (pti != 0) - if (pti->text(0) == lineInput->text()) - return; - ti = new QTreeWidgetItem(treeHistory); - ti->setText(0, lineInput->text()); - ti->setText(1, labelResult->text()); - treeHistory->addTopLevelItem(ti); - if (treeHistory->verticalScrollBar()->value() == treeHistory->verticalScrollBar()->maximum()) - treeHistory->scrollToBottom(); -} - - -void MainWindow::on_treeGraphics_itemDoubleClicked(QTreeWidgetItem * item, int column) { - Qt::ItemFlags f = item->flags(); - if (column != 1) f &= ~Qt::ItemIsEditable; - else f |= Qt::ItemIsEditable; - item->setFlags(f); - if (column != 0) return; - QColor col = QColorDialog::getColor(item->data(0, Qt::DecorationRole).value(), this, "Select color for graphic", QColorDialog::ShowAlphaChannel); - if (!col.isValid()) return; - item->setData(0, Qt::DecorationRole, col); - updateGraphics(); -} - - -void MainWindow::on_buttonVarAdd_clicked() { - QTreeWidgetItem * ti = new QTreeWidgetItem(treeVariables); - ti->setSelected(true); - ti->setFlags(ti->flags() | Qt::ItemIsEditable); - treeVariables->addTopLevelItem(ti); - treeVariables->setFocus(); - treeVariables->editItem(ti); - buttonVarClear->setEnabled(treeVariables->topLevelItemCount() > 0); -} - - -void MainWindow::on_buttonVarDel_clicked() { - QList si = treeVariables->selectedItems(); - foreach (QTreeWidgetItem * i, si) - delete i; - buttonVarClear->setEnabled(treeVariables->topLevelItemCount() > 0); -} - - -void MainWindow::on_buttonGraphicAdd_clicked() { - graphic->setGraphicsCount(graphic->graphicsCount() + 1); - graphic->setCurrentGraphic(graphic->graphicsCount() - 1); - QTreeWidgetItem * ti = new QTreeWidgetItem(treeGraphics); - ti->setSelected(true); - ti->setFlags(ti->flags() | Qt::ItemIsEditable); - ti->setCheckState(0, Qt::Checked); - ti->setData(0, Qt::DecorationRole, graphic->graphicColor()); - treeGraphics->addTopLevelItem(ti); - treeGraphics->setFocus(); - treeGraphics->editItem(ti, 1); - buttonGraphicClear->setEnabled(treeGraphics->topLevelItemCount() > 0); - updateGraphics(); -} - - -void MainWindow::on_buttonGraphicDel_clicked() { - QList si = treeGraphics->selectedItems(); - foreach (QTreeWidgetItem * i, si) - delete i; - buttonGraphicClear->setEnabled(treeGraphics->topLevelItemCount() > 0); - updateGraphics(); -} - - -void MainWindow::on_buttonGraphicClear_clicked() { - treeGraphics->clear(); - buttonGraphicClear->setEnabled(false); - updateGraphics(); -} - - -void MainWindow::on_tabWidget_currentChanged(int index) { - QPIEvaluator eval; - evaluator.clearCustomVariables(); - for (int i = 0; i < treeVariables->topLevelItemCount(); ++i) { - QString vn, vv; - vn = treeVariables->topLevelItem(i)->text(0); - vv = treeVariables->topLevelItem(i)->text(1); - eval.check(vv); - evaluator.setVariable(vn, eval.evaluate()); - } - if (index == 0) on_lineInput_returnPressed(); - if (index == 2) redrawGraphics(); -} diff --git a/test/qad/graphic/qpicalculator/mainwindow.h b/test/qad/graphic/qpicalculator/mainwindow.h deleted file mode 100644 index efb44b9..0000000 --- a/test/qad/graphic/qpicalculator/mainwindow.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include -#include -#include -#include -#include -#include -#include "ui_mainwindow.h" -#include "qpievaluator.h" -#include "session_manager.h" - - -class MainWindow: public QMainWindow, private Ui::MainWindow -{ - Q_OBJECT -public: - MainWindow(QWidget * parent = 0); - ~MainWindow(); - -protected: - void changeEvent(QEvent * e); - -private: - void updateGraphics(); - void redrawGraphics(); - - QPIEvaluator evaluator; - QPalette npal, epal; - SessionManager session; - int ans; - bool active_; - -private slots: - void loading(QPIConfig & conf); - void saving(QPIConfig & conf); - void on_lineInput_textChanged(QString s); - void on_lineInput_returnPressed(); - void on_treeHistory_itemDoubleClicked(QTreeWidgetItem * item, int column) {lineInput->setText(item->text(0));} - void on_treeVariables_itemSelectionChanged() {buttonVarDel->setDisabled(treeVariables->selectedItems().isEmpty());} - void on_treeGraphics_itemSelectionChanged() {buttonGraphicDel->setDisabled(treeGraphics->selectedItems().isEmpty());} - void on_treeGraphics_itemChanged(QTreeWidgetItem * , int col) { if (active_) redrawGraphics();} - void on_treeGraphics_itemDoubleClicked(QTreeWidgetItem * item, int column); - void on_buttonVarAdd_clicked(); - void on_buttonVarDel_clicked(); - void on_buttonVarClear_clicked() {treeVariables->clear(); buttonVarClear->setEnabled(false);} - void on_buttonGraphicAdd_clicked(); - void on_buttonGraphicDel_clicked(); - void on_buttonGraphicClear_clicked(); - void on_tabWidget_currentChanged(int index); - void on_graphic_visualRectChanged() {redrawGraphics();} - -}; - -#endif // MAINWINDOW_H diff --git a/test/qad/graphic/qpicalculator/mainwindow.ui b/test/qad/graphic/qpicalculator/mainwindow.ui deleted file mode 100644 index 234fed7..0000000 --- a/test/qad/graphic/qpicalculator/mainwindow.ui +++ /dev/null @@ -1,379 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 780 - 521 - - - - QPICalculator - - - - :/icons/Apps-accessories-calculator-icon.png:/icons/Apps-accessories-calculator-icon.png - - - - - - - 2 - - - - Calculator - - - - - - Qt::ScrollBarAlwaysOff - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::ScrollPerPixel - - - false - - - false - - - true - - - 300 - - - - Expression - - - - - Result - - - - - - - - - - - Correct - - - - - - - 0 - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - 14 - 75 - true - - - - 0 - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - Variables - - - - - - Qt::ScrollBarAlwaysOff - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::ScrollPerPixel - - - false - - - false - - - true - - - 200 - - - - Name - - - - - Value - - - - - - - - - - - :/icons/list-add.png:/icons/list-add.png - - - - - - - false - - - - :/icons/edit-delete.png:/icons/edit-delete.png - - - Del - - - - - - - Qt::Vertical - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - false - - - - :/icons/edit-clear.png:/icons/edit-clear.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - Graphics - - - - - - Qt::Horizontal - - - - - - - Qt::ScrollBarAlwaysOff - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::ScrollPerPixel - - - QAbstractItemView::ScrollPerPixel - - - false - - - false - - - true - - - false - - - 50 - - - - On - - - - - Function - - - - - - - - - - - :/icons/list-add.png:/icons/list-add.png - - - - - - - false - - - - :/icons/edit-delete.png:/icons/edit-delete.png - - - Del - - - - - - - Qt::Vertical - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - false - - - - :/icons/edit-clear.png:/icons/edit-clear.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - Graphic::BorderInputs|Graphic::Configure|Graphic::CursorAxis|Graphic::Fullscreen|Graphic::Grid|Graphic::Save - - - true - - - false - - - false - - - - - - - - - - - - - - - Graphic - QFrame -

graphic.h
- - - CLineEdit - QLineEdit -
clineedit.h
-
- - - - - - - diff --git a/test/qad/graphic/qpicalculator/qpicalculator.qrc b/test/qad/graphic/qpicalculator/qpicalculator.qrc deleted file mode 100644 index 823218d..0000000 --- a/test/qad/graphic/qpicalculator/qpicalculator.qrc +++ /dev/null @@ -1,9 +0,0 @@ - - - icons/edit-clear.png - icons/edit-delete.png - icons/list-add.png - icons/application-exit.png - icons/Apps-accessories-calculator-icon.png - - diff --git a/test/qad/graphic/uglwidget.h b/test/qad/graphic/uglwidget.h deleted file mode 100644 index 859070b..0000000 --- a/test/qad/graphic/uglwidget.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef UGLWIDGET_H -#define UGLWIDGET_H - -#include -#include -#if QT_VERSION >= 0x050400 -# include -typedef QOpenGLWidget __GLWidget__; -#else -# include -typedef QGLWidget __GLWidget__; -# ifndef GL_MULTISAMPLE -# define GL_MULTISAMPLE 0x809D -# endif -#endif - - -class UGLWidget: public __GLWidget__ -{ - Q_OBJECT -public: -#if QT_VERSION >= 0x050400 - UGLWidget(QWidget * parent = 0): __GLWidget__(parent) {QSurfaceFormat sf = format(); sf.setSamples(8); setFormat(sf);} -#else - UGLWidget(QWidget * parent = 0): __GLWidget__(QGLFormat(QGL::DoubleBuffer | QGL::AlphaChannel | QGL::DirectRendering | QGL::SampleBuffers), parent) {} -#endif - //UGLWidget(QGLContext * context, QWidget * parent = 0): __GLWidget__(context, parent) {} - -#if QT_VERSION >= 0x050400 - QImage grabFrameBuffer() {return grabFramebuffer();} -#endif - -protected: -#if QT_VERSION >= 0x050400 - virtual void paintGL() {emit paintSignal();} -#else - virtual void paintEvent(QPaintEvent * ) {emit paintSignal();} -#endif - virtual void resizeEvent(QResizeEvent * e) { - __GLWidget__::resizeEvent(e); - emit resizeSignal(); - } - - -signals: - void closeEvent(QCloseEvent * e); - void dragEnterEvent(QDragEnterEvent * e); - void dragLeaveEvent(QDragLeaveEvent * e); - void dragMoveEvent(QDragMoveEvent * e); - void dropEvent(QDropEvent * e); - void enterEvent(QEvent * e); - void hideEvent(QHideEvent * e); - void keyPressEvent(QKeyEvent * e); - void keyReleaseEvent(QKeyEvent * e); - void leaveEvent(QEvent * e); - void mouseDoubleClickEvent(QMouseEvent * e); - void mouseMoveEvent(QMouseEvent * e); - void mousePressEvent(QMouseEvent * e); - void mouseReleaseEvent(QMouseEvent * e); - void moveEvent(QMoveEvent * e); - void showEvent(QShowEvent * e); - void wheelEvent(QWheelEvent * e); - void resizeSignal(); - void paintSignal(); - -}; - -#endif diff --git a/test/qad/graphic/uwidget.h b/test/qad/graphic/uwidget.h deleted file mode 100644 index e7f4151..0000000 --- a/test/qad/graphic/uwidget.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef UWIDGET_H -#define UWIDGET_H - -#include -#include -#include -#include -#include - - -class UWidget: public QWidget -{ - Q_OBJECT -public: - UWidget(QWidget * parent = 0): QWidget(parent) {} - -private: - virtual bool event(QEvent * e) { - if (e->type() != QEvent::Paint) return QWidget::event(e); - e->accept(); - QStyleOption opt; - opt.init(this); - QPainter p(this); - style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); - emit paintEvent((QPaintEvent * )e); - return true; - } - -signals: - void closeEvent(QCloseEvent * e); - void dragEnterEvent(QDragEnterEvent * e); - void dragLeaveEvent(QDragLeaveEvent * e); - void dragMoveEvent(QDragMoveEvent * e); - void dropEvent(QDropEvent * e); - void enterEvent(QEvent * e); - void hideEvent(QHideEvent * e); - void keyPressEvent(QKeyEvent * e); - void keyReleaseEvent(QKeyEvent * e); - void leaveEvent(QEvent * e); - void mouseDoubleClickEvent(QMouseEvent * e); - void mouseMoveEvent(QMouseEvent * e); - void mousePressEvent(QMouseEvent * e); - void mouseReleaseEvent(QMouseEvent * e); - void moveEvent(QMoveEvent * e); - void resizeEvent(QResizeEvent * e); - void showEvent(QShowEvent * e); - void wheelEvent(QWheelEvent * e); - void paintEvent(QPaintEvent * e); - -}; - -#endif diff --git a/test/qad/icons/align-bottom-center.png b/test/qad/icons/align-bottom-center.png deleted file mode 100644 index 8678b5d91749731427f6ad948fafc8804b6731db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^;y}#B!3HGbla4+GQfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#9+w7#3x{Z~CYOnS{-~tpoYwwObi9n| zSasuW_5<^mXI6P>K73cwmFFa+ zFyU2T#+2NM;1C_l^gI(k`@dO1GuO&XHSS`Fu5FRN!R@VGx5!CE!uiOf?CVL>IIoGg izWx1==g)Bm{dhmkmYkBV*4;qwGI+ZBxvXb*ed=yD2jgH)V>21+DaZjn16d8^E$aJ(BL z(ycAap5OPLZDZN-4D9a2Uh~3W!|8N-NGaj&cuFL9+?~y4^RqM<6OcP8Iqrsg0$_2l zrl_i#6$03PzkfHg?b4uK*Rk6@k#oj9v0AOZ@;Hv$RFm|LL3e+jALQFUQfzWDdi6%$v|MJ+9o6c0%_VRt-1`G4b?~~1vA5wlicsUnQrSQ z5;6ltb6`_$n}E$VecyjdjT&$HAFPWCtIgDETU$e%FS&-K)*Gffi5bSu9XfVLdRzT76>%PYhMhz5!dk|qnIAdc1 zR7QnWV>mVp_}K6FcOFi7uv)FyZns&CdFd$eCwrWQOf5|-}fi!NCpB!MK>V{5J+_^X%#W7DJnO8-{Zhr*LCaJ^=y4L zov#0~*ZIGigv^c&Eup%GMjZ{v%OK4==bAu{XE)7O>#9+w3?!3H9ywIl#3wj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwQOOBmIYYE@ir9h$go-U3d8t1o8G7LImz~ee!Cx7=F zpIKLSo(mIsIjwDy-tvU}4Wj7_8Yde*zOcamVa}!lOSnH}VHNxJJR`xNcQ#9VH;-(HQd#EJnutDW|8L8 xz3+dYWnc2z>W-|x->iRU{w02SAHLyw{ypjT-qU3@r-5E)@O1TaS?83{1OSO+k&yrZ diff --git a/test/qad/icons/align-center-right.png b/test/qad/icons/align-center-right.png deleted file mode 100644 index 0e9335c39fc41b51452e46b2c67549c8ebf294e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3?!3H9ywIl#3wj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwQOOBmI$2T`%0#N9sr;B5V#`&$2_69OL^0eA}UO#yC zfmlc8BPoR?f-#KZfsDpwoJRy6i^PjcH_mI0y)XIfM9$lcvai2Y*78)a$VDs{Pk7>$ za^SX!@Ar3pE*tK@{b41yld-mhA$>u|gUrU2;$C}#1E(+AX0(zRk)78&qol`;+0QWG6p8x;= diff --git a/test/qad/icons/align-hor.png b/test/qad/icons/align-hor.png deleted file mode 100644 index a477a99b41a5c13a90070fd273187c7c3ed4671a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)^zRk%9mK18qq} zK~!ko?UqeUTvZgufA8Km@67-M$OJU8in!@Cropzh2n*~KZ~<*nV{l>H)HG~t*x{y< zCf!sMqe&CL5@K*=O~ZywU08+Kg{h*c)Fy2V1gu~w6TS+=%=?<_VhF>BR0kKhxWD8i zFE96=d(S!df9?g1Mx)VaG#ZUYqtWaP^6!2cuSVo!4bfLh4wZaHZD`cH>HNMEn=3j~ z_EOoQ=wDWh+BimRn$>36$_Y-@@2>7?+8b|h(|*-XW!FvnRZV;24fVUL zdz2HLqRp}&9YBi+lkq!S>S`{XY_5w{M5FkbpwM;C0zYkGZx-Un&jeINqnvE6i?!6% zTq5Il(jvlZ$C#^MM+_S$+u59`Id{6XzRb1-spUlovLDOWirx!FOza|w6$xQSOhjl? z@xH%zVd4bPK0ZEvKnQ`95-9{iN~Dy;VzEWw)2A=&`T}TJJ2~rRane3++QV56@X|g( z#xG7SFJjw*)2;Po%6H%XW^l~li18r<%E<@NWY`Gf%!@BP-hJ$Fyxj8_@Rk-x?5`xT zzpWCe{HJVvFgW}SZ~|a;^HL&&L`nlG^8uHJt=GE}wg0*j50|C@ICeN*v6N1C-?%xQ zqKRInwx$BUa+#c)*w#98^N?{jYQQ&! zXCA2TTX%Wqcq`?lWraKbVR}t(UfF!^2nnPV>ndPMsIDn|jfV^H-3{hv9?*?p41-z; zU_d!E(mQsW;(=1mb-Y1Ev;?kRgT8(KQ>DJkLChbdg|-HVQCEhL`0>Lqp71 z;o$vfDKQa|WD5)6lNI~Vh=^oj3hrECW@t#hMVK%7I&dESlo(Y3&so3DE?J|KN$V+P znEk;m_ufw2#MXgG?0(XW-=8+SJ>R&(SDvR|e;SQOqtR$I8jVKtf8j3~pfvF2#7}1c O0000{XE)7O>#9+w~0DgvSpFfS&p_!e+TCSHQS|T=jptzdv?`?Z0b37&~NIp7B1-D+GF&!PC{xWt~$(69BVWhO__x diff --git a/test/qad/icons/align-top-left.png b/test/qad/icons/align-top-left.png deleted file mode 100644 index 38b22a14888edf979bb044d51f2a358a0b7ea2c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3`!3HE<<5aVO6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS#w$0f(kVtgPqHkE;aQNh#2F~s8Z)=9R0M;v%s=f7=H zyJR+TMKP0?iq)^R-xYQ`T76?%X~7tE(ZTWPHJQYn4pmEXR1Wkf)otQst zb=N#@Z{t_mbnMgX)U8pmrLoU717!M-m)`%bZrWn~@g?7`WgTe~DWM4f{rj6s diff --git a/test/qad/icons/align-top-right.png b/test/qad/icons/align-top-right.png deleted file mode 100644 index 2232cacc82ca169c07559c49873ce8a949c141ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3`!3HE<<5aVO6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS#w$0f(kVzz;Qwr9aNZt^njIvX)ka}`rF4` z*Ia)sZX9h`TVpbP=Hrh$UhR6Pqil3ET&5rroePWLNAcCWHf-|endEv+AoBXHlR2Ey6BtY!7uO7(ZFx%FPF~4=8sX-of`K({6tK fzu@|LLf?4T#Z5B&V*gGI7+egVu6{1-oD!MaN`Ef7zPK5ITqN& z1b?C$AD~}Eu)TMl-@fj>7q^?qRR_FkpnS-9tNfv>n~kza{B< zOW0(1=4m2Dk8QIvlxdga{NbsF1JL%E66Njh?|tI^H+S_Wb*Z?MO_MEUShpT}dobto zblv<*+@Qml;EMA6=r`mSKq3*@{X+YrClBoGiig7jJGWR>A6o@)y+PcFsFRnj7`Z%r z-cSHCB#*?Rt5O#xu9Gih>FZouRsZ$35KlsEH7TiUhiNo`f^8oi`RQV-Q&OPZ(|w%- zRRqIdhHfFmL19Yth)ny{uYUkTi{~q9?2CQ?Q~_wFp7%zI!!F=wKoIo^1G-r|FGe&} zkFM$i5RTUV+`?vn01Q*F1!&O&q`-q*C`bwjy|!6th~NOMq%{HlYYWw>-O*D&Ty9g! z#_?MDWp25Qrmf78@@-)7A$1=EA2qrQ?VX;UepU#9loBZfLQ15Rq*AGD5CEtQUP^?J zNU0&E2+ktDH}lK0e_x3}0SGA&Lf-#^rGU8WI`XbNiC`&kZ^kPNIA974r&6hh-Ti#g zj9e=a$k=r3kxy4gjMtU2a6F5UgnZdJd;QqV{-A8;x{vg2<+Z1DdN$0luWJsVySW=} z0{mY9T-&WFQka9!i%#$zEtI09`-vO6QjDHL)1^Lbmpt`Kq%vp5(Kc zG>l$~j+K3i%)S9AN1e(Ra_zgjJ5u4WU@2GqhB43&mV(K1+*Y>tp>Jmo-xluU+V5AV z=4O`)i+vrBt&g~Fx$?-DNJ2=5GiO=+c}yO*9qpW7k9__;vral5o8{!xwfWLgF|)00 zW5Udr=E;^a2mvEsac6v#<47^YH@4ky3IK3bDW23WPF-8DGNs&eiC8&uYoWmTF*3jX z$_Wfk^PRsb2ldI7sH7Tr$4i#S?OEPMF~pDfo-YyjWRJkx-+3=XJp;C|B>(^b07*qo IM6N<$f*1Pm5C8xG diff --git a/test/qad/icons/alpha.png b/test/qad/icons/alpha.png deleted file mode 100644 index 543566938cf5681db007530efc6b64c4ae67c096..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPaBR`)C--V~^b^?X8JzX3_G|ngA*^(*DZ1&*w>+aAw xosBLAs~RN^{P_RBevQy<^L#m8)nAzm45u$~80FZyPX%gY@O1TaS?83{1ONw+E@}V( diff --git a/test/qad/icons/application-exit.png b/test/qad/icons/application-exit.png deleted file mode 100644 index 8adbcba957b33edb54413f3bc520c42c50134006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32537 zcmX6_cRbbq_kZ1iYhBmK$i)>!b}8BS+8G&9nYpq`%1C5id#^|&+)_r#$SU(%QOGKh zb&ZS=GP=0<-Ou;;$9>%Uc)ahu@7F!A^E%IQ&f~_J8tbt#on!(4ut-%W_eT7rH8?bwte4kCb{U!Kh}M$vFKkdlBD}{ zus1k#QO)m9uO&ukue)nSL2B$~SkSzP&{%>h_?wpU!)qRrniABQEW$Ef?Cp_~T1v@R>`w`s#nvu0EILRICmDaQ&H|N=KWpxtyHM zZSI*Hmh;2X6w5f1-C3Ws3tOHyse6xDyU_ZhqYIGnAl{2WQe^9c#jV23QU5z^RUO80PRt?3V?{0mbwYj02XVU<2S9tzYLZWo8mDtCP z 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 diff --git a/test/qad/icons/archive-extract.png b/test/qad/icons/archive-extract.png deleted file mode 100644 index 0e64c874ebcd7cbe438f83c3a19abe14857fa18c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1824 zcmb`|`BRfe7zgkqSU^;uR-~4oKotb77Zm|1rV2@G zSPKfY8bCn_G0Kr}B}#%oxHR0n9JxRe0wE$Kr2D@73;oQq-`#zG*nM|qXZD(pH({N@ z7X~O4YTZ!}yf5hYz)fEVBx!Ip1BJqL_;?ZB!SsJ&Zf*|N!D6v1t2sM6J32Y0rKJS~ z_^*5+`ujzlI~x^sCOIYPLUIzBl9oD|%slEBavrh(W{P5KDHI7|BB2PBSOkd0BC$j?tq@BjV#%ZgkV+-eNy+4-6aYCnH3>{1-Xo@` z-^*mvfDAxFE|<;BfRF=Vpis;J3dAg84xv=eefT)Hu&4y)=ankeJfK2+KrA3WA{G%# z2#sb*qg`6os?}7UOua?y9XMbno=qkm#2l0Aqu6#JBt67c%lE%EopiW z{&Vt)8tem$xS$Xt9|cZBW zPj<~GM&bm!it>MvKub(MK zV_6#Q(`Y#slloAX;8d{vsabVsr#>;3GcPc@asT{P-BQA}j5znCBFqf?+~zyRKdBrK z*%%t7IizDZdu(C^??>68(uE#FS5L;Ee8j@hTl2<*y|LP{R1DPzj>t?P?I(WXytHWRW4f`?FB$P%OTu%4p# zscklt(sCr)i%Qk%2If7Wo*ih8$%r}CW^8;ozG2S4JIl<}d#Fgg&D68-(VB#?BPT<8 zs%HJsr++Ucn{vYDcVyZ-Il3`C&^=Zo!*c?R>~4}a^9d36PGiD*UrH_b6w32M31eRp!$WW;Dq;jqcb|8)>yc|4SLsh^ zBL|8wF&1y)9Ob~f3ephx^Fr}WH zq(a}X)~m#2oB1sF1q@jK;)`~&>bG&;mvB7OUVYa9x|%@|4{&{QXda=VTUCV3<`t>O zKKnyM45>^>;Ju&(Udd=o{*3X_^P;dOvw%6*f8x|&x47~>3HokgcSn@%t=VunYtN{{ z^q7n#i<`NGW}y~>vZFu7jdiRpkZsT%k}S1a==4U!iDv~{60u7YP#!C}m-14l%)L&t z&}U|*g6|~0y5ts-v6X)Hd9vjoyq;)%aywxXi-f))aZK-cQWC3=%~9l{^?;-#(#<82KfL0 diff --git a/test/qad/icons/archive-insert-directory.png b/test/qad/icons/archive-insert-directory.png deleted file mode 100644 index e26f51c37ded437634ff0147b666e3706310e0d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2770 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 Y0MgHnYjhKLTmS$707*qoM6N<$f-zVYvj6}9 diff --git a/test/qad/icons/archive-insert.png b/test/qad/icons/archive-insert.png deleted file mode 100644 index 4143a38b6be4ce783776266ee0e404a662ff1efd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1475 zcmV;!1w8tRP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L04at504at6BJAIc00007bV*G`2iXD^ z5HC2;Z=dG?00l!yL_t(|+TEJnYaCS=#-B4^*>tl_S8CLRq&2ohVr!w6B1I7OFYs2- zh?LsiwbwCKDTs(rB4Vu+X~2ut3o$pn5^oY(BsQigCe_w9@vBLiZL(i8yEA9!_%fIn zdwMudrX$gJc{qm&%l@ACdC%+)1poD7it84MVSSY#@qc2#ChZ|@A+dD?KSLTL1%KPDvZ4j;EKY4R0avRX6HagKyM}?T7kdzq}3m=dX@KxF38a{rUS>uTrOf# z%{tVjg->omGNLcN0U1a#K&4(uQ0>(w?z;i0;~L<5fv<*^I-a@##?&LDH;5pg_UM#Oej+jVhsk=pedvvr6Iv5 z86iEq)MeB_QrfKmn|PC$SX3liWr%Mik%Fdhmqfr8gjrOlUXepAnKD{WKu!Z-nIT%cG-) z(VNlVE|ZT?R0<=>lZc>KH1E#ha$ywjkN3kgfCD{8@O0aAXm5EGsxmYQNWe@5sfU-q z!!V50Xf(h%$I0(bU^9CJuXP_q@75!D%-)GFejJ3)d29o^&g)ALAAtu!0N?jfuh(&Q z;xk;H8^ivt=SeSMe0~%|SI?s62hrQ~BcwMHqx)L;sOw}PQms~pTdrZzT}06@0#p^R zib~nTx0l9d0L+ni>@$$ClxZl~F2};8tBS5TZ_hs|00GMSI_EU}k1!2*7QUkPIXlpBS}# zV570QxpWh!ubjpwqo)wo8!!V#GGK870YSUG@~4410!pRl?Y7zGtc~WJh1S-b*xm8e zq-QSmp4dNh$wC^X?tWyTZ=?_V+V|nm-ops#8bSd^3k!kHhdbdlDq!^LXzRd>dtU-G z0mCGdmI1?HtTo*51Q{300D|emq*UqCW*M+Wp7ZAY#mTAH!S%!gHqYC0g z(*riP=eL8U2-DJa}&N{+G zld#ZiHvuqEEotcysg^CJGY}fdDwb0tSmSJiB)vn!9Xd9S3|q#Q4PP(`XKC0dA zZBu(5Z0Qm6JIHg0#~)fk5#i*WmIP2002ovPDHLkV1j@0sssQ4 diff --git a/test/qad/icons/arrow-down.png b/test/qad/icons/arrow-down.png deleted file mode 100644 index 61f2f1d67d65a8279c075226f99520cd7f6ff34b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5734 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 diff --git a/test/qad/icons/arrow-up.png b/test/qad/icons/arrow-up.png deleted file mode 100644 index 2b1453bf79d40e51e0e7fe8eb944354a56dafa4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6211 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 Zc77E)&&)1M9tOIB!PC{xWt~$(6952eR2u*Q diff --git a/test/qad/icons/axis_y.png b/test/qad/icons/axis_y.png deleted file mode 100644 index 7d4d9ec130102bcbec74723950242642eac1e358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYYs>cdx@v7EBjqeA%0^6pIKg0fkG2JT^vI^j=!C@k+Z=-z;%9K!h4}z z4$}$+xu!;Li2Bzhb>MXK)O$B(%ijrM zHCWvgxp8Gxf>1(G&aA%-7L0R}Hf!yv;lHs!ZTg%!YkD0r@4EJjFbWDVCNk6;&i7$> xdNNTr;BQ(?{ig>EB}^sxr5B3|ifw;wTjQ;uB(9V#83A+~gQu&X%Q~loCII`!S#JOU diff --git a/test/qad/icons/blockview.png b/test/qad/icons/blockview.png deleted file mode 100644 index 6e25090bf9abb6b3d9c91f0a75e59f8dc61eda11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmV;g15o^lP)cMQu*muZ*{-Y_x&HkF#I--&s!IuR#X*L#oRG7vywk*DQ^Hy{m*w}i&cP!elyI> zirGh*rb%yZZraOfqVGrMr0ip1$(6tEH_|rq_V-s74~GD7>Yt{Gap=+gp0b~*^TKxf zg*hf(y?tk49Cz*IG;uk-KoQ!ih_+ZUO5>y&>4ve5hXVk+-L9Rci5HibNKv#6w1Bzc zxe!xg*L7{TKCC%Tyk`aIY+%KJ&~Rv4ZD}=ZGI7wrym0 zq*g-QHZAKMvSg$iKr6V>IhbX}CSy6;2^?e8S#!v_Fo;kEtTxbfWHa(OvYDFn{qQ05 z!^_Y;3(^1xh#&&)PL2oFoNlz_*8mqo|DkWg%drokR-qA~f=GkAbI4hvmKz>b<$tQ? z?EU?t=YJ~sfm%7wh4J~Wt=N;fV8uR`tZ#kI=wg9frbD-dzL!$WxFNK zk$11&+IEQHM^;<`*C*f!e#(W*7nigbLbzz*0<3q+kV##l+jZ?D=6j$vPgwHLw~Gzc|i002ovPDHLkV1hyiz{vmr diff --git a/test/qad/icons/blockview.xcf b/test/qad/icons/blockview.xcf deleted file mode 100644 index 54eb897aebe0711506f5925092dfbe4b2d394a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21607 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 diff --git a/test/qad/icons/border-line.png b/test/qad/icons/border-line.png deleted file mode 100644 index 4b47837baa0108c5e764dbd4fe91e1e610fcbe19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4859 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 diff --git a/test/qad/icons/button.png b/test/qad/icons/button.png deleted file mode 100644 index 266fb0f3cf30aed052a9fd0ee12bd2cb072cec35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6345 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 EFF^3xvj6}9 diff --git a/test/qad/icons/case-sensitive.png b/test/qad/icons/case-sensitive.png deleted file mode 100644 index 39c5c5ab5bfccc6923475434f821a2e3a059beaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^K*1NDE{-7~Ay^lo;PIR25pODs`qSAs-G1k2%57wi)f0~dQ9HjvCw zTbv;1b8Y6fUG@i3Hl1MWI%~8+pChZV?R(|TkBbzx{cL?a?|$)l+w$|p$M-*$$T$4o zDaUu=|J$~eN7g+Oy)Mz}ck`I2+{Yf_Gs_vL-{AhOQF2OGD&m0Dt%)pW9x!fRC~nB{ z-+#>`HF0YTZI&&E=WlK*zVkRZ>{<1`8@%p?C6igiGZwa4>bUk8wP}dv1#s0{e&Ng%qRJX^LHhu@Hue}V}quv T`?r+={mkI$>gTe~DWM4fV!4AU diff --git a/test/qad/icons/chardialog.png b/test/qad/icons/chardialog.png deleted file mode 100644 index 5c39db05b5b14b446102eedede1e421901d2b32c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmV;g15o^lP)mvW za1{`ah7bs_Irg;uZ8I}kd%A~@lBU2|& zmPu8_N*Eo@V3h=kvlr#Yus5)68!PWWVDZu8k7LJ2PMx2g-c-zf=T61_`SZuo;;tfs zz(`U`l3ZX}42s7cQihT9p69`JT|{AYU}0flfH_sCPV_Qm2>8u}=wFR(&WEEQwV(9>50+h?+ zn3_6=!NGmFb*sYV;KW{~;2|Pdf15n(55>1{SFpLcfl{f&mq|KXZ^cTGNLGKgm*TiI z{qyI~Ffnn4h?OA& z%*vJmGCj>^o6y3E6Jr=Jm!XvwO?7HJnZ%IBI0`#HCP1c<_6zcPmmiiAcT{TG5ud-T zi8q8OVjm(jAp(gR9%UKhi0cYbOn(PBxPK6P_mqUJt2mZEly)Ln$)b^jAlV7zeUlRN z8JV_R&X!Wpc7wL*TV-mj$^5`1#h1jaSqU;7!I5UG#V=zTD^=|Ke)RS0T0?7vzP>&{ zwix8;qL>ke-ESkMKu&8?tz_FFj_~T`i*}=4_fz8W@iA|1Ztn8+YgbP@Wc>pJrCnrn zdyXbbIc`2ji{7Ev@a_nxWImBaWTw?>Ha4o&8j17P*Vo_9&(D8L7QNK6QmJ5RX-Uen zy1J^X)v8VZ)5%cQ>vcuvc!xxEf$V+;-EW46heL{mqobpkot*{6@ZWw+e*vnV?NMQuI#s2`GpnLg`-nW1Lc%GT^vI!PA{Eo zn8#!&;CjD@S5LEuX-SL{@AHQdn!(CX1w?i-`OXs2Xk^>7dz<>vcTQ7UMVnsg?EU$x zK20a>*xs*yzP0RMUii;S{dV7!VC@ZY^=}$(>YhEi>FP`O)ghZ><)RuTR^Lqe*wn!= zAxP<%N9fflK?cS>PO(>W%;pD8O5Sb5@P%n&lB9aB(sP;1FGWJ#&vi}_^1ZB}bVTB3 zRNZ`;QYQB~^NuSjtivWjW zLFZQn%jb@Zzd!f*yS7DuZOwoFcp*>ChjR{FnkQ`C`qHg@{i+#~_kJ_JzP+_qK1Gu? z^r_HoSBdfqxASJD9r$K^V}00r^SPV8*Zu#l+yCd-WdZq>@v4#Cf0SAnzW_s!!PC{x JWt~$(69C|&s!RX? diff --git a/test/qad/icons/checkbox.png b/test/qad/icons/checkbox.png deleted file mode 100644 index 1c311e210b065937aad7540b7b5bd44aeb8a6c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmV;90&)F`P)3yWj$_ucyDWr3By5)?f}leP9;EEj zMcAM&bxD%FSROp7N2OaDA)T~ar>Mk@=!-xJTNWxPkfl0kQKb9n$9~Ma)4U_Z#$H5! zFuX84&u`}WzwfKLuFGDDJ&d#q_CUvMhb7(oO-DM9e8JLEIu8Wd1>ee97zUgkZaOW^u zRi_aF@M7yZVG$x*Er0~uY+>x(sJFJVUd~e6t}$|Ygjgu%g}Blzi0fBK)}OFkTtFNre= zEXz{Cs(_mXrfCpvi!gOzit8u5v{xNU>vcjLW&GSYwrvv#1XQ!CZ63ie1a`poe{ra5 zh~wcH)2V4DFHREi#HL|_f!b14+bj^m@DGtCEOc8Ze)1B1oqYsMOTF{Oik%S*XcmaV o+*~rqE>N{Ju&>*w(Ag({0awz#@5T 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 diff --git a/test/qad/icons/code-parents.png b/test/qad/icons/code-parents.png deleted file mode 100644 index a4247e1b14265c1aecf887eeeb5accc196dae353..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1126 zcmV-s1eyDZP)`EPK-x0wE9(;z8pcvbr9;d0RYqQ`mn&#DnCh z3*w%Uz;Z+8>Wnpd+l~N$0c2P=6yLgR>*a8}efFA&NnF079W#K#mYY$FakVn`> z)RkW@myyrs!OZ(!Z;PsKwOU23 zRzohALl6W9B9SBsthGHBAO)tKt!Om zZbv|CjW7&*E1)7FjB~I^TT7n+RQ3u03r3Bjjsn6kM4F~Z)3p8WpLL}aj4{0x(BK#* z6*M^Q*j{9Xs&w{Zv)O#;JQtDPMY%aPRYnr0{N`1p8ijPXRI z+qNxZV`HYL0uo7Q-}&aV`O)DaUqlWj6C!Ngt;9JBu0xJ;^ZEQ$W6a{p%F2;M=6N0_ zCnqg{*+-ql1;9sr;2r>aiJ zO?|`dlSFlp)`0vk7jY)w3=u!-ZS+)F`|#GwJKueO=eOG*`-i=_f8_I2fGh94YxBdy z*Ped!#^R~YLT3%{;)TV_RFLPcz6NLoumWoasn*Ssyw-&&da$e3H-DY)W^3OfaH|M; z{q6UWBne2h3?~JU@&T>DAdq7CkDtS*H{ZZpjn20AEdtg8_3ceqmw-rvJO(MRC4>m% zwd$z}VdV^t(`UY76;R!|4{H;UQeYO4^7kU4z*>WpLedyQqy|wyLF4zY7m*)*5``y5 z049(MK#E(&6N5aBpk6^dhysijG;2-N*8hb3^#}Yy0e-0j6%?U!8eUKUw1(&95qkqD zKzu@|1WvW~65~R+Y6z115E1O(`VS>+hD)(s^;0*kJA6UN4f61Ybwplqp#T5?07*qoM6N<$g3|pArT_o{ diff --git a/test/qad/icons/code-struct.png b/test/qad/icons/code-struct.png deleted file mode 100644 index 425b7b9121a83e7aedb72dd95fb8cf39311277d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmV-^1cCdBP)})Cqt}Ug!C6zLT+3P=AtNE1YxTPT2!lcE!u^< z$VIk_pa{%xK+*!EBrJ$%Q42LmC}-4h=G}MiJ@@?kwYaardGnqQP19WAec^E4yXW4+ z?{j{?bAG=Aef8B>Uu!AVYvAl3AM9&o*H0Y#<*ll9zIYfd{=j>9ddDGi|HjAn@7eb1 zm!$$Y`Rie~b7E^WJb1SX$|J!e2#6;HkKhS-;&fJQI-z#mJE_(JpxSHT$eGtG@4omx zm*+1a;t4?z9A10@(QfrxO}+EQD{B@)JpsIh*>r|P#{}^p4liNBaB2UqS1aHsA3&bN zY%9jYTiLFpd|H06u^X#qY?O+SpKXYPnwP3DDAk zG^^mkZ6=6>IP3Y+lCXOF)9)*L4;~=RG~Np?fb-IBAeEYW@6_p)htSUZ9?_3(w*wci zTvbujeKA519vIswn@6^ok2tfe*pEWaTr(%v1{c7#jrSgW5Uy)W4ZCuH(UJAf#I3ug z{+zj9v)=Up@Ko7kHmqN_zsEF5yFc3QjdPwGvBBh~SoI)yFC=-OnR$#<8P(a!0X}){ zyHg#Tva5dJ+gl9}xBG>S?6M}mUuh9c0bqk*oDlsJbJc*&^~wSMBS~i{nLLwZJ}pxH z&ECA}6P>4}0a%(}k_4PZx$fyZ2>2vf_I%O*4e;Rhab3U1NEiZXbhIHD*sNvu6Aziv zdZ4jxaB_F^;>oXn`mJW|;xKYv*t2W9ZEP6bSC$LY(c6?5D^|oEu0B8?V71EW)zan9 z8hfoxk0Xq9EuIufrQSF&@of54DFNae`uL86hli`f8@nWG!KK$4=RbaP3K%RUfR4jR zW#}p{y#xp%0mK(qQn6GAYf2}Tf#qINR~ukSIjx%@E+?1_g+s&v7Q}%l#9u(i<=F$$ zSx$=v$!C!~LGXxpz=NG3m`hNL(XFU7057*o>4kE-c_YHj{fJEsh=!mMH&-}IMW{i@ zn^LM%Xi*sHG!i#=9^)>&Ix02S1MV{d#jwSIilfQWP?F-1Im*4FDXNnd^S)mLAA^>qj6Z^{cuNdN!< diff --git a/test/qad/icons/code-union.png b/test/qad/icons/code-union.png deleted file mode 100644 index 337f0dec34d2ebebd19f4a0047cd574584d706f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2071 zcmV+y2qkIJ-^$KNKzAHxM zdB*!Ldp}oP`GIFjUmpDMEw`OmH-JC<{;8=wd#?MtbD7PYJtLtki7_tgW47812DbW~ zX7A`X$S75cR>7s0UT%WP$rq0A*?-{XXb}RPwyYpWgvi8UVMq|mt9V* z!i7TRf7pypyTd!2m4beTkq$7nr(s zFW2mzTJ}Hh{fad2g9pGl$N2a-*X*7mrO5GP$A->d`4K6UQleZean224nX%*QodEpn z^;7)zH@_xU6|Gi_&=}lL$%hYpA9cz{Zn=#suDpsJJ9cv9uYVa_V+=~~M+0C6J_NEM zgUu3SV`BjP>DgznlyJ^bRjX$%RmGC==Vzbc6L($3*!VahctmtybcNta$wu*j5xgf2 z@jz+}2AG?jC8o6%ytij(dvq#GUkCLd19Lw*g+lNo%Z38zal8toH3EpbG%i$OC4fdw zO-@WQbLPxY88bWvydO%TE`ToBwMq`>94RGK74MfkU}lVuZz9IX!omVCz4%YEETbs$ z5j{`_YzY4*CntK(|DHQfUKDEr(Dw7a=kc*|M1-;|DNE1HnU@KrN1WoE!^}pD0keb; zVMP(CCrnICOmNf99|EA$USM%?u`Xz=EMWaLV{&qWs;cO8+DuGLa^R*9^5aK;$in?+zXti1ttua)j;iB-32fo>xxZPgh@t^;UiOESs6th%=H0vDz zQc9#0i7|5a>xJSoLKI5N79QdF=3E05)&lf;b&K<{d9_%I3{m0C?>1PneyX1%zaS$E@1}(b7;A z2rxZ!x|bI7EGOF9(rBLLy#hFM_RNLr#z<;3CQ=*@pnFzORSdge|1OI((_Xy9P$4>8 zFeVuVz#2SYeUj5<4j+6Iu(I;b!@4EbaM_YPNf>g0bw)l9tj@h|Fbg6|2!TA$*|zNx zf}if~rbs`6I)l~rCobN0Nl$jGDAv@ST0+>mve24?*peX#P6ek9=Nwt)m_2t6fZOl* z7)5KWQKT7}I-DxbY5nXn%o44l;MUvk0AO}@7MEo>SI?)a2wJD>WdB_d_ly=noI@3y zD58prB3gUk=+Ps5^w!(BVgHTXu)n^#`O5wGp?TIjG8$l^;yd4caM>DvJNg`%b0jm& zq)wrlkR;9eu~+#=01#_qRdFhaI#i`Gz6PM8Jo&`05D~7s{(3ID=pypGAj>l{m-WSf z^}vMSnR|PVBS)U&$tRw`Ifo=8H2@?DkyO)Enq)Gh5)ag=_k8v}_JB$AKTx_^v3t@ojQR-R8j+Srsd*QJ1SUYNLs%Qhq8Nx07e~}W zBHHY#_IAEYD|NN;+KUTWdKU$SS``S0)pDZQVKYTF5tASdz3Nn1VJIw6tlMa7}n5-8Vz5Rv*eqw5K)(`Yh78;V%0=ZliCSaV;@AsSH=%xYPk ziFR}H`T*ql7)6%jeFO+HtrOEJ(5 z&PGDV7^z}KY%)w0BdMz2W31}$tBS?NMfUC8VXwA3Pp`X>&Cf3!EK4tYrlu^<3#wRA zdXEnkA%teJxK!u>QR>X(99foA6a__5kma>_Q&(RprY@yYs^_U9z6ylk@jg(63g>dJ z*|po+osOKJKYwtfpP26a_?^45+&y&et+x)md3J`E@u0s+n)x$@c1u&d2-{|z>T)iHroGZ`w!j%jH{#X+-Cp)002ovPDHLkV1l&% B>KXt5 diff --git a/test/qad/icons/code-variable.png b/test/qad/icons/code-variable.png deleted file mode 100644 index 3c768e6dc1433ca63046ee4234386851fa174a80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)gLI_LE2_X&mL#MbsUeqCQL_eFMkb{2j=KCaz? rADf#vJvk9bBoc{4B9TZW690q0RRL7sOughw00000NkvXXu0mjfvY&4J diff --git a/test/qad/icons/code-word.png b/test/qad/icons/code-word.png deleted file mode 100644 index 3f6725a347e9850a922a3ac2e01984c9f192d331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1818 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 IoK@I=0D=n5x!CK)OdsODYWmNlEG6 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 diff --git a/test/qad/icons/configure_16.png b/test/qad/icons/configure_16.png deleted file mode 100644 index 5ce478b1adfefacc19d35d61e88a6c02ebe97454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 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 diff --git a/test/qad/icons/dialog-cancel.png b/test/qad/icons/dialog-cancel.png deleted file mode 100644 index ace88ab0b4ad7d743e0173d7638eae6b807afe7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45200 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 Zw~$&DUqsyk(zW0MBV)tu&1I&XHrk-f-u)sTUI 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 diff --git a/test/qad/icons/document-open-recent.png b/test/qad/icons/document-open-recent.png deleted file mode 100644 index 5dea408dcc2c5bd9f650e76944d23fcc7518e9fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17232 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 diff --git a/test/qad/icons/document-open.png b/test/qad/icons/document-open.png deleted file mode 100644 index 63380e488e814f13da2c451a95966598e21a5e15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8621 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 diff --git a/test/qad/icons/document-open_16.png b/test/qad/icons/document-open_16.png deleted file mode 100644 index 17076a319e5119866944a5f838096b39dee08d61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 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 diff --git a/test/qad/icons/document-save-as.png b/test/qad/icons/document-save-as.png deleted file mode 100644 index b5da838c9a15665cebb842335ceeb5015948ce96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41121 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 diff --git a/test/qad/icons/document-save.png b/test/qad/icons/document-save.png deleted file mode 100644 index aee3e22af7b53836812f8d83e0edeff787e2fdef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22676 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

#LTh$(1r~g>qHU4oRx!1ACkLe zWy&&xX3vRN*ccE=W+!;prt zq>veB4nkE*mK07d2`woME2?tjxuU1P9Y}seG)tBpx2Ht2oY8pAh0<)yMG@GJVac6C;It)ZRLMk`uh9tS+Q#69ekUX{G-wgDBoAuF2Qn( zK)dtX=A3VE;^s)2^g0<$Ug%AgIyq!A7BrhopFX{jgP_pd+-z}^%4%zC%QZAKWcaxp zKUUBG_~~4hTOJvZEWiOqmIzLWI;9X^7t4`SQ`|R(Lvcz%6mcHXcEUistW(m$ad8gA zLUg=m$GMkv;)wt8v@=d38B*Gb{i3~ujqVxI64}C%9O4vl5inwnP!E|Um=h{W*nc_CRexa|gZv>8EUY%*eELboE%wlK` z+p=Yg#eXdxHa|ExSm5Uh5QdkWA`Uz^#dj-zJ7L5M8P75}hiM9hXSNc9f>pYsR% zw6v#xqtX#bj^}3uP)k77HMo`hHao}b$RABp_40flq@!dOSMKbL88aH;!<{f;LZ-E~ zH8XMI#5xXvIu3(+{s%C~2?B6&+N)6^8NvWQBKV*fqxzk36*B8+55&VT_zU1D1r-2r zLE*$jW%tA*N}DAb?+Js)EQbz^2J#O16^YT#LU7FK8E84-+>e7Or-h2`q*EjcjY*@3 z4~@)_WXbWUf;&|tyiU=+GQXgO-t_Qyk5U5~Do+S#IrAp4c%IX3FEdZ`0bxztDJjZNh&Pb)btk|AsLO}rk zqoum4E{^ww$|h|K3jv-3bCj7Xykn)5SpYmv!MU!d)R#U!rFG!cap|F=GZGM#dB}l< z3jiqHhlhtPey#`>0tY~z17LW=h7BVdH*Or})^L;SOA0#8zwz`UhoGB zj3qfJHg)ddKK&h)!9Y~}rUs+kgH_gm{Dt?XwGt_&n;ZIu&t@72}=Ju zuIyQ^^mW_{0Ohae`|y`V=L?5|Fa|gf>i9S3n&<9KI|>iba1_r~XjU@c-8`2JgN$pY zQ^j_w5bkqyN`ArwJ8YpK)&z5_0#1H05W{K)>~rNPU^b}f?`~inhFAzZAJp6z$`2*5 zlRq&1b9f#;DCe3vXVO%UDG#@RFu*ttIPjX56W0AOizROml_%K)QElzJp3IQnn z;XG6k@;uB42f)a>b?b%z0ALMp2o(8qfWIIMAgmrlt^71y3QcMW;2&+?8&T}*9Dk7w z2i83_<=lX*90C*u^f$-K>;5tTg7WLRIY&VN0Gavo=eI&t0L*@<|8wPU1O?_LaJIX< zTUY^L0f;HX9Sgv&4cJOXnwC)ET?J*NN>EoP+8Z;ZBZ`}U_y}pK&WQ5z4?0Wy3J420 zUO>es(D76U+!v7XxDjnLgxA?s&xqtzSOXYNV-cWb;!$W!&uJ9^r7Tb@f>sZhS7|(E ze#uy1sNi|HXZYjFJHnMb?^Fj|0Km3W4S*_w001aHw*ZFMtXTsvC_vQ!Ai>kf5DP%{ z-Nr4Jv@L@G6&V#9Edy#HP)O8tLJ(P0WTn%D$<_c>^g6PQe>&w44FLFsPAuHi&%Wg? zZ|MXJ0GxeJ-M@~1^z~o`K*J&TjCXBe#j}PudGONNbz=mD>fN})l_5(UVvH&>wGj^qFbXrnT_WQ+WS(*kOkzs1^VWI27PdSO)MdlZitz=tDqdz)~OL zu~G@^xwuoeb`_cEJ~+k13NFOCXJN-1{NQC}2NN7ka=vZXX^3M`QNQ=pXR∓pp;T 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 diff --git a/test/qad/icons/draw-line.png b/test/qad/icons/draw-line.png deleted file mode 100644 index a521e621e696d1516964ff784c63f26f245ec247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4499 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 diff --git a/test/qad/icons/draw-text.png b/test/qad/icons/draw-text.png deleted file mode 100644 index c8efb7d387c4da56c3367e69eb84769c5070a032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3147 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 diff --git a/test/qad/icons/ecombobox.png b/test/qad/icons/ecombobox.png deleted file mode 100644 index f0a2d172e3457e9fa5a71516f927990687e9c8c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1215 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٦sES)bG z3pFu!;36pj<_?4-ZUD=?BqVU3-%ux8{{Hq(shv9bP){G5y;q)YOHH3CzsutO21PpC z*ub83)!&TIPIilu?CVDnfX)Sow(jyic6p2p!u)v_@RQFEa_AWWFxgL1RaE_bScnJ| z$?u~_C}5VDTJmJfF*5? zLPi3l1gePy77+;)UWo+$#^BfPe{4#RNA{E5^xA2dg2muXcN^lu7K1n~871=ZMU&HL z5Cf(FS^coVZ%(vl{KwEh??-nN_$y0uzZ&OENLg5s_U(~zZ(mE7>)^(v^FC}g8;#wA z6M?*pc#A&B7fS-nSN!TPUWtG zDVGnYo^MCl%4}qoBw>d6*X@~@@SwYA1X-EMNKK8$`Q`yW|KP?IrMN?}$}`Zf0F*7@ zFh~RtB)L3JYNoCtU;hbi?VGzt@tbE)l6$jRM-H;ozt}c}hn_i(?-Ds^z}FEBuXJ=~ zqrGb|bm+AM=T@(-e_B~`huKnz11v-&aIEo`&;*MK%nMgbHZ3&2BEHsgMXm26J00H5%|gS2mBH%g_prEX(Kz;nSEGc5%rwm^6RP| zaHc1_c|cDg00Rsf;JM`I{=OX83oF)sHt@^ui5&Q9(2vdY8729Ba+DudLwGi;Z#O22 z0nenQxB4pZPn-nGa+;*!s&w8+4Gq=Oz<>Yut&^ho0R6s90!sho6PPF@VAhd91(Co4 zMG06{5+K6lF5aTLzbW{6S9<)8JB$t0B>7{4e3*bSE+u01y`t5m%KdPVO`9i}?QzMU z8yW2X$nJxu8_LQGzExb9K8kSYt88%B=$QY}ilU^?W~anu9X#K2gnX&o^8A#7NET@( z3AFT#;{FHs@HO?+?cJN}aO1U+NjkePyD-o;jzwEp&OQ~1Ipt_Q`Xu6$Goxhxkb7F3 z^aR){*hag>jLcN0_Ws$II=PBieAE2d7q3^&XPTsYN9PbyQ{p)Ru9>j�o?yj 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 diff --git a/test/qad/icons/edit-copy.png b/test/qad/icons/edit-copy.png deleted file mode 100644 index a8178caadb5061e9a75b9ed798ce89490c1d1b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14072 zcmZ8|c{r5e+xGK}kr~PwikQh-%94Z%GeXGPLLp0w5LvQsGb0Hpl*(?V4JG?pmKh;r z-}g+&8Z-96EZ_8dzxREQ@B4?x;h4Fe`&!QHJg@t{V=c`M4{(cd0|0Qq*hv2h0D$aA z5PW5#2&rBBt9{3}YwkuX?l90@9* zBKZg<0(t>=TECNUJ;Pat-EaTkZB8$)Cr5$p>UVz8MkGBv__UyhPVSBTxOZwz>f|kB z*GXHGO4~)x@^6meHvTIe>Gme~tgNl>O=?MulwZF$*g-ijZ{aD?9w(~&;Dm&~Jc<3V z87mJcJB;4Y0)tk2e@wwiamnf;7Jx%dS#c1AI`#3nEFT!uOPwk)9n1vM^|{(5u283% z&ZNG&Fcznf=;P>e@Y_42V1ztWS^ejSA_Gm~sMup=+VET;nKUW!*x{(3;hZ+DcK9T4 zmZT&3_|(y7r!63t$g}v-);N0u6?0gNm(yhpvns()5Y(5Nz$nhqMP3FCUN7;jOcUJ1Dd18gNnF`oRL+~421o=-lL z53t|f7L-5+t9>^5&*vb0!eRA`FX|q`}GNK%IefdUa$zH3h8P#URWk7 zj!MRNhC*7Z%%K2D`QB0RWPH4fsk!+t+d#RRAmf+u@$rQva^T;)N5Q|(;!-e6Lo14LjTylTvcEIyuWkD!_Tj5Gbx~G zI5Iwd#%NkuM*ey$yyxxg=axU+mSNldU2jFx{X0cEHpG)#@98eBtjxYW6PyL~HXZ|? zagq_5elfC* zVmZb}=4}w`m5UnQEKH|4v~2Rhr;QLuw_t-6js$V#N9$1KImQWtg@UV@DD`DoT^^|r-1vHQF$Rwl!fk`cOyE#&t*~ww&Aof~Nra>R*!3x) zV^mM^CLvtbAumoGr_=WtjmtxoKM(|(>0e*5E;$`XYUahM6UKLE*tUhHp(wb;i zUS{ye+>fU|MVnawAy)*!`N&DRe7rbK_I_v*K^bb?#(>spYi9v!AD|GUhmhGkiul0p zz7B?hEnr%{>aI8VFfoT+h}y@afT;{z@Zz2gLD66-*+#Kt@7Yx8B}&Uq=l9iD$D~5o z9*FgUXkzHJSJ!7gQ?7s5d;nlBcPIbZspKS|>z#(9O`Zt?i>wAkD8X@31N0EK%!7>D z7!syJ%YMz_f*{>Vf^d=+Ew6v~oKpceE&E7Br$3`Z@a;zu+fT190ADl0g;VI+9gGVy zFXR=SwH(P4qlH&%3SnYr!Ho@=4V4}2A8;})R%lgOL4f|zl_3`4$TOc4fd!6jK?(Br z;K**~qB&{)a~>0z2(?;&Nq@Vhoh&W!b<#Zo2ZU&`Bh?B`?4>ueUXMXeEj&QS;NPA?PL-)Qqx#!n#rD30sK(s!gj(C2e2 z(fIh?OUI#3r)l;aY#)rxuUdp8!4Gcv1-3z{D(<$x4Z*(>gEtSiY<{eli&D&wj8UmS zD5`zN9FP~xz|ozpfNH{^G6yZVoi4RZw+doD$Wym8PB@Cg-uW#>xWU8k&andf?l5>$ zynC}r*NyWo|40hI>%w|}&0$%8_3($9izPnw_}guL~rB@ zfZQ~YSAXpHe9g;G9-k7oa_DbueN{%MXm_odm*jCJBuD2H=)=()u`l>`v;#X(OI5K6l|EcZ%-U;MMin9clO8HC~Iq|$?sWBZv3 zW*95dYXiaHm9BIp37?{GxGSBCz^!l+4!|_0AtP+|cfcT)pQY`Tk}gX&-s^nuW#s3J zk#@HXAm{{Iz`J^p�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

  • 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 Hdh~w)Jq`wb diff --git a/test/qad/icons/edit-delete.png b/test/qad/icons/edit-delete.png deleted file mode 100644 index 38f11cd5f521da653ebd61cf861f6581d9531a0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22776 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 Of$REadNn%e$o~NX&zs2r diff --git a/test/qad/icons/edit-find.png b/test/qad/icons/edit-find.png deleted file mode 100644 index 140e58102a8c8325000261e28ec5122467132104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43469 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 Mr>mdKI;Vst0N7E%9smFU diff --git a/test/qad/icons/edit-guides.png b/test/qad/icons/edit-guides.png deleted file mode 100644 index 0065b288adb7c843e79166a15be496a674f6d1ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1892 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 diff --git a/test/qad/icons/edit-redo.png b/test/qad/icons/edit-redo.png deleted file mode 100644 index 353a6c0d41e05b6c0b3cde4076cd0be823042059..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42667 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 diff --git a/test/qad/icons/edit-table-insert-row-below.png b/test/qad/icons/edit-table-insert-row-below.png deleted file mode 100644 index c3695c7305a16d62ba8aa416c73243f30f7f5e0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2952 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 C3Ci05 diff --git a/test/qad/icons/edockwidget.png b/test/qad/icons/edockwidget.png deleted file mode 100644 index 9eee04f701917da08dc036ee9da189dde473eaeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hRBP)u`|P@|xZm&B6u^j42M4{ih|qQ zUkD-SblM0ZNRkAtbCe2EO3`lL1EAOI)jckXVui=HvLKG5xdk~|=eVvz7=|of2ThJs z6a|Z`^f=2hrqd}>wvbZJ8>KayvMd8&=irPc$IJ7))+wAn$Kwe?h|0$_9bv5{3zq#ZmY%h)|U=kd!=Rlaj@R?ExUCPzpqH*+65jARp@6iFP}j7?kjBl60&#>nVSb7PAxoM=2NFLIpsKJx$IsAej7lYbByeOUKXQT z+SdM2uG-)JPEk*w)_}Q%a`4MK0Gn|<2Cq*d;{s4Ofk{-*zF7xjl1+9>ktqq1hhm}j>k#Jm9(U>X`W zBL#W!hr)S)^-u>I#wh!r-%ll#RsV+>XjR=|r5eqS%OnT)fmB1PiX0yrMEUXyI8dM4 zCx%wQ{gBe-;RO$m0X<~JD0png;A28nr@;PND5Xz@&XJ)ydx4q|+*uy;^<(7_y^7$U zhJIyC#48o(?#*8GXMp4sACH^BrtxN9_O$`jP5@1TE|7}1qXwMytvLa>@bKhcZ{AVM b_>KGvvn1)t(2TS-00000NkvXXu0mjf@SrjQ diff --git a/test/qad/icons/evalspinbox.png b/test/qad/icons/evalspinbox.png deleted file mode 100644 index 5c80df10256cc3f006604520cf7cecf217be4c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10593 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 diff --git a/test/qad/icons/expand_s_y.png b/test/qad/icons/expand_s_y.png deleted file mode 100644 index 970707182844b87560c128ed4c514a7d0f9b170f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2176 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 Ef_{N3KmY&$ diff --git a/test/qad/icons/expand_y.png b/test/qad/icons/expand_y.png deleted file mode 100644 index 0e0162549acdc2c879a34b4fce19de9b09468820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2103 zcmV-72*~$|P)Zh;ui>ivq{|C2-%saLu020*GGcyKUwj ztK>{u zOUqwNJgnIyvuf!d`0rELby)|xfLBy?>%zi9om*01`>oiU>gvcpxHh#sqxx_+H+eeKV2U*4@TaFFpw-ai|x0(f|Ob zP+*Mvh~XFiILb>?zd_eobU+DvLV5>!Y3XWV$FmP5))!;SfQ<2!HQwK{+!y}!D_)uX zZI#^Cu2y#L-|6H8iBWSo(*OXEMyT-a{JT8;_is~NTfnZjXuneGEKz7GFuY}$?hW0H zAK2}v|xKrJ+3aq=~fz}P(mXkeD(O(SZG}!+)#o6 zkY2&IS_(mdf)=>_*4v>Qj{N>e1V8q>2ts8s@?&7vpB`het-jo#*KqWYN0YV2aOFbg zXOfeXe_^G##7#}jn57)5A*F?o%lQ?ii_;Xs0yE6ePCFNtCKC^89Dw-Qr(6(D&-{(m zE6AN@nhrX+czG&WZ?%Cmy1Kd=)k{@Wg!6Of2(^TYpe5y=*GA~guc4>d&9VEBpfnL!)2V-be*SGjEk*ZAu6hYqfol!o*2C|6{Oh5fO%*l5KZe(Bjx261q3gN)`cj`l zE@+aE#f!w_x97g3yNQD|2I0I|4@B%MNrj^S*cgKiZMmp5(#)j;FU{d}%}A{8^D+xW zx}_7zY~B6Bt~P4=!WzXaS7*~uVKKjJOn0kk%U00I2jO`wPJvo?cMx>}HlvNM>w#EN z-y2yye9~&y0#pk`$}83CX>!Ki$YMavZnWH|kO`)OZn5I&YcD1wqfk~f=vB&zM-*QKd>tz+S=$ZoTjks#S2xnAW%;Zakn{*4!xO$t@xKvwu9?Qm zOnR7%w{usr{@J;+SfVs0wo<^E=`&D@zzz)zV?0GQRaZ2A=8SND{%t~{9Is)eVb0B* zL!I1>>jslO!&PUYlaqgD^wm)=HqBD(u&9PuwaGd5%Q1TBp`CW_?7Nd^c0NaMb^{UFf8$LyAa~F9g zDRkz+fWgpKXr+%nhFXSL-@2Z6&c4IOo{eQ1saEmd_rOU1y|gxWl9vltl-u7vK)o<9 zwX7cldFji)rhBD_U@`|&pmT~@F*JwGG)psYO}vF!GK_8?ttetOvytQd(a#;F>vDHp zx#67U(a(H6S)B#M)T5Ayu&H+w&y74w(_Ay=f_BD>G9?7_0drGx zhhp6Z)mmGVLh-JuVoC?7wMkDD z?RCBFrh8VN>bZBU5{4mzH*csvnJX0Xlu9M6wbi{(#^|t?@>Oj~oSEY3c1#?vAtYmG z7u&d23{+I&B9LFrgL)G>Zf%|8^=fe_z%mmf5H#vBG~`{002ovPDHLkV1jAV1Y7_B diff --git a/test/qad/icons/f1.png b/test/qad/icons/f1.png deleted file mode 100644 index fc3aeae27e73532c9a03efe67139ad19c825e4cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1046 zcmV+x1nK*UP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000ApNkl`xtEs8!-T3(Um)Y6bukqB#$jGPq`uaByw)Zb7eqLK! zyWQH_;vlrVy!@lDug|Kv+<9naW#x8rbCaRn-Cf?_-&Y+R9Hb~+1VMN zpP%#Pw{br}Gl)zwvoK#76z0&sGE z^6OhOG&Dr=OacXfAEW?-gM+lVxTuAo0N}T@w8RY!4b}_{43I1cEd~Lwy}gYE$O{V# z_W=F<{WLc>r$sM-;^Jb?%*^DhtSrvX&Q|5*Fw>M>FH@L_yPRx5ujFE zTN?v=3IG`ZKS;(~)7{-olarHL_!EHq{Cpjko}TUtfE<7yqySxAT_im~3mE)T0NlN- zCmrJlfB=Hu#KZ*G)YMqh+1W{BV`EzI14u|nh$%5KQH5X4YZv$dNY7#TLDkjO)^v1q z(CFx>7W@E`lao~`DJdKZg;ZF$F9CobR8>`FO?!Jg4G#}%!4Kd$Ip7C?#DyOejYh3$ zZEYnG zr>92?UI2M{dCvw&O-D$QlAXYk2Y~^=4=O1su}1QkWFfNb zhS;EZ0wBJfpPV(Ukvt|@hzy}2#S;LhAv}BMrvQ>h-((@;bfS_|vaVDl7Ge|GjShx3 z3Zb9lP=U!DEZ(E$&i(G_jcYLn=92%4)cmnmVPRp0k(Kyf9>X2lX^@gebR#+NS~A8M zNu-Dr?&NWxMaEs?^;2&Aqnf){QBlzcDSnr&5sjxLe8Q1P3l?TG{MHuy Q6#xJL07*qoM6N<$f|wNH8~^|S diff --git a/test/qad/icons/format-fill-color.png b/test/qad/icons/format-fill-color.png deleted file mode 100644 index 99412e98a39aca526be3b6f0c1aa359904e68392..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44130 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 AIRF3v diff --git a/test/qad/icons/format-stroke-color.png b/test/qad/icons/format-stroke-color.png deleted file mode 100644 index 4c4d29007b7ccf9270085d693fcaec27053ed9b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24156 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 MWi6#Dm{rLC0A@5kjsO4v diff --git a/test/qad/icons/format-text-subscript.png b/test/qad/icons/format-text-subscript.png deleted file mode 100644 index 206b1479d32e64be8e0b7477a36713f01784b3cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 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
    Wmd^6SxZi;>V7!KZjCVbQ%^trbZ4yD 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 diff --git a/test/qad/icons/graphics.png b/test/qad/icons/graphics.png deleted file mode 100644 index 64abcb580bcc4bca6ce0a92fe8436c7b2a282421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv|qtUO#IdMCeVo&cJ{?&;zfVsU!z zrL}&{fdZ@#@^4>K%WXb9`GMe+gb5NndzjNS_pNU@Eb8cFz+sblShzu1k)_c=p`uCX zz(mI_-rIP0YswZI+kZbZXXfD>hqf&J{OjbI=SP^X&1@(sI-&W+g0rtZhCO<7SzeW_-yQalT z4JI$_J{z1iogV-Hk!{4uM`w8yBKYn#o!zvSefdGjkfMWH=L#op2wc`|8n;3C%YsPt zeLH#E9Bb#@W?y~q!Sq8Nf7$LTy-UsC*8EFJYmLZ}%m07eWLeAlWc{?u2aYrGC>h$t i?_QD-VsOxQlKkAmA#v}|e5nA25`(9!pUXO@geCy2Y@rGO diff --git a/test/qad/icons/historyview.png b/test/qad/icons/historyview.png deleted file mode 100644 index cf3ede9989cba0ba40ebcb1df14224b5162ffdaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1262 zcmV2 z06R*P9t>J`Fw~uSwul-v))I4eH1+7k_XT{Db1=61>MgqI;uu?IAIX)rkK|VOjInKf zx9C;v*W-v9qSmi*X_@Fbk)-5MiIA7a;}^8$7jk~i;pT*fW;Gh7mLH#=S%J&*t1!H< z20s$|dl4@6{|W^|cOIQR%xW}{4i^Qujdh0FSG0B2sZ}+V#!8Li8-=ReC6h}50{{a6 z1AvxYag3?yQ>{FNn`k;Vu>>Rc7GMZXhlp|PK6DQJ2I>!Z7t8l08uq%4Ese(Kjb?o> z1^@;C1^@;C2Ecy-;^oG#Cj!ZdO}6&$pyY>pU^5Q`Q_&B!>T5tF#tWmsz5YAsUyVE0 zlINTV+(L1#xnY;Nq5d-rfd2#3o`9c-n%yT2mMG)hl-fZ!_2o@SxHb;7k-I=6#@kb% zXdaj<3W_mUwlS8<#5ZbctH9D|0wO?PzZK9+Jm1e7q>vLET02J;>Ekm%L)Nr8mwSx; zYj#cYZhAvov|^C*gt1&v7GG8_0f|%y)mk;+3cLffp5o(YyP{(F9r{0KR!%KF0GjI| z(59DG)03sndb+qP%6k)#aJc~$O4%G5Vjw)ceaY;*334Cz&? z-63!9a4Mr&k{gkn#!TPcMN(HOnaB~!E2MxpJUgM(-qDuX+HTvx0IKh#ldQ75h?HX2 z$87QHX>KLQ-@Yels#P7zN;x17AaICF1(O0%@k_)*N9U&r81TBkiHt%$Gl_4?cv?e| zaM=Th0}uyn;xO*ih2i-~t+#NK9HQ>&Rl9N>k6_cT*7vnwjMuCHlwX@frJT8o>Wo})k5cw{nm z4LKr;e0GJluIdWn0F}DJgX5Av(-ZPx3MI|vtnZ&s8lMH4z0;`^i1@=_boZF&7FT;e zqxj@iq=Y9N>dv5O+s_r)YF^BJfCx<|~n`d|WIM0F#vld_0`$%{nlc>VTV{hmE9n z?Ty!67CI&ZJ;u9G-}~Soy6_4%%Tb~zgrz4lIF-Y=GIs;9&M@JVEH;#gilMlq5Ry_7 zppcgj(OhHS{$xFQtEJJHf|C|;+j($!ADgu#k}`mrrFW<_>UBKrAdi~^=@}`In0%Tr zb%zuQ1nci*=p97u6NeDuNcF)1h~p1zmN(sBkYfUVrbycyMoarAG%9w38W{m$;Zz8r zMsFO6pieP!bd08AW zy04}5AW)?RgE)SV|8E}RIEpyFMH~k`_we@u>NOM@bpREHibEx$Vo=9X@1TNFyHUIT Y1=2*7ZoG#Am;e9(07*qoM6N<$f(rFlO#lD@ diff --git a/test/qad/icons/icons.xcf b/test/qad/icons/icons.xcf deleted file mode 100644 index d4c9a8b760f2abe099ac966aff17f77c135c7f35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4382 zcmeHKe^3ojeJN~2DzP@7bxDw7Im3i_he*_&!Abc$VS zgHcWlSEee|`jX00tzMIp`qEE+oVFo#Q*KPQoR}M2;l20khSXu8vt%rYWh^RT>nl{E%kQ6sr`B@j-S1*f>Tc)QAA$*jVIam?ZtgHtcf1mQ_G(*v(Kb%!j{o2+hs6 z65?uUYvV{1xy{|;hOhqq-0Ycojzp4K&UwADWoowF)i%wM$H>=*IOp_mo89%P>y$+N zk?WsyUHEjo-8DDEkqGkjpSWg=V|wBrt~)M?80F4dxQo|k?zpD^g%P(Vxr~44x$g)U&UyOnW|Ba>`^{u2@ePqp1O&44hY1;bPp4y1AUnZYzsf&2`R)vh z0@?22pQ?tYYWY1QEDGGsc8{Fi)5h=P^%7CV9<|#(`b~c=e{-Bgf&18BGb$0a?p}_rYIO{ofwg?556`{b-C4tQR9zup* z&C6p@AT!GJSbwnQ+Ea z*OrF@U&up&eJGGxFp%36RY({TO)v>U$OrVhr&b2pkL<+-!G|6cv9qR5s!F6Rkg9axY}f@ z)c?1)0j7PMZv*Tf3%(WZe;eT2BTyo*1q@jN#725TxhQ<|Q1ovnjhceY?`;1yz#8g} zeSVICLaG)~=%Fa1N1z33Oj?6op=J%+1oXVoxYySDM)w zdPY1Oio#iN%-o=Fh+Uy5bb({~8huUd2t}a-9Fte+tKz9p6i$I-Vw4^gKM6(Q6L5?T z)5Bs*C<-m$7_rlK@kA&JC%`dmrLE$}p(uO|j!PHl3u03!3Qgen5+D5|p(q>yhqagP z6&pj5Z=|S#3q3uZ2krxE&4GrxKd|x1exOn%D0sAW!CUxf>+YStN2l&vJayi}VYrn% zBY*CPOGP|iu0H2S&C))&qI`Eq81W8%f$cyFSw?(W*lfXO8#ej>Q{&y%kDV`Ix0i>Y z6&+i2<2a3*{a0{!$ANdg1U&87pS3*mW-VDS)SzGLi95CM{o<5Em047aJ8B8HIo!oAR~czxm3IC5B3!u2^M|Z$A8& z56l1Kdzd1G2r%|yH(-i?R{mzmRKS*{zzw*>|NRSmfJ<0{F?*?V*`C``SgfYi?&3ll)nKy$KWA&8DBF%Q&>y(#-j*|@5dsNrOpr#9=TPu~ITh|S?cPi8b?-LG8PW(lYY%?d zL^ruVJSdM4n3L(?@%Apd%hP`RzB$#@w|4i@eeUj7IYXLLAi<3Z51*3<)(Q4OkYfe^ z3Q0`R+W0UCn!8Jd>lhqG+wSivWF;tpiHMGki;s<8h>MMm_?ZJf7R9g16MNxv(L0!m zCu)&X=H2!g_~D?Gk3#(X#QvPx#24YJ`L;wH)0002_L%V+f000SaNLh0L00VXa00VXbebs`@00007bV*G`2ipf2 z5f1MO_vl!NDy2!q(wRLC{lU>hk|7A?&#&NUx#3*NsEGh#?SNe z;e`kO5T(>j03J~;Y!}|myq)P3w~KYQF!|eTeA>7-S(}XK_vV#SNQYh!3z!VQ7k4G!;ogP ziSPSFQA8qV{b)8Hm!|3QJxm*tUCM>uMWb@|N zk(VREhnPkjVsVErLm!x?xwOB(zj$zP(C_m3JQEWW%g!z5DgQg-IL=C=(Rh4XTRNSl zQmJfOmNnaMw^wVm+T0+Yo}S(;7K^j8wzhU$E|-%)Ut1ikil9pxRc^=(v7tizPbUN6!eXiEiT>GUh2m+!gLPXFsjUWil)S61AP)hZ=mP{rC zUDq#anuds=RL^xbn;p`6nrAYZ-hg2kD~{tVA08h5rfqzDd>Oznj3vi$7SH1-rQ}~U Z{sb_v1Uf{wNjd-k002ovPDHLkV1mj;9L)d# diff --git a/test/qad/icons/item.png b/test/qad/icons/item.png deleted file mode 100644 index 50bfddbfa29e1b8edd2d07e365d3d554eb40581b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x37?{gIn6dV1(;1*3dx@v7EBkGB2|+ytC)E5ZC#9Ta_AqPjcJ8oi=#E=; z?DoPf3(O=mmZtwX|FHcq`=9Rt<{pz$>aFI+E!JSV_`J$!X2Q-Gxt!Z^{9-JQ3gX?Y z9ULw#%Q6f0-=C<$8FT&Z-OYIdZHhjZT>?ckP777eQ$B6v68PmY_ui&WI)ZJAU5gxI zuS@j0CGIgTv)5&$)aq-#J#eXJ_2{`!`Fhj@H=?B%}-8@m+M``_=&9uH*Pa^sRo>+4-6M^5QY@6L)8`()!D z8fv>uG3?t>wHBal3X8;U3up(2hH7+uIwX<3@#U_6BHG40$;U0f=WUPf&NZ7|$&es% lY+CWY$}R0vCek7RCwBz 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 diff --git a/test/qad/icons/layer-visible-on.png b/test/qad/icons/layer-visible-on.png deleted file mode 100644 index 11fad5ed21df71407af42597cc720bc3b01ad18e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4016 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 WgWfZ$=F8py0000 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 U3JGfXXl*+{NlqP(7Ey)#2aD6+E&u=k diff --git a/test/qad/icons/led_gray.png b/test/qad/icons/led_gray.png deleted file mode 100644 index 264e6a1a6af8c6a40485443e758ab69c18608086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9996 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 T>=xp-00000NkvXXu0mjfZKVgy diff --git a/test/qad/icons/led_on.png b/test/qad/icons/led_on.png deleted file mode 100644 index fe2b87ef1ba3c3b3573fae6f20504bf9f92d7c2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12145 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 diff --git a/test/qad/icons/list-add.png b/test/qad/icons/list-add.png deleted file mode 100644 index a15dd10aa874b482dc6293775044085e656a6026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35372 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 diff --git a/test/qad/icons/list-remove.png b/test/qad/icons/list-remove.png deleted file mode 100644 index fffb24841d7e94ed5863be511f2436d51b1f261c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12744 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%0A8McxV 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

    FB9c(5&5|hBK)l;7iueLNvhRi$gX=2 zzcr$1Tme@#-Vp&2dS4 zNl{}Pz09l&B}((C^XS2=N19}wOAQX+@YhZp{#HKl&3n;AHBLmfMe})S{MvGh=-qF^ zm*+|yeLm-mo_vHPA-LYOv^e<0-JU=fUbG|_Q7&n%KyY_%W@3u7Fazk40)J#x6Qpyb zqVje98fpIpf6v9IW3Z;$THBKpTyXqsh{2f#y)lFVK!Y}_fdSDd<;4c7NCT#MQAgTz zHp#i_(xWF917@jSiM>`{+5a~)7uq-=Vux7S*Nel&1NZ&wu73<+hfVa_oXmWA>8)rQqewGuUvfeqJ`wYnf09rTh*+*>Z9@o=pwuIbg)>W#V$@2lZA{3rS+ezxB` ztjl~+Q>hIE(*iA+r*tzS;`=PE4H$M}W$L&NLiV2O`M2LGnYr_UJ8|E$jDvfN`Y$s( zss>NGro3TSR}P$}9>Y`~DMcr$R=WBV{E+kIsCjAOaT5C|;rln9QEna?AXI~nPv?n- zO@T72=GlyJ_SvH(;BTs{qb{rBo8-(j(|Z?n%lz$Zi#xqsk@>$;c(=#Rk}b7B))OMr z82Fn^O*c!YFO>@}#1|7?Ox>1S;zr6jWDV9JDRCe)4%F<)I%6m9(G_6zm_b)=mbSXkA$5BBR2h7WB`OgT3Gu%!yk(bm^~@~U2HrfY#FWY)y8_3WuK zTk}2WIf4tF7m!ST?E@>at{Z-#5e`0&P=!ta0W`WZFE0~Oy$r=3z@|LF+*hkO^kb3C zTHhNDQ+a!F43VZ}pXuZSidv*2wyLCZSx>R zEl}@CMLq;04yAC<;)jLKyTK6+9&WJd7yDj5y~uHh2Ki(K#YuRj97Q9FJC#!!Ah??Q z1_t(%mnB7tg-rQ_q>`9S0(pBzODA5WHpU;`Jliszcu}K)fl0{%bq*KjJvh7r?X>Xv zklo3^7Hjz+zp4{)ste_`FzI2(HK{p?{M6%u+QS=lRs*<17PO~koA>_Y3xwoZFqQwvs2v>vO5 zVy2C*+4yq7S}*Bf+C)30TEkzX7%0n^G3W+H>N zR72xWG3W3yFe163?8-v&BFCSDAK5w+mqQP4y`eskp&Cfz#_Ceu9o)Cz0>vK=0GFh| z*tnsSHv_(gxd3MBB2e(_yMSA~j|1htq}bDOeRjWgnxXflsk}9ZXv;{%Uzt|6SsU<- zRh@xlwH__cMxof@JNmEd2bMNx;xH=Km5pygC|Z{rh&rGli5;P|MGieaRxQSm`fK(Tm%ZSjnh_bURRb#vtDZvYHQyJ`)qkq7k z#qm}SWXW2D?132hU*9#H3eHJhrRO~6nt5^#iJUltI;suZ98>)J{36TGvd;+WPi7{~ zd>tF7vrsCIbeo5#Ud78fF4}|@!5}mb6(X07Tb#dH6gtgTQ9hCtVh*h=K99q{Ge6&m j{x=H$|5*j*sUXnp@Q9OFM#S?!G=Mw0MmiN*_QC%L+x(^d diff --git a/test/qad/icons/log_parser.png b/test/qad/icons/log_parser.png deleted file mode 100644 index cf0ca98b18b0c3471d7774fd65daab77b4af221b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18635 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 diff --git a/test/qad/icons/media-playback-start.png b/test/qad/icons/media-playback-start.png deleted file mode 100644 index c53ff0f82e338c09542da4805e03c734e6668ac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22394 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 diff --git a/test/qad/icons/media-playback-stop.png b/test/qad/icons/media-playback-stop.png deleted file mode 100644 index fef42cca504c2d64374afa7b352381e554385e33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22642 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 U_8`Uw@)8ED%>OZKF!4+LAMtvTdjJ3c diff --git a/test/qad/icons/media-record.png b/test/qad/icons/media-record.png deleted file mode 100644 index 7adb749c0979e7134c07800a86b7747f89171c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26202 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 YbA0My`4u^E&lo^o`=(a4reoCq0VmhVS^xk5 diff --git a/test/qad/icons/media-skip-forward.png b/test/qad/icons/media-skip-forward.png deleted file mode 100644 index 3b25f450b716223efabc19b994b1ef497a404700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23940 zcmX6^c{r5c+dt3DV8%KqS(}k9g%Glo8T3U65y_G*vag{C4-q9>3ldSXN0c?i6r$|A zESXB#naa+X_v!ckWiE5gHFM5$&V7Hj`?jgE9tW!+D*%AwjQ(je03hTg1hCA=AKQQ; zR{-n`&z#mee{F0joTbk0zoB(qZtipPFy=W^3XywGqN*1cV-o7C#m;)`5(afxKl-Y4 z|1+LBeLeD>er1xx(-z{nJF7G(m8W=qqo=|5mukpl_3(>F?|M$nq^+I&+xhi%h)?&E zM;qDy{`;tGHvOQiRL+e*S8QwQ3~$<5_vRmCa`y@7d8qR>=b|H(AxMmMLzAJRX=gBklv{LwFzM9SIYt4W;-~U(yt{Sun2X;1;mA{U- zZAgNu9;xQ`EWfg_v+l@uNnoJD-&-^&gj`f68wYR@f~aBE7KRJ4(m&I{CwK ztWD8|Lfr-nd<=`Ou*Z}e*Lw5AT=S(wL{}fr|isJR_~9zyTIbuc~9>SXBpK)kJ&e* zqisWRP6|G~^~ogS)q{?tBkC|oZ!w(Xfm)1%>;mUE*hBWU=81dnrT$~#-d(NxkrY-g z@vu(^S;F1#Fsa3*t**+P+kf_F^b^g5Nzb1__qACo+^;V-CS7@rNow}A6`YB8@F?5g zYlwW}(04ew=&gdBx5eSLhv@B!2~_Y>_(GFms%@{$p50=2*~xYGoW=ewxx}E;G^^pZ z4emK9pk;jWcgxxxPO5LoyL69QLt+}17>AuFMhUN73iFYG&nwEiF@@ACt#AHFjwBYN zw&PcM0XNI;xBpmZBdK4D(W`uv3-w8K$mZAnI9IG4`e>DxBI8fd zb6a+oE0cM5zckpBYAkCwM09GhySGo{68akZZn4Xl@12J|_ddyqe2b?(dCoeQ-#>$+ z#_$@Gt(FDkmX5r;pXXW#s|NdS35_v)x0djwUEWaHs_~-c`bPfLBZVEme8V{UtR5-z z(yHU!YYY|UGTGac%bxB}uMaVc%0b!6nq24GVN_3*-F9h7|E#1K&mH?vziukSOvUhP z;G9)@cgShl%5&CviGC>@wT-m*TTrfnlK-%7CJ0TkO#34zn?UEBtF;ktO-iST95uW? z@<*d?s`O#ky*9hCp0$Ly*GEcN408^F5sFoC*ek=lI^SAA3VDzm_0@p2STJ_oJF_M0 z>hQTs4K*iCwwkJ^M2;R+FW_uzxLUO!b^P9uQsl!#Fp|63ohp|--@m(hJ)4po)oAc& zJtTk1m9AM@YcI4G2y)Cm((RUN^KaM_ee172H{`W#a!+pMJNw|03Fxk|X`D6P7%Aw< z0K>*j}6WY+8UFIwDNXPjv|v7VUqyogbm`bOZ)HluE;B|LdO z@pQ#Us=OX*=I0t^J^j)dz`6PN&0@Now_#5H-EC>HQzD<5ZP7uC*OMg4P13ER8H!Cg z>VE=pndC*am|qG`DG{$%%d8*W7qT5|<9@F(_pb6?{s=eacN?L}y04OW+0^P13oTIZ zI_ESGO*V!?mjupVug}O1q&MyUbV^eDb$DP#b3<)?Y)VIyzB=&zzKN#0c%(_kRM^V9 z@7W<=rSD7C4W`lcxfKGA6YNq`zv$XZCk5@ z=q4qP0@PR3D(%vn;r;`Sv{>d|7IuEq8$XZQOY@Qm!P~F=y* zcvpbKX_MB>bzd)H?hU6CZOYr<&CKz$X3$(*5~kbZ(y`@BbNi9w$k;z3Emg<7qY}>d z`lk8NE zd@o_!#D97+0(`pWnjZT$ZrynqzU0~ZEJ4mXdhc%z$FEqyIIypQ_1X`4?x{ae^ZnJ$*nh+ho)b5Oi0on!=@3I=f7kuS6S{RAkn&ygB8UK zU4~abupLt}V&!66S+6PI6LXAVSsS4;*_ki%`%vF(j))8X% z+uh=tMvF-kfg$P9`jB3QblZSW--V_&bt^}m5-Ll)zNmJd5*gYJ%G2T%w##f$k}N)` z^H<{6$<~Hr?^exzBS$9x+TPZTP*5Is)M<7;?REt=8S(kXpUf9(9*adKmuxIAKRl=h z+75;-o-F_18@yjrMyAJNOIg|8Y^mCFN#OjBOS)Z+mFpuHgJW-7eK<7yzc}cw1ee|b zt7AOWn3#*Vn)cRSwjS>}X`aa{Oq1a0tzupt8}YQtu{ev`;Miz*Rc5R{_xxbcVUOfP zfF(j^vh^0{(U_kKFRLHeh=lUx8vgv-dE7+d8jb2y|1)i2y13T({=>xQSNm;g$3-&2 zd$dss0f}7?dSe7`73M^|$x!jO{=M9=atD*5&Cb^*S~hNFrx>*J+^|^$x0)gG@zgD3 z^U~$iYeLLsHe`>GEG|d{k#vFChp>cWjn^vYOG^3Jj=lA(`th@M?GL)^m4D^syLIc|qt40uk2P*S(+7g0ZkNf`s00-UBGkg>HLp+o;=`n0 zu!=?TA9rOBp4-YcwCCt>rkaSXDL;N9^o>DZi42jp_bAT4Gh}H~mi20Y{6r)6=fD-x z&KJel?D3{Hm8zrZy4TA&m3fbdo4Q*zYXd&LQj-kp8>@YK2{TW^%GtO#Lwm7@hV<~m z5;OA8gAAu5?Z$2_j#l1pU=yqFU&l}>$z^YRjzl}xn7!T2N?ZvnEjcD(0`Q}2K(pYt zIK}1}^|P*M&kdH1T$8z!O}^XvoMLhxnJA68YKfcmJ`mvfMF{<5Oo_Z+ncWYKQycC5t;n(4P{_KM@;gA0NxiK<)u8sAE`uDu|-#)R>92X4p z5-<_B@x4#4;jK$hTqcbGa zM)?R0RXcV5KgvsSJk^HdJd{2?!n>SOqZc1M_{%NB?9EAK<{`pV{}o2}pN?bpW1IHd z{pnWJII(J`-T01;TrTe*AI!5nbrzozCacq7CV$KPMubKE3eMlf>{h=F8;e+JVnob| zWhlBBNTG(X?-ldivK60?bkZXyR)oX$8ye3Q zJ+myw=|>#3t?9k6CWSO&8yGYv&O>vT`qSa7v)}&Dgbl^FdZ%7}P@MUXRfB$Rdcaw+ ziWimG+m!Th+ItoW95IdP^|JR-=6A7*&R+g;PO$;wZecf}9P&6GMw8ysYY*J!Y&t@n z(cP8LiQL;V3?c+>*|y~lm`u2FQFr>DB#FDA4`)l|-%ax@h&taiJTsyHvO4*^Zna7Y zWO^tq9u|Y9<3-_%v|$_HASlvE%L#Zqqd!7gva`q^q}@e<6lM* zM4V=OpSIpPT0ZJheyU2UI+qtdc$+yh=6W8tYtZvv*O|qLt^@dC!}5y`{wV9toBL=s zyDG>NA#iRy@g0zQa_w1$s=w3qY;BbEai*%T9Of|#8a!^-v&bDdYEfR2b__wq!3(o> z9%}kEoyVyu*LHF*o?Gm5mx`Md6=hsRprCWu=46lB&hZzQG@ZtN`@3(AWI2;IV?iNk z-qZ)lsn8HMrNaG_ckQI*M{fNwFmu@Gk)n~835KnVK9I9lmCt=sRsyMnE$fU=`MTG9 zC#i+z*Z0xBt(|Dv>To(e2)BDr8uadTsf$xba1mv9y=Pm#fP`&i=Z0Nv>(|SJ zCYkiszcq}0U;G-jBD=RcLkhu_->ZU6$30OvqSrN9J(R4CMz12WeK~C|8wcKhcv3>G zy|!5|oK&B9;%l94RUVXsCc(+dyNxeioOh<`k27^AsPRBT&5eo<)qTC}7!BOGvT^Pn3Aqg(9(B zo1bN~i0Jn0RMxD*fGOV>?zj0n`oLi|zm<=l1H}sCvbG+HtRFn{=#gn1KAit>?y3464-O_Bmf|7d5PaW(1JG#id;Gqr80;5Awyccf`} z_8K$QM)*dtOJ!KsubF80`4zr1zacko*RJXX`SNDPAh$W*ui|x#y`6-@C!r<0(DUwn zgQroWp*MESjn(pPLijwGAmMXYh5Lr^9f!@BcCQYmpWhoT;_4OSg9B;q#M+|upc01K zinVt{*;^kDr2UT&szy1_3dKLdTy1rk6sJ^mr6vL6<0pJL`pf>+WR8=B!_lX9=P{99 zgL=_WH2Sav3(Vdu8!;GP3i)@gV(1o*sh=EUi@0BcJIa$wumH9 z;dfBBkjlJ8E~TEMWt`kb8R!8l<&>v?~}La zOEu%=nBz=Mrvd+3e(@>X+xpYgK*l6rq5a~;Y%>>YQxBU`E{Zmvl69{(v!nfQ_g|fl zTGvMGr{WJ38K5R$NBIRGe@ul%NR?;p>Oq!>tkFPMtB*m#oV%Loi>E$)_tw_Pua)%W}qkvc;i#E8o-bkp-Iid5-KjgsOXVC<8h% zdDUFNpmPf&6A^{q<>PS}TQJo_oh3yT&HZ~Mueb4YBdX;c>T$w>>+Us;CZo^T25!WE zni-53gRdPMeL0xt>)>(tbUMHM{xZ}dD$^?SUSpTV*3*?FlEnQT+H5uEIG|$mg4_8Q6dso}%y*W!8!{XzcBaIh_z={sSEuC{G43&^l;AccK7Bjo z%5r1cffaI#fXcca>A!zyqOnv}kZmyGg{o_m@7!pk9Q(2>xLIk_^JbxZyf{jgx-$bb zt2e@LwiK+%3`9s1li&H$Yi+YHq%KQ>auYun1ypZ5{Fobi8}txv(B21(JmtsvX+{a^ zQJHisja=~ljP$fDwhz)YxLKzBZCpRQE3cu(vV>s zDz$#esEQ(b*6aq<|5_M@eOVvz>{P8A>H+pJZX$eR@|mQ=ZNWiTX7=zO0AWckCu)Yd zGJordY^H~NahB`iUf_2`2Of;<3Oo8`m+_ax7{JlKDN8U34|Dr`a)Fv2;_E(k4q>W7 z=5HJni?+nWJ%NLfiP)-Grw156`uNnI*vS|P)-n|Ve+3{quQ_%A-M!%Qj4l#RM;sLKP3g-;HcklqcOesjfBzRK-bytw&X zo$mCnF?DOKOt`x|!9?IOx_cGpJ{Z)Zo`fAd`eS)Pp2a9}@@)5e9uKx zXl2}$S0K_UhdjBp9M3x2v*b`Y71u;TvdD2v)yW}Dul{@18*Bn@kKdc|kOiV+%isR_ ztmxF6GwE=fx9B~AmS%WU1lL(qn(Zk8H*;z%9!g(28pK-cUri>suj<|09F2gd;x^1s zMd;niE0vyqEdtl1`!$v8O)?JJ?issl%gqnh39xWMN zI8asSY*a#z>W{lCLqpxwYebekWm^@6-N(ay_OEuFJxE8cwTXnt@L9Ww^6feb@coJL zh~%7gj?!Em)5fN4IQ{Ipcb+GnuHj9t_;pWA{%yBEtARMt9cs6aq_2HPI^x;9W7eI} zCqhat6V*9Ro#$Fzl1h2Lo*KfX4VGrP;tpR-P-P04*8FzBI-y;dL zXICw|a0o`*1}6>D)JjOTMQvyT?(ubpa(nZg@VriqmA8qC*6)j{CIV~b%28GqH4N|I z$Q>`lnk-$FaZcPfg>k)E9;kS3O2MIntD@X)Y~5x?PytDJ7E7IY_U!z!OWeWG!z$}B zKUO--oZHSvo?Y4)5#6jz9Pw#b8qQe0Z*>4C7FkymXGwd0=DvaA`>9vkOtXRIQD#^z z_si?oKVxkl>IZZp(v&`v=7vnG6fu?D3CYT;Hm_3mU$E^Py(A+J8Gu3IA_vyDGyPPA zm%Z-4^(+Wa*)KP4;W=@nBoceW*K?_U=E={45#QQ-VqHG`N>}+!+bXO5YTbCVS(952 z{}@LVl)Au+7gX84i?(XmW~thcIi13~OH+@-Dv|b$oS-YO^S@o~H*DBM*EL?ullIFO zgC|R>obxaJpd=66*dr>Jw4S@KIFig7H<>I}Up#MeRDfFBvfdo=w}}l?@qzW|1BTp- z#UtHKuGco{FLX4{B;kmsUW1&YKd^vD=(lp&paE$2Kd-iZUrE^wx9_t&lS+ViO895f z{7YBcMdOSDzI-0OHJFiBLT?Pv;Q)E7u8+M7%KO&GLqsKE<}JU4SH1|DG;R_ppcou2 zJO58;uoKkwWH*FU`r`|(d`h$#m@-gCn^ELWl`8&;8?iV;76aYV*JiRq()1q234%3~ ziy^#!y!rc3k~u-c7fYvWyo0&?sf6WMQx^s0UFIdkf#6*2&T>P@tDSm-Saq(3saJeL zbH5(@x@rhlMOj#0%zw%evp?qtexKkmYagHXgRUs6j?%lk_2T%yXU~KW?V#nFcK^tw zM)N>^ZJ#_POM8bOYw*;G6^fMN!FT#drAn5{pEgSJ=cq|8o|M6eoVUJ2=7=0a3@m&Z z#bf1F`BCMTBrSx67M6f>kbbGd)~k;!p=)1CCxpNzFkz!lbm8TGN+$$hDtwF^T-FY; z?5*8NYGya$a6LzN|1Xq>ob=;OMI-5jY7&tDV_rxoBU|4p%bE2p*!riHyr>!T;K)IZ zV2kr2IN@=Q)qB$!z_#ASG_`y|9O^P@OII>#ZjB(n7P21^q2!ZZVG4#%xe)5yj5d0l}d4zUb?3P$eqJx&av!5 zmTy_!T{e#mZfg42t%>MLYNgw88;(Zs)E5n7fF7NZZZKWZ?U-~GTs1kd~&J#n4nzGkPvvRualpQoY z$8#cADP;oxPI&WtfNn&&%>Gr|i$@^8jsXdtO+*g8c$YwG%o3@{KnX+QZqO#>XOHI2 zV)1aWz69(xNGNkK{OON@xAu?%QaSK|P`EADO**jKUfGnU3D?a)a`1n7zn(YTR)>l%Zn5H#dvKd z=Cm-e`WxH-Iy7kDlSIeVcHa$ta^Uo;`*ur0E2x+jK`p(<8XD>gow`u4Hl87!%i-au zmc~Ka+x%gd71h6m+V6^~NT7X~$qMWquiUQTp>Wv_kEXx9m`A!i6~5u^^;Oin8Z$(y zxsl%R%N13TmoNzJo@gD6EWfEGH0qX@c*iB}qOQmD2=3<^`nhuU@Gq8J^hCo-qm3NcfVUs9-RZxdtDSOP?Z@5Yug*dpRVos|OOjQV{FiB3mqk(V*DC}P zx~~x=U^J(y!;6lj-y37I$10tT=z7*Z^*=vX?`6&>X8=`(jAvolc%)s>kcG^6;AP6G zjh~KJrq3H;*N?^A8hFXEdjY{q6}s=tdemx3_MOaBp&naGghN@2OytwL^c(O%vSL@kr% zvvPn^fghoq`FUdYcXsxpY&L3I;=Ghd`y^%xw>X81hf*L(|6`A$KGUjiY~~I+eBQ1= zkc?H-*9Z8ckQ?Xw3_cptZuk&S;FyM5UA_DJ2iZ42tZ+?Bq^J3b6XiZ57=&4Fp=wu&XqlVW%=)LC@yR2+5?(fo$Jm|N1=23EK(>*#?EgSD4D zl-a(#WBy9PgqE~Vky~Hw}Dp1=fTw3t0g1tZy=-F9r13|D< z)yu4Vm;c;7E&KhdP&kPSA94qRkd+cx(L+I-P3A*fDbJXwMp1@x^{184RnqTIA9wh0 zeI~oM_B`Vd;$t+MwkGA-|8Y_4Zpv6nW>Qw2(0NUF+}M$Al*w!QwN|L6;?v7N<;3Y% z@57E!kgK_kOq56rF88>v&`Ny~_|F+QJ;!+9!7wU*~1! z1g)A3p)Mg;IH2B7HT#hVbFc6E#_8ZdjGx2>h9KmST=|h1UEfXm^gB)%B4ups8u76$9@4+%q;)zK?gG4ffZk!c`;c9S48{VF}7C6<)6)Kg4u zIJ#y32B7?BsO^!@y; z((?8K%_ALuykY2Z>}sjXJ~1TN1hL}(l-kn`ydBQclk+PgoWvSp~xUiS=yUO$s7-ehN+_7D= zXWMD58UJ?AzIzYato-_9$7;JTt%xkgXgwC;c<{Hm65yl_%JgC>Gk~NI9Q)s$<5ZhY zISly;!qX!axf_aGBb(z(4OMI|rrBc8wON9qec$j0((7~-Za(dNH z2EQ{FQr)E9OhEDuMT@+A$0?;FjUpf3Jfn*j?1?qaK1(pli%jBkkN_|6EyIpk_g{Vd z0?!$bUyL7)Jn&CHeSWo2HnyaM@c_`8In`%#6?HEi0;+qxU+TLwm3ZQzoL^6X%zTpt zZ*I_O5!gDrUwuO@;@CV|y!UYxw2DU9gt2iS_z;0NXMD4X=9P=>4Ah5r(kd34xkz4} zx>nfSXaV__RLX!OqzCfshE;=AFVIKcGOYH!UK_S~P2CvLlo|cL6zBGyTTo-0lM-c% z4!y%i84}25!mj8P@_D1N-Nz;(c9z0oRR9Wr7Z@@fR7JQ=ye-(f35u8xulW}HK37NQ z!%|)*jLzddN?|Hgpa*7RnS>#Sge-4*_~bmP-&kYm{4It7$B*nt+d=#C4g1eJLZ;^Q z(oB@&yFO3rTHDE;sl^UFKNAlSSiKBEhz`P1!bP-IFnE7pc>j`=!Wsd&)w}08h|Ieg z$KV~^7$#?T^&k{dm?W?#AlJ zc2m5GHO8mpj9#Pxz+y^;cC!c+Z4}~phW(ztZ}KW5r3y~Le25TP=Q?y$19k1~?~^ya zW2y4#*~=?|OOZ>?jyqywUC;I|+}?i819M^e3WCg(K@!Go(m(scA=KFq%*+s32#Buk z6F3!mRc$_Y0Ya_`q-AT@&wb9EaSC$C>vnYm`wsA-GSq`S=GaoOxdn5SW)Uc>?;4-x z*4{=_T2N`7QTm6sLy;LsmS6EutMM`B(lxElR-s6s&|MK7ty>2DZ~< z6i?3cC6tEVL5>cLbWXCWEdOI1?SnhW+Frqdg!dm*&Pc!$xx^&k+MRWA*@Ue8Ff$M3 z+eG`orl<5|i;ZRPO9H3R`?uRYPK-Fho$GY@^&Fecf$Vt_2188Tp8oEE0(cO zBFn!DSR~1AY{Xa2;>N%;EoTfxmi2r5!;+SMA}jP57795C>^ktPK)pI12C2HK`>^G#CV^tV2hT=TnW zbJTsu$%nwSs+L>-^D~mi;RxSof;*3JmovXs4_4x!XoGv(CNJy5ws)LI+O+^NI(U%T0reKq(GMZ4;-<4C zxd_tFYnl=rUBUi0Ug*O?yFCVR(IfZEOctJ&vlU`Hgn1EA?$Um zR%QcP?{dhO(5fGOoJXQybfi8|oo5q@^caX-)uFdJx`Hv-f?gX<_^u;g&0Lj%ZHz$9 zviIuDXYt3Rw}l*pwCcyc|H}3;90(Vm;BVnYok-b?;2VC*(DV_K_u1~58QpI^|AS{# zR@~G@9smA}szK)~bNpHuKaPsj!RF5a_TRB!JW{qj=w$hTb%FW^E}QVRp#;Q!v8rY? zhb46ttB^Hr%+GTDw$W}K3@?o&2e5lI0_&-X@Yw^sx}k>IRrh@zn&|5br-7pkvU*`o zl?P<^oNt2>FRzE9DE0U%krEG(R^iaaMf>N@T$@hSdxpLo8wB~Pq7EO}d6>_+`?qdU zq!?|$NiN+^_KabC?=?D0=W0GEA;r=eZ7P(auGS@s$xYnjy9Zl|Vd~$kZG7_`G=fV` z18;D;_w!+GJh%Z4u0Gv1xfwlsFsf?#xine&DcAP>r}K(vnSrP*X}pI<dL!%Xld`=VYaR=0Ft1l#XtgdWAr7!s;CLDwKu_Sq-`g( za*+>^94#>sz~`y$@*Xgnvj6ct;aEfqFXfwkj0%U3xn_?41!9MZSllev%y&uJTRS#krv~^5=Y}fD*j%HSA>qZwe3K zV7;dV^g%@RYKXvHJ*H7 zZatIf794qJ{$;BLMJ+y2?~RTSfZqP?*2s2+#8Ft5hZP)eO{=ZYO(!7v86Sm^(rrjp zFSlw@;D1UX5}f1x^)N~R<2Ska`$q^3LwnF6Xw&- zSO5QZU7H&C3)mgNZ$lrZ%GJQBO}erYV1uk~0BK3G3?JC4avvDw(Duk;-EGf577du| z6K0yFgdtO9%fC=Bmv&V;X)cRbQ$a82s3;gj#;&(n5`YsJ^AD z9p4qK4@SzHLsNqtP@9jd4~SxcjdPsXJCYPqyw9R5@MJd>HKkh^6`$JF%B^1wo1(8R zl+}LDpC99M+;?n@C-fE|8b$*@r}h<96jl8w3#&IPK49>iUJ&jha_%`dr6u79AB>le zP7j)!SkML2ZY7>&vlfQc1mRXp?o>xHU3hkG>O+`3%e-bG!VC(bUPT|r6saD5$dnew zOZ_P1`{FdPq^s2_dMA5tvN0|?!FwN_WoqNjLHtpF?Yp%;FK6T&Jx!^s9Y4NXfU_%2Cu>FwCJcbt=L&!9IiO1ipmX+)JMf1jz#(p`3`Td z`u4yh(8W%^`vJ*cj1=KaMfqm|p3=AMBuu}S2vlDdAbbT~fyfoF{xY&W%q{399Cxgc zo8K{&6y~M-3PBm^YI{k;DSU|t6Os`GBEOY$3xU1RTywx#4a#vhG%@Okl%Nh8K&C_X zicD_ja}T(4r##>OA&AL!2Z-mHBtZ1$I_RMmG8uHCUJ_}|W>e|gbQv{f44@IR4S?ul z_u#J3g|Z8hbBnJBrO7y|LKz~UI)0eip1;s!EmPI2?ZSCR6nz_8cM-vA;?x1pPkrVH zxt$XqI)N$V`}xFe5eE+dRdZO5{h1_r^raFlj015colZL_?{`jx+X>gGQHrh6QA%E? zvDC|WirVsb7_pOgZSe5)`I$Yx4Wf^t5*sTyUh3Tgtc507*J54V+WqH4`BRmH}E5G-s6?OT*)n_`@klu)dHOn-7Yof{NMVMk@ik0VlPV0Oc3Qp61_s7lcc3$(=f_shHn z((94)Mu0^aTg7`8oze~>{}<9cq5hw?@Tt!){Gnp%416#xcE!M4OFG6u8G*vo$GIGo z6ApdMR7^|O31vuJJC`l?EkpO!js$Y;kc-F^ftbDpIZEiWCP<*?2%+&}fMZqRA!id|M&Oz@1zV(su1E4$Ibu-x z)BIMlCDrEMK39=-0X&E&4=`(^a_1wgZi%&o{}GDY+`ikjV|dzB3VPm&vI++o5GCn9 z>DSt`bG5!3kfmAWmG_MrpsIL=Z3EBlr}ZE2f@ZszOqk^l zR2(?8bbjCF(;vrFKHCgN7yt_`-(s7wE4dtQ{%B!{Dv0ZF3}?L=rL7^LO*iDDg%K!S zC#E{@`5)OVn@7M|=63SGY~+Jd)Z@B?4u`M~cN#VeEOC}7YJrL$Cny*;YlasN0cmVJ z4|#qz=R18v5T&b~!K%7FF>^RQ!rtO>ju_Wjjn5L6iQp|lLby%60fx4{@bUym=KhMl zWFth~NtXid-S()a4af}x&fu6!48VhlOUPyYlLZz&5(O}{D|iaqveWGn4Dl@b`{Iea z(H7X;JMG2_g25kWlEENJpzboa?_c4_oF$E^t!|rTC(SY*r8G8@q!M~J zP9$RU+fTPPZn%cm)I*qjC)?v+0=-x8l+lDQds7!71x0Zt^dUhCcIB@=WSK7NQSOQiaw$fn=+0R3L zay`{3YqWMJCUo^VJh75mv?R=X%VvPicoz;N+0>VKvrw%tYvMMBb{cSlpYhCf83`oP?;CB{zXJ!ZeJ1_;O!z zlXFy{04(`2Q^i|frb|b0#I=jNL;Z{9I$2Sc4Nq!; zDs&5F$OcDA-X?-$Pk{9|OckD7nhp1+Wa@)_Uej#mDm>ic*50)7Zl!unDOUdKNnN;*$d0{Eg@DE1-5lzq7NwXJ0$ki)xu zh{65h&{DNMjYW<)nS-g^0J!Z2b28N!p$m#OtRKBJVK6-B8zY~f+uta&bc9JGKgJj> zyU|n&lWei)^$yD`fhOUM^$lU3ilRMH$VxlPKh&QWN0r0FZ}|1afNk44n&NtI=`Fwh zA#ilI8IuYha|dI!?%+iNcD|q4OgH>C5T~{UV_3bvKWHTf@c@>9MD`a6Q5By4yc_7c zgP4?e!m8r1AFKTCVPR~4cSn>o^cmUMymyrBCx_uHKgKipP?{$T=WgQR}+Ugs*V-v*ayn~U4Fe%ld`kPw)9^~g|Rlb}) zweR_mP&5om;3r?hWQi|ID>&6S$lH7z*SZefv^}IRuqF*rzPLR4lh<}LR?T2O>{MeoXkJkZ3ibiQ!jdgz!;d4mS&gA!p7cME>%sI%xH=K@iDyHv(yJWy30=B6e{gxVvprt?0)A5ZRFerW*iF#{=^yWmA77>2Z8F^X}1NW4A$I8?s_ zd33K_3;PR$1;{#FwMZAJ1xI*I&zxse zG~a59;)z-fw=jx6B8gHV#nvA5h@6bJi?T4D8dSc)V`d{)bQ<14?O(wvP4UmF%EQ^*?P{ zup`T|+*x8QJ5_uVF+x6P-^mmmGd3`Q=6dGkSjOHX*w#9~Iz z$-hPdOhrpfRtn6yKd$-Ns_|U=?9wq{5YG*=hf}IR3ktX)Au#p*ZcJ}uxkr%fPr=Dt>+3qBJ1{kD{mIs6FYmn{a1oP@HbUnxjqC|f|B!=dlL1G3)w?*BP>N#;IE zB4ebLou|_m8K$b*1`22;R69h{4VRf>hOVZ=pa|!1j-kwfAlawPeqG8V8QY7E7S}K0;l_I=m2rolilF-(DFyW5Dme3w+}rrR0~m^@O<-F`Yq}f)uDM z{$C7n0?zyqhi)9gN z!&2|?Ir~gPtXIW*=IZ2KOIjeu!yow0KFqGN@$qO8PQuxvnDLJY+$-7J*~eN4wNwFi zBh~AAhu{aQz>pmTbj*?he|3I;U~a7Ng|WW?jQC+_`WN3ILjm1CUWFip?}+ZUTOtTX zoMOcz6?eoc1R~&nf%TeH`+gvPD1~Bjn>-L4paexGI*)TdkEK4b#1+H`V#)mg0k49v z6zn?2DCQ)eX4oMW=^{kdT_Y&2MZ$I3t#Qk%Fcq7_$4vy)eH#~jrgq-_G=^J zLBUuFl6%x9?kDhLoc(h z-DBJ1myX&03K;=4^gQ@ z0#F7RN*9P(JMb4BGop!~ebpgXdY0Z($td1tyk{ZoLk3s_r1V@n_qeiQT@?Qc*1_HY z#JyQ$M{)roff$e9z-oWpL_o)X+3;8tEZ*&$9$H$(z5F&p`q0CQzXM z)T6coX;zMLB9=Z8(#3Q{i@So{4!j4*5+HX$!tZ{;rjNi2apD)ow-6Gd^Ze{Q{h7zX zkRntTyfJyj3`K4qY1xPBbw$_3?7u9gdslu7s=5YBnW;Hj2Dz`H6ofQi5ZscW+FXG? zFdOs%nLN_TU7(50wPV5n4)P&bT?yOatmTbnLvy&13US0iTC%^-3pVGT~#q&+N zz~t20`Fd69TTI@}#1~v+O|GB5B>}-kO#^VW-YdY$^*6djILgub`p<_62%Z{$Sb$y- zkCLsOPz;+ksbrWNftV3;F!<$+~-eV?qF~cBYtHWM}WB2Lb z9&J!N5n!lr{m^D%s|mVV5_;W@D9C4*))j&a!J!EI-!F_1lEFE(hy=p3}GrVAR_$xN85@2(7jk> zIHcU4N4@|GOlJrVMs9BM`C)po&t|o`kerH!%9-)uskU8k?{i+U=BQBsjr#s#1pMX< z=y)K}TljIeFgnLmoO8G8{?0i9W#u-4ppXe}c0+IvM?Rzaf;49God13bkZauhUJyNH z00s)q9(Cq1O9FYXZJAMZ-;k-Hsq%rqF=7%>U*gG{XF+}%GGZegJmIf5yz_F2%QWtI zisi7%xEC+e$qU8{M8vsHGQU_KmO#iYOx}Jfj8M4NzdfX5sGF}DvXbyV{JvjA7?~S0 z^&UCWOv(1<}Mag;R}ic1WH;bx7@sd?k|Ku5iohgI4nEhC>wh@^ju zBcy$eeCvy&mpL%F{4unvg`qzLTT>|uaze8!&aSYMNKq?>ymkqRuUMem(vHh7%4a-m zKgXyKMY4dr$Wl%qeOowk_qQFE$OkSfLr$&$3;r$_=SA+HA?ShRQ|ngsXw&(L$nUFD zS6TLA-RMZXP{OQXGwe2Si_On~5@c(v>c3n@LASnqg5W~3wR7LOrozxo z**|#%y8ar}i+4!CQ3Ks2DKl2=SCLs&3qiUv34RFVd85vr3mA$VyHcn5bNc_?@N_Il zh?e8*FzW=?I9r!ob~Y_$c7BILQ4g-c8F5N)+qPrQw-M;;v`eMOjFotErMediKPN}- zI;R4e|80~jN)<&J9!F65=UId+ZYClc;bA0@V`OP_=J%dqxO7Um2z0kFRt8$E8TT>W ze<^tGbz|oF9TG=p&8vXdMIZk?f03J|EON;>Z&lDJ_1|BM zR9=&ll}eD(TFw9<4q__YfTKMc$_iiq@(J>4LNSNIjyBF8T4YX6y5#Qr^C!C2@AMO+}y*QnWZcs3b>+D1mR`&hsPcNq`K^3P$PaJ%J&{Byto#4Izaou%3N9 z=D!Opw~&ysY$J@I1VO{p|4`KPs-J#KaYIW)Mx(iEtvIj7+*|jV+1G7fEF=a!w|d4 zzwdRqGHn{M-b?9-Pk~Ix6i-x^<<0Lg}zxFy=Ink>7j;<{N73nk+LVD}X?K`hZqT~Aiip;Oy z$P5Gy?~7#&C-@|8!sGWYRZVrCSa}7Mf=DU6V|-8Mrh@1#{LEiwf?KYFzMk=v&Lhsm-+FpPgJO*E`4;ggNzR8buktQsa<*y@?_1}UJO`~eFc0HOs~K8plaVj z#D53Bp4FG`GF-{>XZ{dl3xeAVZ1+)Hk<;*9;paW zhJ9YBo4`CrjzbzcN+qn7wI9WP>3WR17WQ+xpww%R&6BEfkt#o`+bdh z_hbvuQTTji^tn9)Q2%W35<}WI#^=E4uFJOPm`&g5F1{-XYm=-9i3phi+p#8%+*)h- z&oKOh&4-)%HQ}>&MOKSgf2w2-RmT*2n>l!Fng+&nAF6B|cXRuZd6sD9_~=$$46cj@y9Rea5Lr@^Ml zp6jS0J5o`kqyHJ?WDAq9J$H(QW}qzsOk7^9w@f)At?N6_P_gs=4=C!-Anh6s_f(l} zg{UcY@AX8hm>ML0K?RpT$|A|(6@rhZBGyZ$3Nw`9-P%OQ|#Be53}PA1708$Z4|4dOv<<-{Y6+E0Ia&1%C^5NTMY zpx-?r7g!R2&sG`cv#5!~<7;{9vA-YwV#MozwSNAjc>dtdrE9&uyknbWUkOu!ZVfo-AQ zd~KjRiKiT0HJw<>*Qb+!$KEwvu?2z8P}vGNm{rJXT@TkM2*Px7juogDHt<15JGDEh z>q|nruc^u;b2z5!w2xc#va8W)Ej*R_0v5{!>&|REKgQgDe20OQ;??LqEi0yX3UtIe zsABoZFKe<{R#l;naKBulw9f^%VaTWfl28wpgDAY9A>0{3C!C9$4r*3)#)O?}GE*@v=Yuvy zcXG$G-3mjwl(gd@TUek(f(Pb9S*PfJ=e>*`{Inl2Pmtm<>)aNDK`rm=M3)+gAdbN=iA4h%8bq>UmKLH7&T6SQRZOTuQ-zocZ`NJhq=R&#d^ zaD0gTXsDC)7V21wY}`EHvxTvUMBX}$ewb|K@|dodultk#|cgn378%#m__t(DpwM! z|BSR%32@|ue&9$Z(fdPU>k%DN8)d4QT7MRNS!%ClE__pMk%zWEYl7{HyY2ZR_m#it zAJCQ7y`6s^@aj85OfoJlSpqh5{<6)li$ASV$vlsAvafK49!iawA@gQ~DEAX~RC(w! zI`v#!cM^Z`l)6TEM!IR?IlIB|?-l6s=g>^OAxi3Esr_Eq-jEFh4mD@LtvLE(Y02Vy ziLv}+tt0UyiH+XVk_fyOqSlg3EISyW!|L0!p8{BC`wY+mC8x~AI4~gRB?oL8wfz?1 zAbP7+9EME}2_Qe{PAg})Gm?wrwrA)nth*Y?_|2AV3iFdf{?lvB^~EoC$PS$;^%2wW z5q{tlT6CIf&h+j|C&1K<6dKcu`>TvWv!9NMCUbw&5)Mw-uR7j6qqVcMv`sD5Ad#N z<@er#H^_umOO0+$Ds_U~n(@}b$At%7{#bVrlfT*(rM)`j$ZFCb!GU6Ve}FMr-f`@F zi4aecd~3b{)UCNN_|*7fLajb-B?cPu~EyP)e_0n@_7dAOAPE0hgL-`9S zbNCiX>$piG&f;ups^hW>83D{{PFfe^Rfa3!2#cxSWGK=!b8GIhl>ZhQ8E02+YI5y0 z3$x2L*<#01GOn8loRE>}#LY3ogu4jfhV?H{zctHMYzo<%^-H8#1H_SvSp3t7FY*1^ zn#=aJhV)Ai?~cXto@1h?tumROS+d!+$kxgP?oLOx?Cf4s3$C_pke~T`(Ie=B9*kSj zP$FS1AQw5FRyGgu9PW7~6Zr9^A54tHQ3g)3Hb_A&##H~F?om&>M0ICJ-56Ja7l@g2 z?>>b(ol~x_Gf2DSZFl9mX~KtQdo?97HQKMrGdKvc!h``sHc%N_qX}7`oT(>@oWs zW&?ME>u3`e^bb@GzTJ_4r+u$4->Z^_xX9SSM%bMt3z_YhM@($0vG9t;^ZtClEeoDd zvgsS&1Z}6Qk+Pxf#HL?{EEj|$IK#DA1fKj5tp@Uitz3NeT8WW%{8LS0yQ6br_tcrz zH~#QZgFgX;1wtH1!wG{VSHWbIeriY0;?=+oaf$8b0Gr#w{R;SK58bcDW(_YbX07qM zZ;M!cWg$B+Agxf~w^G={bzpYl1;4z1YzpFogi$Q*j(M7Y(1fim0P~5+0&F5vJ$gh8 z^5x3KP(L3lh^k#|_E26B0w!YrQ;94;A{uHfPKT{`--3H5oPqdnzr+r`b3+3?+Z#*B za_q>af3Y#Lx?a{nstwbnYE>%)rtk2{ zMd9XJWV{9D+7%aPHV&8jP(91ON_$xQDJP@cB)%r+y@mLDHTY0p#Hm00qo*N>?BZCy zC8=XbQ#lx73v=zOPj1_u26=)z_MewLyI04ik{(66D?UTUzwp>xsp%~1w!8!GzCM^j zr+UehbGWp%I3RaEqKDycmyS1IjM%FEgYlDxx!~0|SgUi^1Wyx6k){c^^e-R)wzSEEpLReF51Jl9}x3G{WLr?mxLarL)8WVZ+3uRf!uYkN()|g-sl*iSwAs+ z7jla(|B25JKv#LFPK-0WB=`KJ%&x1?|K*?U{koge9a>bSf`5B>C)EadrHidRwKHdc7L&l5fBHtJsKL1!pXYtAs&qnfT z^!O7)f$T3nlOL~Vs|Ot5a53yL=Tg11#v>jZUsH>n!fPu%Jv416hA%Gc$?KsQkIPTt za>ei+DSkJnUQ_cszjpwV(1QujxNo+bb_nL4+QBF?Q?V@FKP{7Qe;c2uH@U^?>8!`$ z(g+I?AS0xwXkr}JNQ+18Zv)V38Lq3X+9#r`VR<*zzD=0H#c0^)c|VyP#Jn4nWA%M+ zPHm1M7z!R@^8{w_Fx>Aj47ESG3RI*kWQ|&zxdqF>%DQ|{;=ja#Ssqc%%;G8gB?9kS z-Q$2E=#tM!OeN;A(wEpWS-vk&!?mY`L6{W2132*?0(wMu;8HK%lYcj9-F<04U0s}P zTw#sofaa{d7GEJ9Xcg}(?FDMCWgou?$-`1)o>)uYh4hcoCfr=Jd;9)vbk0ONCwg8F zl7m%!hTp0-HlY1@tM+<#W;eFd_yvN&#Q6oWF|G#q71{b3{MYA2zTCmkAFEfG!x<*p ztPYM=`mB0iFF)C5xGev3W=rU)#7Q?RC1nx{UaNVd|67z_9XCb_G8s(eS(CszhX~3 zDDDh$87GwZ9cA!!@!6W510DfBPO`Z5)UlgNFl$2GzD~cdr9YZqBjsuqX9)}hl|_~8 znyyBrya&zdwExeL-En6oWOwB+LQS1J#f<)WPNHF(UE2Y*;0ngx=%b>?z3}B1=byub zbs7$*5R@(x#~PhMn5I!TTLWv!vHR(XLY9xSscp)<4{lRqkW8Cy&kba#bu^EeO3T+@ zVGCB`K7VK3wGunBBcbq=dP}*o#=Mq6UlQ@$qg?1ox1`*v&A2PDt;&F}epk}4%6IN) z2yO}I*_PPuirS}nHov95-+8cKL7RPW%B^V_D5fWm$wl8QdtWu(Gp){;2Uq{_^8>+c z4}JufS-91){L=Db4RbvAVa+00xQgDmVJ=R#?sZX1J>t1b`)-;11$z&qcZ(X{6h|5T zLv_x@l~HabkE$lz(hW(BW@H1n82MzHGAh~f-MfCKZK^l z=c!IN9rhfD%PUPXo*Jqc3U6|U_yoq4uPegw`T_(c^JR5?fQ|djHPlu1|s8i}dN#k7OR(5X= zCx?70e~(!V+yBGi_Yl>J33jKXodwvbOEuoA<$>9uYMtRk)eDuNXYQE*qIOZ4VvzT_ z>)$*~@HHvYvyOh1YQI-WjLqgb@FnVbvGm1oDTYvJ>C`69!2a3Q$w|jA%g5@g{&~{+@yL!kNR<6v zt{=?&D<0A|yeLkwU8jDel+V3R{dP0z8iCq$@WcxlxN6xKpRD zUweo~N^ZCMEUjL#c>@eoAowsh-W9?Mk>O=goOl zwCyJyR%FN#$8}<3@-hoYrvYsoX;!?&yuh84`DfB-gn6o?x#XNwFK&+pzA=b?-}swc z`-A`HmclZbLNDf6ixx%{7v7w2WVxa4$2!&VC01no$Y)R`${m(gIb6?;`Ec!O#DKxo zA4lN4Cr0+ckijp0QT@!fRUzi)bVye1Up_nW+D8MmJ$lCq+YW3yYF^I6#>OeIF-r2r zCccdE)3c0^*`HN}EY8 z&~mN+TL4LvUAO$(V0@fSF=t@J;>LeFpDN)RDRElYG$zjm;r;BCk+ozGVC_0z*=x!! z%7$TFc?znowL8l1UHh@tj4>Q3=HS^i4i7dxMMuD{hn+l5@KI>hez3Fo?mqtJ5hMq( zqc&yJsgv4c4xeqrb=&`Ku4STk+CMJ5uKcYgxq>$>%zUr}8!2TcJVYkwJm9JKl3R^F zbhHNJZn^d}{X6F^Wf^OzPYzzKvhnPiDGC*>62#)2g#*Q-sFil1QU znp^g{Cku>0Ozl#f(dKmV)noQ`m@m@5T7J1MM_J`{ER58uMLHGd^t!xg}tU* zRExFMhU#KD@a`Y!w!yuvaZ=7v4RW!7`9MeNUS4-pwF)4!8edrq)+!nl#EV!VCU07Y!Yp8GJlW0PSq_-Lf&1WLc$4FhGnnnXB$QE$ zrdFMY#J~5jVJ8$JW^H9E6$xO@mf+?T{X4nqt&n9>(f)$-ZO+$wqfCVjy)oEF&hLL` zwq`%|n%9K!Y@dI^xGt3u3%3@sLZDlg6|*)~vULtPQsi%6X;(O%Tz-Az=6x#i3ezDg zmV#$uig{PD;NzdoC3%@-tzaVgIw_fPPq;p=GNK$E%%+o>tLd*;wl5fwJ3NTJn;HPi zEOr^p^g6kG0uKFk3crC6lnoZI`Vmft0*6OE}OzVAO3Y5u(ty-CnXYd z8i?$kPMY@-JnbYA$%2kg@r>KfaaJLKo&E2Du*)@R#HL8U+pd0It0ey@hu5!lq*b=Q zyDmDj(I?#ZjN3iv90ja%?A``hGV7w3YyOY0-7lZ?ydSR8+WzKWXxEsBc1CZbcMB~7 zewpw?B+K%H`}I6}IT_=s0=L+VZM}%5|Be{fk38X7XZmfVQix!!g5*>9Li_k%@lJ&M zxn><0wBc%^H_LI_L(g=Tjem^fV{UwgF+8gn-XMh!KK01a6wy#cikJNVv&BP&zmpy? z;qB=XLpMidp2awUi%cY{2wwU<*WvadD?wYYWuZ@oI%uPHdub~p-1J??NzSbFYN|0ksj#`2YX_ diff --git a/test/qad/icons/node-add.png b/test/qad/icons/node-add.png deleted file mode 100644 index 80b5c61c6e67c8a593e30a12114e28a2a61bb3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 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 LNkvXXu0mjfZTVAH diff --git a/test/qad/icons/pause-front.png b/test/qad/icons/pause-front.png deleted file mode 100644 index 448bb6a5d37e593d18660f90c2787a2326218c01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3146 zcmV-Q47Kx#P)F8;U58;9NG6j20Nb`v zC=^gE7Eve^psFe~O@pRsP*oMGs)m4+G~yG+*!mqic3iye0Bqg5wXei{2j?8V?}rQ* zi$!>zhr92-8=akuBab|SWHJd|*P-h=5{X1qnj!PP z?}z{4c^-1P97aY)@a30ZLen%PlgUskO3xP=V;gqu+I8rb1F(7X=HCH0NJQbr3xxvm z`8+y1JJHwIhvw#Hn5KzTDg|BF5s$}1$0nE;en9vH0fgf?C>D!w90!*#U&g6Zr!YA= z3Cprz7zR{T4gU|o3%hsk{@X1B;I-FY>m#C*M5GIqpP89Ku~@{)l`HY!gAc;8EHpJW z!LqDS;sB!FJp@6H5Wer10b$!Vip3(%ojZr2p&{tH4%0M4lPGDz>NnqfbL6H2@an6t zrithb5p@JX0LO7KGcyCuIo7OMgU-%Q+;h)8NTpKHG_A~wN111gLCy`LAjp?(+pujL zUw!ozjvqe`MNwdyW@u83u}h4xWpBOp)(ttv*o`cH<&{@rob!JW(PAN;nVA^`L4aqT zc?KOF9Z09sXliN-r6XS=#EEcM=`M#u@f~9=^MBb7>(FEU2oAFTVI91iSS6vK1><{OR=R(_T$AfOEbHK)bMe z+qTiw)rE&1dI+tpts(Pr7RMM1?@`Amf0i{s)`Utxh~GKqShj2#zW(}aOifLN>j1Qu z((oNM(}0&=dZ~qo27(~ag!BuA0-k*GNwl`MqOGkh3`?@@iZE44n$?P-O6w|_jBubW zEiD)s87Yf20G2)a=%arb9v&{#L<5NEX(F_4UCtO*Aw#%yL#jVnh@sN3QDv08~|-3uxr? zd1NvfIF19x7<63^wLyTuISE-l<*^0(0M7X$QR91_2h%iRSr+2)I7CE{LtW%q$W@}S<2igy=wyq< zBI5Bl5{bmDC{Zb6Y-(zPX`1jn52~t)wTl+40YsFRv$JF}IV(*S-JVJS$Wj#&nhOA- zF@-`Qd}h|BBUz;Y!ZgjYZW9ruYXQI_5qg3kfN7fH3!^G8x41;7M{bgcme?HH7OoZQ z@B98N4XBhe#9}d6mW3b)TL1HlM_)p`jt#bWPU+fLT|iRJIxjj^p6RAAiK9OP6rv$`wpc zPgi}{wQJXq$z+hv=aI|hU|H66Tj$;q;&neOQ ztgrO`TrL+C+{Ib|FeSe%m&=v)_~$}fFcXi*kxVA#hGtFHNB5A;W~0AN)kFj24T|nh z#M#WMEJD9C2B$Ye6J1{}iqlsTAE zZy=FKz%UFX5{Wr$f%&eFzLRr~>FH@?v)Qsbq$V0r8dR34=fuQB7}8`Q+=Gj+WIKd^3>_G&ps<_jL3Ums0MsMM7Gd?SS*GM7cPX^o!CSa03r$}JTgO?rd55{ zT4-vb#eau`7k*vt+$Ejg9QU{@ZiA$5uFfP5Rb<(IXQ`JHX9}?vNp)RLDMuO z5{WW~wJz%RtceBZ~lYuB)3$&xU9RqF6oy3Z5zvb0t(FV7Ec+s5I;hjI1l zRU{G#*#!P@`0(N5HOT}e+Ebd(BNmH6(=<#>Okj9;I2>JxdS6J#^Sm;T9gPy#n+u35 z`k$g$8X6kH=;$akO_Lj0 z9HEl5qbEd!)W7@gI~+Q62p@jOjW5@9E#~(vclrYpuWpa@*wqamk;MO0JkwEAJ zaFmETWX~?+-5(EKKsT3^BLMoL)DwP5NWV2ahvsvWxd1SNM zvZ053)<8J&#@N1rfq^^c zprlOCKKramM4K36n~2DotFanQlIA!xktd=(jIlj~gM)YGQP~PWv=GsH#@IR{S_2?C zR|B;|tza|8P7u-G8DmEW2M2#1ho!54QFdIOF_s3fNK9@RV;2ETm3nyLarwc)!2;@3 kr#jWCPIanNoo*8S7crfJ-GO4I9smFU07*qoM6N<$g6Uq)J^%m! diff --git a/test/qad/icons/qcodeedit.png b/test/qad/icons/qcodeedit.png deleted file mode 100644 index 4299440f754411dbc20cd5b7b6a6d00219238aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmV-21I_%2P)2Myp4lt};p0>4Q_ zK~y-)wUx0;TTv9oe=iXUF^ap=4h}-V4hjiKQ%9#t)y2tOgl1^ENNYDyRA_cx#0r9c zfl~_=NkH7hNgdq+njj|koYNtF&-e0T+ocaK@80+B{mys4bMANHKRq76`uh57Roxbm zoT{R#hzNfFZ{twEYGxny_V#}E0I2Hr^z?Kto6W`|o7uChI{#HFmE6wG&Nh%w0EkE~ zo6V9+rGnPm+eh5C$2r%XahTP&g9FCL#~BDl$yr5kEO0(IDF%Bm(%s9~4%n)^`8W$HAPNyUO+|$!TGMU8lyohPFS}mH*Cg01sw{gc-6lw`2YX_07*qoM6N<$g1>2g>;M1& diff --git a/test/qad/icons/qpiconsole.png b/test/qad/icons/qpiconsole.png deleted file mode 100644 index 9555ab8aee01d38f38a0683605472fd974f8319f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9858 zcmeHsRa9Kx@@AufMuSUmf(3VX_u#>s#@!kk3+@&)xVs0}5C|IFgS*o>!Nc&obJu@f z=H))j!>o1BUi<8`Yk%iERo|+II;$epRpl^%BtQTFfT18St?{}N{4-IIU+;a5_Cf#v zak96Tp1TIflhWDM$dR&lHX&h{^E`1+DlNhA44YnW@7 zkf18wg;DDmfJ8w1zK6e2m`q7zjQo7s&CAO=?@Ny^=3F|qn*vX9c&)m?^qqRnBgB81 zJ}dV&{yL{YjGQl*{$03m_wzGX_3gvJ#T`Tn^X%g9woB5WkgC_4`doxuwp#jQH-Gwj z%$-#c$MtR%zcahdW!E+Td|%dW-{(ud0aPx|9M1t3lY6T(O<}I{9=_U%2jc8Fb5R46 zd*ZH_F4*Y)U~bIq{UQCb2u$SEpF7k`G$#9V{gltjKyKXQ#9%8$*Pojm3e{Gd!K>%v zOxT|si!+Gsf@H78aA)*`-mm+<&^rc0JKFDDFVwkL_cgwRsr=`^eUbm3Ot3fWTRk^8 z)XngAzy!O)$&@)-cR9PWNyl@+{Z_iG(CprpRo3k=8{Zx=gl;d)j)}J4S1aB*eD<5e zGp@xA=$38UU!ATxf?swX-SWCD4D50*Z9eSn;>{>a<;^)!ZyllAo>a|obsB^fF#P4n|mYw*Fq zYU~I7{jM}t+N%|Ob!+7%vb+V40OL2I3ZZ)NKJ>IH|*vp-nc=`>vW>a(xi46ylMEgyK`VOODwD|D2X9=lY@|%eBu%S z2is{V{f(U^OrI+~wlupl`0VDtBS5q8>L$C-kb2dSP19x?{D(A;J;d+*`0XZ@SXp)=D(WQx?9*B?N*3B`aYw_~6 z(I3>hOEi%@VADbeX>iPaQ*7Z8wGFh8V;acgydL;DV}H14mrVuRLOrMRQ}t@b{Q{1@ z-F4k#7l5mdjS)OnP4*RgSg58t^I30;^non54L?B%@fB~M-4`fCMum>tJTW}>F*LK4 zFF_2Rmf!WwR_j7#jr>=vqv4-uZ~OEfG!tuCO7*JskUy6@lr22u!#OyryCXXnJw65b@-l>@Kft=bR1)2Gu_?dg9 zkvj-JM#0?m8)+BEsjL+$&F|P%h1Xj?ElHuRf({YWJr~=aww2BwI>X@xQHOrZ+SR=u zOxUKq%pVrxDoS+?#ZK+fYG`;{!B;_{cAR9B(niw#Tw#?597`53sL)RGxSKdzO&u@9 zU&5?*Sg)2}4)NtICO0x~))U2oj~*m-WjsS_(%NB=fu(&rOQ8?Wzss}bN($oAUKrjb z-wb5L5$xb}uKrn%Lj8z->(Gd+O;YP0dn=qvGd`Ij;7}4er8fOwC1I?x`$NzZgP;*O za<6xMfr%A;R(j^Pp0CxN+RuYA&&U~d`^UwFh4@GW1un#1!CHI8%qL4VW^w)-dF!`$ z0h(H~{;;BCws|WJ=QKwLKVM?W-0AJeya()ht0fno`9?+gqAlnjh-@Wud$57en?V*9 zbSq@{>^qDu?cQ>UX!?4AKOO~8dbv6>rK&5>MHn(e-692qKZ38`Gfktt&T$XrYQ1lx z!ln8P8RBPfR$$w&&pK7vb|qs`2g$F&xee4wiA8`0$QXxmLW>?z>L%`v`n=C@Qzlo+ z0=x(OiQ}=;(0-135AZUYn7*KBvTTjGDNcOxFu#Q4Zfx{uE9qGm5k(@3zis$XPk}_9 zkosr;oEDi;iyQt@Qi20t6NadX-jcC;k=~X=NxJ%G)=h9ZE|%S<=7%Mn15Jq6c=` zLkLe~?##ubF^SRAW6y8CSZKxc$=etClLqA}UC98gsFqn@Lc?nKG_3)$%V5zrI1bli zkXDSH4F)JTN1G$%@}~9KvT8h`0UxZ8z!h9Fw@k*~lQ!}`I^*(Jw++fW>Rul1>2}KI zr&bT+?E)mg8PfU0Sf94UqJsz(vELhCc-&}YcgwM)UA236XR9a|R6Q74)jg7q`Wd{P zj#nN1QwU?aE^sYBs?sGdvXoxjZ!N{f#P}k?fep>URqaAWBs=e|m z$n+GB4%uCC40&wmgdsf@Ue%#qoMMAG95wk$X;h2>$H=FQyTPm(J66PBk@x&;tw`)X zj9jgL#TZ$*rhvaL>U>>fY5Z#Yl4$Y{LY%*qQ$u)z{KJYlxy4)%xj_qugdqb6h_qt2 z&|Cwac=~r-VSSJJx86!0+^yS4$kVj+)y_Xz^KCOQinM)cbAw=;>mtPh+%s543+6R~ z%h8AsX&bogZV-biLr9Iwn#Oee^0N>Q3vY=G#V7U&m~K#=IrYDrrfc6PQ`f}CAuYoC zkZv`CDdn2*Bs}2NUCd^m@rK$dB9F?7sJ_A@IA6&@2Z!M zob8flBCRbp=1xch=cOY?1#P}v;rUbY32h$o40P8#DWqUXhwy^q%pS`9qbZD`s#Et;;4(=G@+c%x(ekSyqUa!^ZaN4R=7 zR`TO&bwz;W)JCAWWp7NA#Ohp|^IDVpCwTW_=;{T%e;ShleHHavDp#D)O5%)4eS{j(bVp6nag{ z=G?j|Wd{T|6b1y|V65|><4Gvs609oo6)LoK*XPZ6@KS9n*jPd2aSiVaRsxsMMoQri z6OUd!!|kK*Im&(_6}FWEzHhjG^lk!T;L+ykVlFL>7aOTYLH-mtXE%LSI)uD|#K{iw zbXq=pKc^{cdjz+#hxm6RAYSkLsXd1;-Aihq z+nzUNcwZ!A69og_8SM&jC;@rffH`x38wT*Eh*l1}Crbc}@6UB|V;vvLJ9y`AKouT7 zJet41%zAVep;s3)SAC(guH%7k)WPqLBT|UD5EF*blqVcirS+wD!Ve&R1NTLN-R&3f z+Z!@Qy!3e%mtK;sge^@hX}t*-FzL)3%rtMtzAB|qUC_GB-#RzWAD?2nmkcrc_oWBKD9*8I>rpOHAjlTMA2gs?tnwofT1@%Vrz|@SQ&7Xe?O} zM}Q^;CTh@xTj;{}auUwaA#9nVX*gF-po}cVMY}CX^(l^6VVd6lE{>BTvzvI0E5ctQx?f7`Y-8 zYIR2ZZy$mRIwO_iKkGeV1d!jfkcXm2OM<~`O z%suJ=R}kZMudZ+n+gN&pCdvjT?nm#?lI7JT;T?f}$$9q~1;iH)z1;8vxtMIboK6X)cPtw?A$H34H|9U5%H%G+a9w`Uv>qY zK?8fZn~LA$^EC;_tWhUib=5TO(hwCGRVl((#fKX>8)vW85+ZiVDjYQiw%=^GY%*k7 z5E6D#a!+%-bKv8nMpI~{h&UnV=TfjO6si1)*P-u{uWh&yBgaA%H4;ce;35g3$FZZM zw*bs)(aOuBQ3@k{T{_y^V-;Ps%mx%~jM83*Y@G0N*4`O(d7+YeT|LCl;%L8b(pm^i z!DmR^@KXrE8Rbkzbemn*J*@t7og1)s%YTLTD=m}lR|BCOYgAEsC9kqf+ocn&FF@@r z3gwSzE;{p3Oz`rr@1OCvq51jUrgm)f{w{D<1)vMk{-tp*c>X*a31>u6qHxu|wf?|m z>(HsbI_&B5Fu6`d7X^v*(3q1+?wbV=a(HyS91eBF#il=Gp?B^<#=%{Ydrj#myf11} zU#Z&jfPF^Xxz=*z@Z+ZgAqx~2;j%O5Y=Pw(qX_*$xT5!pZBAl&j1j*wl38mlcxB=d zPXns*TC2EFy%Yi|_4YLMLtPw(pRLC%Rz!_dFvZ_B!4)@k5_u3_A5-SYHEC zny@4|)vllW<#iAUWv%<^lru^G&ga>PI))UVY@TK7%Zs7)bc*)z3-?C2?(I5;E%Bkh zT|;?4suszv5$I)%PXto$7)OtvV!8RKbaXA3`!(#N6ivBA+KKeIPm{^VofR{bFw^(0 zClDvEMLX%&-(`9dHqJKkfPS6L++)*wa#`838qJ%T4da(#LHfo);89m57!0| zDPEmuF{EWoh&7%_H*yu7UKVc{Uh9;YKe6|W;6O%RUwj#70IF)_U+5k?%b2XI2lvIl zkw#-Rk5>Qg02U?)8*D7*g-=%u)g;6sfFhJgc*TZXU2C{@DdA%~pUdHm#oB7@y?tb@ z32Z1_`j}5k!%|P+6&;dCLX%J*S@u;s#LFsI{!hKrn~s!ZMZHQm-@lz7zcwhT`0hKv zx|$2v`4K$2s;GnQb`Q=2w|u9+V22NB8cJ-)dG*H>wm7uR7&IDSY`0CR(4@P#4ww~w z@GOtA)+QotDX^W!p$HIXcnFjQ7Kf?rZ_dte(LiOn7snBRJGP$AvGl4mDx8mPBg@q;A8g}(8$ zuB@8;l$jh%EoN)7(WlZhYPZMMz3^~qoyaNt6V&x^`6w?uWW})f4jkdrc+BM`NubQM zXw;aqF-$S&-L_lIx z-I1wQ(I{Hb+?L=mWQn=pU$pLj_I`F#F=UtadHhyP;*<6^e9BMdumb*^HR!~iX`Cwf z?xNfV8eXpI6hp~OX;Q|MYm;GYLa9Usmp~bE0LC%_j0^v6o%KYClc+z?Sp1q0jSoL6 zf2oR3QukKJ#$mFwp#ri0^Hc{#~6lX*Dbbjqmd zO7a($f`pnY|?0g!kY`& z#g!)T+n`u~k{U+D)~|`)jT{M~Hav~B0WmKcW)9bK{s>&J!Qx6kK!W4P^6VByt!aT>i|mjzXW%U5)WE zKp}z0o7HTYP~mz>{d;V5Fdf5>$8i+rHWCuhk8G!zJfw;}HI<*WIr;YuC7Ysk`7IU_ za9#Fo>)%cFmaIgV#l%h8Rx=Dv)xHhhc$#27=FaC!`ee61>o}zBUxZ>5%tn8Sx3akx z|7sUPyOoqdn@gp35`-I_Bi913WyVKN?h(KmCQNclMwGP`?x=$oa)FJY<-L1eWX#6$=T$0?lMlTrDaDA`@MCbQc-X={tSk?bwjghX62 zA$#;WTTufst52cIneJoQLK%}cp`4mp^&#JeH^hN%3%-l6fR~OIqSc@Ab{+DoNYr z$bJX(F;(0UktR{Vxw200Wr`6LUoSf2v((F)Su3GuD{EMEq`P0Cl#)zG5S1VO@R8>K zF75K+OaSb-PSd3?=VaNK^GU{iHOTA95JtMVav; zEG5NVAyTt7oPv*5$d1bF0rTd@ODrR1b(NSW4;An=d%}qoN2NHmK?$VJ;oglc+`+2) zf(|F&zADyjbnC|Z3xZ0Tj?AHr$9l70*l~|TXKc)jAQzG0($NKTH{zR;)<|}_o8M5K z7bpQzp{CDsUxz_0wK_gZItxUYtA!;;`FlPkap#^pyz#u*LU8$!%EK2C``EN-bvFaoOH!)g_l8* z|KQ@$F>8jK9>rFwiLh-y&(<_Pn>m}~5xmq9>o!V~Jc-*LJ~x8wWMqBir*!2OLFP}= z%Ss>?y;jWKkp21R)a=Edxm$-M0|&%0_8UorUtk3aAodM%V#cVlRKvk7^_B6Q)8laW z*_1l+*@2s4S+!8O_r57l_!Ep8=8+M9d`b$jEzpYuvDB=-SNwcWeuDZAu}2VEoEpOE>? zgHc^!P8Z6}UJk09rZ?1W52#V5A-|0Q<9aju7|*)RRdVF;mX(U?MZ!*UL|#i2Wc-+2SI+I8@NPA1=K2$0c9Wv$Tj+br<&(;Nq#GLYN~3?|_m<(-;6i zwY7O|2I;9N3xb^-SV87aW)`ea2j^EW003bzs51y`XW>q1W?^OHC_;VK(M?ThV=h9i z%cH`s;w)uhZ6ojPYN6?^ss;A80}Gf_i-`h-p@Odj4i@epN~nXqqnjX9g!*5+g0Ij2 znAxZ){{?Zk6QR~qQKyu0ax)IoY}1FcyHl7jg9<<2*HqVsb6kg`M|j$sn^~zU z)B=lU4)wt3H^HMq~5JUBS&j%WsS_>X6MWww|MfBC=p_&b-DRG3>dj$cpsl( zx2=|#xLoYK#>$Su2piy3?H?1e?u~#)-{u9@#grPZk1D& z%i$JhW@hdEENrWb{&zscMwgs4=DjK+UKLE3Ilm-eAU_5n4-(X8TFs-#C|z`f5-^QH zg_n&d>-N6MMx<3hM5S~_LYiO1KMc2;SQ-(GJ}!{urg!W-ZWhy{7tDcd$8uzcB+QIe z`wMzI!dh9$)>dENyX@)odub`^y-z3GuiAt2AVP{t&9bSc`hb`K+_a1=OPj;j{`J#} z@OCWnxI&6UJ^`3zT;KjsNX~QCOJl7Q`1?1)!?S3qr5Xnj`oV2C)t0kr0m~u75BrrN zuX49hP#n+Bx?B4yE1DJIP<_nl9}gLcMU3|tH!dh}1O9MX`vQ-2+fy?Z$w7q2-*UCT z+h*G2|O=+Qbr1ug) zk@iPANRd#aODB|sWPkB}&+j{z=PJ2-_MT_0H8X2wM;IIGGBI3Y004mLj-Hk&06-{z zApkus<;U)2;S&IO5_U&R!`yfJZy;Teot57<`sZ`A*RQQ4$}BDGXP2dBel-ZVozLfS zbabQd;?}#3-q8@~6*?EpD&TkJ3LbKen*Y0e=nY!4X#e=*Wj?v~8Gb}ks4Mg1fW zHXa+!eEDsGymMS%?wSN9w#5bs4Bl->^~>*$Av{8$@-DH!T|VxWEmDDCAMoF>P| zVq^pEKU*8~f0BV(5Av|cs_?q}=VlqTLxwRT2=Qg34~eB6dYN8>3~hR(Sr~^(k@$s6_`L(ZHjKTuD;cVxGeR;;pCU`Ml2DtyvN{j7On?qD+Z7~HE)&8Q#EUr3Io z;uRGRgiwcuhTfA2Y2H>**ASo$V!LaTfcBk|C9GG!wl5s~d`$H6Aic5?)pgpDVSim3 z_Iq%S?!U@h+1shI3KFim!me!-=NSTS3GlrDGTFz-esN021DQ-2?*u$$jfI$|h~yP6 z*x8Gt*t^XV%tk8wKA$qi&5oS8%*c93m~GW#VO9SBJvEnEs}J66or^x)?_8>u3K*?w zT$QAgOoTKig!N?%R4ny2cZkI-F1fV`dK=fx5BQbf-`^B=S6?+a9|Y3?jOF#xyf0rh z#9E4DN8qq>vH7n=;Zp3e1m^T)=ORwcvxNTSX+_Wyv9#Bgj{% zLm{7=|1zE6>$18s;(J01vXT_jp--D9&SuRs)IvI4jZq84_Ujz&UjgYIsO2nVRK+DC|x+aUac4c>7 zJh!#P<%E10D62~U_rlO8u{C4^yOiJNY1~g%hjHg!3wynBv6?Td*VLHXbhQ3HJ$Zo- z3RXIgeX?I$bIypqEzqDU=!fFR51^&tvaL#@bAm7sh@wq*Q`_clqJ=b8Mv<0V+3?GaZ@m*3*wm)TnA6^tLJ zwI07b3jv!9<7u>Y!pzNSzJi$$EjSOvL2b?xO2gSF@yhC{ihCQs82qWK$2G=b{2I@0 zu*&HV`cz%U2S4v5W8B3@Kuusv{MYdoOEB`sph8p+&^b_y7(Vi8JMN%CNA6fF2W!d-E*1$U-9L{4f2ol`jX1LX1I6AvE6s&$GK~yY;WvO@%-9l(dy^qWxZzT@_O2 zM)+q_{hR2xu%_n%92X}gYt0?<41(AHI3PM*w+6$b-#DGo`-ALc1O$QQbC|zTcxxZk zLq1WJrRVuh)5$c5;k~PVR9|A)#Fp6BuH0*;!=OaIxQf!gBdSnv{`JTK-vvhN#+Sn6 zmydvOC&Jy|1d-umX|YK67w!Qsr+T8kat(niTg9o8+@G_2%=cgD!-ZvnuF1GGNks;v zRsK%|=w8fiS;-uno42Q`BTsc9xLqNwq6~Y>?+;zu@anS&)3tG=|;$+APTF`JeuIpc@+}x?jFYH1~>qcDART*FW+Wd}${S<2ZQ7 zq6B12Po+r2OMpt+JGa3ir1qxAJ0Umz=ft%FUk|}MEllg+vB2>+*Q}EsXqi~Ar(VfH z#1_VXC6~CX^nS8BZMgIoTc$Gdinh)W$8MR8&Wo)F8eI1E4=S4 z4+59sxwc3wqgU!{MB(n5QECl;$8*O+bi4I=x$pg;o?b)uyBhDY(=oZ_s{T$mLzJQW z{jUxY%IUBtRBpr)#n^Jw?@*RnqESYQKe%1o#?_rbW2h?@c7bnBlt%rBQWMqNL?&c8 zA@b2q&2t}=5N~_T5$x3ADs9k`?Vsa-sVXP^CvNv{SXjJ&i#bEC{=xVJ$c`}sR&7)7 z?uXhqiXr#IfRM<5W#;P`E=N4l^)*z`IH~uQcASpkRQ+&1U}yYzP~&lo(r1nO0O6GkSv&x zS~vSuer{Q^PddiqBq+MZj<@`e{(Au=T@-vA$Xr}`9Bd-fd33>O!B>3s_S(G~vUEr_ ziCD1&Q=fa0al6-~C06|=I(o}2>r4-P$Sw)0w_sT;cp(4}qzUrxu+lr}WRZ{LR6Vf& zYwF2pa`air)6shE38O!tHo|=(0QNQDGWDgAuWLk2(AJvjL$hu}G#TCKosb@LylP+I zb>)jRl)JvYZcq~H;Z`aH%vPdS=5Skoe@9O;rhVhK=jG^&twCb|s<4;6z+1-5re{nw zEw!WDUeYbQx20ns-(}PD3_*M#(Oh@ZJLPe2ECy-4-0+GydgDdsrJ(+DABUqj6>kD= zc+rQMJiZe#V-NAM-xO87Z1l=QystcsR%Tbm+$s=q6mS6lkxaXE({4B&>-%im(lGPw zn-B7s$6>hGpaw2cSV!^)nc~M5h732CmzC(b`zx<{6Us&JOK!RTur;cdN-3(u>1n&& z0blrz!m^!KrhU8I3&3~|a4fbPDKakzuovY2qDy63Bi?+r!XtBrEvI!?T>=n2tCl~f znx!zTH847wH7Z~vkTnv^g4U3worm_Dz#`vrJ9Wu8U1FWTs+h+1FA0sB+N@!FNRt8Z zy;bQ!RNj+exWIEj#xaJ@3JEjpnt~B zw~eS`$o%Hz)#v2?l#bu+eqY#3+wUqzPQW~3SRM30j&;y$_n^2lioehTt5cfE>XM3m zDf~SQQF+gH{WcgiIL-fMh6*^DcPg)*&-Ei-Ac@E{g1DF0w{IA?*g3u$5c-W-y0f!D zcSNE-OJPcdljtrx)2XO0VBWl(%eY`GDF_IVMEr6|_ob+U1V+(93|Tn|yEmlFf?C}C zY$WqUU$X)q?gl%4nUjqn<6cDu&N+0V5p!;ifX5qb*t<3;$wQjVHUND@6$W(6|Eo|4jA2Ro9a1DhP-K_O)XjPJ`iseTcTb)r|#QuGbJ)EYA1 zZ$SGAm5Y=(aB&!&%xbH-$r4rX*Byo5Io$lP{43d#0DpUkyG=lA?D5P9AH01zdDr1Z z^PlmX*R2a**KDv&ocKI~UZx6qR2~#Dft^t4)C|0S6|W8~{jS*R-vL~^GbrNF{qD;t zosZMoTCTvKj1AE=ZR(dT+I6u=jm^Oyh&;cpRblijA5cT??lqq`#CBT81oG&D9!lTT zo%NhpK2`Kt{X{WJ;#22bgBfg`VaPA-eLe?ZuP{faWT8-3h*o zY|e4i&6ITdM(TH7`THHINuyA&722!rSal*I3NTQi`Fl$k#KMc(2PQz@6q;Y_Rur;G zdlOh}xr)9%bde7`1Y0W6gfN+YwK-H-}1zy!ii@-|LtU>WF#<7pr9G@5^i+HS9kEVzmn}|5*uuJ(nwvyRm;iAKBhWsUmN6bv!7n=P-X@ z@*ysM6!mQk#$|$*qC%tQa#|8HFKx6wBj9_$y>W)p(Q>&YM`X$xHslcQY=>@YeigH# zW>)~_ex&hTdVXz9fAtVKDUPjM`U+{U*wy`bzi#EiYvqi!xyRjV7$`0S!V40NfLqvF zk`j4|@D`kkZ1n%(R@<&5ZFYO#WvhGlNs_0a3n)sazrRv_Lpzx2#r>%X7fCZAOYa^H zp8c5mCz-#=)RlbABOl4=la@-XCIRj5zZ7f!u45CoLUV|X7o^Cv5j)^^j+|)B^ZOek zFs*&^E#TtOZ<14w8o_SJseuVVwY8R?eH$P>3Nhl5X4t?$&jAYwNNPYwvV z>&k`6g;Flt6*3`p1K@*Gm@9G92(`GlAD?8vsiOfuW#vbDCNdRd6xZ0CtsEjnK(wHY z3lz8=P(u#;(UYP(weDLySj)GB@NWYQrC3tQ+x;Dq6V|?3`6RwBaLmlhM@79X==$lh z-&IXVJ5zMcS;K189$oK^YtN{x@4rY)fkq!84VLaLK#CdGK?& zU+g)_=Z2(+ErL&~L!pgxS4KOCkpX@sK#UP(Ifh)OGjkGzP{`qQzQD`Bi7!f zR6XxMMuQem9y7yK=6_O zGz+KnQA~F`vL1=P-u+d64clgs9KYM;;OT`tw zO}$54D7*f&@6_yKE-9$cDcOJg@I}UvYce+w!$Q%Jay4Q9>BU@-T1&;o1EAV{=VKE$ zHntbsazp^dPR|ThuK;?RMk$BO#sy@p0?eUEX2t%MU-%`ujYycJ+_h3LGVsm;*rwFL zD=nzPdVfDkQ+osU=WMwJEeLcZHsX5D_%aG zHXLx+eWC$=8Tk!jL;3aez;!t@zSe-m{IZ&%zJ+R(fV@FnjW!TmhiD!!;@SMiGH+|hk=5dRz}3j$-&qs5s>*`Tt$)noprbn zGEonN`}VeVyWV^-O9eEfdw*nd#^^RlG*X!vp7tKx1dNN;PAEkaV7v;wienTy2B~yl zHqc-!i{$nBwzAe`SnF7Q{l}xF)6B)#57fixhomoSB#a1uLcmIRB>ceF?$lZK--(>3 z$FBJxP4^u;FPnuwW@d9{tTkt@Ur5J<`bmLAW0CdcdbkGM)C#44*;udf>EkUSHR|qO zpHN$qhu^TX=f1Nf3$HSPa4WMjko0TF@cnSr=dEtur&u=xNqgAn*A6D4WGRE zM!<#VK2eY5&^jZ><5K|L*b%$K0h*NWjt`48ZCtI$%WTG=Umh`2zh&UUlXLC&L^zNq zlDvwUaxMR`hW1(-+?;!K8>#a}smuofv}>4YcVnP` zj}@o9a=F?YICZStg49@^pL>e-8i%z@+i!^BTHAbLOOLrY(DcBkBk1MCRC>2d;5$))^+fyHwaJ5XkL@&l4?$i zHQMy<1MVdp>;Qnc4f+Dqg=gw|51`Fo0k@$Ql>5+^Vz>BS}>2$@pXWU zp1>lzrE5L3a@Ry@&dPQK^{5Uf0echv|G!&&%ps_m%nr8LyaT7co;_;Dw>}Bn@UVh` z0Du_Pmj%&!6agrxHbEM_AMo)A>Wi@v+JR98RZM}aAHVo3E+6vQi}!v)#-P;Cr38ql z#e_TFKI7wxRxd=pZZsX>{$9KhV%Sb+oPp%eIN0?qj+&Ee%9z_9-&0E329et9$66^{ieLUA zv{#A1at?l4+24n`&auE&b7xOTpaHM;$bvu5%XkNX1R2BRNdo<-=HEgox#S$zzKYES zyOUvvW-Kt@hF>2sLjIkCnzW+liOyI49&|5Hqv+`w#Egwfx0fuJYLL$VaQW%yA-MmS zl*gc4eHnPidEz;sKpxvCu-$k|NldlkO~C8X!f9RQuqF57gwy$E9_s^KbI?qwAt(g& zSa5*lC^gsj-CF9%no|aw0JGaVn{23%YZ$-EDvyHkz(2f>kAEe#U3< z1^guJfL5Tz4+-yrsemm7-~oUzF=!mu9lO=k8za(OAVt-j{cRfdm(l;Mma5&;(wn?} zELY!O1B(;1XCsk+blyaE?r_Bi{?O_zFAkpydX^XHjbT&!UxulUM3cd<)>oXzQ&DgG z;I82vuJ*h?2QbfQ9TKbQEmL|kzyoD;FsLtWAa`wkN-_) zJRhY{sTz$9CphQaL?-N&;wDxk^of@TONe|QCM7RxRP!GY;wU5*N=^cG8|l%^0~7FB9AW#C zs9n0v{T+4)!YJV}ZKjhs#d$gAPY)*Euh^cuA*0)>GY(rYnT{n51VUB4@&#ScMXdu? zLw`e^_c%_E#se2?aNjRN+bgf&>u?cT_R(t~U3m{V-(1j{aoOGe#PP><+H!QO%TJAh zv3?J`3&wOnW-((5ioOrk{X1vmc<_1M!+y;~o$2y(01E%8_|+ie`fmYB2<>L1-43+B zrNI-`K--ys#PF>XiiyX3=1nOs^RasA2!fHg9%zsYI!zj+sn4WU24pmHN@m#X5Mef8 ziM>-tXCr&Q-GnL)Fmy37b9dF4i!}75-51t!5`RmH1FJz=HehayTm1j@);OQ%&9UKs3J7)o9GXHFPUwZ2$ zR#VEu=hm?5(VwL6>Lxpb=cs_) z8=ZGJRccNzmJmPOC3fM-Y!pLu6iIOyaE7_+ueyFo-*tN9E&;Ii9LhB;(5hM=`B%}X z<Lcb z1D1Y+tO2Xiv&$4oU6-U3RoOff?XH~T6DJ>BBx}J2?4w4SD6aPJ1GkQ#0KHRYLFAII z!qnd53|!UY>D7a)-SsU{9vPEsF@zmD zps?v&qd<1c$$Hq1bQ9@G=uKps z%W>j!``_=q$~wo2y#>E+d&yA1cbMdU2)5mh$e3gXiq5~UpM9K#zZze@CO0*PLkM-~ zab;DW*vl77b(^*7n!1qa9KMmRCA=mE6RDzGu6woR4c2mfi z_8pK36s{p7;wgTyAOT)Kxs4`$+OQcEx%9l6oc!SFx1y-i6BY2L6Gj{mZKBwgWj9h* zK58T%+}VkU%$_p-HSll=YIt`HJ`Fzcu6i|Cd?;nIBTY%IHXdH7(k6Q%D+GxT?AbLK zmxDaHQMC(J$I9Fh5C=l!ScFr5k{F>ausCN^#h~iXd+Cxh6EP$88GC{RFkgl?hK7zr zc#(+^K;>U4Q5c)=_jqVIU?dyEKh|@;v~f^}D~QIi915hI%HrYRD9_BTk4I3`T)zEV zl((bk-7MD_GT|)7{M51Hs)8T%de<;Iry`#E8Ve17DMbvnL<-W2p*W)?w(+ zw4b+`>$vW@VWIzsTkt9utTuhUlWJ7{)kiIRoQp)SF~8XFrnG6U{^BPZ4j_yyf{N`o z!>4r{u*WXazHN{}+-9)H!4H;8vO$tU#RrMVLw9ZaAw6Pmue#RJDH{{~yBi#U53-9s z%QUwgMZHKZCnf%$lVB}1`)w~X0@O_jPk@Hg=L&koulBQHvdVz*xGo?Hn@+=u-ZOpD zezeN-_x@l?Um&!9a1V<<)qXO#VqzeFAi5B!JV}XE$lAVy)$zIMfZEdSoENq@pGW2Y z2Y3l8B&&qdq$36Btog-tu(gq@vEsq0Li#sY%Y#y)?zO>FAJK#7=;)+kZ>ck7ZUC|A zF)8o6t$xk%;O*`;F2G@#v+Ssh&cBXr7>6BRY%Ut68;BeaLwE8>50EqsFRFB)13!ejeARWJ4uT!@fF><$1-moCb3D+s23a7XOU()pg z{}gu`bu;|QPSS>J8$Vdu{RyYf2F;iV-aZhetFpq49v|`pUsa%w!=)I}6SokV@;aV> z%K#b6Y%&*mwz&&`XAB3I4n*gYD(EguKh#dGGPHJU+pFbMHfAWv^p>@I+L5X+g{N=sNRVK+2_BVyU=K|FtZEUUy-T$9aq5uH zL2Rn~SB)Q;#N`7YD3DXn&Q9hlUV|$H?NOH!q8Tg|D$Y!HOtMOBkHvpt&u&%I)YgS? zJ&rf}c+g!r=6@#S$U2HXuumQjw2v5rOA(Yk|K~Ja0=Q7Z0PkI17v2Ig3xS>*zkChWupIWaGGZ zo#w?Yz;pUOzuk+EGwEcb3qbe}fnmj7SzLU2{cKLv?rN7vd>qUqgyVY(H{vTb8Ar79npomHrBHn+qOh0tn#Fqs;U8Fm;w+8@j8qKUpMTeTck!ni%ZfT3zed>9PMC zn^6?CR*Hvw>FJ26?PTMrQv4eUKYZG@H{k0C4od1{rfv9D7qxxyC1d{2s^RbxwAFZ zWHhkQxVDF@Ae){JGqIYXyEfFCKNa`*96UqXC z^Im18e`-nQra#i8ScHWCHJ{s#7pD!L1fSXF9u5GWBqoc`iC2g$!1EWu-w}7Jf;8FA zgy!X_jKDS+Wk@56{gul3aOz^^?kcMVV}^d?`)(x8XuzuFg6SbBGa5i)J!DRf0wLuv6fhBXM~h z>s+!v^K+op<=r8c2jINEKR<4z{2+&HMicZMQEPJIMIVB$(_Sc|bMDEY#&aSEV7ycs zaTi?DS=no$lyU;mzdtXS5|1%}iV43m`x_+L3AHP}3?5!wz_w zy<+*mQ#)Z&6Z=g3IOXRg924By{NY;vpsigH!Sk_B(4+>$msdc`6)Fz}#vSHokFU_% z0X93gjm^AyA7a_j`z2gbXL#xEs+NMki~`)+0<5E<-;}8qRJ(v70}23|DEwlK ziJvb{CG2)}sp?iA_89^KYw(A!UIJ^cnG|!dw2=$7(YgJ5?AwV^;+XThx*@W_y4|LOIuL2;tY z=ObF(QMVch)r%%is(+#A)jC8Q3*nN`L7pSNmSTLWj#$EcF zin0f!@{eFfxsigTf(!o$jm3BV!`xmT_<(6;;B6=s&}zg^ZXg!qzPDJI z`TFrHf=~vi?P#WBLRTZLPw0G?n~i4`xMovmP~PlkeeRz9s#z7Tqe7S#Ig} zj0P(!<6EV?T-@08t5Uq%f)p$2@<;43rMt{t^wF(4ATFS}r;`K?1{D8{ao@VQw=Yi+{==3p;Oc#Z^ISTq<;%%c3 z;lG)I(CR?n1Mk;M;}1emY>=R&N{zcd>&KHQRIUqrOVbr(o}G*C7Hkr`j^g(QH|LYc zyh@541M3wBUp{;|=gC>aE^;rIk>_l!@{kT@pNtCjwCqwWY$|?!G1d0z+)~1i`twnc z%zuDVF)aWA|C$fwn<12e^xQ9R!*k@4z%FDZc3VNgT8X!5l;{o!;6i(dodibCA=$_y z6K_@cSPh0bvsO26$FJG#k~lktsJ9h`1Ika-%q=9s?|V{xV{snZc>nZ!;Y~o1x~~<} z;(r_;9fm7JAM&)&si5sn7=$f(ub*sMw7JvoUk=ylWKSERKw8 zD?Lg7XwuZe2DGfEa|{LXa|7X3xP(wL*88xmO(i@MtvW)o_54rFT$koEoXVcOIiHLQ zXQ4hX%n-00c!g%U)h3R=luNSDksRfG(dTUc^e`uF@00aigqiQKkUmYgZ60&ITSa>A z@6{jf2pQOm8hfM!?aRB_#^E;J@_)+R#*-3svwP(|{T|AY4+}nx?o) z$Q7SDIDT4qQlGVmdppTi80NCq+B(17#%zD8TR7zI*ur}D_qBc4Wr@+OE)SZZ1-0o7 zbd%!21J?LRCH4lv$%~@0)KG?JT{7%)R_88-*BD%hfn?sH+{r%07sYvQ|0-#@7*H^^ zp-Z%C?RzUMQrYWuMsbHUeD9q9Tqd;kss+0mPYVuVj2=YD!^&D;&^*f!FTdfTC{CUn zS_G*FTRHP$=QKOeH{m0UZ8PSup-gfuwzXs@HSf~pk9{n01&I98l@nOE&-YIOa7JxSuI9q zV=WxOZXXNm&K$Vb^e4*KK0)8entA7s=oP=d%pO*N+w7VCCu_B_m+#ZBNYe)Wq_E^; z;`SjpHp`fJY5i#(IeW`0Kel70Trs$RWST?=L`Gt?040Y!%zpKw=zXWcLk~zs3vKPa zWO6Hg8*v#IVtWRun3fCvq$m+cs=sJ|aSU775o59b4hwrD)yZUCuQ@{=M?T?i*BriA zBLD$d0eUJx77`YJTMl4n1=6^ICW_0UYe`A}lk%pDX{qQuVgP@0#COr9h022#g@+9hotLu?wP;q{pyi%izS=cMr9&3$ zGxvi+9C3%f(rp>?bZ38F)asNY8%)@!-= zQv`s>#TM!d{QkCZ*+YjQ9ck~9$|$2TWK>5SkwXv%wQw+!OEEP|RIAo!m-0Txk=Oio zu6%Um7JJ4tDJs19K>7ybH&P*Qn0*sD^e8*m*nQSVh)V4uTdIJ|F`Mv~u8 z&@0hKhmeCFC7^JkkTQ!oRyVKJi^#_779*cA1Cgz}pfE`U)#X@oZ8|(^JT#Rdc(F@U z^-W*)78{#?fpZyrD;8@=eaT< z?#y@lqvZuE=Eo2u#m6)5mF_T6Uqf%ddw=`{e~sq0i0tF3%OkuVl74UKdq&1mm6S1A zvSvh%DE{7Aq1D^KN4b>_t`PuY%` zQBfvY#Z4E7ZTwG>D#+V*ycLNpUwwM(>lNO@#jcCgm&3Yb7f1GqJ+yI!>_wXvpEX>I zzey(lGQ0x)F%y1J8cSUrl~IsUABmI8wzKje1iL-pNd4MA^+{1t-) z-Aaq(1v)l5dCB{NJQka-h{sdW_GNp*76G2(eH>rZtI{p1@kI z;bW`7M-xNGTqJ;ScHe!L_3=weHr(z1pW#k#cv9Qe*jeABup{j-`0Xq5=|RCMXd;~y zmCQ=^U`9vkS~c4{{@vHPr_u{`G}xbpB~^-eAT4~`=nw5HDo6){vb|jK+$!pkQ3sQY z6+z|Pg)waDx4POdN%@%1aFEPD3$?Ec;F8}c>eWV^nF5GQAd zkIA0rk~@C`^0}ykh_(k^kl{pIDlag^LH%}_>pWua8C?|R6B6$7-FRb)hyEXZ4mmm_ zNOmK34BXlI>(}r^p%5<8!ahcd2LSfRkPpf1VTsT07G=*omW`gli?x^C4e#p1X;Z}S z?6!Lw&)RhD-9!yQEgP)IAPKR*h5C41(#dS*C~6?I)7GO@!{)yk=PXc~Ya;ZkGI$3{ zsp$~!9jT(7uPcux`Iv9t`5m-Innvg}D61+SX^0g}kVsE}lVND@s%49d+w&~)E&8)_ z04pL0TTXRsegDE!c&tF>Gp4gHCXIq?lu+2ObCbAgDTk{cS=VKz00Z@S|soLR%8yVdr4HKgH0R~g_B~y_3a?qnqIL$wpM4qAQrHOeV zBL`or`y|9)7sG$!=vu33Gkq$!2v0;D_ReI_rx^A2_>VzE#y-Wpj-T-H*kRfG5u4cd!JLm|EoS)1b^U=9 zIBz1H>5InY5grD{534~>6yN7zKV5h)pBh{LccJx(IDf!1He-1;u9t2fZGw_G{VrPv zN&khH8}N;7uFz^ZhO4Vmi+o(1J-uiOhFm&445bCaLt!|KFRCkwFp)W1A4Z^yM|}^; zW?=8&nt82*Y8Lm$AzmM$7G}jm?%KBmcMKtF9C42vYm#{f>j^HXMwd?L) zOdre|ymb5R|a?GY?&Og19x0=u2p)t3mfm{?`61w}mG!MaQ|> zOBU0D#U_4f3lleRGM~qDsJFwoFYo-NqM!EIduFwPMY|(B1tU`@$~WkKgbWIo?p0c_ zrJ)J#D+`gr8$=o)69+Q}A3Z*$!E*tuW}v3TKZs{h7Qkm4%`^%uVr|eR;+spenA2g! zt0>go0N2$gm|JXpIVWYXg$m~-QL6R>!?py>@KG3?zxL!^*JH=F`jxNEt{6{dcvHiOC_069QMj+TF-G zB1(^>DeMM?=q8a=*mNl$()mEI+Gb@wWhf1V6v5l_&g_0}NS9o}gAAr%mFP{tG;s`; zh!k%tJrp|aEkxUG`+HK#`GrJIt{?)clgSYnGkYQv_MhN~K}&OW-N}T;)t`0JpC2}8 zet4nD?aqIFDQj22ON1C8FOfT_gg5SefHC7Dp}UT2?06)xl7;B`b%{0q<0J9i0W3$b zBBwQa&a*wWgsg?@XeS&Li3K*mVCS#W8wSr*UM|8~t9>SZ+&_5pXfXpPVsBlkGZTWb z6-oP>I%dTyVX2^fqJ~6PKnSEpS z@hDrsGc#U%_YHb1w&!sNiw!wu3?4m(`IR$Xyh`~@=x&k#KDIxQMgO1Rm>NOF^({A- z-$|`NSQn23YPSx~rE4gs_9|Z}dHD1D&Mr{w11FojiQ~!T38ofrzQ%dffo1P1S6VhD z(qLEQ#TemJqLqF!Lyrw?e z)kinjLH!}9r&worT+0+353HIOsUk0WX|H5IxwwkK&UlFyVJYrBGveRV32tTEQ3c@C z$A`Ti80=B|;MpM}-#E%*FW%G?RaaLD(#ORm?>Jk2+fCw zAO7PGN71DH@RtrfBJw%!xn1(()h$NY&-nlR=7A}izvHJWr9&oay~7|ZbT(t9 zf{b5xP&HH#()zYDs)Wm3*a3p;pcu0GO{koaC{~1>xvb)&z)-x&JQDmADs_t%`;lA{ zdwn*l3d#82wmuTP(|LC(2D;1@t*KxTRx5o(Rf?BqX~rm>0W-Cb*45EpXkWGQTi}F_lU^mXk_Ea!Ga4Ft%3r=j6fJ8_^Kp_RQf` z?alH|k-6@LLq8X1H6t7JNY)WDfs|sr`Soz2c6$t?4`jNW8kp=>D@0&cLwCZubUNbV z2ogECCXv%I^Fp|=zP2^mB8Rg`UYq2&f$sSy-_qXW_uKf^*49j?ZLf>Vr&~t27fV^a zqBWlkn&(&CUVm%K(SkS?%V97ZA~51GH^Rc7fFqJ|d%=HrlQ_YEu#x4lAldT;?n=ln5n}H;zimif|o>mSHitejYZW& z5TK@LZX=RYJPS;p@+2yhCmFslf(oeqwFIX+-?v=V^5j0}{qRiVitEn~@nZavuCjrJ z+`aV~7R^T=p(k?o_I2pVG(RCr%G z?HI1+lT3^9ITRzFB>_$37bb4`e=>rMxsvW~jUf#W7oOe7CgTf1z!WW#PuBfc-V<)C zT*mS7$4asM3cfBF@-~0^))h_;zfm#AV>Rp)T+;^4bCwgQv4O*tcR0iQg5IFMfgY~p z^~k62@9rjt=O|5|vT&hBb}?;A%oy50TFKCC44(GHZR-2!28&s&oj4>`()Q03n4%g*%%~E4Kx6K9WaAyA*PS^JO^YkM!P6 zpileHwd^ra({Lr4$^) z>4bh}_@jp`oKoxK9|^oQv`HQ_4yu&sS5cyWnAoG>vL)^&Vp`vF{dhsdewS=_=>gD~ z?P*j_B}e<}Bp!a4HP{{%!<7qW7M=1(7M{p;@D=Q`H9_PHkJyCiI|;Ti!DDdY9C91) zP406Lr&ar0GTb$ftkh#VG~LgoMmi{sCQRo11K#4l1Cx?aRFoY#?#NWsKv5o@{p<$j zy1A{^VONM?tDOAj8)omZ2oR>VJNV+;K5pXwEA7o6q5A&#@v-leB}o|(%3cy7W8brH z*@lFaBGO{J))aXm38luqX30_{#!{3e$sj3%P)3ZHv0QWS{a)|y=kphQe)EfS&pFTM z^YMI~=ksySP;goIV}O{gv(S-)arq17to?PeH(lGb5=dC`hs{#DsG{MmW3M0VHn-WQ z-z;N$y&Pw9){;Y%VQ!0^>OjJlvM+y);qav@R(i1Qg|CMKlyZGyZ$ueP8e;H?) zFyYA;vT#>2o6vUM@;COVuFvHsS9d2DfqOJW0a)Gle8l&Z%gI%mqjCP3< z<6qdmN*6?36wWoG?QWDg|56bZ(x<2}11ap>%&~!TKHD-Z9_G-w)(*Y-EvkfFFH9cJ zvYAUN7)P&-?c0etJ4{%pED}EW7IT9HMC>UT91NBPPPc9dPnt>=A$4vZ5kbF{0SO-W z7@0@Hl|=SNcJ=M|ZBQqeIzu?#e>CkYUY}H5^1Z#KeDqcBymTdz|B7HG!Xs9%gr>Cd z$Lo!rb1}cJ>qCKdwG_idy1@9xuh1uW+m#7xC^~ye?8A+V6o9rTWswV~KO7f+sKxdC zWY*Bw(0Zfavrn5KD$($2f*W~TW}7jh`Gd#kIg*kL#-B9XYU9Z|!yo3^9Z6vEx+kkNI?2>A$T`oOqlg zO`(e9IUH>IfqvZce;;=N0ebgb%4~bo>zl(p4{&N6PMU$&nRVBk9j(NpfhFY40fciP zIMp1NHMVW~Gdhu4cSTQ~g_OvC)rF2C5f?L%Nmi*qG^oZDd|CyLOPf*8T*!=hT1iYH zk*O9ZWN%vxk{FuRli4v_GqdbzTk= zUJlq~tUKuK?@y0G#%FnjLl4&w6>4y6z4L|1E=TG3>R^+P75~mqY#v{}Pdf~BLQ6@%9IJ0QhqPsmDT$&C>cm|~OcfRm`m-db#TwT_u$vtUGc zP>J(x@;{g&=7228{O>bnNY>Mwx9cU{VcLyR_f)fs)@>fc{QOJxA+Ok}QAgaO%#oEF z&jE$^ya!nLhUF*}h3|Yqo-D>9*>{cLKFPO;PII=~gNAPce7xWNg8bPB7k@#0=^74~= z{!Ssbeod1RH(}rO*H2qDCueeCO=3p_Ts4!wa zsCK@T@!qgR4+rZ5`NTeo9TLs>~BT7Cb=|M6h*GT>*x5de>ek9AYa~1%fL8Y87H?!($P4TW5lG4 z<4u=|5q<)$6%1xft~d$gAYp$5BeKxtvx?jMSK7PTvBpJuFH%#8{3KigiM)qhkN>x_ zmk{y#gPn%wZTW<|inc+X&>fz&TcXjaKQNq!VQKazf^fX5`}0k>%mR>DKGocx8zK?%2!{)vIR7lX5aM?ZNs< zZ+>Dh@8_|o8qc7*zv;}~9IOxIEQ>TfAOOxA{}=@09Ks^Xd~nF`r5P%uM0#&)w1VCvKHMeL*=Z z#`%63h*sdf?a3pPQQ2a!PU&V3e4x2|oTkOMEr-ejRQF}b7tOfpCHT>nR)ort|c&k}#wY!h7JfN*o=tS_D? z;d_}KkH-t4&X2a2QH>U=t@ua#Yjb9GE+>T}k#4hTdtqBG5k}f-w=!VunTeOZKLEQI zmdwjIpB${%wnOPUhaDmuG+j`zu+?d@tdc{QveJF3q|i#meJgFee82-|#K$=kxg>lBO42#~ij;J~Nl<*g~@ss3e{k z1$3T1Pae*`G*3w9*)%2yJMEr`2gS|vHt_AI`1~iC8ZRaUHx>-2Uaz%zM?I&A7IIb_ z``c^*yVZe8XEbrYl0yk}G};hAH!*ay?D=0@$tip0i1^OV0(QBhm>;3%5>DS?f<&`` z?(abI9dDDYn77+-(RUjV;@VHw@SZB;eV8`0+=<@J9w{}Nc-y^`qh&9G_f zN)hZaD?^dbMiD-8kAvo*nVVkjPZgi$`ORZ#<;0E3!5VE0Kpc)M7^qQj`9U+Lkpqno z1=6D(F@7ekH`fTA12PxJWdyH3m)=2&x$yv8IXBJtlctV6})P@zwT5l z`irzIv1S2lVs`&r(qy5VS2o2qH-&VGXpEmfRKGYWOtLV823`;DY}AjF4Jk-MpMx2c z?M$&LS^w3$j?yh%G*=fZ{Q5&g@9}Aojc#HbP-Vp|zSTRJ z^D}0EMEO4Ja+9CmKE^x{x+-gr@CjE{F#InJZU}%JDRlJ zC`SF;J5QZMm4ZKcOByJ`>P3heZ#DJh&AWy}Oxa&!;jLkk_iE8;MPf?lBYiBxf-Tn! zIf=iuBj`u`FPAo|JLY07v9G@lqyAozD10iG_2mUr${KtWqd9Y5EK#vyb7LfHdp2vy zbim&Xx^Y=j7Q9&i7tJKw69v&2b4MLNVo$=+(z5;PeA`ZWDZOvVOhJ`r33->574j>b z_jKm2>9R^WateQIS7e+R=0f(C!SAQLIGj+85Uls}bu)pg&sr`*3s%JXnSik~zR+k7 zD0^srmxW?8A3BZN${L0IV!21KfQtJ)@U>~`A0#}rA^q>?9>IUHWe@TIGelI@yX(`5 zJJ7;^R**SJW&MDYz0pz!LaL0sOKzu7A_(kD;*L zzYTObF?-9AM(=l=Pfa0Azsmuvz5?>!W9%mB0n?9!Jpd&Z<9T>sEEW#KzSqJX2zL*K z*E86KqTlo4e0I`a2nR)<;F~$L#{AU-q!-`a6L-47fv@Bkkws;zt|AA%mc@&-iGk(=pvp^}bQ+shJPW6I)aAH^ zzM<2ZU|q58XE$3Vt%eVxiK9`L{7OHX4eSv&E67F%-Jy?`rXVn`7haJ*<{YV5g0RP3 zXhbh)ALE;NCzviIv0a)0M|LRg8moB#eOeeJ5*CV4dj4ov)J3*rLG;<>wG(f5Qyvov z;M;XpIOo?rZa@i~xc2COtV?L`pt=4v4^}xI6*$1zdaeNJ8YG_G$WlcfpMJNREnz!q zfT@U+oR$Ld_CZZ>O*LXhsbeMKm(3I6X!z4xhkvG#fF^eTPkjDhk{vRJhG?+*nZgeO zAebtPHB$bAQad4||9!*&QR}E}DZ3E^fC&!4Rv6E^zoWAt?HnAN+5+VtO@Mz;x3sGkCRRF^dK8evTiPzuNH7C(z487~4ks`nyV3PRav*gUl2B~~V7p9HO)cp7!TZ^R>V zt0On&WeN$~>wp-1n?T2x%lO~;Y7pTWGQ4sZG`ZpMnX&BPv-+vB69HN|-g)r+AqE05es;1C&E0omJe|pFfBAovo}u6$Dx#qA z|A&M*8WMEd@aV2Yue{v}&cWPko!z7MA=7MH`7!nxyP{)2$2G%Dx3ud-Od%O-hwzgA zvhvnRXH5AS+#O_{xY*#~s^h+4{;#}REuF`1^Zg zkZ5F)G`Yd&decO}BaKGZBajt@lsdHxLX9vKh9|(4d^Af7r zo*J#|Vq|62&(I`XW4Po)_Add2ic3J;_&kX`^V5J5d`zD@6g!f0Z{?YgYQt#UkJUqt zp-1Tg+HApt(sVLv=XerY`K-ick#OFa%X`ILgFRiD37Xy)62@}m`AY&@7RjCaz9MR0 zLuNl{DIV6te9Za6RuQ{!!8WZwhKVv3BQ;kSaLQZD{M)+&mB?rA#|=`yvG%~oXlmx% zu-9K}D8U|YFUgyNhTFfrp12AcZsNbw+qLkEZ| zbm|IPe&Z>7o;cflxM8Z=_Tb4bzDnZ0XVP>$IS)*oCg|)ju0fPCJdj5zgIDD!;M(SR zLO#VgB>(+0(M#ksh4Nc`U{-O*^u5%7Fdm=XaVb*8 zX?$n7z5Njwe8($cA1;C zs$b3c#mReVmsPv0PFe0d79z;2su%i6Ci!qE+Wu%=%&?4|e`3ksD${BuYn}i8f#5)| zcW=Wb_ow$Co7v4($xi+RR1mLh7ld45mbsp5sm;+beEI6pN#;X$>N+CmuuDM*J)mYf z2p9EA%akRf1ZK5m{-Ys243Qmx;Mxx=0XFcfm-MY{=EHYOIbDWLG89`cW0dr`sOm6{ zgd?zsyTr7)8PIQg!D@xm`FX=8ekVrk^%Jknw<~z%W*l&zl(uqf!IwwS< z4V>u{=$-$8z+dUkNV(1TdRhyQr-sECuALP#hCrql#sFVBha-|mBDls0>LIShNanR? zIs{EJ_9d{^)brU79QN`47T;5z8o~%-`g~**BwNvmT^_a(da=%kfyCcXHX*(JWwJrJ zVgfTKYT*?(jNP}kLx+oZ?WPX5t1myCb-!%}J*Z=riG^QTBWY#_@O8K3q(1T1AlBBM z0~}!$h;hqi8I!R{Ni|Tu65sdkCN=m^6;XG++PRSncUveI+c$?#P`Mxm7k?C88WJs0X-?GP343?u{d4UB}&?vpGnmGD++$ zh(9?q^U2^fLX@I^h}t(n`C|4oV+L@8YILd)J@w|;5pCwhkOh41-?Gu@F?l+&C71MU z#j9u7zY12lGnf+(Dm?WMkTnc*5e2@Zop|{I1A?Chh6T@ zfM)11iH;kFnIKj7I1?>79K^Byo2fKVJz&|J)UmD|-1)+gKflHGUUe|%$E1U#W|@!# z_V@CiBcPLOD{f9y@~z_&d5Hc)t5@Sq*kN2nxzm1ep7{coc+^h+}^O!a#S z{QlHq%&ix{X+*y!!O@tl*e$s*rGKViY6K~8ktGh#+~{xj7NatTwwCFj&E4KVHRY}9l)8lHjZG7{==Ux*J0q0g+{<$Ee`}qA zDo|)|Md2Xuk#}pgv8c@=5E@=(Ox->vAm^pfH8#PPd+_U0Panqr05vo&9T{{+on%fky8UUVsig0)>UF^^H0c zj7IM(5b``>nqZ^xfx0n0lfGV%_Z%u_^3aq%dLc-^t(mou*4Rz972)L=LwK0fd{=1S z>T1StgL976NLp*!7+y&(mS#@8V+{2q-gOdUh*sb*GO?aqGO^G73?XD%@7L!?eOpTk zMB0qNPcZWE7960w;Enx$$FVw~ns~I~9wAQ9%I3RjIPsZm>|(w^p)-(IiCB3*{8_bN zVvatEWx(YfaA5=(c&ZUJT(2U`=s7Ec8}n|IMYdLq4Er72b6_l9Gw&BKFu| z6?}LMA^x_5ibbn&*N=bwMf9U<*g{J7z#QA&*k@1~BLC@C^(fe0YrAKEeZc#;tQ?Dw zRSW)m>-)FUWNTrGgGOGm1EPmB_kv*PkR`#$DK~49vbR7 z`lvUcn4a{dVOsf3?G6)wy9S{}V)2kaH<`TJ-IBs`cw;s1nHhH`F?re)fXQorctjWF z-sXXF=9|5Tzav^MZ}X~%*SGCvu2;YZ8RiBQn;?D*%v3*=cJu50GOKnA+m9HkLU}8<0PEiR~Ucg=HJ4bhE?~59v z@SGEBrv}SkZ$T&PkH%PZ1Sn8}B)iZMm#U!$w~lj59bt6&49^~Z2S$i^MQRJ|6fr$2 zY?2f7myl7t@rETGciZPiuPL2M2YvH()9j!edpgw#qUTDEe^lQ5SiA0Jhj@(BI#Il%%t@Sr^d&HD;T7T;O z*`CFmmU$Uq|II_58D*FB0O`o|TSiU65Fx-&*TBX<3_5AO%mv(O^J*FHFoJ}dm>eo( z(Jd1~fkbPWhV1sN3jFr?Rp%PK);H53^$zUS)eNg)-8I$PXTttt_W_UZ8;YvNs{R|1 zIE#j8V&KQmyN#s+Vv)}DoGUwL@Xm5{Igm*vwkAs!qnWh?xJ-@*uTW!Dr%rjHnckq8 z({z~HH-n9pE|)q!uf2A&koz|Li_0qNHRtL@%#DoaTRgS%HsTfV(JEZPk&LP|>JJZR zWT730&Ttf+;UNW(@JvfthXjO3{hnF?4K?=pX;V8piaBP!eP|Dvf62AG^;!S;fGWr!BojGy!5@j8J0_w1dmp`0-}80>0BIyLx^PHHSBFuMX?kp=eQR zoVmekx!n-b@$LD=A2TewTb&;(6I4UrGVk)AIG#QA<=T`gZhy~nf!>16JN%dOouF%m zuaRpVw4)u*>!=&P?Num8lIvhcy(W#X4uVSy*D{@6K8>_Fd@ouKZ^HA@(9ab&k`wE0 z8A2wo+Y0JoM(3RWNngE?#*{%Wp8)9lEH%QTzl!AQ7pE0III8t z+Hc8ht5o3O-H7fw`*sRI<+PpaAAT9YhkH=LK8%i1je8}%7Xp8O-X<@EP^bGHVvSSJ z77QBX*Pp6g7g2T+A=ahH+OmI0Iau}I#X-_@;5bIm31`cFlc_#U_KTo}I{hX#@BRVb zQ|(_Za|iJ+*1`nF5MDI0diI8m;5?4S5(m>SY?z#DQWQCE8j_b|AuRO3JhsoT41HJB zxjP$|PH5^8QTsZLFU2y&tG3UYE(u|Nu&e&pU+0!D7h(A&?c$=$Jyb6Q6s7MCIqViE zDw?Fs`qW}_#>`YTuWwsf{)2_VKdIh8{Ttamm%O{GSUdHSti&-B5b};CW5)6(EfbsC zslmH&TXnn8K@!ChcGPQMt*d?sS>c_Sip}_KwO>vA_6~pgr5AC>XZl~*tR=-=4LM$YIiDBQ`M45L+oudI10{UWPE?@F6+i(1lP{WvdCO2NFb+#jjUfH ze_uOijs_rG)2>R_$i)F`ny|@ z)~IRx!4|3Oi+q8*CWBULvlSSfGmgi288{8Px}I5LBulmt*D({te9emwM4ri~80Ds} zbXotXJ^NK$%sirN4?y_#vTWM{UOYH5lk@ES^uf*66=&AmBZk}m?Q=fnDxCVU;jHrR z((h|2dQS^8`cH*SQRN=^%Df_5#5X*DSn@qx0a@bk=J7_zbbtDu78@Ysw+hQpC2XsJ_})_q^`C~zDp1EkmuIyE0V4|5=YiRmm{=N zd-K4b93Jb#-G>$?Y}bUM_txn`DUjR|UO+W!!48BF}Q54Oyb_dR+4pZ^?0n9j>Obe(yfMn`{_ P24ik)ZB%RE9smCU1!CK0 diff --git a/test/qad/icons/qvariantedit.png b/test/qad/icons/qvariantedit.png deleted file mode 100644 index 9376a9f897749197b72f773c18a651042fd66846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1247 zcmV<51R(o~P)_LamDq6``REFKtSi(+MIG7fq14Y;$f_ zE~jH@MczYDCruCFWn7e#3SNlNGUmz~iY(OR;-n*o%Q?TNKS(SD@%iW7-sii|``!1w zDfBCI)_Gidx~cy*if7e^4I8lA?dbJ-bUGa(LS|-WUtbxqs^$fdFcDh)!ozP|h<6ur z)>$or6QFVPWQHiM$z;+sH8pkpcT&@kJ)xr^d*V+hv^8J)HO8EEK2{N4Y}`Bm5>p)w<6#c5sdcyh^8Zo7;CT*>3@s-hKA_Twd6m9;?n>ool*Ov|mHs;Y5$g{!FI z`qXJiX$K&5+B@m1*IS$y4$t+F>uKu%D!$PV>@+C-IHqM4j~7TZE?V)q zc>Gov(P=V|mdYIg0&qE(VFNlgCRp*c-KXihX#_8;FyeHMypuEiYH<4TKJoRvV4Ts| z^{~2nk)_JRZA1V>zGd4APlV$xj*V&MT7aOm@-GY@m$?{I%UvG#3bR1Oq5!nk zE*8CEROiKg!@CZDMl^slF?b9BL8)bPgHlT80R*O&KG`%`2*9n9aUT|Kdr!uOzVhgH zvA(&t7s;MapK%&YsippbDJ9zUW`?+0ZU6joN{;PEC5b!f#GvD2|$}|SVBR0w|#A*OZ(@A zla5~gGg!vW+&EwqN?=kkJ*ukJDav?(DL@W@>U2m;{`@|nz0$CAZJs{q?tNQNN}Q=C za_KKqhrGi6iG{BIi574F#KIx~za@wIa%($+=Hf;?x~n|zxqFT6uxtvEd7-={HjAeG zE4M+Jy1=Aj9FCrzmi+k-{FWSSF(e#(zd3K7#V7s;v?A0gx3u07KI8Y*R0Ws~l?40z zed5qn+RJw*Yh$yz1_dhsV^XbL+a81OB8!Kjb<~QG-MViP)UHBO$&BWN*6WIg(6*8+zAyF1s9gA zTuCLXRO27eG+DSR>QK6JVNHk?n%Y;|Jep*Z%)>?Q#3m%wE?hWpm@{+FeD|F1ocj&@ zZ!$&i z1w1)9X-1<_GMNmqSPZ}4Z?>aC0x)#YH4{UlW_km4RzsPan`R#yD-_x7{Ijdzxyu(CxKIK@akh}&FoX43~U_+*0oxs{u}rm zumWrVxfYfOo&#qr&K^xqPt)JuPb3mSuZpd!jhWBP%+TH4O-DxuE|;sZbcX|v$3rX@ zdk_c&UR%JkOG`@+RaM2}*aS3PY#@LWi3I6%8d;WcI-L!`vMkfv+l$xh4FR%4aPmS? zlsAf^TpAe}SunI(upy|hGM=BGe+Hz0J)qQrV;wjEN)~WYoT%EW4(}Jn80dk(s{t;b zt$&yTk|MUyrg;^hXcN1Xfh@3VHP6s$&1;(DJpsB2{2U)2Uv<0PbsHTW{U+A4wnHUU zfMTgsBAZ`ldw+%W1{88oDc6AuqSQQ)4~0UK&*!7Fvy;KWLBip%WQkPs0Wp)wq_X^3 zVe<#*n`;293fVM7$p9=aE=oS1k7zV{W6M&&OW-YMMGtm_Up;M1&07*qo IM6N<$f;_NclK=n! diff --git a/test/qad/icons/sql_table.png b/test/qad/icons/sql_table.png deleted file mode 100644 index 9da26eb80cdfbf45c365b0ac40c2a73acfcba33d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1405 zcmV-@1%mpCP)*IUs>>O}+pC1qw+- zK~y-)rIl-JQ*{`|pL6MbbF8G!Wnq-zx|GS-1$R+4OfZrx5|a@m%*4b*6a6Cl;y0b> z5*g7CVgiOlAyG(lEJG!O1RWc~gt0ja^rpTbi2if3&;n{R0b;yG&8C?81ff83647Yyh~2`S?e0MF1_cv$G(CptyLY zZZsM%0>}VhPXx~8a)rl^9ets$uC~VG@qhs+D=RHLb$W14lBD3m!ouaBem>zLgltn3 zWtFCB{3F4VBz3E*dd20cI#*d)Dfs;X^zQo{gb;8%XE}WM+X_ieK7Z}n^#)4mFO<^j z*=%-LmgS~@1<%jVTOyIj6;)L~Q55A_qUJGj?gETvD}EpS175EWtIAfvY&O9k@WWng zM=qBGA*3*$&$kgmE-fr9?7Tn2C8?_V6@Yp|2#d#KT+MUqQCeDxH{W^(wd<>qBRL47 zfZ5qO+`c`9uC6XIZ7!gr4R(+hfpXqvuv||zhBjLU6f@Bx~?Ocl(2Q{D>yqm zjQ;+96cs)Ni`9ynni_1}xDf_}0lKb3*L5h00znWU2m(}9J--Zm=FAyQ6a^s=@Z-Dh zkD|A?7x7pO>2wBFRaLOrY%mxMV2pt=23^;oX&N+51IGcPXn>|^NF);8rBUqp^y8P) z8Ce(}9zkEf+`V%Lm6a|C0uRRS#g^mlHOUx*!1K^4g{Em>j3J#) zV`5?gx~}uWXM1}-c)FzIi?hEC3xE2qp|QCU9UZUXs>h4Aw#|Rn#=&Yf!(=kTXfVKN zG(r>vPzDHs0E@+f@$qqR90#x03%A=nCzh0yyqikPAgYF@mPWkv(q;_(I*e>q!Q9*& z8XFq{0Lf$$X0v&z+I&8ba)$${R0=~wLl_$y!@70rP+3`tcsy(An9EBS((FYPBMfNT8~!idz=9o}QkZ!C){^O5yYQuw}~@w70h-o6RB| z4#RG@-_I#zS%%x~h9pVo@9)Rt z7i~7%nj1H6V8@OfsI9GqrfEyZkjZ4Asw%8jE1XUznwpvz&-2{CzyL&1q!SYpJ%fXT z-z)MJ|^Mx~?M@i^1V=ps1*biK57*(`h)JP9zcu?&Qgn zh(sdeGcz-!0B{spS5t2ec_wr+Deo$Hgyq{HQMSy!xBAw(h(H53YEtXAv1 z-|rvycsv7vK*0Z?mwU_)#W@@fldkIqN+~Z0f=&ogQ>j$`zYKo?F5{a@VTFNf00000 LNkvXXu0mjfEggno diff --git a/test/qad/icons/tools-wizard.png b/test/qad/icons/tools-wizard.png deleted file mode 100644 index 0101c36f8d9f2458bfe1c3950a8ca914ba6e8eaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39007 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

    touchbutton.h
    - - - touch_bar - QProgressBar -
    touch_bar.h
    -
    - - - - diff --git a/test/qad/utils/CMakeLists.txt b/test/qad/utils/CMakeLists.txt deleted file mode 100644 index c6c681c..0000000 --- a/test/qad/utils/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -qad_project(utils "Gui;Widgets" "") diff --git a/test/qad/utils/chunkstream.cpp b/test/qad/utils/chunkstream.cpp deleted file mode 100644 index 8c30120..0000000 --- a/test/qad/utils/chunkstream.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "chunkstream.h" - - -void ChunkStream::setSource(const QByteArray & data) { - stream_.setVersion(QDataStream::Qt_4_8); - data_ = const_cast(&data); - _init(); -} - - -void ChunkStream::setSource(QByteArray * data) { - stream_.setVersion(QDataStream::Qt_4_8); - data_ = (data ? data : &tmp_data); - _init(); -} - - -void ChunkStream::setSource(QDataStream & str) { - stream_.setVersion(QDataStream::Qt_4_8); - str >> tmp_data; - data_ = &tmp_data; - _init(); -} - - -ChunkStream::~ChunkStream() { - -} - - -void ChunkStream::_init() { - last_id = -1; - last_data.clear(); - buffer.close(); - buffer.setBuffer(data_); - buffer.open(QIODevice::ReadWrite); - stream_.setDevice(&buffer); -} diff --git a/test/qad/utils/chunkstream.h b/test/qad/utils/chunkstream.h deleted file mode 100644 index e873395..0000000 --- a/test/qad/utils/chunkstream.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef CHUNKSTREAM_H -#define CHUNKSTREAM_H - -#include -#include -#include - - -class ChunkStream -{ -public: - ChunkStream(const QByteArray & data) {setSource(data);} - ChunkStream(QDataStream & str) {setSource(str);} - ChunkStream(QByteArray * data = 0) {setSource(data);} - ~ChunkStream(); - - template - struct Chunk { - Chunk(int i, const T & d): id(i), data(d) {} - int id; - T data; - }; - template static Chunk chunk(int id, const T & data) {return Chunk(id, data);} - - template ChunkStream & add(int id, const T & data) {*this << Chunk(id, data); return *this;} - - void setSource(const QByteArray & data); - void setSource(QDataStream & str); - void setSource(QByteArray * data); - QDataStream & dataStream() {return stream_;} - QByteArray data() const {return tmp_data;} - bool atEnd() const {return stream_.atEnd();} - - int read() {stream_ >> last_id >> last_data; return last_id;} - int getID() {return last_id;} - template - T getData() const {T ret; QDataStream s(last_data); s.setVersion(QDataStream::Qt_4_8); s >> ret; return ret;} - template - void get(T & v) const {v = getData();} -private: - void _init(); - - int last_id; - QByteArray * data_, last_data, tmp_data; - QBuffer buffer; - QDataStream stream_; - -}; - -template -ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk & c) { - QByteArray ba; - QDataStream bas(&ba, QIODevice::WriteOnly); - bas.setVersion(QDataStream::Qt_4_8); - bas << c.data; - s.dataStream() << c.id << ba; - return s; -} - -#endif // CHUNKSTREAM_H diff --git a/test/qad/utils/plugin/CMakeLists.txt b/test/qad/utils/plugin/CMakeLists.txt deleted file mode 100644 index 283b630..0000000 --- a/test/qad/utils/plugin/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -qad_plugin(utils "Gui" "") diff --git a/test/qad/utils/plugin/qad_utils.cpp b/test/qad/utils/plugin/qad_utils.cpp deleted file mode 100644 index 0b70ed0..0000000 --- a/test/qad/utils/plugin/qad_utils.cpp +++ /dev/null @@ -1,16 +0,0 @@ -//#include "qpiconfigplugin.h" -#include "qad_utils.h" - -QADUtils::QADUtils(QObject * parent): QObject(parent) { - //m_widgets.append(new QPIConfigPlugin(this)); -} - - -QList QADUtils::customWidgets() const { - return m_widgets; -} - - -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(qad_utils_plugin, QADUtils) -#endif diff --git a/test/qad/utils/plugin/qad_utils.h b/test/qad/utils/plugin/qad_utils.h deleted file mode 100644 index 4c825f5..0000000 --- a/test/qad/utils/plugin/qad_utils.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef QAD_UTILS_H -#define QAD_UTILS_H - -#include -#include - -class QADUtils: public QObject, public QDesignerCustomWidgetCollectionInterface -{ - Q_OBJECT - //Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface") -#if QT_VERSION >= 0x050000 - Q_PLUGIN_METADATA(IID "qad.utils") -#endif - Q_INTERFACES(QDesignerCustomWidgetCollectionInterface) -public: - explicit QADUtils(QObject * parent = 0); - virtual QList customWidgets() const; - -private: - QList m_widgets; - -}; - -#endif // QAD_UTILS_H diff --git a/test/qad/utils/propertystorage.cpp b/test/qad/utils/propertystorage.cpp deleted file mode 100644 index 794a32c..0000000 --- a/test/qad/utils/propertystorage.cpp +++ /dev/null @@ -1,165 +0,0 @@ -#include -#include "qad_types.h" - - -bool PropertyStorage::isPropertyExists(const QString & _name) const { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == _name) - return true; - return false; -} - - -void PropertyStorage::addProperty(const PropertyStorage::Property & p) { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == p.name) { - props[i] = p; - return; - } - props << p; -} - - -void PropertyStorage::removeProperty(const QString & _name) { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == _name) { - props.removeAt(i); - return; - } -} - - -void PropertyStorage::removePropertiesByFlag(int flag) { - for (int i = 0; i < props.size(); ++i) - if ((props[i].flags & flag) == flag) { - props.removeAt(i); - --i; - } -} - - -void PropertyStorage::updateProperties(const QList & properties_, int flag_ignore) { - QVariantMap values; - foreach (const PropertyStorage::Property & p, props) - if (((p.flags & flag_ignore) != flag_ignore) || (flag_ignore == 0)) - values[p.name] = p.value; - props = properties_; - for (int i = 0; i < props.size(); ++i) { - PropertyStorage::Property & p(props[i]); - if (values.contains(p.name)) { - QVariant pv = values[p.name]; - if (pv.userType() == p.value.userType()) - p.value = pv; - } - } -} - - -PropertyStorage::Property PropertyStorage::propertyByName(const QString & name) const { - foreach (const Property & p, props) - if (p.name == name) - return p; - return Property(); -} - - -QVariant PropertyStorage::propertyValueByName(const QString & name) const { - foreach (const Property & p, props) - if (p.name == name) - return p.value; - return QVariant(); -} - - -void PropertyStorage::setPropertyValue(const QString & name, const QVariant & value) { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == name) { - props[i].value = value; - return; - } -} - - -void PropertyStorage::setPropertyComment(const QString & name, const QString & comment) { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == name) { - props[i].comment = comment; - return; - } -} - - -void PropertyStorage::setPropertyFlags(const QString & name, int flags) { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == name) { - props[i].flags = flags; - return; - } -} - - -PropertyStorage::Property PropertyStorage::parsePropertyLine(QString l) { - PropertyStorage::Property ret; - QString pn, pc, pt("s"), pv; - if (l.contains('#')) { - int i = l.indexOf('#'); - pn = l.left(i).trimmed(); - pc = l.right(l.length() - i - 1).trimmed(); - } else { - if (l.contains('(')) { - int bs = l.indexOf('('), be = l.indexOf(')'); - if (be > 0) { - pc = l.mid(bs + 1, be - bs - 1).trimmed(); - l.remove(bs, be - bs + 1); - } else { - pc = l.right(l.length() - bs - 1).trimmed(); - l = l.left(bs); - } - } - pn = l.trimmed(); - } - if (!pc.isEmpty()) { - pt = pc.left(1); - pc = pc.remove(0, 1).trimmed(); - } - if (pn.contains('=')) { - int i = pn.indexOf('='); - pv = pn.right(pn.length() - i - 1).trimmed(); - pn.truncate(i); - pn = pn.trimmed(); - } - ret.name = pn; - ret.comment = pc; - ret.value = QVariant(typeFromLetter(pt)); - if (!pv.isEmpty()) { - //qDebug() << "set value !" << pv; - switch (ret.value.type()) { - case QVariant::Bool: pv = pv.toLower(); ret.value = (pv == "on" || pv == "true" || pv == "enable" || pv == "enabled" || pv.toInt() > 0 ? true : false); break; - case QVariant::Int: ret.value = pv.toInt(); break; - case QVariant::UInt: ret.value = pv.toUInt(); break; - case QVariant::LongLong: ret.value = pv.toLongLong(); break; - case QVariant::ULongLong: ret.value = pv.toULongLong(); break; - case QVariant::Double: ret.value = pv.toDouble(); break; - case QVariant::Color: ret.value = QColor(pv); break; - default: ret.value = pv; break; - }; - } - return ret; -} - - -PropertyStorage::Property & PropertyStorage::operator[](const QString & name) { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == name) - return props[i]; - addProperty(name, ""); - return props.back(); -} - - -const PropertyStorage::Property PropertyStorage::operator[](const QString & name) const { - for (int i = 0; i < props.size(); ++i) - if (props[i].name == name) - return props[i]; - return Property(); -} diff --git a/test/qad/utils/propertystorage.h b/test/qad/utils/propertystorage.h deleted file mode 100644 index f8e4490..0000000 --- a/test/qad/utils/propertystorage.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef PROPERTYSTORAGE_H -#define PROPERTYSTORAGE_H - -#include -#include -#include -#include -#include -#include -#include "chunkstream.h" - - -class PropertyStorage { -public: - PropertyStorage() {} - - struct Property { - Property(const QString & n = QString(), const QString & c = QString(), const QVariant & v = QVariant(), int f = 0): - name(n), comment(c), value(v), flags(f) {} - bool toBool() const {return value.toBool();} - int toInt() const {return value.toInt();} - float toFloat() const {return value.toFloat();} - double toDouble() const {return value.toDouble();} - QString toString() const {return value.toString();} - QString name; - QString comment; - QVariant value; - int flags; - }; - - PropertyStorage(const QList & pl) {props = pl;} - - typedef QList::const_iterator const_iterator; - typedef QList::iterator iterator; - - iterator begin() {return props.begin();} - const_iterator begin() const {return props.begin();} - const_iterator constBegin() const {return props.constBegin();} - iterator end() {return props.end();} - const_iterator end() const {return props.end();} - const_iterator constEnd() const {return props.constEnd();} - - int count() const {return props.count();} - int length() const {return props.length();} - int size() const {return props.size();} - bool isEmpty() const {return props.isEmpty();} - Property & first() {return props.first();} - const Property & first() const {return props.first();} - Property & front() {return props.front();} - const Property & front() const {return props.front();} - Property & last() {return props.last();} - const Property & last() const {return props.last();} - Property & back() {return props.back();} - const Property & back() const {return props.back();} - void removeFirst() {props.removeFirst();} - void removeLast() {props.removeLast();} - void removeAt(int i) {props.removeAt(i);} - Property value(int i) const {return props.value(i);} - Property value(int i, const Property & defaultValue) const {return props.value(i, defaultValue);} - void clear() {props.clear();} - - PropertyStorage copy() const {return PropertyStorage(*this);} - int propertiesCount() const {return props.size();} - QList & properties() {return props;} - const QList & properties() const {return props;} - const PropertyStorage & propertyStorage() const {return *this;} - bool isPropertyExists(const QString & _name) const; - void clearProperties() {props.clear();} - void addProperty(const Property & p); - void addProperty(const QString & _name, const QVariant & _def_value, const QString & _comment = QString(), int _flags = 0) {addProperty(Property(_name, _comment, _def_value, _flags));} - void removeProperty(const QString & _name); - void removePropertiesByFlag(int flag); - void updateProperties(const QList & properties_, int flag_ignore = 0); - Property propertyByName(const QString & name) const; - QVariant propertyValueByName(const QString & name) const; - void setPropertyValue(const QString & name, const QVariant & value); - void setPropertyComment(const QString & name, const QString & comment); - void setPropertyFlags(const QString & name, int flags); - - PropertyStorage & operator <<(const PropertyStorage::Property & p) {props << p; return *this;} - PropertyStorage & operator <<(const QList & p) {props << p; return *this;} - PropertyStorage & operator <<(const PropertyStorage & p) {props << p.props; return *this;} - Property & operator[](int i) {return props[i];} - const Property & operator[](int i) const {return props[i];} - Property & operator[](const QString & name); - const Property operator[](const QString & name) const; - - static Property parsePropertyLine(QString l); - -protected: - QList props; - -}; - -inline QDebug operator <<(QDebug s, const PropertyStorage::Property & p) {s.nospace() << p.name << " (0x" << QString::number(p.flags, 16) << ") = " << p.value; return s.space();} - -inline QDataStream & operator <<(QDataStream & s, const PropertyStorage & p) {s << p.properties(); return s;} -inline QDataStream & operator >>(QDataStream & s, PropertyStorage & p) {s >> p.properties(); return s;} - -inline QDataStream & operator <<(QDataStream & s, const PropertyStorage::Property & p) { - ChunkStream cs; - cs << cs.chunk(1, p.name) << cs.chunk(2, p.comment) << cs.chunk(3, p.value) << cs.chunk(4, p.flags); - s << cs.data(); - return s; -} -inline QDataStream & operator >>(QDataStream & s, PropertyStorage::Property & p) { - ChunkStream cs(s); - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: cs.get(p.name); break; - case 2: cs.get(p.comment); break; - case 3: cs.get(p.value); break; - case 4: cs.get(p.flags); break; - } - } - return s; -} - - -#endif // PROPERTYSTORAGE_H diff --git a/test/qad/utils/qad_types.cpp b/test/qad/utils/qad_types.cpp deleted file mode 100644 index 365a86f..0000000 --- a/test/qad/utils/qad_types.cpp +++ /dev/null @@ -1,275 +0,0 @@ -#include "qad_types.h" -#include -#include -#include -#include -#if QT_VERSION >= 0x050000 -# include -# include -#endif - - -bool __QADTypesRegistrator__::_inited = false; - - -__QADTypesRegistrator__::__QADTypesRegistrator__(int) { - instance()->_inited = true; -} - -__QADTypesRegistrator__ *__QADTypesRegistrator__::instance() { - static __QADTypesRegistrator__ ret; - return &ret; -} - -__QADTypesRegistrator__::__QADTypesRegistrator__() { - if (_inited) return; - _inited = true; - - qRegisterMetaType("QAD::Enumerator"); - qRegisterMetaTypeStreamOperators("QAD::Enumerator"); - - qRegisterMetaType("QAD::Enum"); - qRegisterMetaTypeStreamOperators("QAD::Enum"); - - qRegisterMetaType("QAD::File"); - qRegisterMetaTypeStreamOperators("QAD::File"); - - qRegisterMetaType("QAD::Dir"); - qRegisterMetaTypeStreamOperators("QAD::Dir"); - - qRegisterMetaType("QAD::IODevice"); - qRegisterMetaTypeStreamOperators("QAD::IODevice"); - - qRegisterMetaType("QAD::MathVector"); - qRegisterMetaTypeStreamOperators("QAD::MathVector"); - - qRegisterMetaType("QAD::MathMatrix"); - qRegisterMetaTypeStreamOperators("QAD::MathMatrix"); - -#if QT_VERSION >= 0x050200 - QMetaType::registerConverter(&QAD::Enum::selectedValue); - QMetaType::registerConverter(&QAD::Enum::selectedName); - QMetaType::registerConverter(&QAD::File::toString); - QMetaType::registerConverter(&QAD::Dir::toString); - QMetaType::registerConverter(&QAD::IODevice::toString); -#endif -} - -__QADTypesRegistrator__ __registrator__(1); - - -QAD::Enum::Enum(const QMetaEnum & meta, int selected) { - enum_name = meta.name(); - for (int i = 0; i < meta.keyCount(); ++i) { - enum_list << QAD::Enumerator(meta.value(i), meta.key(i)); - } - selectValue(selected); -} - - -int QAD::Enum::selectedValue() const { - foreach (const Enumerator & e, enum_list) - if (e.name == selected) - return e.value; - return 0; -} - - -bool QAD::Enum::selectValue(int v) { - foreach (const Enumerator & e, enum_list) - if (e.value == v) { - selected = e.name; - return true; - } - return false; -} - - -bool QAD::Enum::selectName(const QString & n) { - foreach (const Enumerator & e, enum_list) - if (e.name == n) { - selected = e.name; - return true; - } - return false; -} - - -int QAD::Enum::value(const QString & n) const { - foreach (const Enumerator & e, enum_list) - if (e.name == n) - return e.value; - return 0; -} - - -QString QAD::Enum::name(int v) const { - foreach (const Enumerator & e, enum_list) - if (e.value == v) - return e.name; - return QString(); -} - - -QList QAD::Enum::values() const { - QList ret; - foreach (const Enumerator & e, enum_list) - ret << e.value; - return ret; -} - - -QStringList QAD::Enum::names() const { - QStringList ret; - foreach (const Enumerator & e, enum_list) - ret << e.name; - return ret; -} - - -QAD::Enum & QAD::Enum::operator <<(const QAD::Enumerator & v) { - enum_list << v; - return *this; -} - - -QAD::Enum & QAD::Enum::operator <<(const QString & v) { - enum_list << Enumerator(enum_list.size(), v); - return *this; -} - - -QAD::Enum & QAD::Enum::operator <<(const QStringList & v) { - foreach (const QString & s, v) - (*this) << s; - return *this; -} - - - - -QString QAD::IODevice::toString() const { - QString s; - if (__QADTypesRegistrator__::instance()->toString_funcs.contains(qMetaTypeId())) { - QVariant v; - v.setValue(*this); - (*(__QADTypesRegistrator__::instance()->toString_funcs[qMetaTypeId()]))(v, s); - return s; - } else { -// s += "IODevice(" + prefix + ", mode="; -// int rwc = 0; -// if (mode & QIODevice::ReadOnly) {s += "r"; ++rwc;} -// if (mode & QIODevice::WriteOnly) {s += "w"; ++rwc;} -// if (rwc == 1) s += "o"; -// if (options != 0) { -// s += ", flags="; -// if (options & 1) -// s += "br"; -// if (options & 2) -// if (options & 1) -// s+= "|"; -// s += "bw"; -// } -// PropertyStorage ps = props; -// foreach (const PropertyStorage::Property & p, ps) { -// QString vs = p.value.toString(); -// if (p.value.type() == QVariant::StringList) -// vs = p.value.toStringList().join(";"); -// s += ", " + p.name + "=\"" + vs + "\""; -// } -// s += ")"; - return s; - } -} - - - - -QVariant::Type typeFromLetter(const QString & l) { - if (l.isEmpty()) return QVariant::String; - QString ft = l.left(1); - if (ft == "l") return QVariant::StringList; - if (ft == "b") return QVariant::Bool; - if (ft == "n") return QVariant::Int; - if (ft == "f") return QVariant::Double; - if (ft == "c") return QVariant::Color; - if (ft == "r") return QVariant::Rect; - if (ft == "a") return QVariant::RectF; - if (ft == "p") return QVariant::Point; - if (ft == "v") return QVariant::PointF; - if (ft == "e") return (QVariant::Type)qMetaTypeId(); - if (ft == "F") return (QVariant::Type)qMetaTypeId(); - if (ft == "D") return (QVariant::Type)qMetaTypeId(); - if (ft == "d") return (QVariant::Type)qMetaTypeId(); - if (ft == "V") return (QVariant::Type)qMetaTypeId(); - if (ft == "M") return (QVariant::Type)qMetaTypeId(); - return QVariant::String; -} - - -QString uniqueName(QString n, const QStringList & names) { - if (!names.contains(n)) - return n; - QString num; - while (!n.isEmpty()) { - if (n.right(1)[0].isDigit()) { - num.push_front(n.right(1)); - n.chop(1); - } else break; - } - if (!n.endsWith('_')) n += '_'; - int in = num.toInt() + 1; - QString nn = n + QString::number(in).rightJustified(3, '0'); - while (names.contains(nn)) - nn = n + QString::number(++in).rightJustified(3, '0'); - return nn; -} - - -int fontHeight(const QWidget * w) { -#ifdef Q_OS_ANDROID - static int ret = QApplication::fontMetrics().size(0, "0").height(); - return ret; -#else -# if QT_VERSION >= 0x050000 - //qDebug() << "fontHeight" << w; - if (w) { - QWidget * pw = w->window(); - if (pw) { - /*QWindow * wnd = pw->windowHandle(); - //qDebug() << "wnd" << wnd; - if (wnd) { - QScreen * s = wnd->screen(); - qDebug() << "s" << s; - if (s) { - qDebug() << "scales:"; - qDebug() << QApplication::fontMetrics().size(0, "0").height() << QApplication::fontMetrics().xHeight(); - qDebug() << s->logicalDotsPerInch() << s->logicalDotsPerInch()/96.*QApplication::font().pointSizeF(); - } - }*/ - return QFontMetrics(QApplication::font(), pw).size(0, "0").height(); - } - } -# endif -#endif - return QApplication::fontMetrics().size(0, "0").height(); -} - - -int lineThickness(const QWidget * w) { - return qMax(qRound(fontHeight(w) / 15.), 1); -} - - -QSize preferredIconSize(float x, const QWidget * w) { - int s = qMax(8, qRound(fontHeight(w) * x)); -#ifdef Q_OS_MACOS - s /= 1.25; -#endif - return QSize(s, s); -} - - -double appScale(const QWidget * w) { - return qMax(fontHeight(w) / 15., 1.); -} diff --git a/test/qad/utils/qad_types.h b/test/qad/utils/qad_types.h deleted file mode 100644 index 3803578..0000000 --- a/test/qad/utils/qad_types.h +++ /dev/null @@ -1,148 +0,0 @@ -#ifndef QAD_TYPES_H -#define QAD_TYPES_H - -#include "propertystorage.h" - -class QMetaEnum; - -namespace QAD { - - struct Enumerator { - Enumerator(int v = 0, const QString & n = QString()): value(v), name(n) {} - int value; - QString name; - }; - - struct Enum { - Enum(const QString & n = QString()): enum_name(n) {} - Enum(const QMetaEnum & meta, int selected = 0); - QString toString() const {return selected;} // obsolete, use selectedName() - int selectedValue() const; - QString selectedName() const {return selected;} - bool selectValue(int v); - bool selectName(const QString & n); - int value(const QString & n) const; - QString name(int v) const; - QList values() const; - QStringList names() const; - int size() const {return enum_list.size();} - QString enum_name; - QString selected; - QList enum_list; - Enum & operator <<(const Enumerator & v); - Enum & operator <<(const QString & v); - Enum & operator <<(const QStringList & v); - }; - - struct File { - File(const QString & p = QString(), const QString & f = QString(), bool abs = false): file(p), filter(f), is_abs(abs) {} - QString toString() const {return file;} - QString file; - QString filter; - bool is_abs; - }; - - struct Dir { - Dir(const QString & d = QString(), bool abs = false): dir(d), is_abs(abs) {} - QString toString() const {return dir;} - QString dir; - bool is_abs; - }; - - struct IODevice { - IODevice(const QString & device_prefix = QString(), const PropertyStorage & device_properties = PropertyStorage(), - int open_mode = QIODevice::ReadWrite, int device_options = 0) - : prefix(device_prefix), mode(open_mode), options(device_options), props(device_properties) {} - QString toString() const; - bool isValid() const {return !prefix.isEmpty();} - QString prefix; - int mode; - int options; - PropertyStorage props; - }; - - struct MathVector { - MathVector(const QVector & vec = QVector()) {v = vec;} - QVector v; - }; - - struct MathMatrix { - MathMatrix(const QVector > & mat = QVector > ()) {m = mat;} - QVector > m; // [Row][Column] - }; - -} - -Q_DECLARE_METATYPE(QAD::Enumerator) -inline QDataStream & operator <<(QDataStream & s, const QAD::Enumerator & v) {s << v.value << v.name; return s;} -inline QDataStream & operator >>(QDataStream & s, QAD::Enumerator & v) {s >> v.value >> v.name; return s;} -inline QDebug operator <<(QDebug s, const QAD::Enumerator & v) {s.nospace() << v.name << "(" << v.value << ")"; return s.space();} - -Q_DECLARE_METATYPE(QAD::Enum) -inline QDataStream & operator <<(QDataStream & s, const QAD::Enum & v) {s << v.enum_name << v.selected << v.enum_list; return s;} -inline QDataStream & operator >>(QDataStream & s, QAD::Enum & v) {s >> v.enum_name >> v.selected >> v.enum_list; return s;} -inline QDebug operator <<(QDebug s, const QAD::Enum & v) {s.nospace() << v.selected; return s.space();} - -Q_DECLARE_METATYPE(QAD::File) -inline QDataStream & operator <<(QDataStream & s, const QAD::File & v) {s << v.file << v.filter << v.is_abs; return s;} -inline QDataStream & operator >>(QDataStream & s, QAD::File & v) {s >> v.file >> v.filter >> v.is_abs; return s;} -inline QDebug operator <<(QDebug s, const QAD::File & v) {s.nospace() << v.file; return s.space();} - -Q_DECLARE_METATYPE(QAD::Dir) -inline QDataStream & operator <<(QDataStream & s, const QAD::Dir & v) {s << v.dir << v.is_abs; return s;} -inline QDataStream & operator >>(QDataStream & s, QAD::Dir & v) {s >> v.dir >> v.is_abs; return s;} -inline QDebug operator <<(QDebug s, const QAD::Dir & v) {s.nospace() << v.dir; return s.space();} - -Q_DECLARE_METATYPE(QAD::IODevice) -inline QDataStream & operator <<(QDataStream & s, const QAD::IODevice & v) {s << v.prefix << v.mode << v.options << v.props; return s;} -inline QDataStream & operator >>(QDataStream & s, QAD::IODevice & v) {s >> v.prefix >> v.mode >> v.options >> v.props; return s;} -inline QDebug operator <<(QDebug s, const QAD::IODevice & v) {s.nospace() << v.toString(); return s.space();} - -Q_DECLARE_METATYPE(QAD::MathVector) -inline QDataStream & operator <<(QDataStream & s, const QAD::MathVector & v) {s << v.v; return s;} -inline QDataStream & operator >>(QDataStream & s, QAD::MathVector & v) {s >> v.v; return s;} -inline QDebug operator <<(QDebug s, const QAD::MathVector & v) {s.nospace() << "Vector " << v.v; return s.space();} - -Q_DECLARE_METATYPE(QAD::MathMatrix) -inline QDataStream & operator <<(QDataStream & s, const QAD::MathMatrix & v) {s << v.m; return s;} -inline QDataStream & operator >>(QDataStream & s, QAD::MathMatrix & v) {s >> v.m; return s;} -inline QDebug operator <<(QDebug s, const QAD::MathMatrix & v) {s.nospace() << "Matrix " << v.m; return s.space();} - - -class __QADTypesRegistrator__ { -public: - __QADTypesRegistrator__(int); - static __QADTypesRegistrator__ * instance(); - QMap toString_funcs; -private: - __QADTypesRegistrator__(); - static bool _inited; -}; - - -inline qreal quantize(qreal x, qreal q = 10.f) {return qRound(x / q) * q;} -inline QPointF quantize(QPointF x, qreal q = 10.f) {return QPointF(quantize(x.x(), q), quantize(x.y(), q));} - -inline qreal distPointToLine(const QPointF & lp0, const QPointF & lp1, const QPointF & p) { - QLineF a(lp0, lp1), b(lp0, p), c(lp1, p); - qreal f = qAbs(a.dx()*b.dy() - a.dy()*b.dx()) / a.length(), s = b.length() + c.length() - a.length(); - return qMax(f, s); -} -inline QPointF nearestPointOnLine(const QPointF & lp0, const QPointF & lp1, const QPointF & p) { - QLineF a(lp0, lp1), b(lp0, p); - return a.pointAt(b.length() / a.length()); -} -inline QRectF enlargedRect(const QRectF & r, qreal dx, qreal dy, qreal v) { - return QRectF(r.left() - v + dx, r.top() - v + dy, r.width() + v+v, r.height() + v+v); -} - -QVariant::Type typeFromLetter(const QString & l); -QString uniqueName(QString n, const QStringList & names); - -int fontHeight(const QWidget * w = 0); -int lineThickness(const QWidget * w = 0); -QSize preferredIconSize(float x = 1.f, const QWidget * w = 0); -double appScale(const QWidget * w = 0); - - -#endif // QAD_TYPES_H diff --git a/test/qad/utils/qad_utils.qrc b/test/qad/utils/qad_utils.qrc deleted file mode 100644 index 12a8c2d..0000000 --- a/test/qad/utils/qad_utils.qrc +++ /dev/null @@ -1,17 +0,0 @@ - - - ../icons/edit-clear.png - ../icons/document-save.png - ../icons/edit-clear-locationbar-rtl.png - ../icons/edit-find.png - ../icons/list-add.png - ../icons/edit-delete.png - ../icons/item-add.png - ../icons/item.png - ../icons/node-add.png - ../icons/node.png - ../icons/edit-copy.png - ../icons/edit-paste.png - ../icons/document-open_16.png - - diff --git a/test/qad/utils/qpiconfig.cpp b/test/qad/utils/qpiconfig.cpp deleted file mode 100644 index bbd1cd2..0000000 --- a/test/qad/utils/qpiconfig.cpp +++ /dev/null @@ -1,825 +0,0 @@ -#include "qpiconfig.h" -#include -#include - - -int QString2int(const QString & string) { - QString s = string.trimmed(); - if (s.left(2) == "0x") return s.mid(2).toLongLong(0, 16); - if (s.left(1) == "0") return s.mid(1).toLongLong(0, 8); - return s.toLongLong(); -} - - -QRect QString2QRect(const QString & string) { - int sl, st, sw, sh; - int s = 0, e; - e = string.indexOf(";"); - sl = string.mid(s, e - s).toInt(); - s = e + 1; - e = string.indexOf(";", s); - st = string.mid(s, e - s).toInt(); - s = e + 1; - e = string.indexOf(";", s); - sw = string.mid(s, e - s).toInt(); - s = e + 1; - e = string.length(); - sh = string.mid(s, e - s).toInt(); - return QRect(sl, st, sw, sh); -} - - -QRectF QString2QRectF(const QString & string) { - double sl, st, sw, sh; - int s = 0, e; - e = string.indexOf(";"); - sl = string.mid(s, e - s).toDouble(); - s = e + 1; - e = string.indexOf(";", s); - st = string.mid(s, e - s).toDouble(); - s = e + 1; - e = string.indexOf(";", s); - sw = string.mid(s, e - s).toDouble(); - s = e + 1; - e = string.length(); - sh = string.mid(s, e - s).toDouble(); - return QRectF(sl, st, sw, sh); -} - - -QPoint QString2QPoint(const QString & string) { - int sx, sy; - int s = 0, e; - e = string.indexOf(";"); - sx = string.mid(s, e - s).toInt(); - s = e + 1; - e = string.length(); - sy = string.mid(s, e - s).toInt(); - return QPoint(sx, sy); -} - - -QPointF QString2QPointF(const QString & string) { - double sx, sy; - int s = 0, e; - e = string.indexOf(";"); - sx = string.mid(s, e - s).toDouble(); - s = e + 1; - e = string.length(); - sy = string.mid(s, e - s).toDouble(); - return QPointF(sx, sy); -} - - -QString QRect2QString(const QRect & rect) { - return QString::number(rect.left()) + ";" + - QString::number(rect.top()) + ";" + - QString::number(rect.width()) + ";" + - QString::number(rect.height()); -} - - -QString QRectF2QString(const QRectF & rect) { - return QString::number(rect.left()) + ";" + - QString::number(rect.top()) + ";" + - QString::number(rect.width()) + ";" + - QString::number(rect.height()); -} - - -QPIConfig::Entry QPIConfig::Branch::_empty; -QPIConfig::Entry QPIConfig::Entry::_empty; - - -QPIConfig::Branch QPIConfig::Branch::allLeaves() { - Branch b; - b.delim = delim; - foreach (Entry * i, *this) { - if (i->isLeaf()) b << i; - else allLeaves(b, i); - } - return b; -} - - -QPIConfig::Entry & QPIConfig::Branch::getValue(const QString & vname, const QString & def, bool * exist) { - if (vname.isEmpty()) { - _empty.clear(); - _empty.delim = delim; - if (exist != 0) *exist = false; - return _empty; - } - QStringList tree = vname.split(delim); - QString name = tree.front(); - tree.pop_front(); - Entry * ce = 0; - foreach (Entry * i, *this) - if (i->_name == name) { - ce = i; - break; - } - if (ce == 0) { - _empty._name = vname; - _empty._value = def; - _empty.delim = delim; - if (exist != 0) *exist = false; - return _empty; - } - foreach (QString i, tree) { - ce = ce->findChild(i); - if (ce == 0) { - _empty._name = vname; - _empty._value = def; - _empty.delim = delim; - if (exist != 0) *exist = false; - return _empty; - } - } - if (exist != 0) *exist = true; - return *ce; -} - - -QPIConfig::Branch QPIConfig::Branch::getValues(const QString & name) { - Branch b; - b.delim = delim; - foreach (Entry * i, *this) { - if (i->isLeaf()) { - if (i->_name.indexOf(name) >= 0) - b << i; - } else { - foreach (Entry * j, i->_children) - if (j->_name.indexOf(name) >= 0) - b << j; - } - } - return b; -} - - -QPIConfig::Branch QPIConfig::Branch::getLeaves() { - Branch b; - b.delim = delim; - foreach (Entry * i, *this) - if (i->isLeaf()) - b << i; - return b; -} - - -QPIConfig::Branch QPIConfig::Branch::getBranches() { - Branch b; - b.delim = delim; - foreach (Entry * i, *this) - if (!i->isLeaf()) - b << i; - return b; -} - - -QPIConfig::Branch & QPIConfig::Branch::filter(const QString & f) { - for (int i = 0; i < size(); ++i) { - if (at(i)->_name.indexOf(f) < 0) { - remove(i); - --i; - } - } - return *this; -} - - -bool QPIConfig::Branch::entryExists(const Entry * e, const QString & name) const { - if (e->_children.isEmpty()) { - if (e->_name == name) return true; - else return false; - } - foreach (Entry * i, e->_children) - if (entryExists(i, name)) return true; - return false; -} - - -QPIConfig::Entry & QPIConfig::Entry::getValue(const QString & vname, const QString & def, bool * exist) { - QStringList tree = vname.split(delim); - Entry * ce = this; - foreach (QString i, tree) { - ce = ce->findChild(i); - if (ce == 0) { - _empty._name = vname; - _empty._value = def; - _empty.delim = delim; - if (exist != 0) *exist = false; - return _empty; - } - } - if (exist != 0) *exist = true; - return *ce; -} - - -QPIConfig::Branch QPIConfig::Entry::getValues(const QString & vname) { - Branch b; - b.delim = delim; - foreach (Entry * i, _children) - if (i->_name.indexOf(vname) >= 0) - b << i; - return b; -}; - - -bool QPIConfig::Entry::entryExists(const Entry * e, const QString & name) const { - if (e->_children.isEmpty()) { - if (e->_name == name) return true; - else return false; - } - foreach (Entry * i, e->_children) - if (entryExists(i, name)) return true; - return false; -} - - -QPIConfig::QPIConfig(const QString & path, QIODevice::OpenMode mode, QPIConfig::FileType type_): QFile(path) { - init(); - type = type_; - open(mode); - //stream.setDevice(this); - parse(); -} - - -QPIConfig::QPIConfig(const QString & path, QIODevice::OpenMode mode): QFile(path) { - init(); - type = Config; - open(mode); - //stream.setDevice(this); - parse(); -} - - -QPIConfig::QPIConfig(const QString & path, QPIConfig::FileType type_): QFile(path) { - init(); - type = type_; - open(QIODevice::ReadWrite); - //stream.setDevice(this); - parse(); -} - - -QPIConfig::QPIConfig(QString * str, QPIConfig::FileType type_) { - init(); - type = type_; - buffer = str; - //stream.setDevice(this); - parse(); -} - - -QPIConfig::QPIConfig(const QString & path, QStringList dirs) { - init(); - type = Config; - internal = true; - dev = new QFile(path); - dev->open(QIODevice::ReadOnly); - incdirs = dirs; - incdirs << QFileInfo(path).absoluteDir().path(); - QString cp = path; - while (!dev->isOpen()) { - if (dirs.isEmpty()) break; - cp = dirs.back(); - if (cp.endsWith("/") || cp.endsWith("\\")) cp.chop(1); - cp += "/" + path; - dev->setFileName(cp); - dev->open(QIODevice::ReadOnly); - dirs.pop_back(); - } - if (!dev->isOpen()) { - delete dev; - dev = 0; - return; - } - dev->close(); - setFileName(cp); - open(QIODevice::ReadOnly); - parse(); -} - - -QPIConfig::~QPIConfig() { - stream.setDevice(0); - root.deleteBranch(); - foreach (QPIConfig * c, inc_devs) - delete c; - inc_devs.clear(); - includes.clear(); -} - - -void QPIConfig::init() { - internal = false; - buffer = 0; - dev = 0; - delim = "."; - root._name = "root"; - root.delim = delim; - empty.delim = delim; - empty._parent = 0; -} - - -void QPIConfig::setFile(const QString & path, QIODevice::OpenMode mode) { - buffer = 0; - setFileName(path); - if (open(mode)) - parse(); -} - - -void QPIConfig::setString(QString * str) { - buffer = str; - parse(); -} - - -QPIConfig::Entry & QPIConfig::getValue(const QString & vname, const QString & def, bool * exist) { - QStringList tree = vname.split(delim); - Entry * ce = &root; - foreach (QString i, tree) { - ce = ce->findChild(i); - if (ce == 0) { - if (exist != 0) *exist = false; - empty._name = vname; - empty._value = def; - empty.delim = delim; - return empty; - } - } - if (exist != 0) *exist = true; - return *ce; -} - - -QPIConfig::Branch QPIConfig::getValues(const QString & vname) { - Branch b; - b.delim = delim; - foreach (Entry * i, root._children) - if (i->_name.indexOf(vname) >= 0) - b << i; - return b; -} - - -QPIConfig::Entry & QPIConfig::addEntry(const QString & name, const QString & value, const QString & type, bool write, bool node) { - if (getValue(name)._parent != 0) - return empty; - QString sn = name, tn; - bool toRoot = false; - while (sn.indexOf(delim) == 0) sn.remove(0, delim.length()); - QStringList tree = sn.split(delim); - QString ename = tree.back(); - tn = tree.front(); - tree.pop_back(); - Entry * te, * ce, * entry = &root; - if (tree.isEmpty()) toRoot = true; - foreach (QString i, tree) { - te = entry->findChild(i); - if (te == 0) { - ce = new Entry(); - ce->delim = delim; - ce->_tab = entry->_tab; - ce->_line = entry->_line; - ce->_name = i; - ce->_parent = entry; - //qDebug() << " [QPIC] add " + tn; - ce->_full_name = tn; - entry->_children << ce; - entry = ce; - } else entry = te; - tn += delim + i; - } - QPIConfig::Branch ch = entry->_children; - qSort(ch.begin(), ch.end(), QPIConfig::Entry::compare); - te = (entry->isLeaf() ? 0 : ch.back()); - ce = new Entry(); - ce->delim = delim; - ce->_name = ename; - if (!node) ce->_value = value; - ce->_type = type; - if (te == 0) { - //qDebug() << "[QPIC] te == 0"; - ce->_tab = entry->_tab; - if (toRoot) ce->_line = other.size(); - else { - ch = entry->_parent->_children; - qSort(ch.begin(), ch.end(), QPIConfig::Entry::compare); - ce->_line = ch.back()->_line + 1; - } - } else { - ce->_tab = te->_tab; - if (toRoot) ce->_line = other.size(); - else ce->_line = te->_line + 1; - } - //qDebug() << "[QPIC] add " + sn + " at line " << ce->_line << ", parent " << entry->_name; - ce->_full_name = sn; - ce->_parent = entry; - entry->_children << ce; - //qDebug() << "[QPIC] children " << entry->childCount(); - if (!node) { - other.insert(ce->_line, ""); - Branch b = allLeaves(); - //qDebug() << "[QPIC] allLeaves " << b.size(); - bool found = false; - for (int i = 0; i < b.size(); ++i) { - if (found) { - b[i]->_line++; - continue; - } - if (b[i] == ce) { - found = true; - if (i > 0) - if (b[i - 1]->_line == b[i]->_line) - b[i - 1]->_line++; - } - //qDebug() << b[i]->_line; - } - } - //qDebug() << "[QPIC] add " + sn + " at line " << ce->_line << ", parent " + entry->_name; - if (write) writeAll(); - return *ce; -} - - -void QPIConfig::setValue(const QString & name, const QString & value, const QString & type, bool write) { - Entry & e(getValue(name)); - if (&e == &empty) { - addEntry(name, value, type, write); - return; - } - e._value = value; - e._type = type; - if (write) writeAll(); -} - - -int QPIConfig::entryIndex(const QString & name) { - QStringList tree = name.split(delim); - Entry * ce = &root; - foreach (QString i, tree) { - ce = ce->findChild(i); - if (ce == 0) - return -1; - } - Branch b = allLeaves(); - return allLeaves().indexOf(ce); -} - - -void QPIConfig::setValue(uint number, const QString & value, bool write) { - Entry & e(entryByIndex(number)); - if (&e == &empty) return; - e._value = value; - if (write) writeAll(); -} - - -void QPIConfig::setName(uint number, const QString & name, bool write) { - Entry & e(entryByIndex(number)); - if (&e == &empty) return; - e._name = name; - if (write) writeAll(); -} - - -void QPIConfig::setType(uint number, const QString & type, bool write) { - Entry & e(entryByIndex(number)); - if (&e == &empty) return; - e._type = type; - if (write) writeAll(); -} - - -void QPIConfig::setComment(uint number, const QString & comment, bool write) { - Entry & e(entryByIndex(number)); - if (&e == &empty) return; - e._comment = comment; - if (write) writeAll(); -} - - -void QPIConfig::removeEntry(const QString & name, bool write) { - Entry & e(getValue(name)); - if (&e == &empty) return; - Branch b = allLeaves(); - removeEntry(b, &e); - if (write) writeAll(); -} - - -void QPIConfig::removeEntry(uint number, bool write) { - Entry & e(entryByIndex(number)); - if (&e == &empty) return; - Branch b = allLeaves(); - removeEntry(b, &e); - if (write) writeAll(); -} - - -void QPIConfig::removeEntry(Branch & b, QPIConfig::Entry * e) { - bool leaf = true; - //qDebug() << " before " << b.size(); - if (e->isLeaf()) other.removeAt(e->_line); - if (!e->isLeaf() && !e->_value.isEmpty()) { - e->_value.clear(); - //leaf = false; - } else { - int cc = e->_children.size(); - for (int i = 0; i < cc; ++i) - removeEntry(b, e->_children.back()); - } - bool found = false; - for (int i = 0; i < b.size(); ++i) { - if (found) { - b[i]->_line--; - continue; - } - if (b[i] == e) found = true; - } - if (!leaf) return; - int ti = e->_parent->_children.indexOf(e); - if (ti >= 0) e->_parent->_children.remove(ti); - ti = b.indexOf(e); - if (ti >= 0) b.remove(ti); - //qDebug() << " after " << b.size(); - delete e; -} - - -void QPIConfig::writeAll() { - if (buffer == 0) { - stream.setDevice(this); - resize(0); - } else { - stream.setString(buffer); - buffer->clear(); - } - stream.seek(0); - //writeEntry(&root); - buildFullNames(&root); - Branch b = allLeaves(); - QString prefix, tprefix; - bool isPrefix; - int j = 0; - for (int i = 0; i < other.size(); ++i) { - //cout << j << endl; - if (j >= 0 && j < b.size()) { - if (b[j]->_line == i) { - b[j]->buildLine(); - stream << b[j]->_all << '\n'; - ++j; - } else { - stream << other[i]; - tprefix = getPrefixFromLine(other[i], &isPrefix); - if (isPrefix) { - prefix = tprefix; - if (!prefix.isEmpty()) - prefix += delim; - } - if (i < other.size() - 1) stream << '\n'; - } - } else { - stream << other[i]; - tprefix = getPrefixFromLine(other[i], &isPrefix); - if (isPrefix) { - prefix = tprefix; - if (!prefix.isEmpty()) - prefix += delim; - } - if (i < other.size() - 1) stream << '\n'; - } - } - if (buffer == 0) - flush(); - readAll(); -} - - -QString QPIConfig::getPrefixFromLine(QString line, bool * exists) { - line = line.trimmed(); - if (line.left(1) == "#") {if (exists) *exists = false; return QString();} - int ci = line.indexOf("#"); - if (ci >= 0) line = line.left(ci).trimmed(); - if (line.indexOf("=") >= 0) {if (exists) *exists = false; return QString();} - if (line.indexOf("[") >= 0 && line.indexOf("]") >= 0) { - if (exists) *exists = true; - line.remove(0, 1); - return line.left(line.lastIndexOf("]")).trimmed(); - } - if (exists) *exists = false; - return QString(); -} - - -QString QPIConfig::writeAllToString() { - QString str; - QTextStream s(&str); - //writeEntry(&root); - buildFullNames(&root); - Branch b = allLeaves(); - int j = 0; - for (int i = 0; i < other.size(); ++i) { - //cout << j << endl; - if (j >= 0 && j < b.size()) { - if (b[j]->_line == i) { - b[j]->buildLine(); - s << b[j]->_all << '\n'; - ++j; - } else { - s << other[i]; - if (i < other.size() - 1) s << '\n'; - } - } else { - s << other[i]; - if (i < other.size() - 1) s << '\n'; - } - } - return str; -} - - -void QPIConfig::readAllFromString(const QString & str) { - parse(str); -} - - -void QPIConfig::clear() { - root.deleteBranch(); - root.clear(); - other.clear(); - if (buffer == 0) - resize(0); - else - buffer->clear(); - stream.seek(0); -} - - -void QPIConfig::readAll() { - if (buffer == 0) - flush(); - parse(); -} - - -bool QPIConfig::entryExists(const Entry * e, const QString & name) const { - if (e->_children.isEmpty()) { - if (e->_name == name) return true; - else return false; - } - foreach (Entry * i, e->_children) - if (entryExists(i, name)) return true; - return false; -} - - -void QPIConfig::updateIncludes() { - if (internal) return; - all_includes.clear(); - foreach (QPIConfig * c, includes) - all_includes << c->allLeaves(); -} - - -QString QPIConfig::parseLine(QString v) { - int i = -1, l = 0; - while (1) { - i = v.indexOf("${"); - if (i < 0) break; - l = v.indexOf("}", i + 1); - QString w = v.mid(i + 2, l - i - 2), r; - l = w.length() + 3; - w = parseLine(w); - w = w.trimmed(); - bool ex = false; - QPIConfig::Entry & me = getValue(w, "", &ex); - if (ex) { - r = me._value; - } else { - foreach (QPIConfig::Entry * e, all_includes) { - if (e->_full_name == w) { - r = e->_value; - break; - } - } - } - v.replace(i, l, r); - } - return v; -} - - -void QPIConfig::parse(QString content) { - root.deleteBranch(); - root.clear(); - QString src, str, tab, comm, all, name, type, prefix, tprefix; - QStringList tree; - Entry * entry, * te, * ce; - int ind, sind; - bool isNew, isPrefix; - foreach (QPIConfig * c, inc_devs) - delete c; - inc_devs.clear(); - includes.clear(); - if (content.isEmpty()) { - if (buffer == 0) { - if (!isOpen()) return; - stream.setDevice(this); - } else - stream.setString(buffer); - } else { - stream.setString(&content); - } - stream.seek(0); - other.clear(); - lines = centry = 0; - while (!stream.atEnd()) { - other.push_back(QString()); - src = str = parseLine(stream.readLine()); - tprefix = getPrefixFromLine(src, &isPrefix); - if (isPrefix) { - prefix = tprefix; - if (!prefix.isEmpty()) - prefix += delim; - } - //cout << str << endl; - tab = str.left(str.indexOf(str.trimmed().left(1))); - str = str.trimmed(); - all = str; - ind = str.indexOf('='); - if ((ind > 0) && !(str[0] == '#')) { - sind = str.indexOf('#'); - if (sind > 0) { - comm = str.right(str.length() - sind - 1).trimmed(); - if (comm.length() > 0) type = comm[0]; - else type = "s"; - comm = comm.right(comm.length() - 1).trimmed(); - str = str.left(sind); - } else { - type = "s"; - comm = ""; - } - //name = str.left(ind).trimmed(); - tree = (prefix + str.left(ind).trimmed()).split(delim); - if (tree.front() == "include") { - name = str.right(str.length() - ind - 1).trimmed(); - QPIConfig * iconf = new QPIConfig(name, incdirs); - if (!iconf->dev) { - delete iconf; - } else { - inc_devs << iconf; - includes << iconf << iconf->includes; - updateIncludes(); - } - //piCout << "includes" << includes; - other.back() = src; - } else { - name = tree.back(); - tree.pop_back(); - entry = &root; - foreach (QString i, tree) { - te = entry->findChild(i); - if (te == 0) { - ce = new Entry(); - ce->delim = delim; - ce->_tab = tab; - ce->_line = lines; - ce->_name = i; - ce->_parent = entry; - entry->_children << ce; - entry = ce; - } else entry = te; - } - isNew = false; - ce = entry->findChild(name); - if (ce == 0) { - ce = new Entry(); - isNew = true; - } - ce->delim = delim; - ce->_tab = tab; - ce->_name = name; - ce->_value = str.right(str.length() - ind - 1).trimmed(); - ce->_type = type; - ce->_comment = comm; - ce->_line = lines; - ce->_all = all; - if (isNew) { - ce->_parent = entry; - entry->_children << ce; - } - } - } else other.back() = src; - lines++; - } - setEntryDelim(&root, delim); - buildFullNames(&root); - //if (content.isEmpty()) stream.setDevice(this); -} diff --git a/test/qad/utils/qpiconfig.h b/test/qad/utils/qpiconfig.h deleted file mode 100644 index 1c8a267..0000000 --- a/test/qad/utils/qpiconfig.h +++ /dev/null @@ -1,280 +0,0 @@ -#ifndef QPICONFIG_H -#define QPICONFIG_H - -#include "QFile" -#include "QVector" -#include "QStringList" -#include "QTextStream" - -#include -#include -#include -#include -#include - - -inline QByteArray QString2QByteArray(const QString & string) {return string.isEmpty() ? QByteArray() : qUncompress(QByteArray::fromBase64(string.toLatin1()));} -int QString2int(const QString & string); -inline QColor QString2QColor(const QString & string) {return (string.left(1) == "#" ? QColor(string.right(string.length() - 1).toInt(0, 16)) : QColor(QString2int(string)));} -QRect QString2QRect(const QString & string); -QRectF QString2QRectF(const QString & string); -QPoint QString2QPoint(const QString & string); -QPointF QString2QPointF(const QString & string); - -inline QString QColor2QString(const QColor & color) {QString s = color.name(); return "0x" + QString::number(color.alpha(), 16).rightJustified(2, '0') + s.right(s.length() - 1);} -inline QString QPoint2QString(const QPoint & point) {return QString::number(point.x()) + ";" + QString::number(point.y());} -inline QString QPointF2QString(const QPointF & point) {return QString::number(point.x()) + ";" + QString::number(point.y());} -inline QString QByteArray2QString(const QByteArray & array) {return array.isEmpty() ? QString() : QString(qCompress(array, 9).toBase64());} -QString QRect2QString(const QRect & rect); -QString QRectF2QString(const QRectF & rect); - -#define QPICONFIG_GET_VALUE \ - Entry & getValue(const QString & vname, const char * def, bool * exist = 0) {return getValue(vname, QString(def), exist);} \ - Entry & getValue(const QString & vname, const QStringList & def, bool * exist = 0) {return getValue(vname, def.join("%|%"), exist);} \ - Entry & getValue(const QString & vname, const bool def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const short def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const int def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const long def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const uchar def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const ushort def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const uint def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const ulong def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const float def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const double def, bool * exist = 0) {return getValue(vname, QString::number(def), exist);} \ - Entry & getValue(const QString & vname, const QColor & def, bool * exist = 0) {return getValue(vname, QColor2QString(def), exist);} \ - Entry & getValue(const QString & vname, const Qt::GlobalColor def, bool * exist = 0) {return getValue(vname, QColor(def), exist);} \ - Entry & getValue(const QString & vname, const QRect & def, bool * exist = 0) {return getValue(vname, QRect2QString(def), exist);} \ - Entry & getValue(const QString & vname, const QRectF & def, bool * exist = 0) {return getValue(vname, QRectF2QString(def), exist);} \ - Entry & getValue(const QString & vname, const QPoint & def, bool * exist = 0) {return getValue(vname, QPoint2QString(def), exist);} \ - Entry & getValue(const QString & vname, const QPointF & def, bool * exist = 0) {return getValue(vname, QPointF2QString(def), exist);} \ - Entry & getValue(const QString & vname, const QByteArray & def, bool * exist = 0) {return getValue(vname, QByteArray2QString(def), exist);} - -class QPIConfig: public QFile -{ - friend class Entry; - friend class Branch; - friend class QPIConfigWidget; -public: - enum FileType {Config, XML}; - - QPIConfig(const QString & path, QIODevice::OpenMode mode, QPIConfig::FileType type); - QPIConfig(const QString & path, QIODevice::OpenMode mode = QIODevice::ReadWrite); - QPIConfig(const QString & path, QPIConfig::FileType type); - QPIConfig(QString * str, QPIConfig::FileType type = QPIConfig::Config); - ~QPIConfig(); - - void setFile(const QString & path, QIODevice::OpenMode mode = QIODevice::ReadWrite); - void setString(QString * str); - - class Entry; - - class Branch: public QVector { - friend class QPIConfig; - friend class Entry; - public: - Branch() {;} - - Entry & getValue(const QString & vname, const QString & def = QString(), bool * exist = 0); - QPICONFIG_GET_VALUE - - Branch allLeaves(); - Branch getValues(const QString & name); - Branch getLeaves(); - Branch getBranches(); - Branch & filter(const QString & f); - bool isEntryExists(const QString & name) const {foreach (const Entry * i, *this) if (entryExists(i, name)) return true; return false;} - int indexOf(const Entry * e) {for (int i = 0; i < size(); ++i) if (at(i) == e) return i; return -1;} - - //void clear() {foreach (Entry * i, *this) delete i; QVector::clear();} - - private: - bool entryExists(const Entry * e, const QString & name) const; - void allLeaves(Branch & b, Entry * e) {foreach (Entry * i, e->_children) {if (i->isLeaf()) b << i; else allLeaves(b, i);}} - - static Entry _empty; - QString delim; - - }; - - class Entry { - friend class QPIConfig; - friend class Branch; - friend class QPIConfigWidget; - friend class ConfigValueWidget; - public: - Entry() {_parent = 0; _line = -1;} - - Entry * parent() const {return _parent;} - int childCount() {return _children.size();} - Branch & children() {_children.delim = delim; return _children;} - Entry * child(const int index) const {return _children[index];} - const Entry * findChild(const QString & name) const {foreach (const Entry * i, _children) if (i->_name == name) return i; return 0;} - Entry * findChild(const QString & name) {foreach (Entry * i, _children) if (i->_name == name) return i; return 0;} - bool isLeaf() const {return _children.empty();} - - const QString & name() const {return _name;} - const QString & value() const {return _value;} - const QString & type() const {return _type;} - const QString & comment() const {return _comment;} - - Entry & setName(const QString & value) {_name = value; return *this;} - Entry & setType(const QString & value) {_type = value; return *this;} - Entry & setComment(const QString & value) {_comment = value; return *this;} - Entry & setValue(const QString & value) {_value = value; return *this;} - Entry & setValue(const QStringList & value) {setValue(value.join("%|%")); setType("l"); return *this;} - Entry & setValue(const char * value) {setValue(QString(value)); setType("s"); return *this;} - Entry & setValue(const bool value) {setValue(QString::number(value)); setType("b"); return *this;} - Entry & setValue(const short value) {setValue(QString::number(value)); setType("n"); return *this;} - Entry & setValue(const int value) {setValue(QString::number(value)); setType("n"); return *this;} - Entry & setValue(const long value) {setValue(QString::number(value)); setType("n"); return *this;} - Entry & setValue(const uchar value) {setValue(QString::number(value)); setType("n"); return *this;} - Entry & setValue(const ushort value) {setValue(QString::number(value)); setType("n"); return *this;} - Entry & setValue(const uint value) {setValue(QString::number(value)); setType("n"); return *this;} - Entry & setValue(const ulong value) {setValue(QString::number(value)); setType("n"); return *this;} - Entry & setValue(const float value) {setValue(QString::number(value)); setType("f"); return *this;} - Entry & setValue(const double value) {setValue(QString::number(value)); setType("f"); return *this;} - Entry & setValue(const QColor & value) {setValue(QColor2QString(value)); setType("c"); return *this;} - Entry & setValue(const Qt::GlobalColor & value) {setValue(QColor(value)); return *this;} - Entry & setValue(const QRect & value) {setValue(QRect2QString(value)); setType("r"); return *this;} - Entry & setValue(const QRectF & value) {setValue(QRectF2QString(value)); setType("a"); return *this;} - Entry & setValue(const QPoint & value) {setValue(QPoint2QString(value)); setType("p"); return *this;} - Entry & setValue(const QPointF & value) {setValue(QPointF2QString(value)); setType("v"); return *this;} - Entry & setValue(const QByteArray & value) {setValue(QByteArray2QString(value)); setType("s"); return *this;} - - Entry & getValue(const QString & vname, const QString & def = QString(), bool * exist = 0); - QPICONFIG_GET_VALUE - - Branch getValues(const QString & vname); - - bool isEntryExists(const QString & name) const {return entryExists(this, name);} - const QString & stringValue() const {return _value;} - - operator bool() {return (_value.toLower().trimmed() == "true" || _value.toLower().trimmed() == "yes" || _value.toLower().trimmed() == "on" || _value.toInt() > 0);} - operator char() {return (_value.isEmpty() ? 0 : _value[0].toLatin1());} - operator short() {return _value.toShort();} - operator int() {return QString2int(_value);} - operator long() {return QString2int(_value);} - operator uchar() {return QString2int(_value);} - operator ushort() {return QString2int(_value);} - operator uint() {return QString2int(_value);} - operator ulong() {return QString2int(_value);} - operator float() {return _value.toFloat();} - operator double() {return _value.toDouble();} - operator QString() {return _value;} - operator QStringList() {return _value.split("%|%");} - operator QColor() {return QString2QColor(_value);} - operator QRect() {return QString2QRect(_value);} - operator QRectF() {return QString2QRectF(_value);} - operator QPoint() {return QString2QPoint(_value);} - operator QPointF() {return QString2QPointF(_value);} - operator QByteArray() {return QString2QByteArray(_value);} - - private: - static bool compare(const QPIConfig::Entry * f, const QPIConfig::Entry * s) {return f->_line < s->_line;} - bool entryExists(const Entry * e, const QString & name) const; - void buildLine() {_all = _tab + _full_name + " = " + _value + " #" + _type + " " + _comment;} - void clear() {_children.clear(); _name = _value = _type = _comment = _all = QString(); _line = 0; _parent = 0;} - void deleteBranch() {foreach (Entry * i, _children) {i->deleteBranch(); delete i;}} - - static Entry _empty; - Entry * _parent; - Branch _children; - QString _tab; - QString _name; - QString _value; - QString _type; - QString _comment; - QString _all; - QString _full_name; - QString delim; - int _line; - }; - - Entry & getValue(const QString & vname, const QString & def = QString(), bool * exist = 0); - QPICONFIG_GET_VALUE - - Branch getValues(const QString & vname); - - void setValue(const QString & name, const QString & value, const QString & type = "s", bool write = true); - void setValue(const QString & name, const QStringList & value, bool write = true) {setValue(name, value.join("%|%"), "l", write);} - void setValue(const QString & name, const char * value, bool write = true) {setValue(name, QString(value), "s", write);} - void setValue(const QString & name, const bool value, bool write = true) {setValue(name, QString::number(value), "b", write);} - void setValue(const QString & name, const short value, bool write = true) {setValue(name, QString::number(value), "n", write);} - void setValue(const QString & name, const int value, bool write = true) {setValue(name, QString::number(value), "n", write);} - void setValue(const QString & name, const long value, bool write = true) {setValue(name, QString::number(value), "n", write);} - void setValue(const QString & name, const uchar value, bool write = true) {setValue(name, QString::number(value), "n", write);} - void setValue(const QString & name, const ushort value, bool write = true) {setValue(name, QString::number(value), "n", write);} - void setValue(const QString & name, const uint value, bool write = true) {setValue(name, QString::number(value), "n", write);} - void setValue(const QString & name, const ulong value, bool write = true) {setValue(name, QString::number(value), "n", write);} - void setValue(const QString & name, const float value, bool write = true) {setValue(name, QString::number(value), "f", write);} - void setValue(const QString & name, const double value, bool write = true) {setValue(name, QString::number(value), "f", write);} - void setValue(const QString & name, const QColor & value, bool write = true) {setValue(name, QColor2QString(value), "c", write);} - void setValue(const QString & name, const Qt::GlobalColor & value, bool write = true) {setValue(name, QColor(value), write);} - void setValue(const QString & name, const QRect & value, bool write = true) {setValue(name, QRect2QString(value), "r", write);} - void setValue(const QString & name, const QRectF & value, bool write = true) {setValue(name, QRectF2QString(value), "a", write);} - void setValue(const QString & name, const QPoint & value, bool write = true) {setValue(name, QPoint2QString(value), "p", write);} - void setValue(const QString & name, const QPointF & value, bool write = true) {setValue(name, QPointF2QString(value), "v", write);} - void setValue(const QString & name, const QByteArray & value, bool write = true) {setValue(name, QByteArray2QString(value), "s", write);} - - Entry & rootEntry() {return root;} - int entriesCount() const {return childCount(&root);} - bool isEntryExists(const QString & name) const {return entryExists(&root, name);} - - Branch allTree() {Branch b; foreach (Entry * i, root._children) b << i; return b;} - Branch allLeaves() {Branch b; allLeaves(b, &root); qSort(b.begin(), b.end(), Entry::compare); return b;} - int entryIndex(const QString & name); - - QString getName(uint number) {return entryByIndex(number)._name;} - QString getValue(uint number) {return entryByIndex(number)._value;} - QChar getType(uint number) {return entryByIndex(number)._type[0];} - QString getComment(uint number) {return entryByIndex(number)._comment;} - - QPIConfig::Entry & addEntry(const QString & name, const QString & value, const QString & type = "s", bool write = true, bool node = false); - void setName(uint number, const QString & name, bool write = true); - void setValue(uint number, const QString & value, bool write = true); - void setType(uint number, const QString & type, bool write = true); - void setComment(uint number, const QString & comment, bool write = true); - - void removeEntry(const QString & name, bool write = true); - void removeEntry(uint number, bool write = true); - - void clear(); - void readAll(); - void writeAll(); - QString writeAllToString(); - void readAllFromString(const QString & str); - - const QString & delimiter() const {return delim;} - void setDelimiter(const QString & d) {delim = d; setEntryDelim(&root, d); readAll();} - -private: - QPIConfig(const QString & path, QStringList dirs); - void init(); - int childCount(const Entry * e) const {int c = 0; foreach (const Entry * i, e->_children) c += childCount(i); c += e->_children.size(); return c;} - bool entryExists(const Entry * e, const QString & name) const; - void buildFullNames(Entry * e) {foreach (Entry * i, e->_children) {if (e != &root) i->_full_name = e->_full_name + delim + i->_name; else i->_full_name = i->_name; buildFullNames(i);}} - void allLeaves(Branch & b, Entry * e) {foreach (Entry * i, e->_children) {if ((!i->_value.isEmpty() && !i->isLeaf()) || i->isLeaf()) b << i; allLeaves(b, i);}} - void setEntryDelim(Entry * e, const QString & d) {foreach (Entry * i, e->_children) setEntryDelim(i, d); e->delim = d;} - inline Entry & entryByIndex(const int index) {Branch b = allLeaves(); if (index < 0 || index >= b.size()) return empty; return *(b[index]);} - void removeEntry(Branch & b, Entry * e); - void deleteEntry(Entry * e) {foreach (Entry * i, e->_children) deleteEntry(i); delete e;} - QString getPrefixFromLine(QString line, bool * exists); - void updateIncludes(); - QString parseLine(QString v); - void parse(QString content = QString()); - - int centry; - bool internal; - QVector includes, inc_devs; - Branch all_includes; - QFile * dev; - QStringList incdirs; - QString delim, * buffer; - Entry root, empty; - uint lines; - QStringList other; - QTextStream stream; - FileType type; -}; - -#endif // QPICONFIG_H diff --git a/test/qad/utils/qpievaluator.cpp b/test/qad/utils/qpievaluator.cpp deleted file mode 100644 index d03fd77..0000000 --- a/test/qad/utils/qpievaluator.cpp +++ /dev/null @@ -1,1047 +0,0 @@ -#include "qpievaluator.h" - - -QPIEvaluatorContent::QPIEvaluatorContent() { - addFunction("arcsin", 1); - addFunction("arccos", 1); - addFunction("arctg", 1); - addFunction("arcctg", 1); - addFunction("random", 2); - addFunction("sin", 1); - addFunction("cos", 1); - addFunction("ctg", 1); - addFunction("tg", 1); - addFunction("exp", 1); - addFunction("cth", 1); - addFunction("sh", 1); - addFunction("ch", 1); - addFunction("th", 1); - addFunction("sqrt", 1); - addFunction("sqr", 1); - addFunction("pow", 2); - addFunction("abs", 1); - addFunction("ln", 1); - addFunction("lg", 1); - addFunction("log", 2); - addFunction("im", 1); - addFunction("re", 1); - addFunction("arg", 1); - addFunction("len", 1); - addFunction("conj", 1); - addFunction("sign", 1); - addFunction("rad", 1); - addFunction("deg", 1); - clearCustomVariables(); - //addVariable("n", 0.); - //addVariable("x1", 123); -} - - -bool QPIEvaluatorContent::setVariableValue(int index, complexd new_value) { - if (index < 0 || index >= variables.size()) return false; - variables[index].value = new_value; - return true; -} - - -bool QPIEvaluatorContent::setVariableName(int index, const QString & new_name) { - if (index < 0 || index >= variables.size()) return false; - variables[index].name = new_name; - return true; -} - - -void QPIEvaluatorContent::clearCustomVariables() { - var_index.clear(); - func_index.clear(); - variables.clear(); - addVariable("i", complexd_i); - addVariable("pi", atan(1.) * 4.); - addVariable("e", exp(1.)); - cv_count = variables.size(); -} - - -void QPIEvaluatorContent::sortVariables() { - var_index.clear(); - qSort(variables.begin(), variables.end()); - for (int i = 0; i < variables.size(); i++) - var_index[variables[i].name] = i; - /* - qDebug() << "---"; - for (int i = 0; i < variables.size(); i++) { - qDebug() << variables[i].name; - } - */ -} - - -QPIEvaluatorTypes::BaseFunctions QPIEvaluatorContent::getBaseFunction(const QString & name) { - if (name == "sin") return QPIEvaluatorTypes::bfSin; - if (name == "cos") return QPIEvaluatorTypes::bfCos; - if (name == "tg") return QPIEvaluatorTypes::bfTg; - if (name == "ctg") return QPIEvaluatorTypes::bfCtg; - if (name == "arcsin") return QPIEvaluatorTypes::bfArcsin; - if (name == "arccos") return QPIEvaluatorTypes::bfArccos; - if (name == "arctg") return QPIEvaluatorTypes::bfArctg; - if (name == "arcctg") return QPIEvaluatorTypes::bfArcctg; - if (name == "exp") return QPIEvaluatorTypes::bfExp; - if (name == "random") return QPIEvaluatorTypes::bfRandom; - if (name == "sh") return QPIEvaluatorTypes::bfSh; - if (name == "ch") return QPIEvaluatorTypes::bfCh; - if (name == "th") return QPIEvaluatorTypes::bfTh; - if (name == "cth") return QPIEvaluatorTypes::bfCth; - if (name == "sqrt") return QPIEvaluatorTypes::bfSqrt; - if (name == "sqr") return QPIEvaluatorTypes::bfSqr; - if (name == "pow") return QPIEvaluatorTypes::bfPow; - if (name == "abs") return QPIEvaluatorTypes::bfAbs; - if (name == "ln") return QPIEvaluatorTypes::bfLn; - if (name == "lg") return QPIEvaluatorTypes::bfLg; - if (name == "log") return QPIEvaluatorTypes::bfLog; - if (name == "im") return QPIEvaluatorTypes::bfIm; - if (name == "re") return QPIEvaluatorTypes::bfRe; - if (name == "arg") return QPIEvaluatorTypes::bfArg; - if (name == "len") return QPIEvaluatorTypes::bfLen; - if (name == "conj") return QPIEvaluatorTypes::bfConj; - if (name == "sign") return QPIEvaluatorTypes::bfSign; - if (name == "rad") return QPIEvaluatorTypes::bfRad; - if (name == "deg") return QPIEvaluatorTypes::bfDeg; - return QPIEvaluatorTypes::bfUnknown; -} - -const QString & QPIEvaluator::prepare(const QString & string) { - currentString = string.trimmed(); - if (currentString.isEmpty()) currentString = "0"; - replaceOperators(); - removeSpaces(); - checkBrackets(); - while (fillElements()) checkBrackets(); - while (setSignes()) fillElements(); - removeJunk(); - findUnknownVariables(); - return currentString; -} - - -void QPIEvaluator::removeSpaces() { - QString tmps = currentString; - for (int i = 0; i < tmps.length(); i++) { - if (tmps[i] == ' ' || tmps[i] == '\t') { - tmps.remove(i, 1); - i--; - } - } - currentString = tmps; -} - - -void QPIEvaluator::removeJunk() { - QChar cc; - bool junk = true; - int bcnt; - while (junk) { - if (currentString.left(1) != "(" || currentString.right(1) != ")") return; - bcnt = 1; - junk = false; - for (int i = 1; i < currentString.length(); i++) { - cc = currentString[i]; - if (cc == '(') bcnt++; - if (cc == ')') bcnt--; - if (bcnt == 0) { - if (i == currentString.length() - 1) { - currentString = currentString.mid(1, currentString.length() - 2); - elements.pop_front(); - elements.pop_back(); - junk = true; - break; - } else break; - } - } - } -} - - -void QPIEvaluator::replaceOperators() { - currentString.replace("==", "="); - currentString.replace("!=", ":"); - currentString.replace(">=", "}"); - currentString.replace("<=", "{"); - currentString.replace("&&", "&"); - currentString.replace("||", "|"); -} - - -void QPIEvaluator::makeOutput(QString & string) { - string.replace(":", "≠"); - string.replace("}", "≥"); - string.replace("{", "≤"); - string.replace("&", "⋀"); - string.replace("|", "⋁"); -} - - -void QPIEvaluator::findUnknownVariables() { - QString cvar; - unknownVars.clear(); - for (int i = 0; i < currentString.length(); i++) { - if (elements[i].var_num == -666) cvar += currentString[i]; - else { - if (cvar.length() == 0) continue; - unknownVars << cvar; - cvar = ""; - } - } - if (cvar.length() > 0) unknownVars << cvar; - unknownVars.removeDuplicates(); -} - - -bool QPIEvaluator::isSign(const QChar & ch) { - return ch == '+' || ch == '-' || - ch == '*' || ch == '/' || - ch == '%' || ch == '^' || - ch == '=' || ch == ':' || - ch == '>' || ch == '<' || - ch == '}' || ch == '{' || - ch == '&' || ch == '|'; -} - - -void QPIEvaluator::checkBrackets() { - QString tmps = currentString; - QChar fc, sc; - int bcnt = 0, bpos = 0, inserted = 0; - currentString = tmps; - for (int i = 0; i < tmps.length(); i++) { - if (tmps[i] == '(') { - if (bcnt == 0) bpos = i; - bcnt++; - } - if (tmps[i] == ')') { - if (bcnt == 0) { - currentString.insert(bpos + inserted, "("); - inserted++; - } else bcnt--; - } - } - if (bcnt > 0) currentString += QString(bcnt, ')'); - tmps = currentString; - for (int i = 0; i < tmps.length() - 1; i++) { - fc = tmps[i].toLower(); - sc = tmps[i + 1].toLower(); - if ((fc == ')' && sc == '(') || - (fc == ')' && sc >= '0' && sc <= '9') || - (fc == ')' && sc >= 'a' && sc <= 'z') ) tmps.insert(++i, '*'); - } - currentString = tmps; -} - - -bool QPIEvaluator::fillElements() { - int fstart, flen, cnum = 0, cpart = 0, cfunc; - QChar cc, nc, pc, fc = '!'; - bool numFound = false; - QString curfind, tmps = currentString; - elements.resize(tmps.length()); - for (int i = 0; i < elements.size(); i++) { - elements[i].type = QPIEvaluatorTypes::etVariable; - elements[i].var_num = -666; - } - currentVariables.clear(); - //qDebug().nospace() << "search for functions ..."; - for (int i = 0; i < content.functionsCount(); i++) { - curfind = content.function(i).identifier; - cfunc = i; //(int)content.function(i).type; - flen = curfind.length(); - fstart = 0; - while (fstart >= 0) { - fstart = tmps.indexOf(curfind, fstart); - if (fstart < 0) break; - if (tmps[fstart + flen] != '(') { - //currentString.insert(fstart + flen, "("); - fstart++; - continue; - } - for (int j = fstart; j < fstart + flen; j++) { - elements[j].set(QPIEvaluatorTypes::etFunction, cnum, cfunc); - tmps.replace(j, 1, fc); - } - cnum++; - } - } - cnum = 0; - //qDebug().nospace() << "search for variables ..."; - for (int i = 0; i < content.variablesCount(); i++) { - curfind = content.variable(i).name; - flen = curfind.length(); - fstart = 0; - while (fstart >= 0) { - fstart = tmps.indexOf(curfind, fstart); - if (fstart < 0) break; - for (int j = fstart; j < fstart + flen; j++) { - elements[j].set(QPIEvaluatorTypes::etVariable, cnum, i); - tmps.replace(j, 1, fc); - } - cnum++; - } - } - curfind = ""; - cnum = 1; - //qDebug().nospace() << "search for numbers ..."; - for (int i = 0; i < tmps.length(); i++) { - cc = tmps[i]; - /*if (cc == " " || cc == "(" || cc == ")") { - curfind = ""; - cpart = 0; - numFound = false; - continue; - }*/ - switch (cpart) { - case 0: - if ((cc >= '0' && cc <= '9')) {// || cc == '-' || cc == '+') { - curfind += cc; - cpart = 1; - continue; - } - if (cc == '.') { - curfind += cc; - cpart = 2; - continue; - } - if (cc == 'E') { - curfind += cc; - cpart = 3; - continue; - } - break; - case 1: - if (cc >= '0' && cc <= '9') { - curfind += cc; - continue; - } - if (cc == '.') { - curfind += cc; - cpart = 2; - continue; - } - if (cc == 'E') { - curfind += cc; - cpart = 3; - continue; - } - numFound = true; - break; - case 2: - if (cc >= '0' && cc <= '9') { - curfind += cc; - continue; - } - if (cc == 'E') { - curfind += cc; - cpart = 3; - continue; - } - numFound = true; - break; - case 3: - if ((cc >= '0' && cc <= '9') || cc == '-' || cc == '+') { - curfind += cc; - cpart = 4; - continue; - } - numFound = true; - break; - case 4: - if (cc >= '0' && cc <= '9') { - curfind += cc; - continue; - } - numFound = true; - break; - } - if (numFound) { - //qDebug().nospace() << "add " << cnum << ": " << curfind << " = " << curfind.toDouble(); - currentVariables.push_back(QPIEvaluatorTypes::Variable("tmp" + QString::number(cnum), curfind.toDouble())); - for (int j = i - curfind.length(); j < i; j++) { - elements[j].set(QPIEvaluatorTypes::etNumber, cnum, -cnum); - tmps.replace(j, 1, fc); - } - curfind = ""; - cnum++; - cpart = 0; - numFound = false; - } - } - if (cpart > 0) { - //qDebug().nospace() << "add " << cnum << ": " << curfind << " = " << curfind.toDouble(); - currentVariables.push_back(QPIEvaluatorTypes::Variable("tmp" + QString::number(cnum), curfind.toDouble())); - for (int j = tmps.length() - curfind.length(); j < tmps.length(); j++) { - elements[j].set(QPIEvaluatorTypes::etNumber, cnum, -cnum); - tmps.replace(j, 1, fc); - } - } - cc = nc = fc; - //qDebug().nospace() << "search for signes ..."; - for (int i = 0; i < tmps.length(); i++) { - cc = tmps[i]; - if (i > 0) pc = tmps[i - 1]; - else pc = fc; - if (i < tmps.length() - 1) nc = tmps[i + 1]; - else nc = fc; - if (cc == '(' || cc == ')' || cc == ',') { - elements[i].set(QPIEvaluatorTypes::etOperator, -1); - continue; - } - if (cc == '-' || cc == '+') { - elements[i].set(QPIEvaluatorTypes::etOperator, -1); - if (i < tmps.length() - 1) if (elements[i + 1].type == QPIEvaluatorTypes::etVariable || - elements[i + 1].type == QPIEvaluatorTypes::etFunction) continue; - if ((pc == '(' || isSign(pc) || i == 0) && i < tmps.length() - 1) { - if (elements[i + 1].type != QPIEvaluatorTypes::etOperator) { - cnum = elements[i + 1].num; - elements[i].set(QPIEvaluatorTypes::etNumber, cnum); - tmps.replace(i, 1, fc); - ///cout << "found sign " << cc << " :" << cnum - 1 << endl; - if (cc == '-' && currentVariables.size() >= cnum) - currentVariables[cnum - 1].value = -currentVariables[cnum - 1].value; - //i++; - continue; - } - } - } - if (isSign(cc)) { - elements[i].set(QPIEvaluatorTypes::etOperator, -1); - continue; - } - } - /* - qDebug().nospace() << tmps; - cout << " "; - for (int i = 0; i < elements.size(); i++) { - switch (elements[i].type) { - case etFunction: cout << "f"; break; - case etNumber: cout << "n"; break; - case etOperator: cout << "o"; break; - case etVariable: cout << "v"; break; - } - } - cout << endl; - */ - return false; - //for (int i = 0; i < currentVariables.size(); i++) qDebug() << "var " << i << ": " << currentVariables[i].value.real(); -} - - -bool QPIEvaluator::setSignes() { - int inserted = 0, ni, pi = 0, needInsert = 0; - QChar fc, sc, pc; - QString tmps = currentString; - for (int i = 0; i < tmps.length() - 1; i++) { - needInsert = 0; - ni = i + 1; - if (i > 0) pi = i - 1; - fc = tmps[i].toLower(); - sc = tmps[ni].toLower(); - pc = tmps[pi].toLower(); - //if (elements[i].type == etOperator || elements[ni].type == etVariable) continue; - if (fc == ',' || sc == ',') continue; - if (elements[i].type == QPIEvaluatorTypes::etOperator && elements[ni].type == QPIEvaluatorTypes::etOperator) continue; - if (fc == ')' && (elements[ni].type == QPIEvaluatorTypes::etNumber || elements[ni].type == QPIEvaluatorTypes::etVariable || elements[ni].type == QPIEvaluatorTypes::etFunction)) needInsert = 1; - if (sc == '(' && (elements[i].type == QPIEvaluatorTypes::etNumber || elements[i].type == QPIEvaluatorTypes::etVariable)) needInsert = 1; - if (elements[i].type == QPIEvaluatorTypes::etNumber && elements[ni].type == QPIEvaluatorTypes::etNumber && elements[i].num != elements[ni].num) needInsert = 1; - if (elements[i].type == QPIEvaluatorTypes::etVariable && elements[ni].type == QPIEvaluatorTypes::etVariable && elements[i].num != elements[ni].num) needInsert = 1; - if ((elements[i].type == QPIEvaluatorTypes::etNumber && elements[ni].type == QPIEvaluatorTypes::etVariable) || (elements[i].type == QPIEvaluatorTypes::etVariable && elements[ni].type == QPIEvaluatorTypes::etNumber)) needInsert = 1; - if ((elements[i].type == QPIEvaluatorTypes::etNumber || elements[i].type == QPIEvaluatorTypes::etVariable) && elements[ni].type == QPIEvaluatorTypes::etFunction) needInsert = 1; - if (elements[i].type == QPIEvaluatorTypes::etFunction && elements[ni].type == QPIEvaluatorTypes::etFunction && elements[i].num != elements[ni].num) needInsert = 2; - if (elements[i].type == QPIEvaluatorTypes::etFunction && elements[ni].type != QPIEvaluatorTypes::etFunction && sc != '(') needInsert = 2; - if (elements[pi].type == QPIEvaluatorTypes::etOperator && (elements[ni].type == QPIEvaluatorTypes::etFunction || elements[ni].type == QPIEvaluatorTypes::etVariable) && fc == '-') needInsert = 3; - switch (needInsert) { - case 1: - currentString.insert(ni + inserted, "*"); - elements.insert(ni + inserted, QPIEvaluatorTypes::Element(QPIEvaluatorTypes::etOperator, -1)); - //inserted++; - //i++; - return true; - /*case 2: - currentString.insert(ni + inserted, ")"); - currentString.insert(ni + inserted, "("); - elements.insert(ni + inserted, Element(etOperator, -1)); - elements.insert(ni + inserted, Element(etOperator, -1)); - inserted++; - i++; - return true;*/ - case 3: - currentString.insert(ni + inserted, "1*"); - elements.insert(ni + inserted, QPIEvaluatorTypes::Element(QPIEvaluatorTypes::etOperator, -1)); - //inserted; - //i++; - return true; - } - } - /*if (elements[tmps.length() - 1].type == etFunction) { - currentString.insert(tmps.length() + inserted, ")"); - currentString.insert(tmps.length() + inserted, "("); - elements.insert(tmps.length() + inserted, Element(etOperator, -1)); - elements.insert(tmps.length() + inserted, Element(etOperator, -1)); - return true; - }*/ - return false; -} - - -void QPIEvaluator::convert() { - int j; - QPIEvaluatorTypes::Element ce, pe; - for (int i = 0; i < currentString.length(); i++) { - pe = elements[i]; - if (pe.type != QPIEvaluatorTypes::etFunction) continue; - j = i + 1; - while (j < currentString.length()) { - ce = elements[j]; - if (ce != pe) break; - j++; - } - currentString.replace(i, j - i, " "); - for (int k = i + 1; k < j; k++) elements.remove(i); - //i++; - } - for (int i = 0; i < currentString.length(); i++) { - pe = elements[i]; - if (pe.type != QPIEvaluatorTypes::etNumber) continue; - j = i + 1; - while (j < currentString.length()) { - ce = elements[j]; - if (ce != pe) break; - j++; - } - currentString.replace(i, j - i, " "); - for (int k = i + 1; k < j; k++) elements.remove(i); - //i++; - } - for (int i = 0; i < currentString.length(); i++) { - pe = elements[i]; - if (pe.type != QPIEvaluatorTypes::etVariable) continue; - j = i + 1; - while (j < currentString.length()) { - ce = elements[j]; - if (ce != pe) break; - j++; - } - currentString.replace(i, j - i, " "); - for (int k = i + 1; k < j; k++) elements.remove(i); - //i++; - } - /*qDebug().nospace() << currentString; - cout << " "; - for (int i = 0; i < elements.size(); i++) { - switch (elements[i].type) { - case etFunction: cout << "f"; break; - case etNumber: cout << "n"; break; - case etOperator: cout << "o"; break; - case etVariable: cout << "v"; break; - } - } - cout << endl;*/ -} - - - -const QString & QPIEvaluator::preprocess(const QString & string) { - static QString ret; - int lind; - ret = prepare(string); - convert(); - instructions.clear(); - //qDebug() << preproc->currentString; - variables = currentVariables; - lind = parse(currentString); - if (instructions.size() == 0) { - variables.push_back(QPIEvaluatorTypes::Variable()); - instructions.push_back(QPIEvaluatorTypes::Instruction(QPIEvaluatorTypes::oNone, QVector(1, lind), -variables.size())); - } - kvars = &(content.variables); - /* - cout << endl << "variables:" << endl; - for (int i = 0; i < variables.size(); i++) - cout << i << " value = " << variables[i].value << endl; - - cout << endl << "instructions:" << endl; - for (int i = 0; i < instructions.size(); i++) { - cout << i << endl; - cout << " operation " << instructions[i].operation << endl; - cout << " operators: "; - for (int j = 0; j < instructions[i].operators.size(); j++) - cout << instructions[i].operators[j] << "; "; - cout << endl << " function " << instructions[i].function << endl; - cout << " out " << instructions[i].out << endl; - } - */ - makeOutput(ret); - return ret; -} - - -QPIEvaluatorTypes::Operation QPIEvaluator::operationInOrder(const int & index) { - switch (index) { - case 0: return QPIEvaluatorTypes::oPower; - case 1: return QPIEvaluatorTypes::oMultiply; - case 2: return QPIEvaluatorTypes::oDivide; - case 3: return QPIEvaluatorTypes::oResidue; - case 4: return QPIEvaluatorTypes::oAdd; - case 5: return QPIEvaluatorTypes::oSubtract; - case 6: return QPIEvaluatorTypes::oEqual; - case 7: return QPIEvaluatorTypes::oNotEqual; - case 8: return QPIEvaluatorTypes::oGreaterEqual; - case 9: return QPIEvaluatorTypes::oSmallerEqual; - case 10: return QPIEvaluatorTypes::oGreater; - case 11: return QPIEvaluatorTypes::oSmaller; - case 12: return QPIEvaluatorTypes::oAnd; - case 13: return QPIEvaluatorTypes::oOr; - default: return QPIEvaluatorTypes::oNone; - } -} - - -int QPIEvaluator::parse(const QString & string, int offset) { - int slen = string.length(), /*facnt,*/ farg, bcnt, k; - QChar cc; - QPIEvaluatorTypes::Element ce; - QPIEvaluatorTypes::Function cfunc; - QPIEvaluatorTypes::Operation coper; - QString sbrackets, carg; - QVector args, atmp; - QVector opers; - - ///qDebug() << "to parse :" + string; - ///cout << " "; for (int i = 0; i < slen; i++) cout << preproc->elements[i + offset].type; cout << endl; - - for (int i = 0; i < slen; i++) { - ce = elements[i + offset]; - cc = string[i]; - switch (ce.type) { - case QPIEvaluatorTypes::etNumber: - args.push_back(ce.var_num); - continue; - case QPIEvaluatorTypes::etVariable: - args.push_back(ce.var_num); - continue; - case QPIEvaluatorTypes::etFunction: - i++; - cfunc = content.function(ce.var_num); - //facnt = cfunc.arguments; - atmp.clear(); - bcnt = farg = 1; - ///qDebug() << "function: " + cfunc.identifier; - //for (int k = 0; k < facnt; k++) { - carg = ""; - k = i + 1; - //if (string.size() <= k || k < 0) return -666; - while (bcnt > 0) { - //if (k < facnt - 1) fcomma = string.indexOf(',', j); - cc = string[k]; - switch (cc.toLatin1()) { - case '(': bcnt++; break; - case ')': - bcnt--; - if (bcnt == 0) { - ///qDebug() << "arument: " << carg; - atmp.push_back(parse(carg, k + offset - carg.length())); - k++; - carg = ""; - if (atmp.size() > 0) if (atmp.back() < 0 && farg > 0) farg = atmp.back(); - continue; - } - break; - case ',': - if (bcnt == 1) { - ///qDebug() << "arument: " << carg; - atmp.push_back(parse(carg, k + offset - carg.length())); - k++; - carg = ""; - if (atmp.size() > 0) if (atmp.back() < 0 && farg > 0) farg = atmp.back(); - continue; - } - break; - } - carg += cc; - k++; - } - i = k - 1; - if (farg > 0) { - variables.push_back(QPIEvaluatorTypes::Variable()); - farg = -variables.size(); - } - instructions.push_back(QPIEvaluatorTypes::Instruction(QPIEvaluatorTypes::oFunction, atmp, farg, ce.var_num)); - args.push_back(farg); - //for (int i = 0; i < args.size(); i++) cout << preproc->currentVariables[-args[i]].value << endl; - //i = j + 1; - continue; - case QPIEvaluatorTypes::etOperator: - //qDebug() << "operator: " << cc; - if (cc == '(') { - sbrackets = inBrackets(string.right(slen - i)); - args.push_back(parse(sbrackets, i + offset + 1)); - i += sbrackets.length() + 1; - continue; - } - if (cc == '+') {opers.push_back(QPIEvaluatorTypes::oAdd); continue;} - if (cc == '-') {opers.push_back(QPIEvaluatorTypes::oSubtract); continue;} - if (cc == '*') {opers.push_back(QPIEvaluatorTypes::oMultiply); continue;} - if (cc == '/') {opers.push_back(QPIEvaluatorTypes::oDivide); continue;} - if (cc == '%') {opers.push_back(QPIEvaluatorTypes::oResidue); continue;} - if (cc == '^') {opers.push_back(QPIEvaluatorTypes::oPower); continue;} - if (cc == '=') {opers.push_back(QPIEvaluatorTypes::oEqual); continue;} - if (cc == ':') {opers.push_back(QPIEvaluatorTypes::oNotEqual); continue;} - if (cc == '}') {opers.push_back(QPIEvaluatorTypes::oGreaterEqual); continue;} - if (cc == '{') {opers.push_back(QPIEvaluatorTypes::oSmallerEqual); continue;} - if (cc == '>') {opers.push_back(QPIEvaluatorTypes::oGreater); continue;} - if (cc == '<') {opers.push_back(QPIEvaluatorTypes::oSmaller); continue;} - if (cc == '&') {opers.push_back(QPIEvaluatorTypes::oAnd); continue;} - if (cc == '|') {opers.push_back(QPIEvaluatorTypes::oOr); continue;} - } - } - /* - cout << "stack: " << endl << "args: "; - for (int i = 0; i < args.size(); i++) cout << args[i] << ", "; - cout << endl << "opers: "; - for (int i = 0; i < opers.size(); i++) cout << opers[i] << ", "; - */ - if (opers.size() == 0) { - if (args.size() > 0) return args.back(); - else return -666; - } - for (int i = 0; i < QPIEvaluatorTypes::operationCount; i++) { - coper = operationInOrder(i); - for (int j = 0; j < opers.size(); j++) { - if (coper == QPIEvaluatorTypes::oDivide || coper == QPIEvaluatorTypes::oMultiply) { - if (opers[j] != QPIEvaluatorTypes::oDivide && opers[j] != QPIEvaluatorTypes::oMultiply) continue; - } else { - if (opers[j] != coper) continue; - } - atmp.clear(); - if (j < args.size() && j >= 0) atmp.push_back(args[j]); - else atmp.push_back(-666); - if (j + 1 < args.size() && j >= -1) atmp.push_back(args[j + 1]); - else atmp.push_back(-666); - farg = 1; - if (atmp[0] < 0) farg = atmp[0]; - else { - if (atmp[1] < 0) farg = atmp[1]; - else { - variables.push_back(QPIEvaluatorTypes::Variable()); - farg = -variables.size(); - } - } - instructions.push_back(QPIEvaluatorTypes::Instruction(opers[j], atmp, farg)); - if (j >= 0 && j < args.size()) { - args.remove(j); - if (j < args.size()) args[j] = farg; - } - opers.remove(j); - j--; - } - } - return instructions.back().out; - ///cout << endl; -} - - -bool QPIEvaluator::check() { - QPIEvaluatorTypes::Instruction ci; - bool error; - if (unknownVars.size() > 0) { - lastError = "Unknown variables: \"" + unknownVars.join("\", \"") + "\""; - return false; - } - for (int i = 0; i < instructions.size(); i++) { - error = false; - ci = instructions[i]; - switch (ci.operation) { - case QPIEvaluatorTypes::oNone: break; - case QPIEvaluatorTypes::oFunction: - for (int j = 0; j < ci.operators.size(); j++) { - if (ci.operators[j] == -666) { //(ci.operators[j] < -variables.size() || ci.operators[j] >= kvars->size()) { - error = true; - break; - } - } - if (ci.operators.size() != content.function(ci.function).arguments || error) { - lastError = "Invalid arguments count for function \"" + content.function(ci.function).identifier + "\""; - return false; - } - break; - default: - if (ci.operators[0] == -666 || ci.operators[1] == -666) error = true; - if (ci.operators.size() != 2 || error) { - lastError = "Invalid arguments count for operation \" " + operationChar(ci.operation) + " \""; - return false; - } - break; - } - if (ci.out < -variables.size()) { - lastError = "Invalid variable index \"" + QString::number(ci.out) + "\""; - return false; - } - for (int j = 0; j < ci.operators.size(); j++) { - if (ci.operators[j] < -variables.size() || ci.operators[j] >= kvars->size()) { - lastError = "Invalid variable index \"" + QString::number(ci.operators[j]) + "\""; - return false; - } - } - } - return true; -} - - -QString QPIEvaluator::inBrackets(const QString & string) { - int slen = string.length(), bcnt = 0; - QChar cc; - for (int i = 0; i < slen; i++) { - cc = string[i]; - if (cc == '(') bcnt++; - if (cc == ')') { - bcnt--; - if (bcnt == 0) return string.mid(1, i - 1); - } - } - return QString(); -} - - -QString QPIEvaluator::operationChar(const QPIEvaluatorTypes::Operation & operation) { - switch (operation) { - case QPIEvaluatorTypes::oAdd: return "+"; - case QPIEvaluatorTypes::oSubtract: return "-"; - case QPIEvaluatorTypes::oMultiply: return "*"; - case QPIEvaluatorTypes::oDivide: return "/"; - case QPIEvaluatorTypes::oPower: return "^"; - case QPIEvaluatorTypes::oResidue: return "%"; - case QPIEvaluatorTypes::oEqual: return "="; - case QPIEvaluatorTypes::oNotEqual: return ("≠"); - case QPIEvaluatorTypes::oGreaterEqual: return ("≥"); - case QPIEvaluatorTypes::oSmallerEqual: return ("≤"); - case QPIEvaluatorTypes::oGreater: return ">"; - case QPIEvaluatorTypes::oSmaller: return "<"; - case QPIEvaluatorTypes::oAnd: return ("⋀"); - case QPIEvaluatorTypes::oOr: return ("⋁"); - default: return "???"; - } -} - - -inline complexd QPIEvaluator::residue(const complexd & f, const complexd & s) { - complexd ret; - if (s.real() != 0.) ret = complexd(f.real() - ((int)(f.real() / s.real())) * s.real(), 0.); - if (s.imag() != 0.) ret = complexd(ret.real(), f.imag() - ((int)(f.imag() / s.imag())) * s.imag()); - return ret; -} - - -inline void QPIEvaluator::execFunction(const QPIEvaluatorTypes::Instruction & ci) { - QPIEvaluatorTypes::Function cfunc = content.function(ci.function); - int oi = -ci.out - 1; - complexd tmp, stmp; - double ldtmp; - //qDebug() << "function " << (int)cfunc.type; - switch (cfunc.type) { - case QPIEvaluatorTypes::bfSin: - tmpvars[oi].value = sin(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfCos: - tmpvars[oi].value = cos(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfTg: - tmpvars[oi].value = tan(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfCtg: - tmp = tan(value(ci.operators[0])); - if (tmp == complexd_0) tmpvars[oi].value = 0.; - else tmpvars[oi].value = complexd_1 / tmp; - break; - case QPIEvaluatorTypes::bfArcsin: - tmpvars[oi].value = asinc_qpie(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfArccos: - tmpvars[oi].value = acosc_qpie(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfArctg: - tmpvars[oi].value = atanc_qpie(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfArcctg: - tmp = atanc_qpie(value(ci.operators[0])); - if (tmp == complexd_0) tmpvars[oi].value = 0.; - else tmpvars[oi].value = complexd_1 / tmp; - break; - case QPIEvaluatorTypes::bfSh: - tmpvars[oi].value = sinh(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfCh: - tmpvars[oi].value = cosh(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfTh: - tmpvars[oi].value = tanh(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfCth: - tmp = tanh(value(ci.operators[0])); - if (tmp == complexd_0) tmpvars[oi].value = 0.; - else tmpvars[oi].value = complexd_1 / tmp; - break; - case QPIEvaluatorTypes::bfAbs: - tmpvars[oi].value = abs(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfSqrt: - tmpvars[oi].value = sqrt(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfSqr: - tmpvars[oi].value = value(ci.operators[0]) * value(ci.operators[0]); - break; - case QPIEvaluatorTypes::bfExp: - tmpvars[oi].value = exp(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfPow: - tmpvars[oi].value = pow(value(ci.operators[0]), value(ci.operators[1])); - break; - case QPIEvaluatorTypes::bfLn: - tmpvars[oi].value = log(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfLg: - tmpvars[oi].value = log10(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfLog: - tmp = log(value(ci.operators[1])); - if (tmp == complexd_0) tmpvars[oi].value = 0.; - else tmpvars[oi].value = log(value(ci.operators[0])) / tmp; - break; - case QPIEvaluatorTypes::bfRe: - tmpvars[oi].value = value(ci.operators[0]).real(); - break; - case QPIEvaluatorTypes::bfIm: - tmpvars[oi].value = value(ci.operators[0]).imag(); - break; - case QPIEvaluatorTypes::bfArg: - tmpvars[oi].value = arg(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfLen: - tmpvars[oi].value = abs(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfConj: - tmpvars[oi].value = conj(value(ci.operators[0])); - break; - case QPIEvaluatorTypes::bfSign: - ldtmp = value(ci.operators[0]).real(); - tmpvars[oi].value = ldtmp >= 0. ? complexd_1 : -complexd_1; - break; - case QPIEvaluatorTypes::bfRad: - tmpvars[oi].value = value(ci.operators[0]) * complexd(deg2rad_qpie, 0.); - break; - case QPIEvaluatorTypes::bfDeg: - tmpvars[oi].value = value(ci.operators[0]) * complexd(rad2deg_qpie, 0.); - break; - case QPIEvaluatorTypes::bfRandom: - tmp = static_cast(qrand()) / RAND_MAX; - stmp = value(ci.operators[1]) - value(ci.operators[0]); - tmpvars[oi].value = value(ci.operators[0]) + tmp * stmp; - break; - default: break; - } -} - - -inline bool QPIEvaluator::execInstructions() { - QPIEvaluatorTypes::Instruction ci; - int oi; - complexd tmp; - tmpvars = variables; - //cout << "var count " << tmpvars.size() << endl; - for (int i = 0; i < instructions.size(); i++) { - ci = instructions[i]; - oi = -ci.out - 1; - //cout << value(ci.operators[0]) << operationChar(ci.operation) << value(ci.operators[1]) << ", " << oi << endl; - switch (ci.operation) { - case QPIEvaluatorTypes::oAdd: - tmpvars[oi].value = value(ci.operators[0]) + value(ci.operators[1]); - break; - case QPIEvaluatorTypes::oSubtract: - tmpvars[oi].value = value(ci.operators[0]) - value(ci.operators[1]); - break; - case QPIEvaluatorTypes::oMultiply: - tmpvars[oi].value = value(ci.operators[0]) * value(ci.operators[1]); - break; - case QPIEvaluatorTypes::oDivide: - tmp = value(ci.operators[1]); - if (tmp == complexd(0., 0.)) tmpvars[oi].value = 0.; - else tmpvars[oi].value = value(ci.operators[0]) / tmp; - break; - case QPIEvaluatorTypes::oResidue: - tmpvars[oi].value = residue(value(ci.operators[0]), value(ci.operators[1])); - break; - case QPIEvaluatorTypes::oPower: - tmpvars[oi].value = pow(value(ci.operators[0]), value(ci.operators[1])); - break; - case QPIEvaluatorTypes::oEqual: - tmpvars[oi].value = value(ci.operators[0]) == value(ci.operators[1]); - break; - case QPIEvaluatorTypes::oNotEqual: - tmpvars[oi].value = value(ci.operators[0]) != value(ci.operators[1]); - break; - case QPIEvaluatorTypes::oGreaterEqual: - tmpvars[oi].value = value(ci.operators[0]).real() >= value(ci.operators[1]).real(); - break; - case QPIEvaluatorTypes::oSmallerEqual: - tmpvars[oi].value = value(ci.operators[0]).real() <= value(ci.operators[1]).real(); - break; - case QPIEvaluatorTypes::oGreater: - tmpvars[oi].value = value(ci.operators[0]).real() > value(ci.operators[1]).real(); - break; - case QPIEvaluatorTypes::oSmaller: - tmpvars[oi].value = value(ci.operators[0]).real() < value(ci.operators[1]).real(); - break; - case QPIEvaluatorTypes::oAnd: - tmpvars[oi].value = value(ci.operators[0]).real() > 0. && value(ci.operators[1]).real() > 0.; - break; - case QPIEvaluatorTypes::oOr: - tmpvars[oi].value = value(ci.operators[0]).real() > 0. || value(ci.operators[1]).real() > 0.; - break; - case QPIEvaluatorTypes::oFunction: - execFunction(ci); - break; - case QPIEvaluatorTypes::oNone: - tmpvars[oi].value = value(ci.operators[0]); - break; - } - } - if (!instructions.isEmpty()) - out = value(instructions.back().out); - return true; -} - - -bool QPIEvaluator::check(const QString & string) { - currentString = preprocess(string); - correct = check(); - if (!correct) - return false; - lastError = "Correct"; - return true; -} - - -int QPIEvaluator::setVariable(const QString & name, complexd value) { - int i = content.findVariable(name); - if (i < 0) { - content.addVariable(name, value); - return content.findVariable(name); - } else { - content.setVariableValue(i, value); - return i; - } - return -1; -} - - -complexd QPIEvaluator::evaluate() { - if (!execInstructions()) out = 0.; - if (fabs(out.real()) < 1E-300) out = complexd(0., out.imag()); - if (fabs(out.imag()) < 1E-300) out = complexd(out.real(), 0.); - return out; -} diff --git a/test/qad/utils/qpievaluator.h b/test/qad/utils/qpievaluator.h deleted file mode 100644 index d8213ad..0000000 --- a/test/qad/utils/qpievaluator.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef QPIEVALUATOR_H -#define QPIEVALUATOR_H - -#include -#include -#include -#include -#include -#include - -#ifndef PIP_MATH_COMPLEX -#define QPIEVALUATOR_COMPLEX -typedef std::complex complexd; -const complexd complexd_i(0., 1.); -const complexd complexd_0(0.); -const complexd complexd_1(1.); -#endif -const double deg2rad_qpie = atan(1.) / 45.; -const double rad2deg_qpie = 45. / atan(1.); - -inline complexd round_qpie(const complexd & c) {return complexd(round(c.real()), round(c.imag()));} -inline complexd floor_qpie(const complexd & c) {return complexd(floor(c.real()), floor(c.imag()));} -inline complexd ceil_qpie(const complexd & c) {return complexd(ceil(c.real()), ceil(c.imag()));} -inline complexd atanc_qpie(const complexd & c) {return -complexd(-0.5, 1.) * log((complexd_1 + complexd_i * c) / (complexd_1 - complexd_i * c));} -inline complexd asinc_qpie(const complexd & c) {return -complexd_i * log(complexd_i * c + sqrt(complexd_1 - c * c));} -inline complexd acosc_qpie(const complexd & c) {return -complexd_i * log(c + complexd_i * sqrt(complexd_1 - c * c));} - -namespace QPIEvaluatorTypes { - static const int operationCount = 14; - - enum eType {etNumber, etOperator, etVariable, etFunction}; - enum Operation {oNone, oAdd, oSubtract, oMultiply, oDivide, oResidue, oPower, - oEqual, oNotEqual, oGreater, oSmaller, oGreaterEqual, oSmallerEqual, - oAnd, oOr, oFunction}; - enum BaseFunctions {bfUnknown, bfSin, bfCos, bfTg, bfCtg, - bfArcsin, bfArccos, bfArctg, bfArcctg, - bfExp, bfRandom, bfSh, bfCh, bfTh, bfCth, - bfSqrt, bfSqr, bfPow, bfAbs, - bfLn, bfLg, bfLog, bfSign, - bfIm, bfRe, bfArg, bfLen, bfConj, - bfRad, bfDeg}; - - struct Instruction { - Instruction() {;} - Instruction(Operation oper, QVector opers, int out_ind, int func = -1) { - operation = oper; operators = opers; out = out_ind; function = func;} - Operation operation; - QVector operators; - int out; - int function;}; - struct Element { - Element() {;} - Element(eType new_type, int new_num, int new_var_num = -1) {set(new_type, new_num, new_var_num);} - void set(eType new_type, int new_num, int new_var_num = -1) {type = new_type; num = new_num; var_num = new_var_num;} - eType type; - int num; - int var_num;}; - struct Function { - Function() {arguments = 0; type = bfUnknown;} - Function(const QString & name, int args, BaseFunctions ftype) {identifier = name; arguments = args; type = ftype;} - QString identifier; - BaseFunctions type; - int arguments;}; - struct Variable { - Variable() {value = 0.;} - Variable(const QString & var_name, complexd val) {name = var_name; value = val;} - QString name; - complexd value;}; - inline bool operator <(const Variable & s1, const Variable & s2) { - if (s1.name.size() != s2.name.size()) - return s1.name.size() > s2.name.size(); - return s1.name > s2.name; - } -}; -/* - ≠ : - ≥ } - ≤ { - ⋀ & - ⋁ | -*/ -class QPIEvaluatorContent -{ - friend class QPIEvaluator; -public: - QPIEvaluatorContent(); - ~QPIEvaluatorContent() {;} - - void addFunction(const QString & name, int args = 1) {functions.push_back(QPIEvaluatorTypes::Function(name, args, getBaseFunction(name)));} - void addVariable(const QString & name, const complexd & val = 0., bool sort = true) {variables.push_back(QPIEvaluatorTypes::Variable(name, val)); if (sort) sortVariables();} - int functionsCount() const {return functions.size();} - int variablesCount() const {return variables.size();} - int customVariablesCount() const {return variables.size() - cv_count;} - int findFunction(const QString & name) const {return func_index.value(name, -1);} - int findVariable(const QString & name) const {return var_index.value(name, -1);} - QPIEvaluatorTypes::Function function(int index) {if (index < 0 || index >= functions.size()) return QPIEvaluatorTypes::Function(); return functions[index];} - QPIEvaluatorTypes::Variable variable(int index) {if (index < 0 || index >= variables.size()) return QPIEvaluatorTypes::Variable(); return variables[index];} - QPIEvaluatorTypes::Function function(const QString & name) {return function(findFunction(name));} - QPIEvaluatorTypes::Variable variable(const QString & name) {return variable(findVariable(name));} - QPIEvaluatorTypes::Variable customVariable(int index) {if (index < cv_count || index >= variables.size() + cv_count) return QPIEvaluatorTypes::Variable(); return variables[index + cv_count];} - bool setVariableValue(int index, complexd new_value); - bool setVariableName(int index, const QString & new_name); - bool setVariableValue(const QString & var_name, const complexd & new_value) {return setVariableValue(findVariable(var_name), new_value);} - bool setVariableName(const QString & var_name, const QString & new_name) {return setVariableName(findVariable(var_name), new_name);} - void removeVariable(int index) {variables.remove(index);} - void removeVariable(const QString & var_name) {removeVariable(findVariable(var_name));} - void clearCustomVariables(); - void sortVariables(); - QPIEvaluatorTypes::BaseFunctions getBaseFunction(const QString & name); - -private: - QVector functions; - QVector variables; - QMap var_index, func_index; - int cv_count; - -}; - -class QPIEvaluator -{ -public: - QPIEvaluator() {correct = false ;} - ~QPIEvaluator() {;} - - bool check(const QString & string); - bool isCorrect() const {return correct;} - int setVariable(const QString & name, complexd value = 0.); - void setVariable(int index, complexd value = 0.) {if (index >= 0 && index < content.variablesCount()) content.setVariableValue(index, value);} - void setCustomVariableValue(int index, complexd value = 0.) {content.variables[index + content.cv_count].value = value;} - complexd evaluate(); - void removeVariable(const QString & name) {content.removeVariable(name);} - void clearCustomVariables() {content.clearCustomVariables();} - int variableIndex(const QString & name) const {return content.findVariable(name);} - const QStringList & unknownVariables() const {return unknownVars;} - const QString & expression() const {return currentString;} - const QString & error() const {return lastError;} - const complexd & lastResult() const {return out;} - static QString inBrackets(const QString & string); - - QPIEvaluatorContent content; - -private: - const QString & prepare(const QString & string); - const QString & preprocess(const QString & string); - int parse(const QString & string, int offset = 0); - void convert(); - void checkBrackets(); - void removeSpaces(); - void findUnknownVariables(); - void removeJunk(); - void replaceOperators(); - void makeOutput(QString & string); - bool fillElements(); - bool setSignes(); - bool isSign(const QChar & ch); - QString inverse(const QString & string) {int len = string.length(); QString s; for (int i = 0; i < len; i++) s += string[len - i - 1]; return s;} - bool check(); - bool execInstructions(); - QString operationChar(const QPIEvaluatorTypes::Operation & operation); - QPIEvaluatorTypes::Operation operationInOrder(const int & index); - complexd value(const int & index) {if (index < 0) return tmpvars[-index - 1].value; else return kvars->at(index).value;} - inline complexd residue(const complexd & f, const complexd & s); - inline void execFunction(const QPIEvaluatorTypes::Instruction & ci); - - QVector elements; - QVector currentVariables, variables, tmpvars, * kvars; - QVector instructions; - QStringList unknownVars; - QString currentString, lastError; - complexd out; - bool correct; - -}; - -inline bool operator ==(QPIEvaluatorTypes::Element e1, QPIEvaluatorTypes::Element e2) {return (e1.type == e2.type && e1.num == e2.num);} -inline bool operator !=(QPIEvaluatorTypes::Element e1, QPIEvaluatorTypes::Element e2) {return (e1.type != e2.type || e1.num != e2.num);} - -#endif // QPIEVALUATOR_H diff --git a/test/qad/widgets/CMakeLists.txt b/test/qad/widgets/CMakeLists.txt deleted file mode 100644 index 6d5872d..0000000 --- a/test/qad/widgets/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -qad_project(widgets "Gui;Widgets" "qad_utils") diff --git a/test/qad/widgets/chardialog.cpp b/test/qad/widgets/chardialog.cpp deleted file mode 100644 index 992564f..0000000 --- a/test/qad/widgets/chardialog.cpp +++ /dev/null @@ -1,151 +0,0 @@ -#include "chardialog.h" -#include "ui_chardialog.h" - - -CharDialog::CharDialog(QWidget * parent): QDialog(parent) { - ui = new Ui::CharDialog(); - ui->setupUi(this); - QChar c; - int k; - for (int i = 0; i < 256; ++i) { - for (int j = 0; j < 256; ++j) { - c = QChar(j, i); - k = c.category(); - if (chars.size() <= k) - chars.resize(k + 1); - if (!c.isPrint()) continue; - - chars[k].push_back(c); - } - } - size = 30; - QStringList cat; - cat << tr("No Category") << tr("Mark NonSpacing") << tr("Mark SpacingCombining") << tr("Mark Enclosing") - << tr("Number DecimalDigit") << tr("Number Letter") << tr("Number Other") << tr("Separator Space") - << tr("Separator Line") << tr("Separator Paragraph") << tr("Other Control") << tr("Other Format") - << tr("Other Surrogate") << tr("Other PrivateUse") << tr("Other NotAssigned") << tr("Letter Uppercase") - << tr("Letter Lowercase") << tr("Letter Titlecase") << tr("Letter Modifier") << tr("Letter Other") - << tr("Punctuation Connector") << tr("Punctuation Dash") << tr("Punctuation Open") << tr("Punctuation Close") - << tr("Punctuation InitialQuote") << tr("Punctuation FinalQuote") << tr("Punctuation Other") << tr("Symbol Math") - << tr("Symbol Currency") << tr("Symbol Modifier") << tr("Symbol Other"); - ui->comboCategory->addItems(cat); - ui->spinSize->setValue(size); - ui->comboCategory->setCurrentIndex(27); - ui->tableChars->viewport()->installEventFilter(this); -} - - -CharDialog::~CharDialog() { - delete ui; -} - - -void CharDialog::setCharFont(const QFont & f) { - QFont fnt = ui->tableChars->font(); - fnt.setFamily(f.family()); - ui->tableChars->setFont(fnt); -} - - -void CharDialog::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - ui->retranslateUi(this); - QStringList cat; - cat << tr("No Category") << tr("Mark NonSpacing") << tr("Mark SpacingCombining") << tr("Mark Enclosing") - << tr("Number DecimalDigit") << tr("Number Letter") << tr("Number Other") << tr("Separator Space") - << tr("Separator Line") << tr("Separator Paragraph") << tr("Other Control") << tr("Other Format") - << tr("Other Surrogate") << tr("Other PrivateUse") << tr("Other NotAssigned") << tr("Letter Uppercase") - << tr("Letter Lowercase") << tr("Letter Titlecase") << tr("Letter Modifier") << tr("Letter Other") - << tr("Punctuation Connector") << tr("Punctuation Dash") << tr("Punctuation Open") << tr("Punctuation Close") - << tr("Punctuation InitialQuote") << tr("Punctuation FinalQuote") << tr("Punctuation Other") << tr("Symbol Math") - << tr("Symbol Currency") << tr("Symbol Modifier") << tr("Symbol Other"); - int pi = ui->comboCategory->currentIndex(); - ui->comboCategory->clear(); - ui->comboCategory->addItems(cat); - ui->comboCategory->setCurrentIndex(pi); - return; - } - QDialog::changeEvent(e); -} - - -bool CharDialog::eventFilter(QObject * o, QEvent * e) { - if (o == ui->tableChars->viewport()) { - if (e->type() != QEvent::Wheel) - return QDialog::eventFilter(o, e); - qApp->sendEvent(ui->verticalScroll, e); - } - return QDialog::eventFilter(o, e); -} - - -void CharDialog::resizeEvent(QResizeEvent * ) { - int r = ui->tableChars->contentsRect().height() / csize, c = ui->tableChars->contentsRect().width() / csize; - ui->tableChars->setRowCount(r); - ui->tableChars->setColumnCount(c); - for (int i = 0; i < r; ++i) { - for (int j = 0; j < c; ++j) { - if (ui->tableChars->item(i, j) == 0) { - ui->tableChars->setItem(i, j, new QTableWidgetItem()); - ui->tableChars->item(i, j)->setTextAlignment(Qt::AlignCenter); - } - } - } - on_comboCategory_currentIndexChanged(ui->comboCategory->currentIndex()); -} - - -void CharDialog::clear() { - for (int i = 0; i < ui->tableChars->rowCount(); ++i) - for (int j = 0; j < ui->tableChars->columnCount(); ++j) - ui->tableChars->item(i, j)->setText(QString()); -} - - -void CharDialog::on_comboCategory_currentIndexChanged(int index) { - if (index < 0) return; - int r = ui->tableChars->rowCount(), c = ui->tableChars->columnCount(), m; - cur = &chars[index]; - if (r == 0) return; - m = (cur->size() - 2) / c - r + 1; - if (m < 0) m = 0; - ui->verticalScroll->setMinimum(0); - ui->verticalScroll->setMaximum(m); - on_verticalScroll_valueChanged(ui->verticalScroll->value()); -} - - -void CharDialog::on_verticalScroll_valueChanged(int index) { - int ci = ui->tableChars->columnCount() * index; - for (int i = 0; i < ui->tableChars->rowCount(); ++i) { - for (int j = 0; j < ui->tableChars->columnCount(); ++j) { - ++ci; - if (cur->size() > ci) ui->tableChars->item(i, j)->setText(cur->at(ci)); - else ui->tableChars->item(i, j)->setText(QString()); - } - } -} - - -void CharDialog::on_spinSize_valueChanged(int index) { - size = index; - csize = size * 2; - ui->tableChars->horizontalHeader()->setDefaultSectionSize(csize); - ui->tableChars->verticalHeader()->setDefaultSectionSize(csize); - on_comboCategory_currentIndexChanged(ui->comboCategory->currentIndex()); - QFont font = ui->tableChars->font(); - font.setPointSize(size); - ui->tableChars->setFont(font); - resizeEvent(0); -} - - -void CharDialog::on_tableChars_cellPressed(int row, int column) { - sel_char = ui->tableChars->item(row, column)->text()[0]; -} - - -void CharDialog::on_buttonBox_accepted() { - emit charSelected(sel_char); - accept(); -} diff --git a/test/qad/widgets/chardialog.h b/test/qad/widgets/chardialog.h deleted file mode 100644 index 675b611..0000000 --- a/test/qad/widgets/chardialog.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef CHARDIALOG_H -#define CHARDIALOG_H - -#include -#include -#include - -namespace Ui { - class CharDialog; -}; - -class CharDialog: public QDialog -{ - Q_OBJECT -public: - explicit CharDialog(QWidget * parent = 0); - ~CharDialog(); - - QChar selectedChar() {return sel_char;} - void setCharFont(const QFont & f); - -public slots: - -private: - void changeEvent(QEvent * e); - virtual bool eventFilter(QObject * o, QEvent * e); - virtual void resizeEvent(QResizeEvent * ); - void clear(); - - Ui::CharDialog * ui; - QVector > chars; - QVector * cur; - QChar sel_char; - int size, csize; - -private slots: - void on_comboCategory_currentIndexChanged(int index); - void on_verticalScroll_valueChanged(int index); - void on_spinSize_valueChanged(int index); - void on_tableChars_cellPressed(int row, int column); - void on_tableChars_cellDoubleClicked(int , int ) {on_buttonBox_accepted();} - void on_buttonBox_accepted(); - void on_buttonBox_rejected() {reject();} - -signals: - void charSelected(QChar ch); - -}; - -#endif // CHARDIALOG_H diff --git a/test/qad/widgets/chardialog.ui b/test/qad/widgets/chardialog.ui deleted file mode 100644 index 7548b62..0000000 --- a/test/qad/widgets/chardialog.ui +++ /dev/null @@ -1,92 +0,0 @@ - - - CharDialog - - - - 0 - 0 - 467 - 448 - - - - Choose symbol - - - - :/icons/icons/mbricks_128.png:/icons/icons/mbricks_128.png - - - - 2 - - - 2 - - - - - - 0 - 0 - - - - - - - - QAbstractItemView::NoEditTriggers - - - QAbstractItemView::SingleSelection - - - false - - - 24 - - - false - - - 24 - - - - - - - 0 - - - Qt::Vertical - - - - - - - 1 - - - 200 - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - - diff --git a/test/qad/widgets/clineedit.cpp b/test/qad/widgets/clineedit.cpp deleted file mode 100644 index bf0845c..0000000 --- a/test/qad/widgets/clineedit.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include "clineedit.h" -#include "qad_types.h" - - -CLineEdit::CLineEdit(QWidget * parent): QLineEdit(parent) { - cw = new QWidget(this); - clear_im.load(":/icons/edit-clear-locationbar-rtl.png"); - cw->setCursor(Qt::ArrowCursor); - cw->setToolTip(tr("Clear")); - cw->hide(); - cw->installEventFilter(this); - connect(this, SIGNAL(textChanged(QString)), this, SLOT(textChanged_(QString))); - int is = fontHeight(); - int m0, m1, m2, m3; - getTextMargins(&m0, &m1, &m2, &m3); - setTextMargins(m0, m1, m2 + (is * 1.2), m3); - //connect(cw, SIGNAL(mouseReleaseEvent(QMouseEvent * )), this, SLOT(clearMouseRelease(QMouseEvent * ))); -} - - -bool CLineEdit::eventFilter(QObject * o, QEvent * e) { - switch (e->type()) { - case QEvent::MouseButtonRelease: - clearMouseRelease((QMouseEvent * )e); - break; - case QEvent::Paint: - cwPaintEvent(); - break; - default : break; - } - return QLineEdit::eventFilter(o, e); -} - - -void CLineEdit::resizeEvent(QResizeEvent * e) { - QLineEdit::resizeEvent(e); - int is = fontHeight(), tm = (height() - is) / 2; - cw->setGeometry(width() - is - tm, tm, is, is); -} - - -void CLineEdit::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - cw->setToolTip(tr("Clear")); - return; - } - QLineEdit::changeEvent(e); -} - - -void CLineEdit::cwPaintEvent() { - QPainter p(cw); - p.setRenderHint(QPainter::SmoothPixmapTransform); - p.drawImage(cw->rect(), clear_im); -} - - -void CLineEdit::setDefaultText(const QString & t, bool set_text) { - dt = t; - if (set_text) { - setText(t); - emit textEdited(t); - cw->hide(); - return; - } - textChanged_(text()); -} diff --git a/test/qad/widgets/clineedit.h b/test/qad/widgets/clineedit.h deleted file mode 100644 index 2ee32b1..0000000 --- a/test/qad/widgets/clineedit.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef CLINEEDIT_H -#define CLINEEDIT_H - -#include -#include -#include -#include - - -class CLineEdit: public QLineEdit -{ - Q_OBJECT - Q_PROPERTY(QString defaultText READ defaultText WRITE setDefaultText) - -public: - explicit CLineEdit(QWidget * parent = 0); - ~CLineEdit() {delete cw;} - - const QString & defaultText() const {return dt;} - -protected: - QWidget * cw; - QString dt; - QImage clear_im; - -private: - bool eventFilter(QObject * o, QEvent * e); - void resizeEvent(QResizeEvent * ); - void changeEvent(QEvent * e); - void cwPaintEvent(); - -private slots: - void clearMouseRelease(QMouseEvent * e) {if (cw->rect().contains(e->pos())) clearClick();} - void textChanged_(QString text) {cw->setVisible(text != dt);} - -public slots: - void clearClick() {if (!isEnabled()) return; setText(dt); emit cleared(); emit textEdited(dt);} - void setDefaultText(const QString & t, bool set_text = false); - -signals: - void cleared(); - -}; - -#endif // CLINEEDIT_H diff --git a/test/qad/widgets/colorbutton.cpp b/test/qad/widgets/colorbutton.cpp deleted file mode 100644 index 215a05f..0000000 --- a/test/qad/widgets/colorbutton.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include "colorbutton.h" -#include -#include -#include - -ColorButton::ColorButton(QWidget * parent): QPushButton(parent) { - frame = false; - options = QColorDialog::ShowAlphaChannel; - back = new QWidget(this); - back->setAutoFillBackground(true); - back->show(); - pal = back->palette(); - pal.setBrush(back->backgroundRole(), QBrush(QImage(":/icons/alpha.png"))); - back->setPalette(pal); - label = new QFrame(this); - label->setAutoFillBackground(true); - label->setFrameStyle(QFrame::Panel | QFrame::Sunken); - label->show(); - pal = label->palette(); - menu.addAction(QIcon(":/icons/edit-copy.png"), tr("Copy"), this, SLOT(copy())); - menu.addAction(QIcon(":/icons/edit-paste.png"), tr("Paste"), this, SLOT(paste())); - menu.addSeparator(); - menu.addAction(tr("Mix with clipboard"), this, SLOT(mix())); - setAcceptDrops(true); - connect(this, SIGNAL(clicked(bool)), this, SLOT(clicked())); -} - - -ColorButton::~ColorButton() { - delete label; -} - - -void ColorButton::resizeEvent(QResizeEvent * ) { - if (frame) back->setGeometry(rect()); - else back->setGeometry(8, 5, width() - 16, height() - 12); - label->setGeometry(back->geometry()); -} - - -void ColorButton::mousePressEvent(QMouseEvent * e) { - pp = e->pos(); - if (e->buttons().testFlag(Qt::RightButton)) { - menu.popup(e->globalPos()); - return; - } - QPushButton::mousePressEvent(e); -} - - -void ColorButton::mouseMoveEvent(QMouseEvent * e) { - if (e->buttons().testFlag(Qt::LeftButton)) { - if ((e->pos() - pp).manhattanLength() > QApplication::startDragDistance()) { - setDown(false); - QDrag * drag = new QDrag(this); - QMimeData * data = new QMimeData(); - data->setColorData(color()); - drag->setMimeData(data); - drag->exec(Qt::CopyAction); - return; - } - } - QPushButton::mouseMoveEvent(e); -} - - -void ColorButton::dragEnterEvent(QDragEnterEvent * e) { - e->accept(); - QPushButton::dragEnterEvent(e); -} - - -void ColorButton::dropEvent(QDropEvent * e) { - const QMimeData * data = e->mimeData(); - QColor c = qvariant_cast(data->colorData()); - if (c.isValid()) { - setColor(c); - return; - } - c = QColor(data->text()); - if (c.isValid()) { - setColor(c); - return; - } - QPushButton::dropEvent(e); -} - - -void ColorButton::clicked() { - QColor ret = QColorDialog::getColor(color(), this, tr("Choose color"), options); - if (!ret.isValid()) return; - setColor(ret); -} - - -void ColorButton::mix() { - QColor c(QApplication::clipboard()->text()); - if (!c.isValid()) return; - QColor sc = color(); - setColor(QColor((c.red() + sc.red()) / 2, (c.green() + sc.green()) / 2, (c.blue() + sc.blue()) / 2, (c.alpha() + sc.alpha()) / 2)); -} - - -void ColorButton::setColor(const QColor & col) { - if (pal.color(label->backgroundRole()) == col) return; - if (options.testFlag(QColorDialog::ShowAlphaChannel)) - pal.setColor(label->backgroundRole(), col); - else - pal.setColor(label->backgroundRole(), QColor(col.red(), col.green(), col.blue())); - label->setPalette(pal); - emit colorChanged(color()); -} diff --git a/test/qad/widgets/colorbutton.h b/test/qad/widgets/colorbutton.h deleted file mode 100644 index 37eb4e9..0000000 --- a/test/qad/widgets/colorbutton.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef COLORBUTTON_H -#define COLORBUTTON_H - -#include -#include -#include -#include -#include -#include -#include -#include - - -class ColorButton: public QPushButton -{ - Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor) - Q_PROPERTY(bool useNativeDialog READ useNativeDialog WRITE setUseNativeDialog) - Q_PROPERTY(bool useAlphaChannel READ useAlphaChannel WRITE setUseAlphaChannel) - Q_PROPERTY(bool frameOnly READ frameOnly WRITE setFrameOnly) - -public: - explicit ColorButton(QWidget * parent = 0); - ~ColorButton(); - - QColor color() const {return pal.color(label->backgroundRole());} - bool useNativeDialog() const {return !options.testFlag(QColorDialog::DontUseNativeDialog);} - bool useAlphaChannel() const {return options.testFlag(QColorDialog::ShowAlphaChannel);} - bool frameOnly() const {return frame;} - -public slots: - void setColor(const QColor & col); - void setUseNativeDialog(bool yes) {if (yes) options &= ~QColorDialog::DontUseNativeDialog; else options |= QColorDialog::DontUseNativeDialog;} - void setUseAlphaChannel(bool yes) {if (yes) options |= QColorDialog::ShowAlphaChannel; else options &= ~QColorDialog::ShowAlphaChannel;} - void setFrameOnly(bool yes) {frame = yes; setFlat(frame); resizeEvent(0);} - -private: - void mousePressEvent(QMouseEvent * e); - void mouseMoveEvent(QMouseEvent * e); - void resizeEvent(QResizeEvent * ); - void dragEnterEvent(QDragEnterEvent * e); - void dropEvent(QDropEvent * e); - - QFrame * label; - QWidget * back; - QPalette pal; - QPoint pp; - QMenu menu; - QColorDialog::ColorDialogOptions options; - bool frame; - -private slots: - void clicked(); - void copy() {QApplication::clipboard()->setText(color().name());} - void paste() {QColor c(QApplication::clipboard()->text()); if (c.isValid()) setColor(c);} - void mix(); - -signals: - void colorChanged(QColor); - -}; - -#endif // COLORBUTTON_H diff --git a/test/qad/widgets/ecombobox.cpp b/test/qad/widgets/ecombobox.cpp deleted file mode 100644 index 30def57..0000000 --- a/test/qad/widgets/ecombobox.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include -#include -#include -#include "ecombobox.h" -#include "qad_types.h" - - -class EModel: public QStandardItemModel { -public: - EModel(QObject * parent = 0): QStandardItemModel(parent) { -#if QT_VERSION < 0x050000 - setSupportedDragActions(Qt::MoveAction); -#endif - } -protected: - virtual Qt::ItemFlags flags(const QModelIndex & index) const { - Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; - if (!index.isValid()) f |= Qt::ItemIsDropEnabled; - return f; - } -#if QT_VERSION >= 0x050000 - Qt::DropActions supportedDragActions() const {return Qt::MoveAction;} -#endif -}; - - -EComboBox::EComboBox(QWidget * parent): QComboBox(parent) { - setView(&iv); - setModel(new EModel()); - iv.setTextElideMode(Qt::ElideMiddle); - iv.setRootIsDecorated(false); - iv.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - iv.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - iv.setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - iv.setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - iv.setDragDropMode(QAbstractItemView::InternalMove); - iv.setMinimumHeight(100); - icon.setPixmap(QPixmap(":/icons/edit-find.png")); - icon.setScaledContents(true); - icon.setFixedSize(preferredIconSize(1.2, this)); - ifont = nfont = font(); - ifont.setItalic(true); -#if QT_VERSION >= 0x040700 - filter.setPlaceholderText(tr("Filter")); - filter.setFont(ifont); -#endif - header.setAutoFillBackground(true); - header.setLayout(new QBoxLayout(QBoxLayout::LeftToRight)); - header.layout()->setSpacing(2); - header.layout()->setContentsMargins(2, 0, 0, 0); - header.layout()->addWidget(&icon); - header.layout()->addWidget(&filter); - header.setParent(iv.header()); - connect(&filter, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString))); -} - - -QSize EComboBox::sizeHint() const { - QSize s = QComboBox::sizeHint(); - s.setWidth(s.width() + 16); - return s; -} - - -void EComboBox::showPopup() { - filterChanged(filter.text(), true); - QComboBox::showPopup(); - QRect r = iv.header()->rect(); - header.setGeometry(r.x(), r.y(), r.width(), r.height() - 1); - filter.setFocus(); -} - - -void EComboBox::filterChanged(const QString & text, bool first) { - if (filter.text().isEmpty()) filter.setFont(ifont); - else filter.setFont(nfont); - iv.hide(); - QModelIndex pi = iv.rootIndex(); - if (text.isEmpty()) { - for (int i = 0; i < iv.model()->rowCount(); ++i) { - iv.setRowHidden(i, pi, false); - iv.model()->setData(iv.model()->index(i, 0), iv.model()->index(i, 0, pi).data().toString(), Qt::ToolTipRole); - } - iv.show(); - if (first) return; - hidePopup(); - showPopup(); - qApp->processEvents(); - QRect r = iv.header()->rect(); - header.setGeometry(r.x(), r.y(), r.width(), r.height() - 1); - return; - } - for (int i = 0; i < iv.model()->rowCount(); ++i) { - iv.setRowHidden(i, pi, !iv.model()->index(i, 0, pi).data().toString().contains(QRegExp(text, Qt::CaseInsensitive))); - iv.model()->setData(iv.model()->index(i, 0), iv.model()->index(i, 0, pi).data().toString(), Qt::ToolTipRole); - } - iv.show(); - qApp->processEvents(); - QRect r = iv.header()->rect(); - header.setGeometry(r.x(), r.y(), r.width(), r.height() - 1); -} diff --git a/test/qad/widgets/ecombobox.h b/test/qad/widgets/ecombobox.h deleted file mode 100644 index 4ad832a..0000000 --- a/test/qad/widgets/ecombobox.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ECOMBOBOX_H -#define ECOMBOBOX_H - -#include -#include -#include -#include -#include "clineedit.h" - - -class EComboBox: public QComboBox -{ - Q_OBJECT -public: - explicit EComboBox(QWidget * parent = 0); - - QSize sizeHint() const; - -public slots: - virtual void showPopup(); - -private: - QTreeView iv; - QWidget header; - QLabel icon; - CLineEdit filter; - QFont nfont, ifont; - -private slots: - void filterChanged(const QString & text, bool first = false); - -signals: - -}; - -#endif // ECOMBOBOX_H diff --git a/test/qad/widgets/evalspinbox.cpp b/test/qad/widgets/evalspinbox.cpp deleted file mode 100644 index 6bf2c8d..0000000 --- a/test/qad/widgets/evalspinbox.cpp +++ /dev/null @@ -1,337 +0,0 @@ -#include "evalspinbox.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include "qad_types.h" - - -EvalSpinBox::EvalSpinBox(QWidget * parent): QAbstractSpinBox(parent) { - status = new QWidget(lineEdit()); - cw = new QWidget(lineEdit()); - label = new QLabel(lineEdit()); -// label->hide(); - clear_im.load(":/icons/edit-clear-locationbar-rtl.png"); - icon_ok.load(":/icons/dialog-ok-apply.png"); - icon_fail.load(":/icons/dialog-warning.png"); - icon_calc.load(":/icons/tools-wizard.png"); - icon = icon_ok; - status->setCursor(Qt::ArrowCursor); - status->setToolTip("OK -> 0"); - status->hide(); - cw->setCursor(Qt::ArrowCursor); - cw->setToolTip(tr("Clear")); - cw->hide(); - cw_visible = false; - //lineEdit()->setStyleSheet("color: darkgreen;"); - //lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10)); - cw->installEventFilter(this); - status->installEventFilter(this); - connect(lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(textChanged_(QString))); - connect(this, SIGNAL(editingFinished()), this, SLOT(setExpression_())); - label->setText("0"); - //connect(cw, SIGNAL(mouseReleaseEvent(QMouseEvent * )), this, SLOT(clearMouseRelease(QMouseEvent * ))); -} - - -EvalSpinBox::~EvalSpinBox() { - delete cw; - delete status; - delete label; -} - - -bool EvalSpinBox::eventFilter(QObject * o, QEvent * e) { - switch (e->type()) { - case QEvent::MouseButtonRelease: - if (o == cw) clearMouseRelease((QMouseEvent * )e); - break; - case QEvent::Paint: - if (o == status) statusPaintEvent(); - if (o == cw) cwPaintEvent(); - break; - default : break; - } - return QAbstractSpinBox::eventFilter(o, e); -} - - -void EvalSpinBox::resizeIcons() { - int is = fontHeight(); - int tm = (lineEdit()->height() - is + 1) / 2; - QStyleOptionFrame so; - so.initFrom(lineEdit()); - QRect r = style()->subElementRect(QStyle::SE_LineEditContents, &so, lineEdit()); - int m0, m1, m2, m3; - lineEdit()->getTextMargins(&m0, &m1, &m2, &m3); - //label->setGeometry(m0 + r.x() + 2, m1 + r.y() + (r.height() - fontMetrics().height() + 1) / 2, lineEdit()->width() - 2*tm - (is * 1.2) * ((status->isVisible() ? 1 : 0) + (cw->isVisible() ? 1 : 0)), lineEdit()->height() - 2*tm); - int lwh = label->sizeHint().width(); - label->setGeometry(lineEdit()->width() - m0 - lwh + r.x() - 2, - m1 + r.y() + (r.height() - fontMetrics().height() + 1) / 2, - lwh,// - 2*tm - (is * 1.2) * ((status->isVisible() ? 1 : 0) + (cw->isVisible() ? 1 : 0)), - lineEdit()->height() - 2*tm); - status->setGeometry(lineEdit()->width() - (is + tm) * (cw->isVisible() ? 2 : 1), tm, is, is); - cw->setGeometry(lineEdit()->width() - (is + tm) * 1, tm, is, is); - lineEdit()->setTextMargins(m0, m1, (is * 1.2) * ((status->isVisible() ? 1 : 0) + (cw->isVisible() ? 1 : 0)), m3); -} - - -void EvalSpinBox::resizeEvent(QResizeEvent * e) { - QAbstractSpinBox::resizeEvent(e); - resizeIcons(); -} - - -void EvalSpinBox::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - cw->setToolTip(tr("Clear")); - return; - } - QAbstractSpinBox::changeEvent(e); -} - - -void EvalSpinBox::cwPaintEvent() { - QPainter p(cw); - p.setRenderHint(QPainter::SmoothPixmapTransform); - p.drawImage(cw->rect(), clear_im); -} - - -void EvalSpinBox::statusPaintEvent() { - QPainter p(status); - p.setRenderHint(QPainter::SmoothPixmapTransform); - p.drawImage(status->rect(), icon); -} - - -void EvalSpinBox::clearMouseRelease(QMouseEvent * e) { - if (cw->rect().contains(e->pos())) clear(); -} - - -void EvalSpinBox::textChanged_(const QString & text) { - double pv = value(); - QString t = text; - cw->setVisible(text != dt && cw_visible); - bool td = false; - if (t.endsWith('=')) { - td = true; - t.chop(1); - } - bool ok = eval.check(t); - if (ok) { - eval.evaluate(); - if (td) { - icon = icon_calc; - status->setToolTip("Enter to calc -> "+QString::number(value(), 'G', 10)); - } else { - icon = icon_ok; - status->setToolTip("OK -> "+QString::number(value(), 'G', 10)); - } -// qDebug() << "value =" << value(); - if (pv != value()) emit valueChanged(value()); - } else { - icon = icon_fail; - status->setToolTip(eval.error()); - } - resizeIcons(); -} - - -void EvalSpinBox::setExpression_() { - bool td = false; - double pv = value(); - QString t = text(); - if (t.endsWith('=')) { - td = true; - t.chop(1); - } - if (eval.check(t)) { - /*if (eval.expression() == "0") lineEdit()->clear(); - else*/ lineEdit()->setText(eval.expression()); - eval.evaluate(); - if (td) lineEdit()->setText(QString::number(value(), 'G', 10)); - status->setToolTip("OK -> " + QString::number(value(), 'G', 10)); - icon = icon_ok; - } else { - icon = icon_fail; - status->setToolTip(eval.error()); -// qDebug() << eval.expression(); - } - if (!label->isHidden()) { -// if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect()) -// label->setText("

    " + eval.expression() + " -> " + QString::number(value(), 'G', 10) + "

    "); -// else -// label->setText(eval.expression()); - if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect()) - label->setText("

    -> " + QString::number(value(), 'G', 10) + "

    "); - else - label->setText(""); - lineEdit()->blockSignals(true); - if (!eval.isCorrect()) { - lineEdit()->setStyleSheet("color: darkred;"); - status->show(); - } else { - lineEdit()->setStyleSheet(""); - status->hide(); - } - // lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10)); - //lineEdit()->setText(""); - lineEdit()->blockSignals(false); - } - -// qDebug() << "value =" << value(); - if (pv != value()) emit valueChanged(value()); -} - - -void EvalSpinBox::setExpression(const QString & expr) { - lineEdit()->setText(expr); - //if (eval.expression() == "0") lineEdit()->clear(); - cw->setVisible(text() != dt && cw_visible); - setExpression_(); -} - - -void EvalSpinBox::setValue(double val) { - lineEdit()->setText(QString::number(val, 'G', 16)); - //if (val == 0) lineEdit()->clear(); - cw->setVisible(text() != dt && cw_visible); - setExpression_(); -} - - -void EvalSpinBox::stepBy(int steps) { - stepByDouble(steps); -} - - -void EvalSpinBox::clear() { - lineEdit()->setText(dt); - setExpression_(); - cw->hide(); - resizeIcons(); - emit cleared(); -} - - -double EvalSpinBox::value() const { - if (eval.isCorrect()) { - return eval.lastResult().real(); - } - return 0.; -} - - -const QString & EvalSpinBox::expression() const { - return eval.expression(); -} - - -bool EvalSpinBox::isCleared() const { - return (dt == eval.expression() || (value() == 0 && dt.isEmpty())); -} - - -QSize EvalSpinBox::sizeHint() const { - QSize s = QAbstractSpinBox::sizeHint(); - s.setWidth(120); - return s; -} - - -QAbstractSpinBox::StepEnabled EvalSpinBox::stepEnabled() const { - return StepUpEnabled | StepDownEnabled; -} - - -void EvalSpinBox::focusInEvent(QFocusEvent * event) { -// qDebug() << "focus_in"; - label->hide(); - status->show(); - lineEdit()->blockSignals(true); - lineEdit()->setStyleSheet(""); - if (eval.expression() == "0") lineEdit()->clear(); - lineEdit()->blockSignals(false); - QAbstractSpinBox::focusInEvent(event); - resizeIcons(); -} - - -void EvalSpinBox::focusOutEvent(QFocusEvent * event) { - QAbstractSpinBox::focusOutEvent(event); -// qDebug() << eval.expression() << QString::number(value(), 'G', 10); -// if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect()) -// label->setText("

    " + eval.expression() + " -> " + QString::number(value(), 'G', 10) + "

    "); -// else -// label->setText(eval.expression()); - if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect()) - label->setText("

    -> " + QString::number(value(), 'G', 10) + "

    "); - else - label->setText(""); - label->show(); - lineEdit()->blockSignals(true); - if (!eval.isCorrect()) lineEdit()->setStyleSheet("color: darkred;"); - else status->hide(); -// lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10)); - //lineEdit()->clear(); - lineEdit()->blockSignals(false); - resizeIcons(); -} - - -void EvalSpinBox::wheelEvent(QWheelEvent * event) { - if (event->modifiers().testFlag(Qt::ShiftModifier)) - stepByDouble(event->delta() > 0 ? 0.1 : -0.1); - else - QAbstractSpinBox::wheelEvent(event); -} - - -void EvalSpinBox::stepByDouble(double steps) { - //qDebug() << "step" << steps; - if (isReadOnly()) return; - QString t = text(); - if (eval.check(t)) { - t = eval.expression(); - //QRegExp re("(\\-?\\d+)"); - QRegExp re("[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)"); - int pos = 0; - if ((pos = re.indexIn(t)) != -1) { - double v = t.mid(pos, re.matchedLength()).toDouble(); - v += steps; - t.remove(pos, re.matchedLength()); - t.insert(pos, QString::number(v)); - } else { - double v = steps; - t = QString::number(v) + t; - } - eval.check(t); - lineEdit()->setText(eval.expression()); - } -} - - -void EvalSpinBox::setDefaultText(const QString & t) { -// bool def = (!cw->isHidden()); - dt = t; -// if (def) { -// lineEdit()->setText(dt); -// setExpression_(); -// } - //if (t == eval.expression() || (value() == 0 && t.isEmpty())) clear(); - cw->setVisible((eval.expression() != dt || (dt.isEmpty() && eval.expression() == "0")) && cw_visible); - resizeIcons(); -} - - -void EvalSpinBox::setClearButtonVisible(bool visible) { - cw_visible = visible; - cw->setVisible((eval.expression() != dt || (dt.isEmpty() && eval.expression() == "0")) && cw_visible); - resizeIcons(); -} diff --git a/test/qad/widgets/evalspinbox.h b/test/qad/widgets/evalspinbox.h deleted file mode 100644 index 43ad094..0000000 --- a/test/qad/widgets/evalspinbox.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef EVALSPINBOX_H -#define EVALSPINBOX_H - -#include -#include -#include "qpievaluator.h" - -class QLabel; - -class EvalSpinBox: public QAbstractSpinBox -{ - Q_OBJECT - Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged USER true) - Q_PROPERTY(QString expression READ expression WRITE setExpression USER true) - Q_PROPERTY(QString defaultText READ defaultText WRITE setDefaultText) - Q_PROPERTY(bool clearButtonVisible READ isClearButtonVisible WRITE setClearButtonVisible) - -public: - explicit EvalSpinBox(QWidget * parent = 0); - ~EvalSpinBox(); - - double value() const; - const QString & expression() const; - const QString & defaultText() const {return dt;} - bool isClearButtonVisible() const {return cw_visible;} - bool isCleared() const; - - virtual void stepBy(int steps); - virtual void clear(); - virtual QSize sizeHint() const; - -public slots: - void setExpression(const QString & expr); - void setValue(double val); - void setDefaultText(const QString & t); - void setClearButtonVisible(bool visible); - -protected: - QString text() const {return QAbstractSpinBox::text();} - - virtual StepEnabled stepEnabled() const; - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual void wheelEvent(QWheelEvent *event); - - void stepByDouble(double steps); - - QWidget * status; - QWidget * cw; - QPIEvaluator eval; - QLabel * label; - QImage icon_ok; - QImage icon_fail; - QImage icon_calc; - QImage icon; - QImage clear_im; - QString dt; - bool cw_visible; - -private: - bool eventFilter(QObject * o, QEvent * e); - void resizeEvent(QResizeEvent * ); - void changeEvent(QEvent * e); - void statusPaintEvent(); - void cwPaintEvent(); - -private slots: - void clearMouseRelease(QMouseEvent * e); - void textChanged_(const QString & text); - void setExpression_(); - void resizeIcons(); - -signals: - void valueChanged(double val); - void cleared(); - -}; - -#endif // EVALSPINBOX_H diff --git a/test/qad/widgets/iconedlabel.cpp b/test/qad/widgets/iconedlabel.cpp deleted file mode 100644 index e374b6c..0000000 --- a/test/qad/widgets/iconedlabel.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "iconedlabel.h" -#include "qad_types.h" -#include -#include - - -IconedLabel::IconedLabel(QWidget * parent): QFrame(parent) { - label_.setAlignment(Qt::AlignCenter); - icon_.setAlignment(Qt::AlignCenter); - icon_.setScaledContents(true); - setIconSize(QSize()); - setDirection(RightToLeft); -} - - -QIcon IconedLabel::icon() const { - return icon_.pixmap() == 0 ? QIcon() : QIcon(*icon_.pixmap()); -} - - -bool IconedLabel::event(QEvent * e) { - if (e->type() == QEvent::FontChange || e->type() == QEvent::Polish) - setIconSize(iconSize()); - return QFrame::event(e); -} - - -QSize IconedLabel::realIconSize() const { - return size_.isValid() ? size_ : preferredIconSize(1.f, this); -} - - -void IconedLabel::setIcon(const QIcon & i) { - sicon_ = i; - setIconSize(iconSize()); -} - - -void IconedLabel::setIconSize(const QSize & s) { - size_ = s; - QSize sz = realIconSize(); - icon_.setPixmap(sicon_.pixmap(sz)); - icon_.setFixedSize(sz); -} - - -void IconedLabel::setDirection(IconedLabel::Direction d) { - dir_ = d; - if (layout() != 0) - delete layout(); - QLayout * lay = new QBoxLayout((QBoxLayout::Direction)dir_); - lay->addItem(new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding)); - lay->addWidget(&label_); - lay->addWidget(&icon_); - lay->addItem(new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding)); - lay->setContentsMargins(0, 0, 0, 0); - setLayout(lay); - update(); -} diff --git a/test/qad/widgets/iconedlabel.h b/test/qad/widgets/iconedlabel.h deleted file mode 100644 index ab2317d..0000000 --- a/test/qad/widgets/iconedlabel.h +++ /dev/null @@ -1,53 +0,0 @@ - #ifndef ICONEDLABEL_H -#define ICONEDLABEL_H - -#include -#include -#include "qad_types.h" - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class IconedLabel: public QFrame -{ - Q_OBJECT - Q_ENUMS(Direction) - Q_PROPERTY(QString text READ text WRITE setText) - Q_PROPERTY(QIcon icon READ icon WRITE setIcon) - Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize) - Q_PROPERTY(Direction direction READ direction WRITE setDirection) -public: - enum Direction {LeftToRight = 0, RightToLeft = 1, TopToBottom = 2, BottomToTop = 3}; - - explicit IconedLabel(QWidget * parent = 0); - - QString text() const {return label_.text();} - QIcon icon() const; - QSize iconSize() const {return size_;} - Direction direction() const {return dir_;} - -protected: - virtual bool event(QEvent * e); - QSize realIconSize() const; - - QLabel label_, icon_; - QIcon sicon_; - QSize size_; - Direction dir_; - -public slots: - void setText(const QString & t) {label_.setText(t);} - void setIcon(const QIcon & i); - void setIconSize(const QSize & s); - void setDirection(Direction d); - -signals: - -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // ICONEDLABEL_H diff --git a/test/qad/widgets/image_view.cpp b/test/qad/widgets/image_view.cpp deleted file mode 100644 index bb72fd0..0000000 --- a/test/qad/widgets/image_view.cpp +++ /dev/null @@ -1,134 +0,0 @@ -#include "image_view.h" -#include -#include -#include -#include -#include -#include -#include - - -ImageView::ImageView(QWidget * parent): QGraphicsView(parent) { - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setDragMode(QGraphicsView::NoDrag); - setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - setScene(new QGraphicsScene()); - item.setTransformationMode(Qt::SmoothTransformation); - item.setFlags(0); - scene()->addItem(&item); - viewport()->setAutoFillBackground(false); - viewport()->installEventFilter(this); - autofit_ = true; -} - - -ImageView::~ImageView() { -} - - -QPixmap ImageView::pixmap() const { - return item.pixmap(); -} - - -void ImageView::setPixmap(QPixmap pixmap) { - item.setPixmap(pixmap); - adjustView(); -} - - -void ImageView::setImage(const QImage & i) { - im_data.clear(); - if (i.isNull()) { - item.setPixmap(QPixmap()); - return; - } - QBuffer b(&im_data); b.open(QIODevice::ReadWrite); - i.save(&b, "png"); - b.close(); - item.setPixmap(QPixmap::fromImage(i)); - adjustView(); -} - - -void ImageView::setImage(const QByteArray & i) { - im_data = i; - if (i.isEmpty()) { - item.setPixmap(QPixmap()); - return; - } - item.setPixmap(QPixmap::fromImage(QImage::fromData(i))); - adjustView(); - -} - - -void ImageView::clear() { - im_data.clear(); - item.setPixmap(QPixmap()); -} - - -void ImageView::mouseDoubleClickEvent(QMouseEvent * e) { - autofit(); -} - - -void ImageView::mousePressEvent(QMouseEvent * e) { - QGraphicsView::mousePressEvent(e); - emit clicked(mapToScene(e->pos()), e->buttons()); -} - - -void ImageView::mouseMoveEvent(QMouseEvent * e) { - //if (e->buttons().testFlag(Qt::RightButton) && !autofit_ && isInteractive()) return;; - QGraphicsView::mouseMoveEvent(e); -} - - -void ImageView::wheelEvent(QWheelEvent * e) { - if (!e->modifiers().testFlag(Qt::ControlModifier) || !isInteractive()) return; - double scl = 1. + e->delta() / 500.; - //autofit_ = false; - //scale(scl, scl); -} - - -bool ImageView::eventFilter(QObject * o, QEvent * e) { - QMouseEvent * me = (QMouseEvent *)e; - switch (e->type()) { - case QEvent::Resize: - adjustView(); - break; - case QEvent::MouseButtonPress: - prev_pos = me->pos(); - break; - case QEvent::MouseMove: - if (!me->buttons().testFlag(Qt::RightButton) || autofit_ || !isInteractive()) break; - { - double scl = 1. / qSqrt(transform().determinant()); - QPointF dp = QPointF(me->pos() - prev_pos) * scl; - //qDebug() << dp; - //translate(0.00001, 0); - prev_pos = me->pos(); - } - break; - default: break; - } - return QGraphicsView::eventFilter(o, e); -} - - -void ImageView::adjustView() { - if (!autofit_) return; - setSceneRect(item.boundingRect()); - fitInView(&item, Qt::KeepAspectRatio); - centerOn(&item); -} - - -void ImageView::autofit() { - autofit_ = true; - adjustView(); -} diff --git a/test/qad/widgets/image_view.h b/test/qad/widgets/image_view.h deleted file mode 100644 index 475b799..0000000 --- a/test/qad/widgets/image_view.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef IMAGE_VIEW_H -#define IMAGE_VIEW_H - -#include -#include - - -class ImageView: public QGraphicsView -{ - Q_OBJECT - Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap) -public: - ImageView(QWidget * parent = 0); - ~ImageView(); - - void setImage(const QImage & i); - void setImage(const QByteArray & i); - QByteArray image() const {return im_data;} - QPixmap pixmap() const; - - void clear(); - -private: - void mouseDoubleClickEvent(QMouseEvent * e); - void mousePressEvent(QMouseEvent * e); - void mouseMoveEvent(QMouseEvent * e); - void wheelEvent(QWheelEvent * e); - bool eventFilter(QObject * o, QEvent * e); - void adjustView(); - - QGraphicsPixmapItem item; - QByteArray im_data; - QPoint prev_pos; - bool autofit_; - - -public slots: - void autofit(); - void setPixmap(QPixmap pixmap); - -signals: - void clicked(QPointF, Qt::MouseButtons); - -}; - -#endif // IMAGE_VIEW_H diff --git a/test/qad/widgets/lang/qad_widgets_ru.ts b/test/qad/widgets/lang/qad_widgets_ru.ts deleted file mode 100644 index 3c725ff..0000000 --- a/test/qad/widgets/lang/qad_widgets_ru.ts +++ /dev/null @@ -1,607 +0,0 @@ - - - - - CLineEdit - - - - Clear - Сбросить - - - - CharDialog - - - Choose symbol - Выбрать символ - - - - - No Category - Вне категории - - - - - Mark NonSpacing - - - - - - Mark SpacingCombining - - - - - - Mark Enclosing - - - - - - Number DecimalDigit - - - - - - Number Letter - - - - - - Number Other - - - - - - Separator Space - - - - - - Separator Line - - - - - - Separator Paragraph - - - - - - Other Control - - - - - - Other Format - - - - - - Other Surrogate - - - - - - Other PrivateUse - - - - - - Other NotAssigned - - - - - - Letter Uppercase - - - - - - Letter Lowercase - - - - - - Letter Titlecase - - - - - - Letter Modifier - - - - - - Letter Other - - - - - - Punctuation Connector - - - - - - Punctuation Dash - - - - - - Punctuation Open - - - - - - Punctuation Close - - - - - - Punctuation InitialQuote - - - - - - Punctuation FinalQuote - - - - - - Punctuation Other - - - - - - Symbol Math - - - - - - Symbol Currency - - - - - - Symbol Modifier - - - - - - Symbol Other - - - - - ColorButton - - - Copy - Копировать - - - - Paste - Вставить - - - - Mix with clipboard - Смешать со скопированным - - - - Choose color - Выбрать цвет - - - - EComboBox - - - Filter - Фильтр - - - - PathEdit - - - All files(*) - Все файлы(*) - - - - - Choose - Выберите - - - - Select directory - Выберите директорию - - - - Select file - Выберите файл - - - - QCodeEdit - - - Press F1 for details - Нажмите F1 для справочной информации - - - - QPIConfigNewDialog - - - Dialog - - - - - Type - - - - - string - - - - - s - - - - - integer - - - - - n - - - - - float - - - - - f - - - - - string list - - - - - l - - - - - boolean - - - - - b - - - - - color - - - - - c - - - - - rectangle - - - - - r - - - - - area - - - - - a - - - - - point - - - - - p - - - - - vector - - - - - v - - - - - ip - - - - - i - - - - - Name: - - - - - Comment: - - - - - Value: - - - - - QPIConfigWidget - - - Name - Имя - - - - Value - Значение - - - - Type - Тип - - - - Comment - Описание - - - - string - - - - - string list - - - - - integer - - - - - float - - - - - boolean - - - - - color - - - - - rectangle - - - - - area - - - - - point - - - - - vector - - - - - ip - - - - - Add item ... - - - - - Add node ... - - - - - Convert to item - - - - - Convert to node - - - - - Remove - Удалить - - - - Expand all - Свернуть все - - - - Collapse all - Развернуть все - - - - QPointEdit - - - - X - - - - - - Y - - - - - QRectEdit - - - - X - - - - - - Y - - - - - - Height - Высота - - - - - Width - Ширина - - - - QVariantEdit - - - Invalid value - Неверное значение - - - - Shortcuts - - - - Command - Команда - - - - - Shortcut - Горячая клавиша - - - - StringListEdit - - - - Add - Добавить - - - - - Remove - Удалить - - - - - Clear - Очистить - - - diff --git a/test/qad/widgets/mathmatrixedit.cpp b/test/qad/widgets/mathmatrixedit.cpp deleted file mode 100644 index f38a772..0000000 --- a/test/qad/widgets/mathmatrixedit.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "mathmatrixedit.h" -#include "qvariantedit_custom.h" -#include "matrixedit.h" -#include - - -MathMatrixEdit::MathMatrixEdit(QWidget * parent): QWidget(parent) { - edit = new MatrixEdit(); - setLayout(new QBoxLayout(QBoxLayout::LeftToRight)); - layout()->setContentsMargins(0, 0, 0, 0); - layout()->addWidget(edit); - connect(edit, SIGNAL(changed()), this, SIGNAL(valueChanged())); -} - - -MathMatrixEdit::~MathMatrixEdit() { - delete edit; -} - - -QVariant MathMatrixEdit::value() const { - return QVariant::fromValue(QAD::MathMatrix(edit->matrix())); -} - - -bool MathMatrixEdit::isReadOnly() const { - return edit->isReadOnly(); -} - - -void MathMatrixEdit::setValue(const QVariant & v) { - edit->setMatrix(v.value().m); -} - - -void MathMatrixEdit::setReadOnly(bool yes) { - edit->setReadOnly(yes); -} - - - - -class MathMatrixEditFactory: public QVariantEditorFactoryBase { -public: - MathMatrixEditFactory() {} - virtual QWidget * createEditor() {return new MathMatrixEdit();} -}; - - -__MathMatrixEditRegistrator__::__MathMatrixEditRegistrator__() { - QVariantEditorFactories::registerEditorFactory(qMetaTypeId(), new MathMatrixEditFactory()); - //__QADTypesRegistrator__::instance()->toString_funcs.insert(qMetaTypeId(), &QAD_IODevice_toString); -} diff --git a/test/qad/widgets/mathmatrixedit.h b/test/qad/widgets/mathmatrixedit.h deleted file mode 100644 index c4da51a..0000000 --- a/test/qad/widgets/mathmatrixedit.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef MATH_MATRIX_EDIT_H -#define MATH_MATRIX_EDIT_H - -#include -#include "qad_types.h" - -class MatrixEdit; - -class MathMatrixEdit: public QWidget { - Q_OBJECT - Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged) - Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly) -public: - explicit MathMatrixEdit(QWidget * parent = 0); - ~MathMatrixEdit(); - - QVariant value() const; - bool isReadOnly() const; - -private: - MatrixEdit * edit; - -public slots: - void setValue(const QVariant & v); - void setReadOnly(bool yes); - -signals: - void valueChanged(); - -}; - - -class __MathMatrixEditRegistrator__ { -public: - __MathMatrixEditRegistrator__(); -}; - -static __MathMatrixEditRegistrator__ __mathmatrixeditregistrator__; - -#endif // MATH_MATRIX_EDIT_H diff --git a/test/qad/widgets/mathvectoredit.cpp b/test/qad/widgets/mathvectoredit.cpp deleted file mode 100644 index d529e1c..0000000 --- a/test/qad/widgets/mathvectoredit.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "mathvectoredit.h" -#include "qvariantedit_custom.h" -#include "matrixedit.h" -#include - - -MathVectorEdit::MathVectorEdit(QWidget * parent): QWidget(parent) { - edit = new MatrixEdit(); - setLayout(new QBoxLayout(QBoxLayout::LeftToRight)); - layout()->setContentsMargins(0, 0, 0, 0); - layout()->addWidget(edit); - connect(edit, SIGNAL(changed()), this, SIGNAL(valueChanged())); -} - - -MathVectorEdit::~MathVectorEdit() { - delete edit; -} - - -QVariant MathVectorEdit::value() const { - return QVariant::fromValue(QAD::MathVector(edit->vector())); -} - - -bool MathVectorEdit::isReadOnly() const { - return edit->isReadOnly(); -} - - -void MathVectorEdit::setValue(const QVariant & v) { - edit->setVector(v.value().v); -} - - -void MathVectorEdit::setReadOnly(bool yes) { - edit->setReadOnly(yes); -} - - - - -class MathVectorEditFactory: public QVariantEditorFactoryBase { -public: - MathVectorEditFactory() {} - virtual QWidget * createEditor() {return new MathVectorEdit();} -}; - - -__MathVectorEditRegistrator__::__MathVectorEditRegistrator__() { - QVariantEditorFactories::registerEditorFactory(qMetaTypeId(), new MathVectorEditFactory()); - //__QADTypesRegistrator__::instance()->toString_funcs.insert(qMetaTypeId(), &QAD_IODevice_toString); -} diff --git a/test/qad/widgets/mathvectoredit.h b/test/qad/widgets/mathvectoredit.h deleted file mode 100644 index fd41066..0000000 --- a/test/qad/widgets/mathvectoredit.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef MATH_VECTOR_EDIT_H -#define MATH_VECTOR_EDIT_H - -#include -#include "qad_types.h" - -class MatrixEdit; - -class MathVectorEdit: public QWidget { - Q_OBJECT - Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged) - Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly) -public: - explicit MathVectorEdit(QWidget * parent = 0); - ~MathVectorEdit(); - - QVariant value() const; - bool isReadOnly() const; - -private: - MatrixEdit * edit; - -public slots: - void setValue(const QVariant & v); - void setReadOnly(bool yes); - -signals: - void valueChanged(); - -}; - - -class __MathVectorEditRegistrator__ { -public: - __MathVectorEditRegistrator__(); -}; - -static __MathVectorEditRegistrator__ __mathvectoreditregistrator__; - -#endif // MATH_VECTOR_EDIT_H diff --git a/test/qad/widgets/matrixedit.cpp b/test/qad/widgets/matrixedit.cpp deleted file mode 100644 index bed96f2..0000000 --- a/test/qad/widgets/matrixedit.cpp +++ /dev/null @@ -1,149 +0,0 @@ -#include "matrixedit.h" -#include "ui_matrixedit.h" -#include - - -MatrixEdit::MatrixEdit(QWidget * parent): QWidget(parent) { - ui = new Ui::MatrixEdit(); - ui->setupUi(this); - connect(ui->table, SIGNAL(cellChanged(int,int)), this, SIGNAL(changed())); - ro = false; -} - - -MatrixEdit::~MatrixEdit() { - delete ui; -} - - -bool MatrixEdit::isReadOnly() const { - return ro; -} - - -void MatrixEdit::setReadOnly(bool yes) { - ro = yes; - /// TODO -} - - -void MatrixEdit::setVectorMode(bool yes) { - if (yes) - ui->spinCols->setValue(1); - ui->labelCols->setHidden(yes); - ui->spinCols->setHidden(yes); - ui->buttonIdentity->setHidden(yes); -} - - -void MatrixEdit::clear(bool ident) { - int cc = ui->table->columnCount(); - for (int r = 0; r < ui->table->rowCount(); ++r) { - for (int c = 0; c < cc; ++c) { - QTableWidgetItem * i = ui->table->item(r, c); - if (!i) { - i = new QTableWidgetItem(); - ui->table->setItem(r, c, i); - } - i->setText((ident && (r == c)) ? "1" : "0"); - } - } - -} - - -QVector MatrixEdit::vector() const { - QVector ret; - if (ui->table->columnCount() < 1) return ret; - ret.resize(ui->table->rowCount()); - ret.fill(0.); - for (int r = 0; r < ret.size(); ++r) { - QTableWidgetItem * i = ui->table->item(r, 0); - if (!i) continue; - ret[r] = i->text().toDouble(); - } - return ret; -} - - -QVector > MatrixEdit::matrix() const { - QVector > ret; - if (ui->table->columnCount() < 1 || ui->table->rowCount() < 1) return ret; - int cc = ui->table->columnCount(); - ret.resize(ui->table->rowCount()); - for (int r = 0; r < ret.size(); ++r) { - ret[r].resize(cc); - ret[r].fill(0.); - for (int c = 0; c < cc; ++c) { - QTableWidgetItem * i = ui->table->item(r, c); - if (!i) continue; - ret[r][c] = i->text().toDouble(); - } - } - return ret; -} - - -void MatrixEdit::setVector(const QVector & v) { - clear(); - if (v.isEmpty()) return; - blockSignals(true); - ui->spinRows->setValue(v.size()); - setVectorMode(true); - for (int r = 0; r < v.size(); ++r) { - QTableWidgetItem * i = ui->table->item(r, 0); - if (!i) { - i = new QTableWidgetItem(); - ui->table->setItem(r, 0, i); - } - i->setText(QString::number(v[r])); - } - blockSignals(false); - emit changed(); -} - - -void MatrixEdit::setMatrix(const QVector > & v) { - clear(); - if (v.isEmpty()) return; - if (v[0].isEmpty()) return; - blockSignals(true); - int cc = v[0].size(); - ui->spinRows->setValue(v.size()); - ui->spinCols->setValue(cc); - setVectorMode(false); - for (int r = 0; r < v.size(); ++r) { - for (int c = 0; c < v[r].size(); ++c) { - QTableWidgetItem * i = ui->table->item(r, c); - if (!i) { - i = new QTableWidgetItem(); - ui->table->setItem(r, c, i); - } - i->setText(QString::number(v[r][c])); - } - } - blockSignals(false); - emit changed(); -} - - -void MatrixEdit::on_spinRows_valueChanged(int cnt) { - ui->table->setRowCount(cnt); - emit changed(); -} - - -void MatrixEdit::on_spinCols_valueChanged(int cnt) { - ui->table->setColumnCount(cnt); - emit changed(); -} - - -void MatrixEdit::on_buttonNull_clicked() { - clear(); -} - - -void MatrixEdit::on_buttonIdentity_clicked() { - clear(true); -} diff --git a/test/qad/widgets/matrixedit.h b/test/qad/widgets/matrixedit.h deleted file mode 100644 index e8c2c8d..0000000 --- a/test/qad/widgets/matrixedit.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef MATRIXEDIT_H -#define MATRIXEDIT_H - -#include - -namespace Ui { - class MatrixEdit; -} - -class MatrixEdit: public QWidget { - Q_OBJECT -public: - explicit MatrixEdit(QWidget * parent = 0); - ~MatrixEdit(); - - bool isReadOnly() const; - void setReadOnly(bool yes); - - QVector vector() const; - QVector > matrix() const; - void setVector(const QVector & v); - void setMatrix(const QVector > & v); - -private: - void setVectorMode(bool yes); - void clear(bool ident = false); - - Ui::MatrixEdit * ui; - bool ro; - -private slots: - void on_spinRows_valueChanged(int cnt); - void on_spinCols_valueChanged(int cnt); - void on_buttonNull_clicked(); - void on_buttonIdentity_clicked(); - -signals: - void changed(); - -}; - - -#endif // MATRIXEDIT_H diff --git a/test/qad/widgets/matrixedit.ui b/test/qad/widgets/matrixedit.ui deleted file mode 100644 index 58a136d..0000000 --- a/test/qad/widgets/matrixedit.ui +++ /dev/null @@ -1,116 +0,0 @@ - - - MatrixEdit - - - - 0 - 0 - 283 - 264 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - Cols: - - - - - - - 65536 - - - - - - - Rows: - - - - - - - 65536 - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Null - - - 0 - - - - - - - Identity - - - I - - - - - - - - - QAbstractItemView::ScrollPerPixel - - - QAbstractItemView::ScrollPerPixel - - - - - - - - - search(QString) - searchNext() - searchPrevious() - searchAll() - hideSearch() - - diff --git a/test/qad/widgets/plugin/CMakeLists.txt b/test/qad/widgets/plugin/CMakeLists.txt deleted file mode 100644 index 74db060..0000000 --- a/test/qad/widgets/plugin/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -qad_plugin(widgets "Gui;Widgets" "") diff --git a/test/qad/widgets/plugin/chardialogplugin.cpp b/test/qad/widgets/plugin/chardialogplugin.cpp deleted file mode 100644 index 4ad02db..0000000 --- a/test/qad/widgets/plugin/chardialogplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "chardialog.h" -#include "chardialogplugin.h" -#include - - -CharDialogPlugin::CharDialogPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void CharDialogPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool CharDialogPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * CharDialogPlugin::createWidget(QWidget * parent) { - return new CharDialog(parent); -} - - -QString CharDialogPlugin::name() const { - return QLatin1String("CharDialog"); -} - - -QString CharDialogPlugin::group() const { - return QLatin1String("Dialogs"); -} - - -QIcon CharDialogPlugin::icon() const { - return QIcon(":/icons/chardialog.png"); -} - - -QString CharDialogPlugin::toolTip() const { - return QLatin1String("Character Select Dialog"); -} - - -QString CharDialogPlugin::whatsThis() const { - return QLatin1String("Character Select Dialog"); -} - - -bool CharDialogPlugin::isContainer() const { - return false; -} - - -QString CharDialogPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString CharDialogPlugin::includeFile() const { - return QLatin1String("chardialog.h"); -} - diff --git a/test/qad/widgets/plugin/chardialogplugin.h b/test/qad/widgets/plugin/chardialogplugin.h deleted file mode 100644 index 9e624ee..0000000 --- a/test/qad/widgets/plugin/chardialogplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CHARDIALOGPLUGIN_H -#define CHARDIALOGPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class CharDialogPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - CharDialogPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // CHARDIALOGPLUGIN_H diff --git a/test/qad/widgets/plugin/clineeditplugin.cpp b/test/qad/widgets/plugin/clineeditplugin.cpp deleted file mode 100644 index 7315985..0000000 --- a/test/qad/widgets/plugin/clineeditplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "clineedit.h" -#include "clineeditplugin.h" -#include - - -CLineEditPlugin::CLineEditPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void CLineEditPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool CLineEditPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * CLineEditPlugin::createWidget(QWidget * parent) { - return new CLineEdit(parent); -} - - -QString CLineEditPlugin::name() const { - return QLatin1String("CLineEdit"); -} - - -QString CLineEditPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon CLineEditPlugin::icon() const { - return QIcon(":/icons/clineedit.png"); -} - - -QString CLineEditPlugin::toolTip() const { - return QLatin1String("Clearable Line Edit"); -} - - -QString CLineEditPlugin::whatsThis() const { - return QLatin1String("Clearable Line Edit"); -} - - -bool CLineEditPlugin::isContainer() const { - return false; -} - - -QString CLineEditPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString CLineEditPlugin::includeFile() const { - return QLatin1String("clineedit.h"); -} - diff --git a/test/qad/widgets/plugin/clineeditplugin.h b/test/qad/widgets/plugin/clineeditplugin.h deleted file mode 100644 index 148461d..0000000 --- a/test/qad/widgets/plugin/clineeditplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CLINEEDITPLUGIN_H -#define CLINEEDITPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class CLineEditPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - CLineEditPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // CLINEEDITPLUGIN_H diff --git a/test/qad/widgets/plugin/colorbuttonplugin.cpp b/test/qad/widgets/plugin/colorbuttonplugin.cpp deleted file mode 100644 index 84e8574..0000000 --- a/test/qad/widgets/plugin/colorbuttonplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "colorbutton.h" -#include "colorbuttonplugin.h" -#include - - -ColorButtonPlugin::ColorButtonPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void ColorButtonPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool ColorButtonPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * ColorButtonPlugin::createWidget(QWidget * parent) { - return new ColorButton(parent); -} - - -QString ColorButtonPlugin::name() const { - return QLatin1String("ColorButton"); -} - - -QString ColorButtonPlugin::group() const { - return QLatin1String("Buttons"); -} - - -QIcon ColorButtonPlugin::icon() const { - return QIcon(":/icons/colorbutton.png"); -} - - -QString ColorButtonPlugin::toolTip() const { - return QLatin1String("Color Button"); -} - - -QString ColorButtonPlugin::whatsThis() const { - return QLatin1String("Color Button"); -} - - -bool ColorButtonPlugin::isContainer() const { - return false; -} - - -QString ColorButtonPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString ColorButtonPlugin::includeFile() const { - return QLatin1String("colorbutton.h"); -} - diff --git a/test/qad/widgets/plugin/colorbuttonplugin.h b/test/qad/widgets/plugin/colorbuttonplugin.h deleted file mode 100644 index 82fb9e9..0000000 --- a/test/qad/widgets/plugin/colorbuttonplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef COLORBUTTONPLUGIN_H -#define COLORBUTTONPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class ColorButtonPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - ColorButtonPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // COLORBUTTONPLUGIN_H diff --git a/test/qad/widgets/plugin/ecomboboxplugin.cpp b/test/qad/widgets/plugin/ecomboboxplugin.cpp deleted file mode 100644 index c0079d4..0000000 --- a/test/qad/widgets/plugin/ecomboboxplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "ecombobox.h" -#include "ecomboboxplugin.h" -#include - - -EComboBoxPlugin::EComboBoxPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void EComboBoxPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool EComboBoxPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * EComboBoxPlugin::createWidget(QWidget * parent) { - return new EComboBox(parent); -} - - -QString EComboBoxPlugin::name() const { - return QLatin1String("EComboBox"); -} - - -QString EComboBoxPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon EComboBoxPlugin::icon() const { - return QIcon(":/icons/ecombobox.png"); -} - - -QString EComboBoxPlugin::toolTip() const { - return QLatin1String("Combo Box with Search"); -} - - -QString EComboBoxPlugin::whatsThis() const { - return QLatin1String("Combo Box with Search"); -} - - -bool EComboBoxPlugin::isContainer() const { - return false; -} - - -QString EComboBoxPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString EComboBoxPlugin::includeFile() const { - return QLatin1String("ecombobox.h"); -} - diff --git a/test/qad/widgets/plugin/ecomboboxplugin.h b/test/qad/widgets/plugin/ecomboboxplugin.h deleted file mode 100644 index afccea3..0000000 --- a/test/qad/widgets/plugin/ecomboboxplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ECOMBOBOXPLUGIN_H -#define ECOMBOBOXPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class EComboBoxPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - EComboBoxPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // ECOMBOBOXPLUGIN_H diff --git a/test/qad/widgets/plugin/evalspinboxplugin.cpp b/test/qad/widgets/plugin/evalspinboxplugin.cpp deleted file mode 100644 index 7356dc8..0000000 --- a/test/qad/widgets/plugin/evalspinboxplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "evalspinbox.h" -#include "evalspinboxplugin.h" -#include - - -EvalSpinBoxPlugin::EvalSpinBoxPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void EvalSpinBoxPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool EvalSpinBoxPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * EvalSpinBoxPlugin::createWidget(QWidget * parent) { - return new EvalSpinBox(parent); -} - - -QString EvalSpinBoxPlugin::name() const { - return QLatin1String("EvalSpinBox"); -} - - -QString EvalSpinBoxPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon EvalSpinBoxPlugin::icon() const { - return QIcon(":/icons/evalspinbox.png"); -} - - -QString EvalSpinBoxPlugin::toolTip() const { - return QLatin1String("Evaluation double SpinBox"); -} - - -QString EvalSpinBoxPlugin::whatsThis() const { - return QLatin1String("Evaluation double SpinBox"); -} - - -bool EvalSpinBoxPlugin::isContainer() const { - return false; -} - - -QString EvalSpinBoxPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString EvalSpinBoxPlugin::includeFile() const { - return QLatin1String("evalspinbox.h"); -} - diff --git a/test/qad/widgets/plugin/evalspinboxplugin.h b/test/qad/widgets/plugin/evalspinboxplugin.h deleted file mode 100644 index d0949f0..0000000 --- a/test/qad/widgets/plugin/evalspinboxplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef EVALSPINBOXPLUGIN_H -#define EVALSPINBOXPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class EvalSpinBoxPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - EvalSpinBoxPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // EVALSPINBOXPLUGIN_H diff --git a/test/qad/widgets/plugin/iconedlabelplugin.h b/test/qad/widgets/plugin/iconedlabelplugin.h deleted file mode 100644 index 50ce287..0000000 --- a/test/qad/widgets/plugin/iconedlabelplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ICONEDLABEPLUGIN_H -#define ICONEDLABEPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class IconedLabelPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - IconedLabelPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // ICONEDLABEPLUGIN_H diff --git a/test/qad/widgets/plugin/imageviewplugin.cpp b/test/qad/widgets/plugin/imageviewplugin.cpp deleted file mode 100644 index f20adc9..0000000 --- a/test/qad/widgets/plugin/imageviewplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "image_view.h" -#include "imageviewplugin.h" -#include - - -ImageViewPlugin::ImageViewPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void ImageViewPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool ImageViewPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * ImageViewPlugin::createWidget(QWidget * parent) { - return new ImageView(parent); -} - - -QString ImageViewPlugin::name() const { - return QLatin1String("ImageView"); -} - - -QString ImageViewPlugin::group() const { - return QLatin1String("Display Widgets"); -} - - -QIcon ImageViewPlugin::icon() const { - return QIcon(/*":/icons/spinslider.png"*/); -} - - -QString ImageViewPlugin::toolTip() const { - return QLatin1String("Image viewer"); -} - - -QString ImageViewPlugin::whatsThis() const { - return QLatin1String("Image viewer"); -} - - -bool ImageViewPlugin::isContainer() const { - return false; -} - - -QString ImageViewPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString ImageViewPlugin::includeFile() const { - return QLatin1String("image_view.h"); -} - diff --git a/test/qad/widgets/plugin/imageviewplugin.h b/test/qad/widgets/plugin/imageviewplugin.h deleted file mode 100644 index cc7a704..0000000 --- a/test/qad/widgets/plugin/imageviewplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef IMAGEVIEWPLUGIN_H -#define IMAGEVIEWPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class ImageViewPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - ImageViewPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif diff --git a/test/qad/widgets/plugin/lconedlabelplugin.cpp b/test/qad/widgets/plugin/lconedlabelplugin.cpp deleted file mode 100644 index a24f3e2..0000000 --- a/test/qad/widgets/plugin/lconedlabelplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "iconedlabel.h" -#include "iconedlabelplugin.h" -#include - - -IconedLabelPlugin::IconedLabelPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void IconedLabelPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool IconedLabelPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * IconedLabelPlugin::createWidget(QWidget * parent) { - return new IconedLabel(parent); -} - - -QString IconedLabelPlugin::name() const { - return QLatin1String("IconedLabel"); -} - - -QString IconedLabelPlugin::group() const { - return QLatin1String("Display Widgets"); -} - - -QIcon IconedLabelPlugin::icon() const { - return QIcon(); -} - - -QString IconedLabelPlugin::toolTip() const { - return QLatin1String("Label with Icon"); -} - - -QString IconedLabelPlugin::whatsThis() const { - return QLatin1String("Label with Icon"); -} - - -bool IconedLabelPlugin::isContainer() const { - return false; -} - - -QString IconedLabelPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString IconedLabelPlugin::includeFile() const { - return QLatin1String("iconedlabel.h"); -} - diff --git a/test/qad/widgets/plugin/qad_widgets.cpp b/test/qad/widgets/plugin/qad_widgets.cpp deleted file mode 100644 index 257bd37..0000000 --- a/test/qad/widgets/plugin/qad_widgets.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "qad_widgets.h" -#include "spinsliderplugin.h" -#include "colorbuttonplugin.h" -#include "chardialogplugin.h" -#include "shortcutsplugin.h" -#include "clineeditplugin.h" -#include "qipeditplugin.h" -#include "qpointeditplugin.h" -#include "qrecteditplugin.h" -#include "ecomboboxplugin.h" -#include "qpiconsoleplugin.h" -#include "iconedlabelplugin.h" -#include "qcodeeditplugin.h" -#include "qvarianteditplugin.h" -#include "qpiconfigplugin.h" -#include "evalspinboxplugin.h" -#include "imageviewplugin.h" - - -QADWidgets::QADWidgets(QObject * parent): QObject(parent) { - m_widgets.append(new SpinSliderPlugin(this)); - m_widgets.append(new ColorButtonPlugin(this)); - m_widgets.append(new CharDialogPlugin(this)); - m_widgets.append(new ShortcutsPlugin(this)); - m_widgets.append(new CLineEditPlugin(this)); - m_widgets.append(new QIPEditPlugin(this)); - m_widgets.append(new QPointEditPlugin(this)); - m_widgets.append(new QRectEditPlugin(this)); - m_widgets.append(new EComboBoxPlugin(this)); - m_widgets.append(new QPIConsolePlugin(this)); - m_widgets.append(new IconedLabelPlugin(this)); - m_widgets.append(new QCodeEditPlugin(this)); - m_widgets.append(new QVariantEditPlugin(this)); - m_widgets.append(new QPIConfigPlugin(this)); - m_widgets.append(new EvalSpinBoxPlugin(this)); - m_widgets.append(new ImageViewPlugin(this)); -} - - -QList QADWidgets::customWidgets() const { - return m_widgets; -} - - -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(qad_widgets_plugin, QADWidgets) -#endif diff --git a/test/qad/widgets/plugin/qad_widgets.h b/test/qad/widgets/plugin/qad_widgets.h deleted file mode 100644 index e18e8f9..0000000 --- a/test/qad/widgets/plugin/qad_widgets.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef QAD_WIDGETS_H -#define QAD_WIDGETS_H - -#include -#include - -class QADWidgets: public QObject, public QDesignerCustomWidgetCollectionInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetCollectionInterface) -#if QT_VERSION >= 0x050000 - Q_PLUGIN_METADATA(IID "qad.widgets") -#endif -public: - explicit QADWidgets(QObject * parent = 0); - virtual QList customWidgets() const; - -private: - QList m_widgets; - -}; - -#endif // QAD_WIDGETS_H diff --git a/test/qad/widgets/plugin/qcodeeditplugin.cpp b/test/qad/widgets/plugin/qcodeeditplugin.cpp deleted file mode 100644 index 1bd7aaa..0000000 --- a/test/qad/widgets/plugin/qcodeeditplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "qcodeedit.h" -#include "qcodeeditplugin.h" -#include - - -QCodeEditPlugin::QCodeEditPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QCodeEditPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QCodeEditPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QCodeEditPlugin::createWidget(QWidget * parent) { - return new QCodeEdit(parent); -} - - -QString QCodeEditPlugin::name() const { - return QLatin1String("QCodeEdit"); -} - - -QString QCodeEditPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon QCodeEditPlugin::icon() const { - return QIcon(":/icons/qcodeedit.png"); -} - - -QString QCodeEditPlugin::toolTip() const { - return QLatin1String("QCodeEdit"); -} - - -QString QCodeEditPlugin::whatsThis() const { - return QLatin1String("QCodeEdit"); -} - - -bool QCodeEditPlugin::isContainer() const { - return false; -} - - -QString QCodeEditPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QCodeEditPlugin::includeFile() const { - return QLatin1String("qcodeedit.h"); -} - diff --git a/test/qad/widgets/plugin/qcodeeditplugin.h b/test/qad/widgets/plugin/qcodeeditplugin.h deleted file mode 100644 index 7f733c9..0000000 --- a/test/qad/widgets/plugin/qcodeeditplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QCODEEDITPLUGIN_H -#define QCODEEDITPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class QCodeEditPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - QCodeEditPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // QCODEEDITPLUGIN_H diff --git a/test/qad/widgets/plugin/qipeditplugin.cpp b/test/qad/widgets/plugin/qipeditplugin.cpp deleted file mode 100644 index 7cc94dd..0000000 --- a/test/qad/widgets/plugin/qipeditplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "qipedit.h" -#include "qipeditplugin.h" -#include - - -QIPEditPlugin::QIPEditPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QIPEditPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QIPEditPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QIPEditPlugin::createWidget(QWidget * parent) { - return new QIPEdit(parent); -} - - -QString QIPEditPlugin::name() const { - return QLatin1String("QIPEdit"); -} - - -QString QIPEditPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon QIPEditPlugin::icon() const { - return QIcon(); -} - - -QString QIPEditPlugin::toolTip() const { - return QLatin1String("IP Edit"); -} - - -QString QIPEditPlugin::whatsThis() const { - return QLatin1String("IP Edit"); -} - - -bool QIPEditPlugin::isContainer() const { - return false; -} - - -QString QIPEditPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QIPEditPlugin::includeFile() const { - return QLatin1String("qipedit.h"); -} - diff --git a/test/qad/widgets/plugin/qipeditplugin.h b/test/qad/widgets/plugin/qipeditplugin.h deleted file mode 100644 index 7ed24b1..0000000 --- a/test/qad/widgets/plugin/qipeditplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QIPEDITPLUGIN_H -#define QIPEDITPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class QIPEditPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - QIPEditPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // QIPEDITPLUGIN_H diff --git a/test/qad/widgets/plugin/qpiconfigplugin.cpp b/test/qad/widgets/plugin/qpiconfigplugin.cpp deleted file mode 100644 index 8fee953..0000000 --- a/test/qad/widgets/plugin/qpiconfigplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "qpiconfigwidget.h" -#include "qpiconfigplugin.h" -#include - - -QPIConfigPlugin::QPIConfigPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QPIConfigPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QPIConfigPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QPIConfigPlugin::createWidget(QWidget * parent) { - return new QPIConfigWidget(parent, 0, false); -} - - -QString QPIConfigPlugin::name() const { - return QLatin1String("QPIConfigWidget"); -} - - -QString QPIConfigPlugin::group() const { - return QLatin1String("Editor Widgets"); -} - - -QIcon QPIConfigPlugin::icon() const { - return QIcon(); -} - - -QString QPIConfigPlugin::toolTip() const { - return QLatin1String(""); -} - - -QString QPIConfigPlugin::whatsThis() const { - return QLatin1String(""); -} - - -bool QPIConfigPlugin::isContainer() const { - return false; -} - - -QString QPIConfigPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QPIConfigPlugin::includeFile() const { - return QLatin1String("qpiconfigwidget.h"); -} - diff --git a/test/qad/widgets/plugin/qpiconfigplugin.h b/test/qad/widgets/plugin/qpiconfigplugin.h deleted file mode 100644 index 77a8b9f..0000000 --- a/test/qad/widgets/plugin/qpiconfigplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QPICONFIGPLUGIN_H -#define QPICONFIGPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class QPIConfigPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - QPIConfigPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // QPICONFIGPLUGIN_H diff --git a/test/qad/widgets/plugin/qpiconsoleplugin.cpp b/test/qad/widgets/plugin/qpiconsoleplugin.cpp deleted file mode 100644 index ad1f615..0000000 --- a/test/qad/widgets/plugin/qpiconsoleplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "qpiconsole.h" -#include "qpiconsoleplugin.h" -#include - - -QPIConsolePlugin::QPIConsolePlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QPIConsolePlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QPIConsolePlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QPIConsolePlugin::createWidget(QWidget * parent) { - return new QPIConsole(parent); -} - - -QString QPIConsolePlugin::name() const { - return QLatin1String("QPIConsole"); -} - - -QString QPIConsolePlugin::group() const { - return QLatin1String("Display Widgets"); -} - - -QIcon QPIConsolePlugin::icon() const { - return QIcon(":/icons/qpiconsole.png"); -} - - -QString QPIConsolePlugin::toolTip() const { - return QLatin1String("QPIConsole"); -} - - -QString QPIConsolePlugin::whatsThis() const { - return QLatin1String("QPIConsole"); -} - - -bool QPIConsolePlugin::isContainer() const { - return false; -} - - -QString QPIConsolePlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QPIConsolePlugin::includeFile() const { - return QLatin1String("qpiconsole.h"); -} - diff --git a/test/qad/widgets/plugin/qpiconsoleplugin.h b/test/qad/widgets/plugin/qpiconsoleplugin.h deleted file mode 100644 index d8a50d7..0000000 --- a/test/qad/widgets/plugin/qpiconsoleplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QPICONSOLEPLUGIN_H -#define QPICONSOLEPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class QPIConsolePlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - QPIConsolePlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // QPICONSOLEPLUGIN_H diff --git a/test/qad/widgets/plugin/qpointeditplugin.cpp b/test/qad/widgets/plugin/qpointeditplugin.cpp deleted file mode 100644 index 622c78e..0000000 --- a/test/qad/widgets/plugin/qpointeditplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "qpointedit.h" -#include "qpointeditplugin.h" -#include - - -QPointEditPlugin::QPointEditPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QPointEditPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QPointEditPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QPointEditPlugin::createWidget(QWidget * parent) { - return new QPointEdit(parent); -} - - -QString QPointEditPlugin::name() const { - return QLatin1String("QPointEdit"); -} - - -QString QPointEditPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon QPointEditPlugin::icon() const { - return QIcon(":/icons/qpointedit.png"); -} - - -QString QPointEditPlugin::toolTip() const { - return QLatin1String("Point Edit"); -} - - -QString QPointEditPlugin::whatsThis() const { - return QLatin1String("Point Edit"); -} - - -bool QPointEditPlugin::isContainer() const { - return false; -} - - -QString QPointEditPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QPointEditPlugin::includeFile() const { - return QLatin1String("qpointedit.h"); -} - diff --git a/test/qad/widgets/plugin/qpointeditplugin.h b/test/qad/widgets/plugin/qpointeditplugin.h deleted file mode 100644 index b69811d..0000000 --- a/test/qad/widgets/plugin/qpointeditplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QPOINTEDITPLUGIN_H -#define QPOINTEDITPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class QPointEditPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - QPointEditPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // QPOINTEDITPLUGIN_H diff --git a/test/qad/widgets/plugin/qrecteditplugin.cpp b/test/qad/widgets/plugin/qrecteditplugin.cpp deleted file mode 100644 index f64f30c..0000000 --- a/test/qad/widgets/plugin/qrecteditplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "qrectedit.h" -#include "qrecteditplugin.h" -#include - - -QRectEditPlugin::QRectEditPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QRectEditPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QRectEditPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QRectEditPlugin::createWidget(QWidget * parent) { - return new QRectEdit(parent); -} - - -QString QRectEditPlugin::name() const { - return QLatin1String("QRectEdit"); -} - - -QString QRectEditPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon QRectEditPlugin::icon() const { - return QIcon(":/icons/qrectedit.png"); -} - - -QString QRectEditPlugin::toolTip() const { - return QLatin1String("Rect Edit"); -} - - -QString QRectEditPlugin::whatsThis() const { - return QLatin1String("Rect Edit"); -} - - -bool QRectEditPlugin::isContainer() const { - return false; -} - - -QString QRectEditPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QRectEditPlugin::includeFile() const { - return QLatin1String("qrectedit.h"); -} - diff --git a/test/qad/widgets/plugin/qrecteditplugin.h b/test/qad/widgets/plugin/qrecteditplugin.h deleted file mode 100644 index 419fbd3..0000000 --- a/test/qad/widgets/plugin/qrecteditplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QRECTEDITPLUGIN_H -#define QRECTEDITPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class QRectEditPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - QRectEditPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // QRECTEDITPLUGIN_H diff --git a/test/qad/widgets/plugin/qvarianteditplugin.cpp b/test/qad/widgets/plugin/qvarianteditplugin.cpp deleted file mode 100644 index 733eb88..0000000 --- a/test/qad/widgets/plugin/qvarianteditplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "qvariantedit.h" -#include "qvarianteditplugin.h" -#include - - -QVariantEditPlugin::QVariantEditPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QVariantEditPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QVariantEditPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QVariantEditPlugin::createWidget(QWidget * parent) { - return new QVariantEdit(parent); -} - - -QString QVariantEditPlugin::name() const { - return QLatin1String("QVariantEdit"); -} - - -QString QVariantEditPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon QVariantEditPlugin::icon() const { - return QIcon(":/icons/qvariantedit.png"); -} - - -QString QVariantEditPlugin::toolTip() const { - return QLatin1String("QVariant Edit"); -} - - -QString QVariantEditPlugin::whatsThis() const { - return QLatin1String("QVariant Edit"); -} - - -bool QVariantEditPlugin::isContainer() const { - return false; -} - - -QString QVariantEditPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QVariantEditPlugin::includeFile() const { - return QLatin1String("qvariantedit.h"); -} - diff --git a/test/qad/widgets/plugin/qvarianteditplugin.h b/test/qad/widgets/plugin/qvarianteditplugin.h deleted file mode 100644 index 79eb699..0000000 --- a/test/qad/widgets/plugin/qvarianteditplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QVARIANTEDITPLUGIN_H -#define QVARIANTEDITPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class QVariantEditPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - QVariantEditPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // QVARIANTEDITPLUGIN_H diff --git a/test/qad/widgets/plugin/shortcutsplugin.cpp b/test/qad/widgets/plugin/shortcutsplugin.cpp deleted file mode 100644 index 774f4e3..0000000 --- a/test/qad/widgets/plugin/shortcutsplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "shortcuts.h" -#include "shortcutsplugin.h" -#include - - -ShortcutsPlugin::ShortcutsPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void ShortcutsPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool ShortcutsPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * ShortcutsPlugin::createWidget(QWidget * parent) { - return new Shortcuts(parent, false); -} - - -QString ShortcutsPlugin::name() const { - return QLatin1String("Shortcuts"); -} - - -QString ShortcutsPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon ShortcutsPlugin::icon() const { - return QIcon(); -} - - -QString ShortcutsPlugin::toolTip() const { - return QLatin1String("Shortcuts Edit"); -} - - -QString ShortcutsPlugin::whatsThis() const { - return QLatin1String("Shortcuts Edit"); -} - - -bool ShortcutsPlugin::isContainer() const { - return false; -} - - -QString ShortcutsPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString ShortcutsPlugin::includeFile() const { - return QLatin1String("shortcuts.h"); -} - diff --git a/test/qad/widgets/plugin/shortcutsplugin.h b/test/qad/widgets/plugin/shortcutsplugin.h deleted file mode 100644 index 7fcc0d0..0000000 --- a/test/qad/widgets/plugin/shortcutsplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef SHORTCUTSPLUGIN_H -#define SHORTCUTSPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class ShortcutsPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - ShortcutsPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif diff --git a/test/qad/widgets/plugin/spinsliderplugin.cpp b/test/qad/widgets/plugin/spinsliderplugin.cpp deleted file mode 100644 index 683312d..0000000 --- a/test/qad/widgets/plugin/spinsliderplugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "spinslider.h" -#include "spinsliderplugin.h" -#include - - -SpinSliderPlugin::SpinSliderPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void SpinSliderPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool SpinSliderPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * SpinSliderPlugin::createWidget(QWidget * parent) { - return new SpinSlider(parent); -} - - -QString SpinSliderPlugin::name() const { - return QLatin1String("SpinSlider"); -} - - -QString SpinSliderPlugin::group() const { - return QLatin1String("Input Widgets"); -} - - -QIcon SpinSliderPlugin::icon() const { - return QIcon(":/icons/spinslider.png"); -} - - -QString SpinSliderPlugin::toolTip() const { - return QLatin1String("Spin with Slider"); -} - - -QString SpinSliderPlugin::whatsThis() const { - return QLatin1String("Spin with Slider"); -} - - -bool SpinSliderPlugin::isContainer() const { - return false; -} - - -QString SpinSliderPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString SpinSliderPlugin::includeFile() const { - return QLatin1String("spinslider.h"); -} - diff --git a/test/qad/widgets/plugin/spinsliderplugin.h b/test/qad/widgets/plugin/spinsliderplugin.h deleted file mode 100644 index 858e383..0000000 --- a/test/qad/widgets/plugin/spinsliderplugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef SPINSLIDERPLUGIN_H -#define SPINSLIDERPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class SpinSliderPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - SpinSliderPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif diff --git a/test/qad/widgets/propertystorage_editor.cpp b/test/qad/widgets/propertystorage_editor.cpp deleted file mode 100644 index 44b31c2..0000000 --- a/test/qad/widgets/propertystorage_editor.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "propertystorage_editor.h" -#include "qvariantedit.h" -#include -#include - - -PropertyStorageEditor::PropertyStorageEditor(QWidget * parent): QWidget(parent) { - setLayout(new QGridLayout()); - layout()->setContentsMargins(0, 0, 0, 0); - storage = 0; -} - - -PropertyStorageEditor::~PropertyStorageEditor() { - clear(); -} - - -void PropertyStorageEditor::clear() { - qDeleteAll(_widgets); - _widgets.clear(); -} - - -bool PropertyStorageEditor::isEmpty() const { - return ((QGridLayout*)layout())->count() == 0; -} - - -void PropertyStorageEditor::setStorage(PropertyStorage * s) { - clear(); - storage = s; - if (!storage) return; - int r = 0; - QGridLayout * layoutProps = (QGridLayout*)layout(); - foreach (const PropertyStorage::Property & p, *storage) { - QLabel * lbl = new QLabel(p.name); - _widgets << lbl; - lbl->setAlignment(Qt::AlignVCenter | Qt::AlignRight); - layoutProps->addWidget(lbl, r, 0); - QVariantEdit * ve = new QVariantEdit(); - ve->setValue(p.value); - ve->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - ve->setMinimumWidth(50); - connect(ve, SIGNAL(valueChanged(QVariant)), this, SIGNAL(changed())); - layoutProps->addWidget(ve, r, 1); _widgets << ve; - lbl = new QLabel(p.comment); lbl->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); - layoutProps->addWidget(lbl, r, 2); _widgets << lbl; - ++r; - } -} - - -void PropertyStorageEditor::applyProperties() { - if (!storage) return; - QList & props(storage->properties()); - QGridLayout * layoutProps = (QGridLayout*)layout(); - for (int r = 0; r < layoutProps->rowCount(); ++r) { - if (layoutProps->itemAtPosition(r, 0) == 0 || layoutProps->itemAtPosition(r, 1) == 0) continue; - QLabel * lbl = qobject_cast(layoutProps->itemAtPosition(r, 0)->widget()); - QVariantEdit * ve = qobject_cast(layoutProps->itemAtPosition(r, 1)->widget()); - if (lbl == 0 || ve == 0) continue; - QString pn = lbl->text(); - for (int i = 0; i < props.size(); ++i) { - PropertyStorage::Property & p(props[i]); - if (p.name == pn) { - p.value = ve->value(); - break; - } - } - } -} diff --git a/test/qad/widgets/propertystorage_editor.h b/test/qad/widgets/propertystorage_editor.h deleted file mode 100644 index 05fa4cf..0000000 --- a/test/qad/widgets/propertystorage_editor.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef PROPERTYSTORAGEEDITOR_H -#define PROPERTYSTORAGEEDITOR_H - -#include -#include "propertystorage.h" - - -class PropertyStorageEditor: public QWidget { - Q_OBJECT -public: - explicit PropertyStorageEditor(QWidget * parent = 0); - ~PropertyStorageEditor(); - - void clear(); - bool isEmpty() const; - void setStorage(PropertyStorage * s); - void applyProperties(); - -private: - QList _widgets; - PropertyStorage * storage; - -signals: - void resetStorageRequest(PropertyStorage * ); - void changed(); - -}; - -#endif // PROPERTYSTORAGEEDITOR_H diff --git a/test/qad/widgets/qad_widgets.qrc b/test/qad/widgets/qad_widgets.qrc deleted file mode 100644 index bc585b9..0000000 --- a/test/qad/widgets/qad_widgets.qrc +++ /dev/null @@ -1,46 +0,0 @@ - - - ../icons/go-next.png - ../icons/go-previous.png - lang/qad_widgets_ru.ts - ../icons/dialog-close.png - ../icons/edit-clear.png - ../icons/edit-guides.png - ../icons/view-grid.png - ../icons/zoom-fit-best.png - ../icons/configure.png - ../icons/alpha.png - ../icons/document-save.png - ../icons/edit-clear-locationbar-rtl.png - ../icons/edit-find.png - ../icons/list-add.png - ../icons/edit-delete.png - ../icons/item-add.png - ../icons/item.png - ../icons/node-add.png - ../icons/node.png - ../icons/edit-copy.png - ../icons/edit-paste.png - ../icons/expand_s_x.png - ../icons/expand_s_y.png - ../icons/expand_x.png - ../icons/expand_y.png - ../icons/border-line.png - ../icons/legend.png - ../icons/chardialog.png - ../icons/clineedit.png - ../icons/colorbutton.png - ../icons/ecombobox.png - ../icons/qpiconsole.png - ../icons/spinslider.png - ../icons/etabwidget.png - ../icons/qcodeedit.png - ../icons/qvariantedit.png - ../icons/code-word.png - ../icons/f1.png - ../icons/dialog-ok-apply.png - ../icons/dialog-warning.png - ../icons/tools-wizard.png - ../icons/evalspinbox.png - - diff --git a/test/qad/widgets/qcodeedit.cpp b/test/qad/widgets/qcodeedit.cpp deleted file mode 100644 index a88079e..0000000 --- a/test/qad/widgets/qcodeedit.cpp +++ /dev/null @@ -1,1443 +0,0 @@ -#include "qcodeedit.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ecombobox.h" -#include "qad_types.h" -#include "ui_qcodeedit.h" - -Q_DECLARE_METATYPE(QTextCursor) - -QCodeEdit::QCodeEdit(QWidget * parent): QWidget(parent) { - qRegisterMetaType(); - ui = new Ui::QCodeEdit(); - ui->setupUi(this); - ui->widgetSearch->hide(); - ui->comboSearch->installEventFilter(this); - ui->comboReplace->installEventFilter(this); - prev_lc = auto_comp_pl = cur_search_ind = pos_press = pos_el_press = -1; - timer = 0; - _ignore_focus_out = _destructor = _replacing = false; - _first = true; - es_line.format.setBackground(QColor(240, 245, 240)); - es_line.format.setProperty(QTextFormat::FullWidthSelection, true); - es_cursor.format.setBackground(QColor(220, 255, 200)); - es_bracket.format.setBackground(QColor(180, 238, 180)); - es_bracket.format.setForeground(Qt::red); - es_search.format.setBackground(QColor(255, 240, 10)); - es_range.format.setBackground(QColor(230, 246, 255)); - es_range.format.setProperty(QTextFormat::FullWidthSelection, true); - widget_help = new QFrame(); - widget_help->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); - widget_help->setFocusPolicy(Qt::NoFocus); - widget_help->setFrameShadow(QFrame::Sunken); - widget_help->setFrameShape(QFrame::StyledPanel); - widget_help->setLayout(new QBoxLayout(QBoxLayout::TopToBottom)); - widget_help->layout()->setContentsMargins(0, 0, 0, 0); - for (int i = 0; i < 2; ++i) { - lbl_help[i] = new IconedLabel(); - lbl_help[i]->setFrameShadow(QFrame::Plain); - lbl_help[i]->setFrameShape(QFrame::NoFrame); - lbl_help[i]->setDirection(IconedLabel::RightToLeft); - widget_help->layout()->addWidget(lbl_help[i]); - } - lbl_help[1]->setIcon(QIcon(":/icons/f1.png")); - lbl_help[1]->setText(trUtf8("Press F1 for details")); - completer = new QTreeWidget(); - completer->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); - completer->setFocusPolicy(Qt::NoFocus); - completer->setColumnCount(2); - completer->setRootIsDecorated(false); - completer->setHeaderHidden(true); - completer->header()->setDefaultAlignment(Qt::AlignCenter); - completer->header()-> -#if (QT_VERSION >= 0x050000) - setSectionResizeMode -#else - setResizeMode -#endif - (QHeaderView::ResizeToContents); - completer->header()->setStretchLastSection(true); - - ui->textCode->setCursorWidth(qMax(qRound(fontHeight() / 10.), 1)); - ui->textLines->viewport()->setAutoFillBackground(false); - ui->textLines->viewport()->setCursor(Qt::ArrowCursor); - ui->textLines->setFixedWidth(ui->textLines->fontMetrics().width(" ")); - - QAction * a = new QAction(this); ui->textCode->addAction(a); - a->setShortcut(QKeySequence("Shift+Tab")); - a->setShortcutContext(Qt::WidgetShortcut); - connect(a, SIGNAL(triggered()), this, SLOT(deindent())); - a = new QAction(this); ui->textCode->addAction(a); - a->setShortcut(QKeySequence("Ctrl+D")); - a->setShortcutContext(Qt::WidgetShortcut); - connect(a, SIGNAL(triggered()), this, SLOT(deleteLine())); - a = new QAction(this); ui->textCode->addAction(a); - a->setShortcut(QKeySequence("Ctrl+Return")); - a->setShortcutContext(Qt::WidgetShortcut); - connect(a, SIGNAL(triggered()), this, SLOT(newLine())); - a = new QAction(this); ui->textCode->addAction(a); - a->setShortcut(QKeySequence("Ctrl+Up")); - a->setShortcutContext(Qt::WidgetShortcut); - connect(a, SIGNAL(triggered()), this, SLOT(scrollUp())); - a = new QAction(this); ui->textCode->addAction(a); - a->setShortcut(QKeySequence("Ctrl+Down")); - a->setShortcutContext(Qt::WidgetShortcut); - connect(a, SIGNAL(triggered()), this, SLOT(scrollDown())); - a = new QAction(this); ui->textCode->addAction(a); - a->setShortcut(QKeySequence("Ctrl+Shift+Return")); - a->setShortcutContext(Qt::WidgetShortcut); - connect(a, SIGNAL(triggered()), this, SLOT(newLineBefore())); - ui->frame->setFocusProxy(ui->textCode); - QTextOption to = ui->textLines->document()->defaultTextOption(); - to.setAlignment(Qt::AlignTop | Qt::AlignRight); - ui->textLines->document()->setDefaultTextOption(to); - /*to = ui->textCode->document()->defaultTextOption(); - to.setFlags(QTextOption::SuppressColors); - ui->textCode->document()->setDefaultTextOption(to);*/ - setShowSpaces(true); - - a = new QAction(this); - a->setShortcut(QKeySequence("Ctrl+F")); - a->setShortcutContext(Qt::WidgetWithChildrenShortcut); - connect(a, SIGNAL(triggered(bool)), this, SLOT(search_triggered())); - addAction(a); - - /*a = new QAction(this); - a->setShortcut(QKeySequence("Esc")); - a->setShortcutContext(Qt::WidgetWithChildrenShortcut); - connect(a, SIGNAL(triggered(bool)), this, SLOT(hideSearch())); - addAction(a);*/ - - connect(completer, SIGNAL(itemDoubleClicked(QTreeWidgetItem * ,int)), this, SLOT(commitCompletition())); - connect(ui->textCode->verticalScrollBar(), SIGNAL(valueChanged(int)), ui->textLines->verticalScrollBar(), SLOT(setValue(int))); - connect(ui->textCode->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(hideHelp())); - connect(ui->textCode, SIGNAL(textChanged()), this, SLOT(textEdit_textChanged())); - connect(ui->textCode, SIGNAL(textChanged()), this, SIGNAL(textChanged())); - connect(ui->textCode, SIGNAL(cursorPositionChanged()), this, SLOT(textEdit_cursorPositionChanged())); - connect(ui->textCode, SIGNAL(selectionChanged()), this, SLOT(textEdit_selectionChanged())); - connect(ui->comboSearch->lineEdit(), SIGNAL(returnPressed()), this, SLOT(searchNext())); - connect(ui->comboReplace->lineEdit(), SIGNAL(returnPressed()), this, SLOT(on_buttonReplaceSearch_clicked())); - updateLines(); - - registerAutoCompletitionClass(-1, QCodeEdit::Keyword, "Words", QIcon(":/icons/code-word.png")); -} - - -QCodeEdit::~QCodeEdit() { - _destructor = true; - delete completer; - //for (int i = 0; i < 2; ++i) - // delete lbl_help[i]; - delete widget_help; - //delete ui; -} - - -QTextCursor QCodeEdit::textCursor() const { - return ui->textCode->textCursor(); -} - - -QTextDocument * QCodeEdit::document() const { - return ui->textCode->document(); -} - - -void QCodeEdit::setDocument(QTextDocument * doc) { - if (document()) { - document()->setProperty("_cursor", QVariant::fromValue(textCursor())); - document()->setProperty("_vpos", textEdit()->verticalScrollBar()->value()); - } - ui->textCode->setEnabled(doc); - ui->textLines->setEnabled(doc); - documentUnset(); - if (!doc) { - ui->textCode->setDocument(0); - documentChanged(0); - return; - } - if (!qobject_cast(doc->documentLayout())) - doc->setDocumentLayout(new QPlainTextDocumentLayout(doc)); - ui->textCode->setDocument(doc); - ui->textCode->setCursorWidth(qMax(qRound(fontHeight() / 10.), 1)); - setShowSpaces(spaces_); - if (doc->property("_cursor").isValid()) { - setTextCursor(doc->property("_cursor").value()); - textEdit()->verticalScrollBar()->setValue(doc->property("_vpos").toInt()); - } - documentChanged(doc); - doc->setDefaultFont(editorFont()); - updateLines(); -} - - -void QCodeEdit::setTextCursor(const QTextCursor & c) { - ui->textCode->setTextCursor(c); -} - - -void QCodeEdit::centerCursor() { - ui->textCode->centerCursor(); - updateLines(); -} - - -void QCodeEdit::insertText(const QString & text) { - ui->textCode->insertPlainText(text); - updateLines(); -} - - -void QCodeEdit::appendText(const QString & text) { - ui->textCode->appendPlainText(text); - updateLines(); -} - - -void QCodeEdit::setCustomExtraSelection(const QList & es) { - es_custom = es; - applyExtraSelection(); -} - - -QRect QCodeEdit::cursorRect() const { - return ui->textCode->cursorRect(); -} - - -QRect QCodeEdit::cursorRect(const QTextCursor & cursor) const { - return ui->textCode->cursorRect(cursor); -} - - -QString QCodeEdit::text() const { - return ui->textCode->toPlainText(); -} - - -QStringList QCodeEdit::cursorScope() const { - return cursor_scope; -} - - -bool QCodeEdit::showLineNumbers() const { - return ui->textLines->isVisible(); -} - - -void QCodeEdit::setEditorFont(QFont f) { - ui->textCode->setFont(f); - ui->textLines->setFont(f); -} - - -QFont QCodeEdit::editorFont() const { - return ui->textCode->font(); -} - - -QPlainTextEdit * QCodeEdit::textEdit() const { - return ui->textCode; -} - - -int QCodeEdit::skipRange(const QString & s, int pos, QChar oc, QChar cc, QChar sc) { - int cnt = 0; - bool skip = false; - for (int i = pos - 1; i >= 0; --i) { - QChar c = s[i]; - if (skip) {skip = false; continue;} - if (c == sc) {skip = true; continue;} - if (c == cc) {cnt++; continue;} - if (c == oc) {cnt--; if (cnt == 0) return i;} - } - return -1; -} - - -int QCodeEdit::skipCWord(const QString & s, int pos) { - QChar pc(0), c(0); - for (int i = pos - 1; i >= 0; --i) { - pc = c; - c = s[i]; - if (c.isLetterOrNumber() || (c.toLatin1() == '_')) continue; - if (pc.isLetter() || (pc.toLatin1() == '_')) return i + 1; - return -1; - } - return -1; -} - - -bool QCodeEdit::matchWritten(QString s, QString w) { - if (s.isEmpty() || w.isEmpty()) return true; - if (s.contains(w, Qt::CaseInsensitive)) return true; - int sp(0); - for (int i = 0; i < w.size(); ++i, ++sp) { - if (sp >= s.size()) return false; - QChar wc(w[i].toLower()); - bool ns = false, bl = true; - while (sp < s.size()) { - if (ns || s[sp].toLatin1() == '_') { - if (s[sp].toLatin1() == '_') {sp++; bl = false; continue;} - if (s[sp].isLower() && bl) {sp++; continue;} - if (s[sp].toLower() != wc) return false; - } - if (s[sp].toLower() == wc) break; - ns = true; - sp++; - } - if (sp >= s.size()) return false; - } - return true; -} - - -QChar QCodeEdit::pairChar(QChar c) { - switch (c.toLatin1()) { - case '\"': return '\"'; - case '(': return ')'; - case ')': return '('; - case '[': return ']'; - case ']': return '['; - default: break; - } - return QChar(); -} - - -bool QCodeEdit::eventFilter(QObject * o, QEvent * e) { - if (_destructor) return QWidget::eventFilter(o, e); - if (e->type() == QEvent::Destroy) { - completer->removeEventFilter(this); - ui->textCode->removeEventFilter(this); - ui->textCode->viewport()->removeEventFilter(this); - ui->textLines->viewport()->removeEventFilter(this); - return QWidget::eventFilter(o, e); - } - if (ui->textLines) { - if (o == ui->textLines->viewport()) {/* - if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonRelease || - e->type() == QEvent::MouseMove || e->type() == QEvent::MouseButtonDblClick) { -#if (QT_VERSION < 0x050000) - const_cast(((QMouseEvent*)e)->pos()) = QPoint(0, ((QMouseEvent*)e)->pos().y()); -#else - const_cast(((QMouseEvent*)e)->localPos()) = QPointF(0, ((QMouseEvent*)e)->localPos().y()); -#endif - QApplication::sendEvent(ui->textCode->viewport(), e); - return true; - }*/ - QTextCursor tc; - int tcpos = 0; - switch (e->type()) { - case QEvent::MouseButtonPress: - if (!isEnabled()) break; - tc = ui->textCode->cursorForPosition(((QMouseEvent*)e)->pos()); - tc.movePosition(QTextCursor::EndOfLine); - pos_el_press = tc.anchor(); - tc.movePosition(QTextCursor::StartOfLine); - pos_press = tc.anchor(); - if (!tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor)) - tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); - ui->textCode->setTextCursor(tc); - return true; - case QEvent::MouseMove: - if (!isEnabled()) break; - tc = ui->textCode->cursorForPosition(((QMouseEvent*)e)->pos()); - tc.movePosition(QTextCursor::StartOfLine); - if (pos_press == tc.anchor()) { - if (!tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor)) - tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); - ui->textCode->setTextCursor(tc); - return true; - } - if (pos_press < tc.anchor()) { - if (!tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor)) - tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); - } - tcpos = tc.position(); - tc.setPosition(pos_press < tc.anchor() ? pos_press : pos_el_press); - tc.setPosition(tcpos, QTextCursor::KeepAnchor); - ui->textCode->setTextCursor(tc); - return true; - case QEvent::Wheel: - if (!isEnabled()) break; - QApplication::sendEvent(ui->textCode->viewport(), e); - return true; - default: break; - } - } - } - if (o == completer) { - //qDebug() << o << e; - if (e->type() == QEvent::WindowActivate) - _ignore_focus_out = true; - //qDebug() << e; - return QWidget::eventFilter(o, e); - } - if (o == ui->comboSearch || o == ui->comboReplace) { - //qDebug() << o << e; - if (e->type() == QEvent::KeyPress) { - if (((QKeyEvent * )e)->key() == Qt::Key_Escape) { - hideHelp(); - if (completer->isVisible()) - completer->hide(); - else - hideSearch(); - } - } - //qDebug() << e; - return QWidget::eventFilter(o, e); - } - if (ui->textCode) { - if (o == ui->textCode->viewport()) { - if (e->type() == QEvent::MouseButtonPress) { - completer->hide(); - hideHelp(); - } - return QWidget::eventFilter(o, e); - } - if (o == ui->textCode) { - //qDebug() << e; - QMetaObject::invokeMethod(this, "syncScrolls", Qt::QueuedConnection); - QKeyEvent * ke; - QChar kc(0); - switch (e->type()) { - case QEvent::ToolTip: { - QTextCursor tc = ui->textCode->cursorForPosition(((QHelpEvent*)e)->pos()); - tc.select(QTextCursor::WordUnderCursor); - raiseHelp(tc); - } - break; - case QEvent::KeyPress: - ke = (QKeyEvent * )e; - //qDebug() << "key" << ke; - switch (ke->key()) { - case Qt::Key_Space: - if (ke->modifiers().testFlag(Qt::ControlModifier)) { - invokeAutoCompletition(true); - return true; - } - break; - case Qt::Key_Escape: - hideHelp(); - if (completer->isVisible()) - completer->hide(); - else - hideSearch(); - break; - case Qt::Key_Up: - if (completer->isVisible()) { - previousCompletition(); - return true; - } - completer->hide(); - hideHelp(); - if (ke->modifiers().testFlag(Qt::AltModifier)) { - copyLineUp(); - return true; - } - if (ke->modifiers().testFlag(Qt::ControlModifier) && ke->modifiers().testFlag(Qt::ShiftModifier)) { - moveLineUp(); - return true; - } - break; - case Qt::Key_Down: - if (completer->isVisible()) { - nextCompletition(); - return true; - } - completer->hide(); - hideHelp(); - if (ke->modifiers().testFlag(Qt::AltModifier)) { - copyLineDown(); - return true; - } - if (ke->modifiers().testFlag(Qt::ControlModifier) && ke->modifiers().testFlag(Qt::ShiftModifier)) { - moveLineDown(); - return true; - } - break; - case Qt::Key_Home: - case Qt::Key_End: - case Qt::Key_PageUp: - case Qt::Key_PageDown: - if (completer->isVisible()) { - qApp->sendEvent(completer, new QKeyEvent(e->type(), ke->key(), ke->modifiers())); - return true; - } - break; - case Qt::Key_Left: - case Qt::Key_Right: - case Qt::Key_Backspace: - case Qt::Key_Delete: - if (completer->isVisible()) - QMetaObject::invokeMethod(this, "invokeAutoCompletition", Qt::QueuedConnection, Q_ARG(bool, false)); - break; - case Qt::Key_Return: - if (completer->isVisible()) { - commitCompletition(); - completer->hide(); - return true; - } - if (ui->textCode->textCursor().selectedText().isEmpty()) - QMetaObject::invokeMethod(this, "autoIndent", Qt::QueuedConnection); - break; - case Qt::Key_Tab: - if (!ui->textCode->textCursor().selectedText().isEmpty()) { - if (ke->modifiers().testFlag(Qt::ShiftModifier)) - deindent(); - else - indent(); - return true; - } - break; - case Qt::Key_D: - if (ke->modifiers().testFlag(Qt::ControlModifier)) { - completer->hide(); - return true; - } - break; - default: break; - } - if (!ke->text().isEmpty()) - kc = ke->text()[0]; - if (kc == '.') { - completer->hide(); - QMetaObject::invokeMethod(this, "invokeAutoCompletition", Qt::QueuedConnection, Q_ARG(bool, false)); - } else { - if ((kc.isLetterOrNumber() || kc.toLatin1() == '_') && completer->isVisible()) - QMetaObject::invokeMethod(this, "invokeAutoCompletition", Qt::QueuedConnection, Q_ARG(bool, false)); - } - break; - case QEvent::FocusOut: - if (_ignore_focus_out) { - _ignore_focus_out = false; - break; - } - case QEvent::Hide: - case QEvent::HideToParent: - case QEvent::MouseButtonPress: - //qDebug() << e; - completer->hide(); - hideHelp(); - default: break; - } - } - } - return QWidget::eventFilter(o, e); -} - - -void QCodeEdit::showEvent(QShowEvent * ) { - if (!_first) return; - _first = false; - completer->installEventFilter(this); - ui->textCode->installEventFilter(this); - ui->textCode->viewport()->installEventFilter(this); - ui->textLines->viewport()->installEventFilter(this); -} - - -void QCodeEdit::timerEvent(QTimerEvent * ) { - parse(); - emit parseRequest(); - killTimer(timer); - timer = 0; -} - - -void QCodeEdit::leaveEvent(QEvent * e) { - hideHelp(); - QWidget::leaveEvent(e); -} - - -char antiBracket(char c) { - switch (c) { - case '(': return ')'; - case '[': return ']'; - case '{': return '}'; - case '<': return '>'; - case ')': return '('; - case ']': return '['; - case '}': return '{'; - case '>': return '<'; - } - return 0; -} - - -void QCodeEdit::highlightBrackets() { - es_brackets.clear(); - QTextCursor stc = ui->textCode->textCursor(), tc; - QTextEdit::ExtraSelection es; - stc.setPosition(stc.position()); - QTextCursor::MoveOperation mop[2] = {QTextCursor::Left, QTextCursor::Right}; - QString mbr[2] = {")]}>", "([{<"}; - for (int d = 0; d < 2; ++d) { - tc = stc; - tc.movePosition(mop[d], QTextCursor::KeepAnchor); - if (!tc.selectedText().isEmpty()) { - char ch = tc.selectedText()[0].toLatin1(); - if (mbr[d].contains(ch)) { - es = es_bracket; - es.cursor = tc; - es_brackets << es; - QTextCursor ftc = tc; - int bcnt = 1; char fch = antiBracket(ch); - while (bcnt > 0) { - ftc.setPosition(ftc.position()); - if (!ftc.movePosition(mop[d], QTextCursor::KeepAnchor)) break; - //qDebug() << tc.selectedText(); - if (ftc.selectedText().isEmpty()) break; - if (ftc.selectedText()[0].toLatin1() == ch) ++bcnt; - if (ftc.selectedText()[0].toLatin1() == fch) --bcnt; - } - if (bcnt == 0) { - es.cursor = ftc; - es_brackets << es; - es.format = es_range.format; - es.cursor.setPosition(tc.position(), QTextCursor::KeepAnchor); - if (!es.cursor.selection().isEmpty()) - es_brackets << es; - } - } - } - } -} - - -void QCodeEdit::applyExtraSelection() { - ui->textCode->setExtraSelections(QList() << es_line << es_selected - << es_custom << es_brackets << es_search_list << es_cursor); -} - - -void QCodeEdit::nextCompletition() { - int ci = completer->currentIndex().row(); - if (ci >= completer->topLevelItemCount() - 1) return; - if (completer->topLevelItem(ci + 1)->flags().testFlag(Qt::ItemIsSelectable)) - completer->setCurrentItem(completer->topLevelItem(ci + 1)); - else { - if (ci >= completer->topLevelItemCount() - 2) return; - completer->setCurrentItem(completer->topLevelItem(ci + 2)); - } -} - - -void QCodeEdit::previousCompletition() { - int ci = completer->currentIndex().row(); - if (ci <= 0) return; - if (completer->topLevelItem(ci - 1)->flags().testFlag(Qt::ItemIsSelectable)) - completer->setCurrentItem(completer->topLevelItem(ci - 1)); - else { - if (ci <= 1) return; - completer->setCurrentItem(completer->topLevelItem(ci - 2)); - } -} - - -void QCodeEdit::clearSearch() { - es_search_list.clear(); - applyExtraSelection(); -} - - -void QCodeEdit::moveToSearch() { - if (es_search_list.isEmpty()) return; - if (cur_search_ind < 0) cur_search_ind += es_search_list.size(); - if (cur_search_ind >= es_search_list.size()) cur_search_ind = 0; - if (cur_search_ind < 0 || cur_search_ind >= es_search_list.size()) return; - ui->textCode->setTextCursor(es_search_list[cur_search_ind].cursor); -} - - -int QCodeEdit::searchIndFromCursor() { - if (es_search_list.isEmpty()) return -1; - int ci = ui->textCode->textCursor().anchor(); - for (int i = 0; i < es_search_list.size(); ++i) - if (es_search_list[i].cursor.anchor() > ci) - return i - 1; - return -1; -} - - -void QCodeEdit::searchAll() { - QString st = ui->comboSearch->currentText(); - es_search_list.clear(); - if (!st.isEmpty() && !ui->widgetSearch->isHidden()) { - QTextDocument::FindFlags ff = 0; - if (ui->buttonSearchCase->isChecked()) ff |= QTextDocument::FindCaseSensitively; - if (ui->buttonSearchWord->isChecked()) ff |= QTextDocument::FindWholeWords; - QTextCursor tc(ui->textCode->document()->begin()); - QTextEdit::ExtraSelection es = es_search; - while (true) { - tc = ui->textCode->document()->find(st, tc, ff); - if (tc.isNull()) break; - es.cursor = tc; - es_search_list << es; - } - } - applyExtraSelection(); - QString ss; - if (es_search_list.isEmpty()) - ss = "color: rgb(180, 0, 0);"; - ui->comboSearch->lineEdit()->setStyleSheet(ss); -} - - -void QCodeEdit::search_triggered() { - QTextCursor tc = ui->textCode->textCursor(); - QString st = tc.selectedText(); - if (st.isEmpty()) { - tc.select(QTextCursor::WordUnderCursor); - st = tc.selectedText(); - } - search(st); - //QMetaObject::invokeMethod(ui->comboSearch->lineEdit(), "returnPressed"); - if (ui->comboSearch->findText(st) < 0) - ui->comboSearch->insertItem(0, st); -} - - -void QCodeEdit::syncScrolls() { - ui->textLines->verticalScrollBar()->setValue(ui->textCode->verticalScrollBar()->value()); - ui->textLines->setHorizontalScrollBarPolicy(ui->textCode->horizontalScrollBar()->isVisible() ? Qt::ScrollBarAlwaysOn : Qt::ScrollBarAlwaysOff); - //qDebug() << "!!!"; -} - - -void QCodeEdit::scrollUp() { - ui->textCode->verticalScrollBar()->setValue(ui->textCode->verticalScrollBar()->value() - 1); -} - - -void QCodeEdit::scrollDown() { - ui->textCode->verticalScrollBar()->setValue(ui->textCode->verticalScrollBar()->value() + 1); -} - - -void QCodeEdit::deleteLine() { - QTextCursor tc = ui->textCode->textCursor(); - tc.movePosition(QTextCursor::EndOfLine); - tc.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); - bool md = true; - if (!tc.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor)) { - tc.movePosition(QTextCursor::StartOfLine); - tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); - tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - md = false; - } - tc.removeSelectedText(); - tc.movePosition(QTextCursor::StartOfLine); - if (md) tc.movePosition(QTextCursor::Down); - ui->textCode->setTextCursor(tc); -} - - -void QCodeEdit::copyLineUp() { - QTextCursor tc = ui->textCode->textCursor(); - int ss = tc.selectionStart(), ss_ = ss, se = tc.selectionEnd(), se_ = se; - QString st_ = tc.selection().toPlainText(); - if (st_.endsWith("\n")) { - st_.chop(1); - se--; se_--; - } - tc.setPosition(ss); tc.movePosition(QTextCursor::StartOfLine); ss = tc.position(); - tc.setPosition(se); tc.movePosition(QTextCursor::EndOfLine); se = tc.position(); - tc.setPosition(ss); tc.setPosition(se, QTextCursor::KeepAnchor); - bool ins_nl = false; - if (!tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor)) - ins_nl = true; - QString l = tc.selectedText(); - tc.beginEditBlock(); - tc.setPosition(ss); - if (ins_nl) - l.append("\n"); - tc.insertText(l); - tc.setPosition(ss_); - tc.setPosition(se_, QTextCursor::KeepAnchor); - tc.endEditBlock(); - ui->textCode->setTextCursor(tc); -} - - -void QCodeEdit::copyLineDown() { - QTextCursor tc = ui->textCode->textCursor(); - int ss = tc.selectionStart(), ss_ = ss, se = tc.selectionEnd(), se_ = se; - QString st_ = tc.selection().toPlainText(); - if (st_.endsWith("\n")) { - st_.chop(1); - se--; se_--; - } - tc.setPosition(ss); tc.movePosition(QTextCursor::StartOfLine); ss = tc.position(); - tc.setPosition(se); tc.movePosition(QTextCursor::EndOfLine); se = tc.position(); - tc.setPosition(ss); tc.setPosition(se, QTextCursor::KeepAnchor); - bool ins_nl = false; - if (!tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor)) - ins_nl = true; - QString l = tc.selectedText(); - tc.beginEditBlock(); - tc.setPosition(ss); - ss_ += l.size(); se_ += l.size(); - if (ins_nl) { - l.append("\n"); - ss_++; se_++; - } - tc.insertText(l); - tc.setPosition(ss_); - tc.setPosition(se_, QTextCursor::KeepAnchor); - tc.endEditBlock(); - ui->textCode->setTextCursor(tc); -} - - -void QCodeEdit::moveLineUp() { - QTextCursor tc = ui->textCode->textCursor(); - int ss = tc.selectionStart(), ss_ = ss, se = tc.selectionEnd(), se_ = se; - QString st_ = tc.selection().toPlainText(); - if (st_.endsWith("\n")) { - st_.chop(1); - se--; se_--; - } - tc.setPosition(ss); tc.movePosition(QTextCursor::StartOfLine); ss = tc.position(); - tc.setPosition(se); tc.movePosition(QTextCursor::EndOfLine); se = tc.position(); - tc.setPosition(ss); - if (!tc.movePosition(QTextCursor::Up)) - return; - tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor); - QString l = tc.selectedText(); - ss -= l.size(); se -= l.size(); - ss_ -= l.size(); se_ -= l.size(); - tc.beginEditBlock(); - tc.removeSelectedText(); - tc.setPosition(se); - bool de = false; - if (!tc.movePosition(QTextCursor::Right)) { - l.prepend("\n"); - de = true; - } - tc.insertText(l); - if (de) { - tc.movePosition(QTextCursor::End); - tc.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor); - tc.removeSelectedText(); - } - tc.setPosition(ss_); - tc.setPosition(se_, QTextCursor::KeepAnchor); - tc.endEditBlock(); - ui->textCode->setTextCursor(tc); -} - - -void QCodeEdit::moveLineDown() { - QTextCursor tc = ui->textCode->textCursor(); - int ss = tc.selectionStart(), ss_ = ss, se = tc.selectionEnd(), se_ = se; - QString st_ = tc.selection().toPlainText(); - if (st_.endsWith("\n")) { - st_.chop(1); - se--; se_--; - } - tc.setPosition(ss); tc.movePosition(QTextCursor::StartOfLine); ss = tc.position(); - tc.setPosition(se); tc.movePosition(QTextCursor::EndOfLine); se = tc.position(); - tc.setPosition(se); - if (!tc.movePosition(QTextCursor::Right)) - return; - bool de = false; - if (!tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor)) { - tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); - de = true; - } - QString l = tc.selectedText(); - tc.beginEditBlock(); - tc.removeSelectedText(); - tc.setPosition(ss); - if (de) l += "\n"; - tc.insertText(l); - if (de) { - tc.movePosition(QTextCursor::End); - tc.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor); - tc.removeSelectedText(); - } - ss += l.size(); se += l.size(); - ss_ += l.size(); se_ += l.size(); - tc.setPosition(ss_); - tc.setPosition(se_, QTextCursor::KeepAnchor); - tc.endEditBlock(); - ui->textCode->setTextCursor(tc); -} - - -void QCodeEdit::indent() { - QTextCursor tc = ui->textCode->textCursor(); - int ss = tc.selectionStart(), ss_ = ss, se = tc.selectionEnd(), se_ = se; - QString st_ = tc.selection().toPlainText(); - if (st_.endsWith("\n")) { - st_.chop(1); - se--; se_--; - } - tc.setPosition(ss); tc.movePosition(QTextCursor::StartOfLine); ss = tc.position(); - tc.setPosition(se); tc.movePosition(QTextCursor::EndOfLine); se = tc.position(); - tc.setPosition(ss); - while (tc.position() < se_) { - tc.insertText("\t"); - se_++; - tc.movePosition(QTextCursor::StartOfLine); - if (!tc.movePosition(QTextCursor::Down)) - break; - } - tc.setPosition(ss_ + 1); - tc.setPosition(se_, QTextCursor::KeepAnchor); - ui->textCode->setTextCursor(tc); -} - - -void QCodeEdit::deindent() { - QTextCursor tc = ui->textCode->textCursor(); - int ss = tc.selectionStart(), ss_ = ss, se = tc.selectionEnd(), se_ = se; - QString st_ = tc.selection().toPlainText(); - if (st_.endsWith("\n")) { - st_.chop(1); - se--; se_--; - } - tc.setPosition(ss); tc.movePosition(QTextCursor::StartOfLine); ss = tc.position(); - tc.setPosition(se); tc.movePosition(QTextCursor::EndOfLine); se = tc.position(); - tc.setPosition(ss); - bool first = true; - while (tc.position() < se_) { - tc.movePosition(QTextCursor::StartOfLine); - tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - int rs = 0; - if (tc.selectedText() == "\t") { - tc.removeSelectedText(); - rs = 1; - } else { - for (int i = 0; i < 4; ++i) { - tc.movePosition(QTextCursor::StartOfLine); - tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - if (tc.selectedText() == " ") { - tc.removeSelectedText(); - rs++; - } - } - } - if (first) { - first = false; - ss_ -= rs; - } - se_ -= rs; - tc.movePosition(QTextCursor::StartOfLine); - if (!tc.movePosition(QTextCursor::Down)) - break; - } - tc.setPosition(ss_); - tc.setPosition(se_, QTextCursor::KeepAnchor); - ui->textCode->setTextCursor(tc); -} - - -void QCodeEdit::autoIndent() { - QTextCursor tc = ui->textCode->textCursor(), stc = tc; - tc.movePosition(QTextCursor::StartOfLine); - if (!tc.movePosition(QTextCursor::Up)) return; - tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor); - QString line = tc.selectedText(), tabs; - int i = 0; - for (; i < line.size(); ++i) - if (!line[i].isSpace()) { - tabs = line.left(i); - break; - } - if (i >= line.size()) - tabs = line.left(line.size() - 1); - int nt = qMax(0, line.count(QChar('{')) - line.count(QChar('}'))); - tabs.append(QString("\t").repeated(nt)); - if (tabs.isEmpty()) return; - stc.insertText(tabs); - ui->textCode->setTextCursor(stc); -} - - -void QCodeEdit::scrollToTop() { - prev_lc = -1; - updateLines(); - ui->textCode->verticalScrollBar()->setValue(0); - ui->textLines->verticalScrollBar()->setValue(0); -} - - -void QCodeEdit::newLine() { - QTextCursor tc = ui->textCode->textCursor(); - tc.movePosition(QTextCursor::EndOfLine); - tc.insertText("\n"); - ui->textCode->setTextCursor(tc); - QMetaObject::invokeMethod(this, "autoIndent", Qt::QueuedConnection); -} - - -void QCodeEdit::newLineBefore() { - QTextCursor tc = ui->textCode->textCursor(); - tc.movePosition(QTextCursor::StartOfLine); - tc.insertText("\n"); - tc.movePosition(QTextCursor::Up); - ui->textCode->setTextCursor(tc); - QMetaObject::invokeMethod(this, "autoIndent", Qt::QueuedConnection); -} - - -void QCodeEdit::setFocus() { - ui->textCode->setFocus(); -} - - -void QCodeEdit::setText(const QString & t) { - ui->textCode->setPlainText(t); -} - - -void QCodeEdit::updateLines() { - if (timer > 0) killTimer(timer); - timer = startTimer(500); - ui->textCode->setTabStopWidth(ui->textCode->fontMetrics().width(" ")); - int lc = ui->textCode->document()->lineCount(); - if (prev_lc == lc) return; - prev_lc = lc; - ui->textLines->setFixedWidth(ui->textLines->fontMetrics().width(QString(" %1").arg(lc))); - ui->textLines->clear(); - for (int i = 1; i <= lc; ++i) - ui->textLines->appendPlainText(QString("%1").arg(i)); - ui->textLines->verticalScrollBar()->setValue(ui->textCode->verticalScrollBar()->value()); -} - - -QString QCodeEdit::selectArg(QString s, int arg) { - if (!s.contains('(') || arg < 0) return s; - QString ss = s.left(s.indexOf('(')); - s.remove(0, ss.size()); - if (s.startsWith('(')) s.remove(0, 1); - if (s.endsWith(')')) s.chop(1); - QStringList al = s.split(","); - QString ret = ss + "("; - for (int i = 0; i < al.size(); ++i) { - if (i > 0) ret += ", "; - if (i == arg) ret += ""; - ret += al[i].trimmed(); - if (i == arg) ret += ""; - } - ret += ")"; - return ret; -} - - -void QCodeEdit::raiseHelp(QTextCursor tc, int arg) { - bool ok; - QPair scope = getScope(tc, &ok); - QString st = tc.selectedText(); - if (arg >= 0) st = scope.second; - if (!ok || st.isEmpty()) { - hideHelp(); - return; - } - ok = false; - ACList acl(autoCompletitionList(scope.first, scope.second)); - foreach (const ACPair & i, acl) { - foreach (const StringsPair & s, i.second) { - QString ts = s.second; - //qDebug() << ts << st; - if (ts != st) { - if (ts.startsWith(st)) { - ts.remove(0, st.size()); - ts = ts.trimmed(); - if (!ts.isEmpty()) { - if (ts[0] != '(') - continue; - } - } else - continue; - } - //qDebug() << s.second << st; - ACClass acc = ac_classes.value(i.first); - lbl_help[0]->setIcon(acc.icon); - lbl_help[0]->setText(QString("[%1] %2 %3").arg(acc.name, s.first, selectArg(s.second, arg))); - ok = true; - break; - } - if (ok) break; - } - if (!ok) { - hideHelp(); - return; - } - //qDebug() << "help found" << tc.selectionStart() << tc.selectionEnd(); - es_cursor.cursor = tc; - applyExtraSelection(); - //tc.movePosition(QTextCursor::StartOfWord, QTextCursor::MoveAnchor); - lbl_help[0]->setFont(font()); - qApp->processEvents(); - widget_help->resize(widget_help->sizeHint()); - qApp->processEvents(); - QRect whr = ui->textCode->cursorRect(tc); - whr.setWidth(ui->textCode->fontMetrics().width(st)); - QPoint whp; - whp.setX(whr.left() - whr.width() - (widget_help->width() - whr.width()) / 2); - whp.setY(whr.top() - widget_help->height() - (fontHeight() / 3)); - //qDebug() << whr << whp << widget_help->width() << ", " << st; - widget_help->move(ui->textCode->viewport()->mapToGlobal(whp)); - widget_help->show(); - widget_help->raise(); - cursor_scope = scope.first; - cursor_scope << scope.second; - //qDebug() << "tooltip" << st; -} - - -void QCodeEdit::hideHelp() { - widget_help->hide(); - es_cursor.cursor = QTextCursor(); - cursor_scope.clear(); - applyExtraSelection(); -} - - -QTextCursor QCodeEdit::functionStart(QTextCursor tc, int * arg) { - QString doc = ui->textCode->toPlainText(); - int bcnt = 0, a = 0, i = -1; - for (i = tc.position() - 1; i >= 0; --i) { - if (doc[i] == ')') bcnt++; - if (doc[i] == '(') { - if (bcnt == 0) - break; - else - bcnt--; - } - //if (doc[i] == '(') bcnt--; - if (doc[i] == ',' && bcnt == 0) a++; - } - if (i < 0) return QTextCursor(); - if (arg) *arg = a; - QTextCursor ret(ui->textCode->document()); - ret.setPosition(i); - //qDebug() << "found" << i << a; - return ret; -} - - -QCodeEdit::ACList QCodeEdit::wordsCompletitionList(const QString & written) const { - QCodeEdit::ACList ret; - if (!written.isEmpty()) { - QTextCursor tc = QTextCursor(ui->textCode->document()->begin()), stc; - QStringList acwl; - tc = QTextCursor(ui->textCode->document()->begin()); - while (true) { - tc = ui->textCode->document()->find(written, tc); - if (tc.isNull()) break; - stc = tc; - stc.movePosition(QTextCursor::Left); - stc.select(QTextCursor::WordUnderCursor); - if (!stc.selectedText().isEmpty() && stc.selectedText().trimmed() != written) - acwl << stc.selectedText(); - } - acwl.removeDuplicates(); - ACPair acl; - acl.first = -1; - foreach (const QString & s, acwl) - acl.second << StringsPair("", s); - ret << acl; - } - return ret; -} - - -QPair QCodeEdit::getScope(QTextCursor tc, bool * ok) { - QPair ret; - QTextCursor stc = tc; - if (tc.isNull()) { - completer->hide(); - if (ok) *ok = false; - return ret; - } - int line = tc.block().firstLineNumber(); - if (completer->isVisible()) { - if (auto_comp_pl != line) { - completer->hide(); - auto_comp_pl = line; - if (ok) *ok = false; - return ret; - } - } - QString doc = ui->textCode->toPlainText(); - auto_comp_pl = line; - completer->clear(); - int spos = tc.position(), cpos = spos; - tc.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor); - QStringList scope; - QString written = tc.selectedText().trimmed(); - //qDebug() << "\n*** invokeAutoCompletition ***"; - if (written != "_" && !written.leftJustified(1)[0].isLetterOrNumber()) { - written.clear(); - } else { - cpos = skipCWord(doc, spos); - if (cpos >= 0) - written = doc.mid(cpos, spos - cpos).trimmed(); - } - while (cpos >= 0) { - cpos--; - //qDebug() << "char =" << doc.mid(cpos, 1); - if (doc.mid(cpos, 1) != ".") break; - QChar c = doc.mid(cpos - 1, 1).leftJustified(1)[0]; - int ppos = cpos; - if (c == '\"' || c == ')' || c == ']') { - cpos = skipRange(doc, cpos, pairChar(c), c, '\\'); - //qDebug() << "range" << cpos; - if (cpos < 0) break; - } - int npos = skipCWord(doc, cpos); - if (npos < 0) break; - scope.push_front(doc.mid(npos, ppos - npos)); - cpos = npos; - } - ret.first = scope; - ret.second = written; - if (ok) *ok = true; - return ret; -} - - -void QCodeEdit::invokeAutoCompletition(bool force) { - int arg = -1; - QTextCursor htc = functionStart(ui->textCode->textCursor(), &arg); - if (!htc.isNull()) { - //qDebug() << "raise"; - raiseHelp(htc, arg); - } - bool ok; - QPair scope = getScope(ui->textCode->textCursor(), &ok); - if (!ok) return; - ACList acl(autoCompletitionList(scope.first, scope.second)); - //qDebug() << written << scope << acl.size(); - if (scope.first.isEmpty() && scope.second.isEmpty() && !force) { - completer->hide(); - hideHelp(); - return; - } - acl << wordsCompletitionList(scope.second); - QFont bf(font()); - bf.setBold(true); - foreach (const ACPair & ac, acl) { - if (ac.second.isEmpty()) continue; - ACClass acc = ac_classes.value(ac.first); - QTreeWidgetItem * gi = new QTreeWidgetItem(); - gi->setText(0, acc.name); - gi->setTextAlignment(0, Qt::AlignCenter); - gi->setTextAlignment(1, Qt::AlignCenter); - gi->setFont(0, bf); - gi->setBackgroundColor(0, Qt::lightGray); - gi->setFlags(Qt::ItemIsEnabled); - completer->addTopLevelItem(gi); - gi->setFirstColumnSpanned(true); - foreach (const StringsPair & s, ac.second) { - QTreeWidgetItem * ni = new QTreeWidgetItem(); - ni->setIcon(0, acc.icon); - ni->setText(0, s.first); - ni->setText(1, s.second); - completer->addTopLevelItem(ni); - } - } - if (completer->topLevelItemCount() > 1) - completer->setCurrentItem(completer->topLevelItem(1)); - if (completer->isHidden()) - completer->move(ui->textCode->mapToGlobal(ui->textCode->cursorRect().bottomRight())); - if (completer->topLevelItemCount() > 0) { - completer->setVisible(true); - //qApp->processEvents(); - int sz = completer->verticalScrollBar()->width(); - for (int i = 0; i < completer->header()->count(); ++i) - sz += qMax(sz, ((QAbstractItemView*)completer)->sizeHintForColumn(i)); - completer->resize(sz, fontHeight() * 16); - } else - completer->hide(); -} - - -void QCodeEdit::commitCompletition() { - if (completer->currentItem() == 0) return; - if (!completer->currentItem()->flags().testFlag(Qt::ItemIsSelectable)) return; - QString ins = completer->currentItem()->text(1), ret = completer->currentItem()->text(0); - QTextCursor tc = ui->textCode->textCursor(), stc = tc; - tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - bool ins_br = true, shifted = false; - if (!tc.selectedText().isEmpty()) { -// if (tc.selectedText()[0].isSpace()) { - if (!tc.selectedText()[0].isLetterOrNumber() && !tc.selectedText()[0].isSpace() && !(tc.selectedText()[0] == '_')) { - stc.movePosition(QTextCursor::Left); - shifted = true; - } else { - tc.movePosition(QTextCursor::Left); - tc.movePosition(QTextCursor::EndOfWord); - tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - } - if (!tc.selectedText().isEmpty()) - if (tc.selectedText()[0].toLatin1() == '(') - ins_br = false; - } - if (ins.contains("(")) - ins = ins.left(ins.indexOf("(")) + "()"; - if (!ins_br && ins.endsWith("()")) - ins.chop(2); - tc = stc; - tc.select(QTextCursor::WordUnderCursor); - if (!tc.selectedText().leftJustified(1)[0].isLetterOrNumber() && !(tc.selectedText().leftJustified(1)[0] == '_')) { - tc = stc; - if (shifted) - tc.movePosition(QTextCursor::Right); - } - ui->textCode->setTextCursor(tc); - ui->textCode->textCursor().insertText(ins); - tc = ui->textCode->textCursor(); - if (ins_br) { - if (ret == "void") { - tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - if (tc.selectedText() != ";") { - ui->textCode->textCursor().insertText(";"); - tc.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 2); - } - } - if (ins.endsWith(")") && !completer->currentItem()->text(1).endsWith("()")) { - tc.movePosition(QTextCursor::Left); - ui->textCode->setTextCursor(tc); - } - } else { - if (completer->currentItem()->text(1).endsWith(")")) { - tc.movePosition(QTextCursor::Right); - ui->textCode->setTextCursor(tc); - } - if (completer->currentItem()->text(1).endsWith("()")) { - tc.movePosition(QTextCursor::Right); - ui->textCode->setTextCursor(tc); - } - } - completer->hide(); -} - - -void QCodeEdit::textEdit_cursorPositionChanged() { - es_line.cursor = ui->textCode->textCursor(); - es_line.cursor.select(QTextCursor::LineUnderCursor); - es_line.cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - highlightBrackets(); - applyExtraSelection(); -} - - -void QCodeEdit::textEdit_textChanged() { - if (_replacing) return; - searchAll(); - updateLines(); -} - - -void QCodeEdit::textEdit_selectionChanged() { - es_selected.clear(); - QString sf = ui->textCode->textCursor().selectedText(); - if (sf.trimmed().isEmpty() || sf.contains("\n")) { - applyExtraSelection(); - return; - } - QTextCursor tc(ui->textCode->document()->begin()); - QTextEdit::ExtraSelection es; - es.format.setBackground(QColor(251, 250, 150)); - while (true) { - tc = ui->textCode->document()->find(sf, tc, QTextDocument::FindCaseSensitively | QTextDocument::FindWholeWords); - if (tc.isNull()) break; - es.cursor = tc; - es_selected << es; - } - applyExtraSelection(); -} - - -void QCodeEdit::setShowSpaces(bool yes) { - spaces_ = yes; - QTextOption to = ui->textCode->document()->defaultTextOption(); - QTextOption::Flags tof = to.flags(); - if (yes) tof |= QTextOption::ShowTabsAndSpaces; - else tof &= ~QTextOption::ShowTabsAndSpaces; - to.setFlags(tof); - ui->textCode->document()->setDefaultTextOption(to); -} - - -void QCodeEdit::setShowLineNumbers(bool yes) { - ui->textLines->setVisible(yes); -} - - -void QCodeEdit::search(const QString & t) { - ui->widgetSearch->show(); - ui->comboSearch->setEditText(QString()); - ui->comboSearch->setEditText(t); - ui->comboSearch->setFocus(); - //searchAll(); - searchNext(false); -} - - -void QCodeEdit::searchNext(bool next) { - if (es_search_list.isEmpty()) - return; - cur_search_ind = searchIndFromCursor() + (next ? 1 : 0); - moveToSearch(); -} - - -void QCodeEdit::searchPrevious() { - if (es_search_list.isEmpty()) - return; - cur_search_ind = searchIndFromCursor() - 1; - moveToSearch(); -} - - -void QCodeEdit::hideSearch() { - ui->widgetSearch->hide(); - searchAll(); -} - - -void QCodeEdit::on_comboSearch_currentTextChanged(const QString & t) { - searchAll(); - searchNext(false); -} - - -void QCodeEdit::on_buttonReplace_clicked() { - if (es_search_list.isEmpty() || cur_search_ind < 0 || cur_search_ind >= es_search_list.size()) return; - if (ui->textCode->textCursor() != es_search_list[cur_search_ind].cursor) return; - if (ui->textCode->textCursor().selectedText().size() != es_search_list[cur_search_ind].cursor.selectedText().size()) return; - ui->textCode->textCursor().insertText(ui->comboReplace->currentText()); -} - - -void QCodeEdit::on_buttonReplaceSearch_clicked() { - on_buttonReplace_clicked(); - searchNext(); -} - - -void QCodeEdit::on_buttonReplaceAll_clicked() { - _replacing = true; - QString rt = ui->comboReplace->currentText(); - for (int i = es_search_list.size() - 1; i >= 0; --i) - es_search_list[i].cursor.insertText(rt); - _replacing = false; - textEdit_textChanged(); -} diff --git a/test/qad/widgets/qcodeedit.h b/test/qad/widgets/qcodeedit.h deleted file mode 100644 index 1dc844c..0000000 --- a/test/qad/widgets/qcodeedit.h +++ /dev/null @@ -1,163 +0,0 @@ -#ifndef QCODEEDIT_H -#define QCODEEDIT_H - -#include -#include -#include -#include -#include "iconedlabel.h" - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - - -namespace Ui { - class QCodeEdit; -} - - -class QCodeEdit: public QWidget -{ - Q_OBJECT - Q_PROPERTY(QString text READ text WRITE setText) - Q_PROPERTY(bool showSpaces READ showSpaces WRITE setShowSpaces) - Q_PROPERTY(bool showLineNumbers READ showLineNumbers WRITE setShowLineNumbers) - Q_PROPERTY(QFont editorFont READ editorFont WRITE setEditorFont) - -public: - QCodeEdit(QWidget * parent = 0); - ~QCodeEdit(); - - enum ACClassType { - Keyword, - Function, - Namespace - }; - - QTextCursor textCursor() const; - QTextDocument * document() const; - void setDocument(QTextDocument * doc); - void setTextCursor(const QTextCursor & c); - void centerCursor(); - void insertText(const QString & text); - void appendText(const QString & text); - void setCustomExtraSelection(const QList & es); - QRect cursorRect() const; - QRect cursorRect(const QTextCursor & cursor) const; - QString text() const; - QStringList cursorScope() const; - bool showSpaces() const {return spaces_;} - bool showLineNumbers() const; - - void setEditorFont(QFont f); - QFont editorFont() const; - - QPlainTextEdit * textEdit() const; - - void registerAutoCompletitionClass(int id, ACClassType ac_class, const QString & name, const QIcon & icon = QIcon()) {ac_classes[id] = ACClass(id, ac_class, name, icon);} - -protected: - typedef QPair StringsPair; - typedef QPair > ACPair; - typedef QList ACList; - - virtual ACList autoCompletitionList(const QStringList & scope, const QString & written) const {return ACList();} - virtual void parse() {} - virtual void documentUnset() {} - virtual void documentChanged(QTextDocument * d) {} - QString selectArg(QString s, int arg); - void raiseHelp(QTextCursor tc, int arg = -1); - QTextCursor functionStart(QTextCursor tc, int * arg); - ACList wordsCompletitionList(const QString & written) const; - QPair getScope(QTextCursor tc, bool * ok = 0); - static int skipRange(const QString & s, int pos, QChar oc, QChar cc, QChar sc = QChar()); - static int skipCWord(const QString & s, int pos); - static bool matchWritten(QString s, QString w); - static QChar pairChar(QChar c); - - Ui::QCodeEdit * ui; - -private: - struct ACClass { - ACClass(int i = -2, ACClassType c = QCodeEdit::Keyword, const QString & n = QString(), const QIcon & ic = QIcon()): id(i), class_(c), name(n), icon(ic) {} - int id; - ACClassType class_; - QString name; - QIcon icon; - }; - - QTreeWidget * completer; - IconedLabel * lbl_help[2]; - QFrame * widget_help; - QTextEdit::ExtraSelection es_line, es_cursor, es_bracket, es_range, es_search; - QList es_selected, es_custom, es_brackets, es_search_list; - QMap ac_classes; - QStringList cursor_scope; - int prev_lc, auto_comp_pl, timer, cur_search_ind, pos_press, pos_el_press; - bool spaces_, _ignore_focus_out, _first, _destructor, _replacing; - - bool eventFilter(QObject * o, QEvent * e); - void showEvent(QShowEvent * ); - void timerEvent(QTimerEvent * ); - void leaveEvent(QEvent * ); - void highlightBrackets(); - void applyExtraSelection(); - void nextCompletition(); - void previousCompletition(); - void clearSearch(); - void moveToSearch(); - int searchIndFromCursor(); - -private slots: - void syncScrolls(); - void scrollUp(); - void scrollDown(); - void hideHelp(); - void deleteLine(); - void copyLineUp(); - void copyLineDown(); - void moveLineUp(); - void moveLineDown(); - void indent(); - void deindent(); - void autoIndent(); - void invokeAutoCompletition(bool force = false); - void commitCompletition(); - void searchAll(); - void search_triggered(); - void textEdit_cursorPositionChanged(); - void textEdit_textChanged(); - void textEdit_selectionChanged(); - void on_comboSearch_currentTextChanged(const QString & t); - void on_buttonReplace_clicked(); - void on_buttonReplaceSearch_clicked(); - void on_buttonReplaceAll_clicked(); - -public slots: - void updateLines(); - void scrollToTop(); - void newLine(); - void newLineBefore(); - void setFocus(); - void setText(const QString & t); - void setShowSpaces(bool yes); - void setShowLineNumbers(bool yes); - void search(const QString & t); - void searchNext(bool next = true); - void searchPrevious(); - void hideSearch(); - -signals: - void textChanged(); - void parseRequest(); - -}; - -//Q_DECLARE_OPERATORS_FOR_FLAGS(QPIConsole::Formats) - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QCODEEDIT_H diff --git a/test/qad/widgets/qcodeedit.ui b/test/qad/widgets/qcodeedit.ui deleted file mode 100644 index 8874863..0000000 --- a/test/qad/widgets/qcodeedit.ui +++ /dev/null @@ -1,388 +0,0 @@ - - - QCodeEdit - - - - 0 - 0 - 726 - 577 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - 0 - 0 - - - - Qt::NoFocus - - - QFrame::NoFrame - - - Qt::ScrollBarAlwaysOff - - - Qt::ScrollBarAlwaysOff - - - QPlainTextEdit::NoWrap - - - Qt::NoTextInteraction - - - - - - - QFrame::NoFrame - - - false - - - QPlainTextEdit::NoWrap - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Search: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - 0 - 0 - - - - Case sensitive - - - Aa - - - true - - - - - - - - 0 - 0 - - - - Whole words - - - W - - - true - - - - - - - - 0 - 0 - - - - Previous - - - - :/icons/go-previous.png:/icons/go-previous.png - - - - - - - - 0 - 0 - - - - Next - - - - :/icons/go-next.png:/icons/go-next.png - - - - - - - - - Replace: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - 0 - 0 - - - - Replace - - - R - - - - - - - - 0 - 0 - - - - Replace and search - - - Rs - - - - - - - - 0 - 0 - - - - Replace all - - - Ra - - - - - - - - - - 0 - 0 - - - - true - - - QComboBox::InsertAtTop - - - - - - - - 0 - 0 - - - - true - - - QComboBox::InsertAtTop - - - - - - - - - - - - - - EComboBox - QComboBox -
    ecombobox.h
    -
    -
    - - - - buttonSearchNext - clicked() - QCodeEdit - searchNext() - - - 723 - 670 - - - 731 - 578 - - - - - buttonSearchPrev - clicked() - QCodeEdit - searchPrevious() - - - 691 - 670 - - - 743 - 536 - - - - - buttonSearchCase - toggled(bool) - QCodeEdit - searchAll() - - - 612 - 654 - - - 740 - 499 - - - - - buttonSearchWord - toggled(bool) - QCodeEdit - searchAll() - - - 648 - 658 - - - 753 - 511 - - - - - - search(QString) - searchNext() - searchPrevious() - searchAll() - hideSearch() - -
    diff --git a/test/qad/widgets/qipedit.cpp b/test/qad/widgets/qipedit.cpp deleted file mode 100644 index dab01f1..0000000 --- a/test/qad/widgets/qipedit.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#include "qipedit.h" - -QIPEdit::QIPEdit(QWidget * parent, const QString & ip): QWidget(parent) { - layout = new QBoxLayout(QBoxLayout::LeftToRight, this); - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(1); - QIntValidator * validator = new QIntValidator(0, 255, this); - for (int i = 0; i < 4; i++) { - edits.push_back(new QLineEdit(this)); - edits.back()->setAlignment(Qt::AlignHCenter); - edits.back()->setMaxLength(3); - edits.back()->setValidator(validator); - edits.back()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - layout->addWidget(edits.back()); - if (i < 3) { - dots.push_back(new QLabel(this)); - dots.back()->setText("."); - dots.back()->adjustSize(); - layout->addWidget(dots.back()); - } - } - //for (int i = 0; i < 3; i++) edits[i]->setTabOrder(edits[i+1], edits[i]); - connect(edits[0], SIGNAL(returnPressed()), this, SLOT(returnPressed0())); - connect(edits[1], SIGNAL(returnPressed()), this, SLOT(returnPressed1())); - connect(edits[2], SIGNAL(returnPressed()), this, SLOT(returnPressed2())); - connect(edits[3], SIGNAL(returnPressed()), this, SLOT(returnPressed3())); - connect(edits[0], SIGNAL(textChanged(const QString & )), this, SLOT(textChanged0(const QString & ))); - connect(edits[1], SIGNAL(textChanged(const QString & )), this, SLOT(textChanged1(const QString & ))); - connect(edits[2], SIGNAL(textChanged(const QString & )), this, SLOT(textChanged2(const QString & ))); - connect(edits[3], SIGNAL(textChanged(const QString & )), this, SLOT(textChanged3(const QString & ))); - setLayout(layout); - setIP(ip); - cind = 0; -} - - -QIPEdit::~QIPEdit() { - foreach (QLineEdit * i, edits) - delete i; - foreach (QLabel * i, dots) - delete i; - edits.clear(); - dots.clear(); - delete layout; -} - - -void QIPEdit::setIP(const QString & text) { - QString s, str = text; - s = str.left(str.indexOf('.')); - edits[0]->setText(s == "" ? "0" : s); - str = str.right(str.length() - s.length() - 1); - s = str.left(str.indexOf('.')); - edits[1]->setText(s == "" ? "0" : s); - str = str.right(str.length() - s.length() - 1); - s = str.left(str.indexOf('.')); - edits[2]->setText(s == "" ? "0" : s); - str = str.right(str.length() - s.length() - 1); - edits[3]->setText(str == "" ? "0" : str); -} - - -QString QIPEdit::IP() { - QString s; - if (edits[0]->text() == "") s = "0."; - else s = edits[0]->text() + "."; - if (edits[1]->text() == "") s += "0."; - else s += edits[1]->text() + "."; - if (edits[2]->text() == "") s += "0."; - else s += edits[2]->text() + "."; - if (edits[3]->text() == "") s += "0"; - else s += edits[3]->text(); - return s; -} - - -void QIPEdit::returnPress(int index) { - if (index < 3) { - edits[index + 1]->setFocus(); - edits[index + 1]->setSelection(0, 3); - } -} diff --git a/test/qad/widgets/qipedit.h b/test/qad/widgets/qipedit.h deleted file mode 100644 index 4d44aef..0000000 --- a/test/qad/widgets/qipedit.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef QIPEDIT_H -#define QIPEDIT_H - -#include -#include -#include -#include -#include -#include - -class QIPEdit: public QWidget -{ - Q_OBJECT - Q_PROPERTY(QString IP READ IP WRITE setIP) - -public: - QIPEdit(QWidget * parent = 0, const QString & ip = ""); - ~QIPEdit(); - - QString IP(); - -private: - void returnPress(int index); - inline void textChange(int index, const QString & text) {if (text.length() == 3 && isVisible()) returnPress(index); emit valueChanged(IP());} - - int cind; - QBoxLayout * layout; - QVector edits; - QVector dots; - -public slots: - void setIP(const QString & text); - -private slots: - void returnPressed0() {returnPress(0);} - void returnPressed1() {returnPress(1);} - void returnPressed2() {returnPress(2);} - void returnPressed3() {returnPress(3);} - void textChanged0(const QString & text) {textChange(0, text);} - void textChanged1(const QString & text) {textChange(1, text);} - void textChanged2(const QString & text) {textChange(2, text);} - void textChanged3(const QString & text) {textChange(3, text);} - -signals: - void valueChanged(QString); -}; - -#endif // QIPEDIT_H diff --git a/test/qad/widgets/qpiconfignewdialog.cpp b/test/qad/widgets/qpiconfignewdialog.cpp deleted file mode 100644 index 18c450a..0000000 --- a/test/qad/widgets/qpiconfignewdialog.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "qpiconfignewdialog.h" -#include "ui_qpiconfignewdialog.h" - - -QPIConfigNewDialog::QPIConfigNewDialog(QWidget * parent): QDialog(parent) { - ui = new Ui::QPIConfigNewDialog(); - ui->setupUi(this); - radios = findChildren(); - ui->widgetValue->hideAll(); - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); -} - - -void QPIConfigNewDialog::changeEvent(QEvent * e) { - QDialog::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - - -void QPIConfigNewDialog::typeChanged() { - foreach (QRadioButton * i, radios) { - if (i->isChecked()) { - ui->widgetValue->setType(i->property("type").toString()); - return; - } - } -} - - -QString QPIConfigNewDialog::type() { - foreach (QRadioButton * i, radios) - if (i->isChecked()) - return i->property("type").toString(); - return " "; -} - - -void QPIConfigNewDialog::reset(bool node) { - ui->lineName->clear(); - ui->lineComment->clear(); - ui->radioType_0->setChecked(true); - ui->lineName->setFocus(); - ui->widgetValue->setType("s"); - ui->widgetValue->value.clear(); - ui->widgetValue->setVisible(!node); - ui->groupType->setVisible(!node); - ui->labelValue->setVisible(!node); - ui->labelComment->setVisible(!node); - ui->lineComment->setVisible(!node); - adjustSize(); -} - - -QString QPIConfigNewDialog::name() { - return ui->lineName->text(); -} - - -QString QPIConfigNewDialog::value() { - return ui->widgetValue->value; -} - - -QString QPIConfigNewDialog::comment() { - return ui->lineComment->text(); -} - - -void QPIConfigNewDialog::on_lineName_textChanged(const QString & text) { - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!text.isEmpty()); -} diff --git a/test/qad/widgets/qpiconfignewdialog.h b/test/qad/widgets/qpiconfignewdialog.h deleted file mode 100644 index ea688fd..0000000 --- a/test/qad/widgets/qpiconfignewdialog.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef QPICONFIGNEWDIALOG_H -#define QPICONFIGNEWDIALOG_H - -#include -#include - - -namespace Ui { - class QPIConfigNewDialog; -} - - -class QPIConfigNewDialog: public QDialog -{ - Q_OBJECT - -public: - QPIConfigNewDialog(QWidget * parent = 0); - - QString type(); - QString name(); - QString value(); - QString comment(); - void reset(bool node = false); - -protected: - void changeEvent(QEvent * e); - - Ui::QPIConfigNewDialog * ui; - -private slots: - void on_lineName_textChanged(const QString & text); - void typeChanged(); - -private: - QList radios; - -}; - -#endif // QPICONFIGNEWDIALOG_H diff --git a/test/qad/widgets/qpiconfignewdialog.ui b/test/qad/widgets/qpiconfignewdialog.ui deleted file mode 100644 index b60137f..0000000 --- a/test/qad/widgets/qpiconfignewdialog.ui +++ /dev/null @@ -1,432 +0,0 @@ - - - QPIConfigNewDialog - - - - 0 - 0 - 300 - 316 - - - - - 300 - 0 - - - - Dialog - - - - - - Type - - - - - - string - - - true - - - s - - - - - - - integer - - - n - - - - - - - float - - - f - - - - - - - string list - - - l - - - - - - - boolean - - - b - - - - - - - color - - - c - - - - - - - rectangle - - - r - - - - - - - area - - - a - - - - - - - point - - - p - - - - - - - vector - - - v - - - - - - - ip - - - i - - - - - - - - - - Name: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - Qt::Vertical - - - - 20 - 1 - - - - - - - - Comment: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Value: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - ConfigValueWidget - QWidget -
    qpiconfigvaluewidget.h
    - 1 -
    -
    - - lineName - buttonBox - - - - - buttonBox - accepted() - QPIConfigNewDialog - accept() - - - 126 - 326 - - - 110 - 231 - - - - - buttonBox - rejected() - QPIConfigNewDialog - reject() - - - 169 - 326 - - - 149 - 232 - - - - - radioType_0 - clicked() - QPIConfigNewDialog - typeChanged() - - - 33 - 70 - - - 1 - 61 - - - - - radioType_1 - clicked() - QPIConfigNewDialog - typeChanged() - - - 25 - 88 - - - -1 - 99 - - - - - radioType_2 - clicked() - QPIConfigNewDialog - typeChanged() - - - 17 - 119 - - - 2 - 130 - - - - - radioType_3 - clicked() - QPIConfigNewDialog - typeChanged() - - - 26 - 143 - - - 0 - 165 - - - - - radioType_4 - clicked() - QPIConfigNewDialog - typeChanged() - - - 50 - 170 - - - 2 - 195 - - - - - radioType_5 - clicked() - QPIConfigNewDialog - typeChanged() - - - 243 - 37 - - - 312 - 10 - - - - - radioType_6 - clicked() - QPIConfigNewDialog - typeChanged() - - - 275 - 67 - - - 315 - 40 - - - - - radioType_7 - clicked() - QPIConfigNewDialog - typeChanged() - - - 262 - 95 - - - 311 - 72 - - - - - radioType_8 - clicked() - QPIConfigNewDialog - typeChanged() - - - 250 - 113 - - - 313 - 104 - - - - - radioType_9 - clicked() - QPIConfigNewDialog - typeChanged() - - - 286 - 145 - - - 311 - 138 - - - - - radioType_10 - clicked() - QPIConfigNewDialog - typeChanged() - - - 273 - 168 - - - 312 - 167 - - - - - - typeChanged() - -
    diff --git a/test/qad/widgets/qpiconfigvaluewidget.cpp b/test/qad/widgets/qpiconfigvaluewidget.cpp deleted file mode 100644 index c47eba3..0000000 --- a/test/qad/widgets/qpiconfigvaluewidget.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include "qpiconfigvaluewidget.h" -#include "qpievaluator.h" - - -ConfigValueWidget::ConfigValueWidget(QWidget * parent): QWidget(parent), lay(QBoxLayout::Down, this) { - lay.setContentsMargins(0, 0, 0, 0); - w_integer.setRange(INT_MIN, INT_MAX); - w_float.setRange(-DBL_MAX, DBL_MAX); - w_float.setDecimals(5); - active = true; - lay.addWidget(&w_string); - lay.addWidget(&w_list); - lay.addWidget(&w_bool); - lay.addWidget(&w_integer); - lay.addWidget(&w_float); - lay.addWidget(&w_color); - lay.addWidget(&w_rect); - lay.addWidget(&w_point); - lay.addWidget(&w_ip); - lay.addWidget(&w_enum); - lay.addWidget(&w_path); - connect(&w_string, SIGNAL(textChanged(QString)), this, SLOT(valueChanged())); - connect(&w_list, SIGNAL(valueChanged()), this, SLOT(valueChanged())); - connect(&w_bool, SIGNAL(toggled(bool)), this, SLOT(valueChanged())); - connect(&w_integer, SIGNAL(valueChanged(int)), this, SLOT(valueChanged())); - connect(&w_float, SIGNAL(valueChanged(double)), this, SLOT(valueChanged())); - connect(&w_color, SIGNAL(colorChanged(QColor)), this, SLOT(valueChanged())); - connect(&w_rect, SIGNAL(valueChanged(QRectF)), this, SLOT(valueChanged())); - connect(&w_point, SIGNAL(valueChanged(QPointF)), this, SLOT(valueChanged())); - connect(&w_ip, SIGNAL(valueChanged(QString)), this, SLOT(valueChanged())); - connect(&w_enum, SIGNAL(currentIndexChanged(int)), this, SLOT(valueChanged())); - connect(&w_path, SIGNAL(valueChanged()), this, SLOT(valueChanged())); -} - - -void ConfigValueWidget::setType(const QString & t) { - hideAll(); - type = t.left(1); - active = false; - if (type == "e") {QStringList en_sl = QPIEvaluator::inBrackets(comment).split(';'); - if (en_sl.size()>1) { - w_enum.show(); w_enum.addItems(en_sl); setValue(value); active = true; return; - } else {type = "s";}} - if (type == "s") {w_string.show(); setValue(value); active = true; return;} - if (type == "l") {w_list.show(); setValue(value); active = true; return;} - if (type == "b") {w_bool.show(); setValue(value); active = true; return;} - if (type == "n") {w_integer.show(); setValue(value); active = true; return;} - if (type == "f") {w_float.show(); setValue(value); active = true; return;} - if (type == "c") {w_color.show(); setValue(value); active = true; return;} - if (type == "r") {w_rect.show(); w_rect.setDecimals(0); setValue(value); active = true; return;} - if (type == "a") {w_rect.show(); w_rect.setDecimals(3); setValue(value); active = true; return;} - if (type == "p") {w_point.show(); w_point.setDecimals(0); setValue(value); active = true; return;} - if (type == "v") {w_point.show(); w_point.setDecimals(3); setValue(value); active = true; return;} - if (type == "i") {w_ip.show(); setValue(value); active = true; return;} - if (type == "F") {w_path.show(); setValue(value); active = true; return;} - if (type == "D") {w_path.show(); setValue(value); active = true; return;} -} - - -void ConfigValueWidget::setValue(const QString & v) { - value = v; - active = false; - if (type == "l") {w_list.setValue(v.split("%|%")); active = true; return;} - if (type == "b") {w_bool.setChecked(v.toInt() > 0 || v.toLower().trimmed() == "true"); active = true; return;} - if (type == "n") {w_integer.setValue(QString2int(v)); active = true; return;} - if (type == "f") {w_float.setValue(v.toDouble()); active = true; return;} - if (type == "c") {w_color.setColor(QString2QColor(v)); active = true; return;} - if (type == "r") {w_rect.setValue(QString2QRectF(v)); active = true; return;} - if (type == "a") {w_rect.setValue(QString2QRectF(v)); active = true; return;} - if (type == "p") {w_point.setValue(QString2QPointF(v)); active = true; return;} - if (type == "v") {w_point.setValue(QString2QPointF(v)); active = true; return;} - if (type == "i") {w_ip.setIP(v); active = true; return;} - if (type == "e") {w_enum.setCurrentIndex(w_enum.findText(v)); active = true; return;} - if (type == "F") {w_path.is_dir = false; w_path.setValue(v); active = true; return;} - if (type == "D") {w_path.is_dir = true; w_path.setValue(v); active = true; return;} - w_string.setText(v); - active = true; -} - - -void ConfigValueWidget::valueChanged() { - if (!active) return; - if (type == "l") {value = w_list.value().join("%|%"); emit changed(this, value); return;} - if (type == "b") {value = w_bool.isChecked() ? "true" : "false"; emit changed(this, value); return;} - if (type == "n") {value = QString::number(w_integer.value()); emit changed(this, value); return;} - if (type == "f") {value = QString::number(w_float.value()); emit changed(this, value); return;} - if (type == "c") {value = QColor2QString(w_color.color()); emit changed(this, value); return;} - if (type == "r") {value = QRectF2QString(w_rect.value()); emit changed(this, value); return;} - if (type == "a") {value = QRectF2QString(w_rect.value()); emit changed(this, value); return;} - if (type == "p") {value = QPointF2QString(w_point.value()); emit changed(this, value); return;} - if (type == "v") {value = QPointF2QString(w_point.value()); emit changed(this, value); return;} - if (type == "i") {value = w_ip.IP(); emit changed(this, value); return;} - if (type == "e") {value = w_enum.currentText(); emit changed(this, value); return;} - if (type == "F") {value = w_path.value(); emit changed(this, value); return;} - if (type == "D") {value = w_path.value(); emit changed(this, value); return;} - value = w_string.text(); - emit changed(this, value); -} diff --git a/test/qad/widgets/qpiconfigvaluewidget.h b/test/qad/widgets/qpiconfigvaluewidget.h deleted file mode 100644 index 4e9614f..0000000 --- a/test/qad/widgets/qpiconfigvaluewidget.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef QPICONFIGVALUEWIDGET_H -#define QPICONFIGVALUEWIDGET_H - -#include "qpiconfig.h" -#include "qvariantedit.h" -#include "qrectedit.h" -#include "qpointedit.h" -#include "colorbutton.h" -#include "ecombobox.h" -#include "qipedit.h" -#include "limits.h" -#include "float.h" -#include -#include -#include -#include - - -class ConfigValueWidget: public QWidget -{ - Q_OBJECT - friend class QPIConfigWidget; - friend class QPIConfigNewDialog; -public: - ConfigValueWidget(QWidget * parent = 0); - ~ConfigValueWidget() {hide();} - - void setType(const QString & t); - void setValue(const QString & v); - void setEntry(QPIConfig::Entry * e) {value = e->value(); full_name = e->_full_name; comment = e->comment(); setType(e->type());} - -private: - void hideAll() {w_string.hide(); w_list.hide(); w_bool.hide(); w_integer.hide(); w_float.hide(); w_color.hide(); w_rect.hide(); w_point.hide(); w_ip.hide(); w_enum.hide(); w_path.hide();} - - QString type, value, full_name, comment; - bool active; - QBoxLayout lay; - CLineEdit w_string; - StringListEdit w_list; - ColorButton w_color; - QCheckBox w_bool; - QSpinBox w_integer; - QDoubleSpinBox w_float; - QRectEdit w_rect; - QPointEdit w_point; - QIPEdit w_ip; - QComboBox w_enum; - PathEdit w_path; - -private slots: - void valueChanged(); - -signals: - void changed(ConfigValueWidget * , QString ); - -}; - -#endif // QPICONFIGVALUEWIDGET_H diff --git a/test/qad/widgets/qpiconfigwidget.cpp b/test/qad/widgets/qpiconfigwidget.cpp deleted file mode 100644 index 22cabd1..0000000 --- a/test/qad/widgets/qpiconfigwidget.cpp +++ /dev/null @@ -1,380 +0,0 @@ -#include "qpiconfigwidget.h" - - -QPIConfigWidget::QPIConfigWidget(QWidget * parent, QPIConfig * c, bool on): QTreeWidget(parent), actionAddItem(this), actionAddNode(this), - actionToItem(this), actionToNode(this), actionRemove(this), - actionExpandAll(this), actionCollapseAll(this) { - active = on; - if (active) { - setColumnCount(4); - setColumnWidth(0, 150); - setColumnWidth(1, 200); - } else setColumnCount(0); - setSelectionMode(ExtendedSelection); - setVerticalScrollMode(ScrollPerPixel); - actionAddItem.setIcon(QIcon(":/icons/item-add.png")); - actionAddNode.setIcon(QIcon(":/icons/node-add.png")); - actionToItem.setIcon(QIcon(":/icons/item.png")); - actionToNode.setIcon(QIcon(":/icons/node.png")); - actionRemove.setIcon(QIcon(":/icons/edit-delete.png")); - popupMenu.addAction(&actionAddItem); - popupMenu.addAction(&actionAddNode); - popupMenu.addSeparator(); - /*popupMenu.addAction(&actionToItem); - popupMenu.addAction(&actionToNode); - popupMenu.addSeparator();*/ - popupMenu.addAction(&actionRemove); - popupMenu.addSeparator(); - popupMenu.addAction(&actionExpandAll); - popupMenu.addAction(&actionCollapseAll); - viewport()->installEventFilter(this); - connect(this, SIGNAL(itemClicked(QTreeWidgetItem * , int)), this, SLOT(itemClicked(QTreeWidgetItem * , int))); - connect(this, SIGNAL(itemChanged(QTreeWidgetItem * , int)), this, SLOT(itemChanged(QTreeWidgetItem * , int))); - connect(&actionAddItem, SIGNAL(triggered()), this, SLOT(on_actionAddItem_triggered())); - connect(&actionAddNode, SIGNAL(triggered()), this, SLOT(on_actionAddNode_triggered())); - connect(&actionRemove, SIGNAL(triggered()), this, SLOT(on_actionRemove_triggered())); - connect(&actionExpandAll, SIGNAL(triggered()), this, SLOT(expandAll())); - connect(&actionCollapseAll, SIGNAL(triggered()), this, SLOT(collapseAll())); - read_only_name = read_only_value = read_only_type = read_only_comment = false; - c_hidden << false << false << false << false; - pi = c_pi = 0; - translate(); - setQPIConfig(c); - //resize(600, 400); - //show(); -} - - -void QPIConfigWidget::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - translate(); - return; - } - //for (int i = 0; i < 4; ++i) - // setColumnHidden(i, c_hidden[i]); - QTreeWidget::changeEvent(e); -} - - -bool QPIConfigWidget::eventFilter(QObject * o, QEvent * e) { - if (e->type() == QEvent::MouseButtonPress) { - if (viewport() == qobject_cast(o)) { - pi = itemAt(((QMouseEvent * )e)->pos()); - if (((QMouseEvent * )e)->buttons() == Qt::RightButton) { - qApp->processEvents(); - itemClicked(pi, 1); - popupMenu.popup(((QMouseEvent * )e)->globalPos()); - } - } - } - return QTreeWidget::eventFilter(o, e); -} - - -void QPIConfigWidget::itemClicked(QTreeWidgetItem * item, int column) { - if (item != 0) { - if ((column == 0 && !read_only_name) || (column == 3 && !read_only_comment)) item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); - else item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - } - bool node = true, ro = read_only_name || read_only_type || read_only_value; - if (item != 0) - if (itemTWidget(item) != 0) - if (itemTWidget(item)->isEnabled()) - node = false; - actionAddItem.setVisible(node && !ro); - actionAddNode.setVisible(node && !ro); - actionRemove.setVisible(!ro && !selectedItems().isEmpty()); -} - - -void QPIConfigWidget::itemChanged(QTreeWidgetItem * item, int column) { - if (item != c_pi) { - c_pi = item; - if (item != 0) { - c_name = item->text(0); - c_comment = item->text(3); - } - return; - } - if (item == 0) return; - if (c_name == item->text(0) && c_comment == item->text(3)) return; - //qDebug() << "change" << item->text(0); - QPIConfig::Entry * e = itemEntry(item); - if (e == 0) return; - if (column == 0) { - buildFullNames(item); - e->setName(item->text(column)); - conf->buildFullNames(e->parent()); - //qDebug() << itemCWidget(item)->full_name; - } - if (column == 3) e->setComment(item->text(column)); - c_name = item->text(0); - c_comment = item->text(3); - emit changed(); -} - - -void QPIConfigWidget::typeChange(int t, UComboBox * c) { - ConfigValueWidget * cw = (ConfigValueWidget * )c->property("qpic_widget").toLongLong(); - cw->setType(types.key(s_types[t])); - conf->getValue(cw->full_name).setType(types.key(s_types[t])); - emit changed(); -} - - -void QPIConfigWidget::valueChange(ConfigValueWidget * w, QString v) { - conf->getValue(w->full_name).setValue(v); - emit changed(); -} - - -void QPIConfigWidget::on_actionAddItem_triggered() { - if (conf == 0 || !active) return; - QString fp; - if (pi == 0) pi = invisibleRootItem(); - else fp = itemCWidget(pi)->full_name + conf->delim; - new_dialog.reset(); - if (new_dialog.exec() == QDialog::Rejected) return; - QPIConfig::Entry * e; - if (pi->childCount() == 0) { - //qDebug() << "pi empty, remove " << itemCWidget(pi)->full_name; - conf->removeEntry(itemCWidget(pi)->full_name, false); - } - //qDebug() << "add " << fp + new_dialog.name(); - e = &(conf->addEntry(fp + new_dialog.name(), new_dialog.value().isEmpty() ? "0" : new_dialog.value(), new_dialog.type(), false)); - expandItem(pi); - pi = addEntry(pi, e); - pi->setText(0, new_dialog.name()); - pi->setText(3, new_dialog.comment()); - int ind = s_types.indexOf(types[new_dialog.type()]); - if (ind < 0) w_types.back()->setCurrentIndex(0); - else w_types.back()->setCurrentIndex(ind); - emit changed(); -} - - -void QPIConfigWidget::on_actionAddNode_triggered() { - if (conf == 0 || !active) return; - QString fp; - if (pi == 0) pi = invisibleRootItem(); - else fp = itemCWidget(pi)->full_name + conf->delim; - new_dialog.reset(true); - if (new_dialog.exec() == QDialog::Rejected) return; - QPIConfig::Entry e; - //e = &(conf->addEntry(fp + new_dialog.name(), "", "", false)); - e._full_name = fp + new_dialog.name(); - expandItem(pi); - pi = addEntry(pi, &e, true); - pi->setText(0, new_dialog.name()); - pi->setText(3, new_dialog.comment()); - setItemWidget(pi, 2, 0); - emit changed(); -} - - -void QPIConfigWidget::on_actionRemove_triggered() { - //hide(); - if (conf == 0 || !active) return; - QList si = selectedItems(); - conf->buildFullNames(&(conf->root)); - QPIConfig::Entry * e; - foreach (QTreeWidgetItem * i, si) { - e = itemEntry(i); - if (e == 0) continue; - //qDebug() << "remove " + e->_full_name; - conf->removeEntry(e->_full_name, false); - deleteEntry(i); - } - emit changed(); - //show(); -} - - -void QPIConfigWidget::clear() { - if (!active) return; - bool hidden = isHidden(); - hide(); - QTreeWidget::clear(); - foreach (ConfigValueWidget * i, w_values) - delete i; - foreach (QComboBox * i, w_types) - delete i; - w_values.clear(); - w_types.clear(); - if (!hidden) show(); -} - - -void QPIConfigWidget::buildTree() { - if (!active) return; - if (conf == 0) return; - bool hidden = isHidden(); - hide(); - clear(); - conf->buildFullNames(&(conf->root)); - buildEntry(invisibleRootItem(), &conf->rootEntry()); - if (!hidden) show(); -} - - -void QPIConfigWidget::setReadOnlyValue(bool yes) { - read_only_value = yes; - foreach (ConfigValueWidget * i, w_values) - i->setEnabled(!yes); -} - - -void QPIConfigWidget::setReadOnlyType(bool yes) { - read_only_type = yes; - foreach (QComboBox * i, w_types) { - i->setEnabled(!yes); - i->setFrame(!yes); - } -} - - -void QPIConfigWidget::buildEntry(QTreeWidgetItem * i, QPIConfig::Entry * e) { - foreach (QPIConfig::Entry * j, e->children()) - buildEntry(addEntry(i, j, !j->isLeaf()), j); -} - - -void QPIConfigWidget::buildFullNames(QTreeWidgetItem * i) { - ConfigValueWidget * cw, * pw; - cw = itemCWidget(i); - if (i->parent() != 0) { - pw = itemCWidget(i->parent()); - cw->full_name = pw->full_name + conf->delim + i->text(0); - } else cw->full_name = i->text(0); - for (int j = 0; j < i->childCount(); ++j) - buildFullNames(i->child(j)); -} - - -QPIConfig::Entry * QPIConfigWidget::itemEntry(QTreeWidgetItem * i) { - ConfigValueWidget * cfw = itemCWidget(i); - if (cfw == 0) return 0; - return &(conf->getValue(cfw->full_name)); -} - - -QTreeWidgetItem * QPIConfigWidget::addEntry(QTreeWidgetItem * i, QPIConfig::Entry * e, bool node) { - if (conf == 0) return 0; - ti = new QTreeWidgetItem(); - ti->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - ti->setSizeHint(0, QSize(26, 26)); - ti->setText(0, e->name()); - ti->setText(3, e->comment()); - w_values.push_back(new ConfigValueWidget); - w_values.back()->setEntry(e); - w_values.back()->setEnabled(!read_only_value); - if (!node) { - w_types.push_back(new UComboBox()); - w_types.back()->addItems(s_types); - w_types.back()->setCurrentIndex(s_types.indexOf(types[e->type().leftJustified(1).left(1)])); - w_types.back()->setProperty("qpic_widget", QVariant((qlonglong)w_values.back())); - w_types.back()->setEnabled(!read_only_type); - w_types.back()->setFrame(!read_only_type); - connect(w_types.back(), SIGNAL(currentIndexChanged(int, UComboBox * )), this, SLOT(typeChange(int,UComboBox * ))); - } - connect(w_values.back(), SIGNAL(changed(ConfigValueWidget * , QString)), this, SLOT(valueChange(ConfigValueWidget * , QString))); - i->addChild(ti); - setItemWidget(ti, 1, w_values.back()); - if (!node) { - setItemWidget(ti, 2, w_types.back()); - if (itemTWidget(i) != 0) { //itemTWidget(i)->setEnabled(false); - w_types.remove(w_types.indexOf(itemTWidget(i))); - setItemWidget(i, 2, 0); - } - } - return ti; -} - - -void QPIConfigWidget::deleteEntry(QTreeWidgetItem * i) { - ConfigValueWidget * vw; - UComboBox * cb; - int cc = i->childCount(); - for (int j = 0; j < cc; ++j) - deleteEntry(i->child(0)); - vw = qobject_cast(itemWidget(i, 1)); - cb = qobject_cast(itemWidget(i, 2)); - if (vw != 0) { - w_values.remove(w_values.indexOf(vw)); - delete vw; - } - if (cb != 0) { - w_types.remove(w_types.indexOf(cb)); - delete cb; - } - delete i; -} - - -bool QPIConfigWidget::filter(const QString & f, QTreeWidgetItem * i) { - if (i->childCount() == 0) return filterItem(f, i); - bool found = false; - for (int j = 0; j < i->childCount(); ++j) - if (filter(f, i->child(j))) found = true; - i->setHidden(!found); - return found; -} - - -bool QPIConfigWidget::filterItem(const QString & f, QTreeWidgetItem * i) { - if (f.isEmpty()) { - i->setHidden(false); - return true; - } - bool ret = (!isColumnHidden(0) && i->text(0).indexOf(f, 0, Qt::CaseInsensitive) >= 0) || - (!isColumnHidden(1) && itemCWidget(i)->value.indexOf(f, 0, Qt::CaseInsensitive) >= 0) || - (!isColumnHidden(3) && i->text(3).indexOf(f, 0, Qt::CaseInsensitive) >= 0); - if (itemTWidget(i) != 0) - ret = ret || (!isColumnHidden(2) && itemTWidget(i)->currentText().indexOf(f, 0, Qt::CaseInsensitive) >= 0); - i->setHidden(!ret); - return ret; -} - - -void QPIConfigWidget::translate() { - QStringList l; - l << tr("Name") << tr("Value") << tr("Type") << tr("Comment"); - if (active) setHeaderLabels(l); - types.clear(); - s_types.clear(); - addTrEntry("s", tr("string")); - addTrEntry("l", tr("string list")); - addTrEntry("n", tr("integer")); - addTrEntry("f", tr("float")); - addTrEntry("b", tr("boolean")); - addTrEntry("c", tr("color")); - addTrEntry("r", tr("rectangle")); - addTrEntry("a", tr("area")); - addTrEntry("p", tr("point")); - addTrEntry("v", tr("vector")); - addTrEntry("i", tr("ip")); - actionAddItem.setText(tr("Add item ...")); - actionAddNode.setText(tr("Add node ...")); - actionToItem.setText(tr("Convert to item")); - actionToNode.setText(tr("Convert to node")); - actionRemove.setText(tr("Remove")); - actionExpandAll.setText(tr("Expand all")); - actionCollapseAll.setText(tr("Collapse all")); - if (!active) return; - for (int i = 0; i < 4; ++i) - setColumnHidden(i, c_hidden[i]); -} - - -QString QPIConfigWidget::writeToString() { - if (conf == 0) return QString(); - conf->buildFullNames(&(conf->root)); - return conf->writeAllToString(); -} - - -void QPIConfigWidget::readFromString(QString str) { - if (conf == 0) return; - conf->readAllFromString(str); - buildTree(); -} diff --git a/test/qad/widgets/qpiconfigwidget.h b/test/qad/widgets/qpiconfigwidget.h deleted file mode 100644 index 130e13a..0000000 --- a/test/qad/widgets/qpiconfigwidget.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef QPICONFIGWIDGET_H -#define QPICONFIGWIDGET_H - -#include "qpiconfig.h" -#include "qpiconfignewdialog.h" -#include "qpiconfigvaluewidget.h" -#include -#include -#include -#include -#include -#include - - -class UComboBox: public QComboBox -{ - Q_OBJECT -public: - UComboBox(QWidget * parent = 0): QComboBox(parent) {connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(indexChange(int)));} -private slots: - void indexChange(int i) {emit currentIndexChanged(i, this);} -signals: - void currentIndexChanged(int, UComboBox * ); -}; - - -class QPIConfigWidget: public QTreeWidget -{ - Q_OBJECT - Q_PROPERTY(bool readOnlyName READ readOnlyName WRITE setReadOnlyName) - Q_PROPERTY(bool readOnlyValue READ readOnlyValue WRITE setReadOnlyValue) - Q_PROPERTY(bool readOnlyType READ readOnlyType WRITE setReadOnlyType) - Q_PROPERTY(bool readOnlyComment READ readOnlyComment WRITE setReadOnlyComment) - Q_PROPERTY(bool columnNameVisible READ columnNameVisible WRITE setColumnNameVisible) - Q_PROPERTY(bool columnValueVisible READ columnValueVisible WRITE setColumnValueVisible) - Q_PROPERTY(bool columnTypeVisible READ columnTypeVisible WRITE setColumnTypeVisible) - Q_PROPERTY(bool columnCommentVisible READ columnCommentVisible WRITE setColumnCommentVisible) -public: - QPIConfigWidget(QWidget * parent = 0, QPIConfig * c = 0, bool on = true); - ~QPIConfigWidget() {clear();} - - void setQPIConfig(QPIConfig * c) {conf = c; buildTree();} - bool readOnlyName() {return read_only_name;} - bool readOnlyValue() {return read_only_value;} - bool readOnlyType() {return read_only_type;} - bool readOnlyComment() {return read_only_comment;} - bool columnNameVisible() {return !c_hidden[0];} - bool columnValueVisible() {return !c_hidden[1];} - bool columnTypeVisible() {return !c_hidden[2];} - bool columnCommentVisible() {return !c_hidden[3];} - QString writeToString(); - void readFromString(QString str); - -private: - void changeEvent(QEvent * e); - bool eventFilter(QObject * o, QEvent * e); - void buildEntry(QTreeWidgetItem * i, QPIConfig::Entry * e); - void buildFullNames(QTreeWidgetItem * i); - QPIConfig::Entry * itemEntry(QTreeWidgetItem * i); - ConfigValueWidget * itemCWidget(QTreeWidgetItem * i) {return qobject_cast(itemWidget(i, 1));} - UComboBox * itemTWidget(QTreeWidgetItem * i) {return qobject_cast(itemWidget(i, 2));} - QTreeWidgetItem * addEntry(QTreeWidgetItem * i, QPIConfig::Entry * e, bool node = false); - void deleteEntry(QTreeWidgetItem * i); - bool filter(const QString & f, QTreeWidgetItem * i); - bool filterItem(const QString & f, QTreeWidgetItem * i); - void translate(); - void addTrEntry(const QString & s, const QString & f) {types.insert(s, f); s_types << f;} - - QPIConfig * conf; - QPIConfigNewDialog new_dialog; - QAction actionAddItem, actionAddNode, actionToItem, actionToNode, actionRemove, actionExpandAll, actionCollapseAll; - QMenu popupMenu; - QString c_name, c_comment; - QTreeWidgetItem * pi, * ti, * c_pi; - QHash types; - QStringList s_types; - QVector w_values; - QVector w_types; - QVector c_hidden; - bool active, read_only_name, read_only_value, read_only_type, read_only_comment; - -public slots: - void parse() {if (conf == 0) clear(); else conf->readAll();} - void write() {if (conf == 0) return; conf->buildFullNames(&(conf->root)); conf->writeAll();} - void clear(); - void buildTree(); - void filter(const QString & f) {if (!active) return; filter(f, invisibleRootItem());} - void setReadOnlyName(bool yes) {read_only_name = yes;} - void setReadOnlyValue(bool yes); - void setReadOnlyType(bool yes); - void setReadOnlyComment(bool yes) {read_only_comment = yes;} - void setColumnNameVisible(bool yes) {setColumnHidden(0, !yes); c_hidden[0] = !yes;} - void setColumnValueVisible(bool yes) {setColumnHidden(1, !yes); c_hidden[1] = !yes;} - void setColumnTypeVisible(bool yes) {setColumnHidden(2, !yes); c_hidden[2] = !yes;} - void setColumnCommentVisible(bool yes) {setColumnHidden(3, !yes); c_hidden[3] = !yes;} - -private slots: - void itemClicked(QTreeWidgetItem * item, int column); - void itemChanged(QTreeWidgetItem * item, int column); - void typeChange(int t, UComboBox * c); - void valueChange(ConfigValueWidget * w, QString v); - void on_actionAddItem_triggered(); - void on_actionAddNode_triggered(); - void on_actionRemove_triggered(); - -signals: - void changed(); - -}; - -#endif // QPICONFIGWIDGET_H diff --git a/test/qad/widgets/qpiconsole.cpp b/test/qad/widgets/qpiconsole.cpp deleted file mode 100644 index 1b0d555..0000000 --- a/test/qad/widgets/qpiconsole.cpp +++ /dev/null @@ -1,268 +0,0 @@ -#include "qpiconsole.h" - - -QPIConsole::QPIConsole(QWidget * parent): QTabWidget(parent) { - connect(this, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); - cur_tab = timer = -1; - def_align = Qt::AlignCenter; -} - - -void QPIConsole::timerEvent(QTimerEvent * ) { - for (int i = 0; i < columns().size(); ++i) { - Column & ccol(tabs[cur_tab].columns[i]); - QVector & cvars(ccol.variables); - if (ccol.alignment.testFlag(Qt::AlignLeft)) { - ccol.layout->setLabelAlignment(Qt::AlignLeft); - } else { - ccol.layout->setLabelAlignment(Qt::AlignRight); - } - for (int j = 0; j < cvars.size(); ++j) { - Variable & tv(cvars[j]); - tv.label->setText(tv.name); - if (tv.type >= 0) { - if (ccol.alignment.testFlag(Qt::AlignLeft)) { - tv.label->setAlignment(Qt::AlignLeft); - if (tv.widget != 0) tv.widget->setAlignment(Qt::AlignLeft); - } else { - if (ccol.alignment.testFlag(Qt::AlignRight)) { - tv.label->setAlignment(Qt::AlignRight); - if (tv.widget != 0) tv.widget->setAlignment(Qt::AlignRight); - } else { - tv.label->setAlignment(Qt::AlignRight); - if (tv.widget != 0) tv.widget->setAlignment(Qt::AlignLeft); - } - } - } - if (tv.widget == 0) continue; - if (tv.type <= 0 && tv.ptr == 0) continue; - if (tv.ptr != 0) { - switch (tv.type) { - case 0: tv.widget->setText((tv.ptr != 0 ? *(const QString*)tv.ptr : QString())); break; - case 1: tv.widget->setText((tv.ptr != 0 ? *(const bool*)tv.ptr : false) ? "true" : "false"); break; - case 2: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const int*)tv.ptr : 0, tv.format)); break; - case 3: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const long*)tv.ptr : 0l, tv.format)); break; - case 4: tv.widget->setText(QString(tv.ptr != 0 ? *(const char*)tv.ptr : char(0))); break; - case 5: tv.widget->setText(numFloatString(tv.ptr != 0 ? *(const float*)tv.ptr : 0.f, tv.format)); break; - case 6: tv.widget->setText(numFloatString(tv.ptr != 0 ? *(const double*)tv.ptr : 0., tv.format)); break; - case 7: tv.widget->setText(numFloatString(tv.ptr != 0 ? *(const short*)tv.ptr : short(0), tv.format)); break; - case 8: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const uint*)tv.ptr : 0u, tv.format)); break; - case 9: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const ulong*)tv.ptr : 0ul, tv.format)); break; - case 10: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const ushort*)tv.ptr : ushort(0), tv.format)); break; - case 11: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const uchar*)tv.ptr : uchar(0), tv.format)); break; - case 12: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const llong*)tv.ptr : 0l, tv.format)); break; - case 13: tv.widget->setText(numIntString(tv.ptr != 0 ? *(const ullong*)tv.ptr: 0ull, tv.format)); break; - case 14: tv.widget->setText(numIntString(bitsValue(tv.ptr, tv.bitFrom, tv.bitCount), tv.format, tv.bitCount/8)); break; - default: break; - } - } - } - } -} - - -#define ADD_VAR_BODY tv.name = name; if (!tv.name.isEmpty()) tv.name += ":"; tv.bitFrom = tv.bitCount = 0; tv.format = format; checkColumn(col); -#define ADD_VAR_SBODY tv.name = name; tv.bitFrom = tv.bitCount = 0; tv.format = format; checkColumn(col); - -#define ADD_VAR_QT QLabel * lbl = new QLabel(name); QLabel * w = new QLabel(); \ - lbl->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); \ - w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); \ - column(col).variables.back().label = lbl; column(col).variables.back().widget = w; \ - lbl->setAlignment(column(col).alignment); \ - applyFormat(lbl, format); applyFormat(w, format); \ - column(col).layout->addRow(lbl, w); - -void QPIConsole::addString(const QString & name, int col, Formats format) { - ADD_VAR_SBODY tv.type = -1; tv.ptr = 0; column(col).push_back(tv); - QLabel * lbl = new QLabel(name); - lbl->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - column(col).variables.back().label = lbl; column(col).variables.back().widget = 0; - lbl->setAlignment(column(col).alignment); - applyFormat(lbl, format); - column(col).layout->addRow(lbl); -} -void QPIConsole::addVariable(const QString & name, const QString* ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 0; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const bool * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 1; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const int * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 2; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const long * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 3; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const char * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 4; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const float * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 5; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const double * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 6; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const short * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 7; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const uint * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 8; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const ulong * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 9; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const ushort * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 10; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const uchar * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 11; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const llong * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 12; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addVariable(const QString & name, const ullong * ptr, int col, Formats format) { - ADD_VAR_BODY tv.type = 13; tv.ptr = ptr; column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addBitVariable(const QString & name, const void * ptr, int fromBit, int bitCount, int col, Formats format) { - tv.name = name; tv.bitFrom = fromBit; tv.bitCount = bitCount; tv.type = 14; tv.ptr = ptr; tv.format = format; - checkColumn(col); column(col).push_back(tv); ADD_VAR_QT} -void QPIConsole::addEmptyLine(int col, uint count) { - tv.name = ""; tv.type = 0; tv.ptr = 0; tv.format = Normal; - for (uint i = 0; i < count; ++i) { - checkColumn(col); - column(col).push_back(tv); - QLabel * lbl = new QLabel(); - lbl->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - column(col).variables.back().label = lbl; column(col).variables.back().widget = 0; - lbl->setAlignment(column(col).alignment); - applyFormat(lbl, tv.format); - column(col).layout->addRow(lbl); - } -} - - -int QPIConsole::addTab(const QString & name, char bind_key) { - QWidget * w = new QWidget(); - QVBoxLayout * lay = new QVBoxLayout(); - QHBoxLayout * clay = new QHBoxLayout(); - QLabel * lbl = new QLabel(); - lay->setContentsMargins(2, 2, 2, 2); - clay->setContentsMargins(0, 0, 0, 0); - lay->addLayout(clay); - lay->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::Preferred, QSizePolicy::Expanding)); - lay->addWidget(lbl); - w->setLayout(lay); - QTabWidget::addTab(w, name); - tabs.push_back(Tab(name, bind_key)); - tabs.back().layout = clay; - tabs.back().widget = lbl; - cur_tab = tabs.size() - 1; - setCurrentIndex(cur_tab); - return tabs.size(); -} - - -void QPIConsole::checkColumn(int col) { - while (columns().size() < col) { - QFormLayout * lay = new QFormLayout(); - lay->setContentsMargins(2, 2, 2, 2); - lay->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); - columns().push_back(Column(def_align)); - columns().back().layout = lay; - tabs[cur_tab].layout->addLayout(lay); - } -} - - -int QPIConsole::bitsValue(const void * src, int offset, int count) const { - int ret = 0, stbyte = offset / 8, cbit = offset - stbyte * 8; - char cbyte = reinterpret_cast(src)[stbyte]; - for (int i = 0; i < count; i++) { - ret |= ((cbyte >> cbit & 1) << i); - cbit++; - if (cbit == 8) { - cbit = 0; - stbyte++; - cbyte = reinterpret_cast(src)[stbyte]; - } - } - return ret; -} - - -const QString & QPIConsole::toBin(const void * d, int s) { - binstr.clear(); - uchar cc, b; - for (int i = 0; i < s; ++i) { - cc = ((const uchar *)d)[i]; - b = 1; - for (int j = 0; j < 8; ++j) { - binstr.prepend(cc & b ? "1" : "0"); - b <<= 1; - } - if (i < s - 1) binstr.prepend(" "); - } - return binstr; -} - - -void QPIConsole::applyFormat(QLabel * l, QPIConsole::Formats f) { - QColor fcol = Qt::black, bcol = QColor(0xFFFFFF); - QFont fnt = font(); - - if (f.testFlag(QPIConsole::Bold)) fnt.setBold(true); - if (f.testFlag(QPIConsole::Italic)) fnt.setItalic(true); - if (f.testFlag(QPIConsole::Underline)) fnt.setUnderline(true); - - if (f.testFlag(QPIConsole::Black)) fcol = Qt::black; - if (f.testFlag(QPIConsole::Red)) fcol = Qt::red; - if (f.testFlag(QPIConsole::Green)) fcol = Qt::green; - if (f.testFlag(QPIConsole::Yellow)) fcol = Qt::yellow; - if (f.testFlag(QPIConsole::Blue)) fcol = Qt::blue; - if (f.testFlag(QPIConsole::Magenta)) fcol = Qt::magenta; - if (f.testFlag(QPIConsole::Cyan)) fcol = Qt::cyan; - if (f.testFlag(QPIConsole::White)) fcol = Qt::white; - if (f.testFlag(QPIConsole::Lighter)) fcol = fcol.lighter(150); - if (f.testFlag(QPIConsole::Darker)) fcol = fcol.darker(150); - - if (f.testFlag(QPIConsole::BackBlack)) bcol = Qt::black; - if (f.testFlag(QPIConsole::BackRed)) bcol = Qt::red; - if (f.testFlag(QPIConsole::BackGreen)) bcol = Qt::green; - if (f.testFlag(QPIConsole::BackYellow)) bcol = Qt::yellow; - if (f.testFlag(QPIConsole::BackBlue)) bcol = Qt::blue; - if (f.testFlag(QPIConsole::BackMagenta)) bcol = Qt::magenta; - if (f.testFlag(QPIConsole::BackCyan)) bcol = Qt::cyan; - if (f.testFlag(QPIConsole::BackWhite)) bcol = Qt::white; - if (f.testFlag(QPIConsole::BackLighter)) bcol = bcol.lighter(150); - //if (f.testFlag(QPIConsole::BackDarker)) bcol = bcol.darker(150); - - if (f.testFlag(QPIConsole::Inverse)) { - QColor tc = fcol; - fcol = bcol; - bcol = tc; - } - - l->setFont(fnt); - QPalette pal = palette(); - pal.setColor(QPalette::WindowText, fcol); - pal.setColor(QPalette::Window, bcol); - l->setPalette(pal); - l->setAutoFillBackground(bcol != QColor(0xFFFFFF)); -} - - -bool QPIConsole::removeTab(uint index) { - if (int(index) >= tabs.size()) return false; - delete QTabWidget::widget(index); - tabs.remove(index); - return true; -} - - -bool QPIConsole::setTab(uint index) { - if (int(index) >= tabs.size()) return false; - setCurrentIndex(index); - return true; -} - - -bool QPIConsole::renameTab(uint index, const QString & new_name) { - if (int(index) >= tabs.size()) return false; - if (tabs[index].name == new_name) return true; - setTabText(index, new_name); - tabs[index].name = new_name; - return true; -} - - -void QPIConsole::setTabEnabled(int index, bool on) { - if (int(index) >= tabs.size()) return; - if (isTabEnabled(index) == on) return; - QTabWidget::setTabEnabled(index, on); -} diff --git a/test/qad/widgets/qpiconsole.h b/test/qad/widgets/qpiconsole.h deleted file mode 100644 index 5e72d33..0000000 --- a/test/qad/widgets/qpiconsole.h +++ /dev/null @@ -1,187 +0,0 @@ -#ifndef QPICONSOLE_H -#define QPICONSOLE_H - -#include -#include -#include -#include -#include -#include - -typedef long long llong; -typedef unsigned char uchar; -typedef unsigned short int ushort; -typedef unsigned int uint; -typedef unsigned long ulong; -typedef unsigned long long ullong; -typedef long double ldouble; - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class QPIConsole: public QTabWidget { - Q_OBJECT -public: - QPIConsole(QWidget * parent = 0); - - enum Format {Normal = 0x01, - Bold = 0x02, - Italic = 0x08, - Underline = 0x10, - Inverse = 0x40, - Black = 0x100, - Red = 0x200, - Green = 0x400, - Yellow = 0x800, - Blue = 0x1000, - Magenta = 0x2000, - Cyan = 0x4000, - White = 0x8000, - BackBlack = 0x10000, - BackRed = 0x20000, - BackGreen = 0x40000, - BackYellow = 0x80000, - BackBlue = 0x100000, - BackMagenta = 0x200000, - BackCyan = 0x400000, - BackWhite = 0x800000, - Dec = 0x1000000, - Hex = 0x2000000, - Oct = 0x4000000, - Bin = 0x8000000, - Scientific = 0x10000000, - Lighter = 0x20000000, - Darker = 0x40000000, - BackLighter = 0x80000000 - }; - - Q_DECLARE_FLAGS(Formats, Format) - Q_FLAGS(Formats) - Q_ENUMS(Format) - - Q_PROPERTY(Qt::Alignment defaultAlignment READ defaultAlignment WRITE setDefaultAlignment) - - void addString(const QString & name, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const QString * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const char * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const bool * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const short * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const int * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const long * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const llong * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const uchar * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const ushort * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const uint * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const ulong * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const ullong * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const float * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addVariable(const QString & name, const double * ptr, int column = 1, Formats format = QPIConsole::Normal); - void addBitVariable(const QString & name, const void * ptr, int fromBit, int bitCount, int column = 1, Formats format = QPIConsole::Normal); - void addEmptyLine(int column = 1, uint count = 1); - - uint tabsCount() const {return tabs.size();} - QString currentTab() const {return tabs[cur_tab].name;} - int addTab(const QString & name, char bind_key = 0); - bool removeTab(uint index); - bool removeTab(const QString & name) {return removeTab(tabIndex(name));} - bool renameTab(uint index, const QString & new_name); - bool renameTab(const QString & name, const QString & new_name) {return renameTab(tabIndex(name), new_name);} - void setTabEnabled(int index, bool on); - bool setTab(uint index); - bool setTab(const QString & name) {return setTab(tabIndex(name));} - //void clearTabs(bool clearScreen = true) {if (clearScreen && isRunning()) {toUpperLeft(); clearScreenLower();} tabs.clear();} - - void addCustomStatus(const QString & str, Formats format = QPIConsole::Normal) {tabs[cur_tab].widget->setText(str); applyFormat(tabs[cur_tab].widget, format);} - void clearCustomStatus() {tabs[cur_tab].widget->clear();} - Qt::Alignment defaultAlignment() const {return def_align;} - void setDefaultAlignment(Qt::Alignment align) {def_align = align;} - void setColumnAlignment(int col, Qt::Alignment align) {if (col < 0 || col >= columns().size()) return; column(col).alignment = align;} - void setColumnAlignmentToAll(Qt::Alignment align) {for (int i = 0; i < tabs.size(); ++i) for (int j = 0; j < tabs[i].columns.size(); ++j) tabs[i].columns[j].alignment = align;/* fillLabels();*/} - - void clearVariables() {clearVariables(true);} - void clearVariables(bool clearScreen) {/*if (clearScreen && isRunning()) {toUpperLeft(); clearScreenLower();}*/ columns().clear();} - -private: - void timerEvent(QTimerEvent * ); - QSize sizeHint() const {return QSize(100, 100);} - - void checkColumn(int col); - void applyFormat(QLabel * l, Formats f); - int bitsValue(const void * src, int offset, int count) const; - int tabIndex(const QString & n) const {for (int i = 0; i < tabs.size(); ++i) if (tabs[i].name == n) return i; return -1;} - const QString & toBin(const void * d, int s); - template - QString numIntString(T v, Formats f, int bits = 0) { - if (f.testFlag(QPIConsole::Hex)) return "0x" + QString::number(v, 16).toUpper(); - if (f.testFlag(QPIConsole::Dec)) return QString::number(v); - if (f.testFlag(QPIConsole::Oct)) return "0" + QString::number(v, 8); - if (f.testFlag(QPIConsole::Bin)) return toBin(&v, bits); - return QString::number(v); - } - template - QString numFloatString(T v, Formats f) { - if (f.testFlag(QPIConsole::Scientific)) return QString::number(v, 'E', 5); - return QString::number(v); - } - - struct Variable { - Variable() {label = widget = 0;} - QString name; - Formats format; - int type; - int bitFrom; - int bitCount; - const void * ptr; - QLabel * label; - QLabel * widget; - void operator =(const Variable & src) {name = src.name; format = src.format; type = src.type; - bitFrom = src.bitFrom; bitCount = src.bitCount; ptr = src.ptr;} - }; - - struct Column { - Column(Qt::Alignment align = Qt::AlignRight) {variables.reserve(16); alignment = align;} - QVector variables; - Qt::Alignment alignment; - QFormLayout * layout; - int size() const {return variables.size();} - Variable & operator [](int index) {return variables[index];} - const Variable & operator [](int index) const {return variables[index];} - void push_back(const Variable & v) {variables.push_back(v);} - void operator =(const Column & src) {variables = src.variables; alignment = src.alignment;} - }; - - struct Tab { - Tab(QString n = "", char k = 0) {columns.reserve(16); name = n; key = k;} - QVector columns; - QString name; - char key; - QHBoxLayout * layout; - QLabel * widget; - }; - - QVector & columns() {return tabs[cur_tab].columns;} - Column & column(int index) {return tabs[cur_tab].columns[index - 1];} - - Qt::Alignment def_align; - QVector tabs; - QString binstr; - Variable tv; - int cur_tab, timer; - -private slots: - void tabChanged(int tab) {cur_tab = tab;} - -public slots: - void start(float freq = 40) {if (timer >= 0) killTimer(timer); timer = startTimer(freq > 0. ? 1000 / freq : 25);} - void stop() {if (timer >= 0) killTimer(timer); timer = -1;} - -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QPIConsole::Formats) - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPICONSOLE_H diff --git a/test/qad/widgets/qpointedit.cpp b/test/qad/widgets/qpointedit.cpp deleted file mode 100644 index ebd0aae..0000000 --- a/test/qad/widgets/qpointedit.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "qpointedit.h" -#include "float.h" - - -QPointEdit::QPointEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { - s_x = new QDoubleSpinBox(this); - s_y = new QDoubleSpinBox(this); - s_x->setMinimum(-DBL_MAX); - s_x->setMaximum(DBL_MAX); - s_y->setMinimum(-DBL_MAX); - s_y->setMaximum(DBL_MAX); - s_x->setToolTip(tr("X")); - s_y->setToolTip(tr("Y")); - lbl = new QLabel(this); - lbl->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - lbl->setText("x"); - lay.setContentsMargins(0, 0, 0, 0); - lay.setSpacing(1); - lay.addWidget(s_x); - lay.addWidget(lbl); - lay.addWidget(s_y); - connect(s_x, SIGNAL(valueChanged(double)), this, SLOT(changed())); - connect(s_y, SIGNAL(valueChanged(double)), this, SLOT(changed())); -} - - -void QPointEdit::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - s_x->setToolTip(tr("X")); - s_y->setToolTip(tr("Y")); - return; - } - QWidget::changeEvent(e); -} diff --git a/test/qad/widgets/qpointedit.h b/test/qad/widgets/qpointedit.h deleted file mode 100644 index 15119c7..0000000 --- a/test/qad/widgets/qpointedit.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef QPOINTEDIT_H -#define QPOINTEDIT_H - -#include -#include -#include -#include - - -class QPointEdit: public QWidget -{ - Q_OBJECT - Q_PROPERTY(QPointF value READ value WRITE setValue) - Q_PROPERTY(int decimals READ decimals WRITE setDecimals) - -public: - explicit QPointEdit(QWidget * parent = 0); - ~QPointEdit() {delete s_x; delete s_y; delete lbl;} - - QPointF value() const {return QPointF(s_x->value(), s_y->value());} - int decimals() const {return s_x->decimals();} - -public slots: - void setValue(QPointF v) {s_x->setValue(v.x()); s_y->setValue(v.y());} - void setDecimals(int d) {s_x->setDecimals(d); s_y->setDecimals(d);} - -private: - virtual void changeEvent(QEvent * e); - - QBoxLayout lay; - QDoubleSpinBox * s_x, * s_y; - QLabel * lbl; - -private slots: - void changed() {emit valueChanged(QPointF(s_x->value(), s_y->value()));} - -signals: - void valueChanged(QPointF); - -}; - -#endif // QPOINTEDIT_H diff --git a/test/qad/widgets/qrectedit.cpp b/test/qad/widgets/qrectedit.cpp deleted file mode 100644 index e1387a4..0000000 --- a/test/qad/widgets/qrectedit.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "qrectedit.h" -#include "float.h" - - -QRectEdit::QRectEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { - s_x = new QDoubleSpinBox(this); - s_y = new QDoubleSpinBox(this); - s_w = new QDoubleSpinBox(this); - s_h = new QDoubleSpinBox(this); - s_x->setMinimum(-DBL_MAX); - s_x->setMaximum(DBL_MAX); - s_y->setMinimum(-DBL_MAX); - s_y->setMaximum(DBL_MAX); - s_w->setMinimum(-DBL_MAX); - s_w->setMaximum(DBL_MAX); - s_h->setMinimum(-DBL_MAX); - s_h->setMaximum(DBL_MAX); - s_x->setToolTip(tr("X")); - s_y->setToolTip(tr("Y")); - s_w->setToolTip(tr("Height")); - s_h->setToolTip(tr("Width")); - lbl_0 = new QLabel(this); - lbl_0->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - lbl_0->setText("x"); - lbl_1 = new QLabel(this); - lbl_1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - lbl_1->setText(";"); - lbl_2 = new QLabel(this); - lbl_2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - lbl_2->setText("x"); - lay.setContentsMargins(0, 0, 0, 0); - lay.setSpacing(1); - lay.addWidget(s_x); - lay.addWidget(lbl_0); - lay.addWidget(s_y); - lay.addWidget(lbl_1); - lay.addWidget(s_w); - lay.addWidget(lbl_2); - lay.addWidget(s_h); - connect(s_x, SIGNAL(valueChanged(double)), this, SLOT(changed())); - connect(s_y, SIGNAL(valueChanged(double)), this, SLOT(changed())); - connect(s_w, SIGNAL(valueChanged(double)), this, SLOT(changed())); - connect(s_h, SIGNAL(valueChanged(double)), this, SLOT(changed())); -} - - -void QRectEdit::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - s_x->setToolTip(tr("X")); - s_y->setToolTip(tr("Y")); - s_w->setToolTip(tr("Height")); - s_h->setToolTip(tr("Width")); - return; - } - QWidget::changeEvent(e); -} diff --git a/test/qad/widgets/qrectedit.h b/test/qad/widgets/qrectedit.h deleted file mode 100644 index 7e4064d..0000000 --- a/test/qad/widgets/qrectedit.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef QRECTEDIT_H -#define QRECTEDIT_H - -#include -#include -#include -#include - - -class QRectEdit: public QWidget -{ - Q_OBJECT - Q_PROPERTY(QRectF value READ value WRITE setValue) - Q_PROPERTY(int decimals READ decimals WRITE setDecimals) - Q_PROPERTY(double maximum READ maximum WRITE setMaximum) - Q_PROPERTY(double minimum READ minimum WRITE setMinimum) - Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep) - -public: - explicit QRectEdit(QWidget * parent = 0); - ~QRectEdit() {delete s_x; delete s_y; delete s_w; delete s_h; delete lbl_0; delete lbl_1; delete lbl_2;} - - QRectF value() const {return QRectF(s_x->value(), s_y->value(), s_w->value(), s_h->value());} - int decimals() const {return s_x->decimals();} - double maximum() const {return s_x->maximum();} - double minimum() const {return s_x->minimum();} - double singleStep() const {return s_x->singleStep();} - -public slots: - void setValue(QRectF v) {s_x->setValue(v.x()); s_y->setValue(v.y()); s_w->setValue(v.width()); s_h->setValue(v.height());} - void setDecimals(int d) {s_x->setDecimals(d); s_y->setDecimals(d); s_w->setDecimals(d); s_h->setDecimals(d);} - void setMaximum(double m) {s_x->setMaximum(m); s_y->setMaximum(m); s_w->setMaximum(m); s_h->setMaximum(m);} - void setMinimum(double m) {s_x->setMinimum(m); s_y->setMinimum(m); s_w->setMinimum(m); s_h->setMinimum(m);} - void setSingleStep(double m) {s_x->setSingleStep(m); s_y->setSingleStep(m); s_w->setSingleStep(m); s_h->setSingleStep(m);} - -private: - virtual void changeEvent(QEvent * e); - - QBoxLayout lay; - QDoubleSpinBox * s_x, * s_y, * s_w, * s_h; - QLabel * lbl_0, * lbl_1, * lbl_2; - -private slots: - void changed() {emit valueChanged(QRectF(s_x->value(), s_y->value(), s_w->value(), s_h->value()));} - -signals: - void valueChanged(QRectF); - -}; - -#endif // QRECTEDIT_H diff --git a/test/qad/widgets/qvariantedit.cpp b/test/qad/widgets/qvariantedit.cpp deleted file mode 100644 index 64131e4..0000000 --- a/test/qad/widgets/qvariantedit.cpp +++ /dev/null @@ -1,490 +0,0 @@ -#include "qvariantedit.h" -#include -#include - - -StringListEdit::~StringListEdit() { - delete combo; - delete butt_add; - delete butt_del; - delete butt_clear; -} - - -QStringList StringListEdit::value() const { - QStringList l; - for (int i = 0; i < combo->count(); ++i) l << combo->itemText(i); - return l; -} - - -void StringListEdit::setValue(const QStringList & v) { - combo->clear(); - if (!v.isEmpty()) { - combo->addItems(v); - combo->setCurrentIndex(0); - } -} - - -void StringListEdit::addItem() { - combo->addItem(combo->currentText()); - emit valueChanged(); -} - - -void StringListEdit::delItem() { - if (combo->currentIndex() < 0) return; - combo->removeItem(combo->currentIndex()); - emit valueChanged(); -} - - -void StringListEdit::clear() { - if (combo->count() == 0) return; - combo->clear(); - emit valueChanged(); -} - - -StringListEdit::StringListEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { - combo = new EComboBox(this); - combo->setEditable(true); - combo->setLineEdit(new CLineEdit); - combo->setInsertPolicy(QComboBox::NoInsert); - butt_add = new QPushButton(this); - butt_del = new QPushButton(this); - butt_clear = new QPushButton(this); - /*butt_add->setIconSize(QSize(16, 16)); - butt_del->setIconSize(QSize(16, 16)); - butt_clear->setIconSize(QSize(16, 16));*/ - butt_add->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - butt_del->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - butt_clear->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - butt_add->setIcon(QIcon(":/icons/list-add.png")); - butt_del->setIcon(QIcon(":/icons/edit-delete.png")); - butt_clear->setIcon(QIcon(":/icons/edit-clear.png")); - butt_add->setToolTip(tr("Add")); - butt_del->setToolTip(tr("Remove")); - butt_clear->setToolTip(tr("Clear")); - lay.setContentsMargins(0, 0, 0, 0); - lay.setSpacing(2); - lay.addWidget(combo); - lay.addWidget(butt_add); - lay.addWidget(butt_del); - lay.addWidget(butt_clear); - connect(combo->lineEdit(), SIGNAL(returnPressed()), this, SLOT(editItem())); - connect(butt_add, SIGNAL(clicked(bool)), this, SLOT(addItem())); - connect(butt_del, SIGNAL(clicked(bool)), this, SLOT(delItem())); - connect(butt_clear, SIGNAL(clicked(bool)), this, SLOT(clear())); -} - - -void StringListEdit::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - butt_add->setToolTip(tr("Add")); - butt_del->setToolTip(tr("Remove")); - butt_clear->setToolTip(tr("Clear")); - return; - } - QWidget::changeEvent(e); -} - - -void StringListEdit::editItem() { - int ci = combo->currentIndex(); - if (ci < 0) return; - combo->setItemText(ci, combo->currentText()); -} - - - - -PathEdit::PathEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { - is_dir = is_abs = false; - filter = tr("All files(*)"); - line = new CLineEdit(this); - //line->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - butt_select = new QPushButton(this); - //butt_select->setIconSize(QSize(16, 16)); - butt_select->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - butt_select->setIcon(QIcon(":/icons/document-open.png")); - butt_select->setToolTip(tr("Choose") + " ..."); - lay.setContentsMargins(0, 0, 0, 0); - //lay.setSpacing(2); - lay.addWidget(line); - lay.addWidget(butt_select); - connect(line, SIGNAL(textChanged(QString)), this, SIGNAL(valueChanged())); - connect(butt_select, SIGNAL(clicked(bool)), this, SLOT(select())); -} - - -void PathEdit::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - butt_select->setToolTip(tr("Choose") + " ..."); - return; - } - QWidget::changeEvent(e); -} - - -void PathEdit::resizeEvent(QResizeEvent *) { - butt_select->setMaximumHeight(line->height()); - -} - - -void PathEdit::select() { - QString ret; - if (is_dir) ret = QFileDialog::getExistingDirectory(this, tr("Select directory"), value()); - else ret = QFileDialog::getOpenFileName(this, tr("Select file"), value(), filter); - if (ret.isEmpty()) return; - if (!is_abs) - ret = QDir::current().relativeFilePath(ret); - line->setText(ret); - emit valueChanged(); -} - - - - -QVariantEdit::QVariantEdit(QWidget * parent): QWidget(parent) { - setLayout(new QBoxLayout(QBoxLayout::TopToBottom)); - layout()->setContentsMargins(0, 0, 0, 0); - _empty = 0; - _line = 0; - _check = 0; - _color = 0; - _list = 0; - _date = 0; - _spin = 0; - _espin = 0; - _rect = 0; - _point = 0; - _path = 0; - _enum = 0; - _custom =_cur_edit = 0; - _recreate(QVariant()); -} - - -QVariantEdit::~QVariantEdit() { - _delete(); -} - - -void QVariantEdit::resizeEvent(QResizeEvent * e) { - //_resize(); - QWidget::resizeEvent(e); -} - - -void QVariantEdit::_recreate(const QVariant & new_value) { - if (!new_value.isValid()) { - if (_cur_edit != _empty) _delete(); - if (_empty == 0) { - _empty = new QLabel(trUtf8("Invalid value"), this); - _empty->setAlignment(Qt::AlignCenter); - _cur_edit = _empty; - _resize(); - } - _value = new_value; - return; - } - if (_value.userType() == new_value.userType()) { - _value = new_value; - return; - } - _delete(); - switch (new_value.type()) { - case QVariant::Bool: - _check = new QCheckBox(this); - _check->setAutoFillBackground(true); - _cur_edit = _check; - connect(_check, SIGNAL(toggled(bool)), this, SLOT(_changed())); - break; - case QVariant::Int: - _spin = new QDoubleSpinBox(this); - _spin->setDecimals(0); - _spin->setRange(-0x7FFFFFFF, 0x7FFFFFFF); - _cur_edit = _spin; - connect(_spin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); - break; - case QVariant::UInt: - _spin = new QDoubleSpinBox(this); - _spin->setDecimals(0); - _spin->setRange(0, 0xFFFFFFFF); - _cur_edit = _spin; - connect(_spin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); - break; - case QVariant::LongLong: - _spin = new QDoubleSpinBox(this); - _spin->setDecimals(0); - _spin->setRange(-0x7FFFFFFFFFFFFFFFL, 0x7FFFFFFFFFFFFFFFL); - _cur_edit = _spin; - connect(_spin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); - break; - case QVariant::ULongLong: - _spin = new QDoubleSpinBox(this); - _spin->setDecimals(0); - _spin->setRange(0L, 0x7FFFFFFFFFFFFFFFL); - _cur_edit = _spin; - connect(_spin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); - break; - case QVariant::Double: - _espin = new EvalSpinBox(this); - //_spin->setDecimals(5); - //_spin->setRange(-1E+199, 1E+199); - _cur_edit = _espin; - connect(_espin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); - break; - case QVariant::Color: - _color = new ColorButton(this); - _color->setUseAlphaChannel(true); - _cur_edit = _color; - connect(_color, SIGNAL(colorChanged(QColor)), this, SLOT(_changed())); - break; - case QVariant::String: - _line = new CLineEdit(this); - _cur_edit = _line; - connect(_line, SIGNAL(textChanged(QString)), this, SLOT(_changed())); - break; - case QVariant::StringList: - _list = new StringListEdit(this); - _cur_edit = _list; - connect(_list, SIGNAL(valueChanged()), this, SLOT(_changed())); - break; - case QVariant::Rect: - _rect = new QRectEdit(this); - _rect->setDecimals(0); - _cur_edit = _rect; - connect(_rect, SIGNAL(valueChanged(QRectF)), this, SLOT(_changed())); - break; - case QVariant::RectF: - _rect = new QRectEdit(this); - _rect->setDecimals(3); - _cur_edit = _rect; - connect(_rect, SIGNAL(valueChanged(QRectF)), this, SLOT(_changed())); - break; - case QVariant::Point: - _point = new QPointEdit(this); - _point->setDecimals(0); - _cur_edit = _point; - connect(_point, SIGNAL(valueChanged(QPointF)), this, SLOT(_changed())); - break; - case QVariant::PointF: - _point = new QPointEdit(this); - _point->setDecimals(3); - _cur_edit = _point; - connect(_point, SIGNAL(valueChanged(QPointF)), this, SLOT(_changed())); - break; - case QVariant::Date: - _date = new QDateEdit(this); - _cur_edit = _date; - connect(_date, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(_changed())); - break; - case QVariant::Time: - _date = new QTimeEdit(this); - _cur_edit = _date; - connect(_date, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(_changed())); - break; - case QVariant::DateTime: - _date = new QDateTimeEdit(this); - _cur_edit = _date; - connect(_date, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(_changed())); - break; - default: break; - } - if (!_cur_edit) { - if (new_value.canConvert()) { - _enum = new EComboBox(this); - _setEnum(new_value.value()); - _cur_edit = _enum; - connect(_enum, SIGNAL(currentIndexChanged(int)), this, SLOT(_changed())); - } - if (new_value.canConvert()) { - _path = new PathEdit(this); - _setFile(new_value.value()); - _cur_edit = _path; - connect(_path, SIGNAL(valueChanged()), this, SLOT(_changed())); - } - if (new_value.canConvert()) { - _path = new PathEdit(this); - _setDir(new_value.value()); - _cur_edit = _path; - connect(_path, SIGNAL(valueChanged()), this, SLOT(_changed())); - } - if (!_cur_edit) { // try custom - QVariantEditorFactoryBase * f = QVariantEditorFactories::editorFactory(new_value.userType()); - if (f) { - QWidget * fw = f->createEditor(); - if (fw) { - fw->setParent(this); - _custom = fw; - _cur_edit = _custom; - connect(_custom, SIGNAL(valueChanged()), this, SLOT(_changed())); - } - } - } - } - //qDebug() << _cur_edit; - if (_cur_edit) { - _resize(); - //_cur_edit->show(); - } - _value = new_value; -} - - -QVariant QVariantEdit::value() const { - switch (_value.type()) { - case QVariant::Bool: return _check->isChecked(); - case QVariant::Int: return int(_spin->value()); - case QVariant::UInt: return (unsigned int)(_spin->value()); - case QVariant::LongLong: return qlonglong(_spin->value()); - case QVariant::ULongLong: return qulonglong(_spin->value()); - case QVariant::Double: return _espin->value(); - case QVariant::Color: return _color->color(); - case QVariant::String: return _line->text(); - case QVariant::StringList: return _list->value(); - case QVariant::Rect: return _rect->value().toRect(); - case QVariant::RectF: return _rect->value(); - case QVariant::Point: return _point->value().toPoint(); - case QVariant::PointF: return _point->value(); - case QVariant::Date: return _date->date(); - case QVariant::Time: return _date->time(); - case QVariant::DateTime: return _date->dateTime(); - default: - if (_value.canConvert() && _enum) { - QAD::Enum ret; - for (int i = 0; i < _enum->count(); ++i) - ret.enum_list << QAD::Enumerator(_enum->itemData(i).toInt(), _enum->itemText(i)); - ret.enum_name = _enum->property("enum_name").toString(); - ret.selected = _enum->currentText(); - return QVariant::fromValue(ret); - } - if (_value.canConvert() && _path) { - if (!_path->is_dir) { - QAD::File ret; - ret.file = _path->value(); - ret.filter = _path->filter; - ret.is_abs = _path->is_abs; - return QVariant::fromValue(ret); - } - } - if (_value.canConvert() && _path) { - if (_path->is_dir) { - QAD::Dir ret; - ret.dir = _path->value(); - ret.is_abs = _path->is_abs; - return QVariant::fromValue(ret); - } - } - if (_custom) { - return _custom->property("value"); - } - } - return QVariant(); -} - - -void QVariantEdit::setValue(const QVariant & v) { - _recreate(v); - if (_cur_edit) _cur_edit->blockSignals(true); - if (_line) {_line->setText(v.toString());} - if (_check) {_check->setChecked(v.toBool()); _check->setText(v.toBool() ? "true" : "false");} - if (_color) {_color->setColor(v.value());} - if (_list) {_list->setValue(v.toStringList());} - if (_date) {_date->setDateTime(v.toDateTime());} - if (_spin) {_spin->setValue(v.toDouble());} - if (_espin) {_espin->setValue(v.toDouble());} - if (_rect) {_rect->setValue(v.toRectF());} - if (_point) {_point->setValue(v.toPointF());} - if (_path) { - if (_path->is_dir) _setDir(v.value()); - else _setFile(v.value()); - } - if (_enum) {_setEnum(v.value());} - if (_custom) {_setCustom(v);} - if (_cur_edit) _cur_edit->blockSignals(false); -} - - -void QVariantEdit::_delete() { - if (_cur_edit) - delete _cur_edit; - _cur_edit = 0; - _custom = 0; - _empty = 0; - _line = 0; - _check = 0; - _color = 0; - _list = 0; - _date = 0; - _spin = 0; - _espin = 0; - _rect = 0; - _point = 0; - _path = 0; - _enum = 0; -} - - -void QVariantEdit::_resize() { - if (!_cur_edit) return; - layout()->addWidget(_cur_edit); -} - - -void QVariantEdit::_newPath() { - _delete(); - _path = new PathEdit(this); - _cur_edit = _path; - _value = _value.toString(); - connect(_path, SIGNAL(valueChanged()), this, SLOT(_changed())); - _resize(); - //_cur_edit->show(); -} - - -void QVariantEdit::_setEnum(const QAD::Enum & v) { - _enum->clear(); - _enum->setProperty("enum_name", v.enum_name); - foreach (const QAD::Enumerator & e, v.enum_list) - _enum->addItem(e.name, QVariant(e.value)); - int i(0); - for (i = 0; i < _enum->count(); ++i) - if (_enum->itemText(i) == v.selected) { - _enum->setCurrentIndex(i); - break; - } - if (i == _enum->count()) - _enum->setCurrentIndex(-1); -} - - -void QVariantEdit::_setFile(const QAD::File & v) { - _path->is_dir = false; - _path->setValue(v.file); - _path->filter = v.filter; - _path->is_abs = v.is_abs; -} - - -void QVariantEdit::_setDir(const QAD::Dir & v) { - _path->is_dir = true; - _path->setValue(v.dir); - _path->is_abs = v.is_abs; -} - - -void QVariantEdit::_setCustom(const QVariant & v) { - _custom->setProperty("value", v); -} - - -void QVariantEdit::_changed() { - if (_check) _check->setText(_check->isChecked() ? "true" : "false"); - emit valueChanged(value()); -} - diff --git a/test/qad/widgets/qvariantedit.h b/test/qad/widgets/qvariantedit.h deleted file mode 100644 index 7954281..0000000 --- a/test/qad/widgets/qvariantedit.h +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef QVARIANTEDIT_H -#define QVARIANTEDIT_H - -#include "qvariantedit_custom.h" -#include "qad_types.h" -#include "clineedit.h" -#include "ecombobox.h" -#include "colorbutton.h" -#include "qrectedit.h" -#include "qpointedit.h" -#include "evalspinbox.h" -#include -#include -#include - - -class StringListEdit: public QWidget -{ - Q_OBJECT -public: - StringListEdit(QWidget * parent = 0); - ~StringListEdit(); - - QStringList value() const; - -private: - virtual void changeEvent(QEvent * e); - - QBoxLayout lay; - EComboBox * combo; - QPushButton * butt_add, * butt_del, * butt_clear; - -public slots: - void setValue(const QStringList & v); - -private slots: - void editItem(); - void addItem(); - void delItem(); - void clear(); - -signals: - void valueChanged(); - -}; - - - - -class PathEdit: public QWidget -{ - Q_OBJECT -public: - PathEdit(QWidget * parent = 0); - ~PathEdit() {delete line; delete butt_select;} - - QString value() const {return line->text();} - - bool is_dir, is_abs; - QString filter; - -private: - virtual void changeEvent(QEvent * e); - virtual void resizeEvent(QResizeEvent * ); - - QBoxLayout lay; - CLineEdit * line; - QPushButton * butt_select; - -public slots: - void setValue(const QString & v) {line->setText(v);} - -private slots: - void select(); - -signals: - void valueChanged(); - -}; - - - - -class QVariantEdit: public QWidget -{ - Q_OBJECT - Q_PROPERTY(QVariant value READ value WRITE setValue) - -public: - explicit QVariantEdit(QWidget * parent = 0); - ~QVariantEdit(); - - QVariant value() const; - //QSize sizeHint() const {if (_cur_edit) return _cur_edit->sizeHint(); return QWidget::sizeHint();} - //QSize minimumSizeHint() const {if (_cur_edit) return _cur_edit->minimumSizeHint(); return QWidget::minimumSizeHint();} - -protected: - virtual void resizeEvent(QResizeEvent * ); - void _recreate(const QVariant & new_value); - void _delete(); - void _resize(); - void _newPath(); - void _setEnum(const QAD::Enum & v); - void _setFile(const QAD::File & v); - void _setDir(const QAD::Dir & v); - void _setCustom(const QVariant & v); - - - QLabel * _empty; - CLineEdit * _line; - QCheckBox * _check; - ColorButton * _color; - StringListEdit * _list; - QDateTimeEdit * _date; - QDoubleSpinBox * _spin; - EvalSpinBox * _espin; - QRectEdit * _rect; - QPointEdit * _point; - PathEdit * _path; - EComboBox * _enum; - QWidget * _custom, * _cur_edit; - QVariant _value; - -private slots: - void _changed(); - -public slots: - void setValue(const QVariant & v); - -signals: - void valueChanged(QVariant); - -}; - -#endif // QVARIANTEDIT_H diff --git a/test/qad/widgets/qvariantedit_custom.cpp b/test/qad/widgets/qvariantedit_custom.cpp deleted file mode 100644 index 29fecb5..0000000 --- a/test/qad/widgets/qvariantedit_custom.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "qvariantedit_custom.h" - - -QVariantEditorFactories::QVariantEditorFactories() { - -} - - -QVariantEditorFactories * QVariantEditorFactories::instance() { - static QVariantEditorFactories * ret = new QVariantEditorFactories(); - return ret; -} - - -void QVariantEditorFactories::registerEditorFactory(int meta_id, QVariantEditorFactoryBase * f) { - QVariantEditorFactories * s = QVariantEditorFactories::instance(); - if (!f) { - unregisterEditorFactory(meta_id); - return; - } - if (s->factories.contains(meta_id)) - ;//qDebug() << "[QVariantEditorFactories] Warning: factory for metaTypeID" << meta_id << "already registered, override"; - s->factories[meta_id] = f; -} - - -void QVariantEditorFactories::unregisterEditorFactory(int meta_id) { - QVariantEditorFactories * s = QVariantEditorFactories::instance(); - s->factories.remove(meta_id); -} - - -bool QVariantEditorFactories::isRegisteredEditorFactory(int meta_id) { - QVariantEditorFactories * s = QVariantEditorFactories::instance(); - return s->factories.contains(meta_id); -} - - -QVariantEditorFactoryBase * QVariantEditorFactories::editorFactory(int meta_id) { - QVariantEditorFactories * s = QVariantEditorFactories::instance(); - return s->factories.value(meta_id, 0); -} - diff --git a/test/qad/widgets/qvariantedit_custom.h b/test/qad/widgets/qvariantedit_custom.h deleted file mode 100644 index c2b1c3b..0000000 --- a/test/qad/widgets/qvariantedit_custom.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QVARIANTEDIT_CUSTOM_H -#define QVARIANTEDIT_CUSTOM_H - -#include -#include -#include - -class QVariantEdit; - - -class QVariantEditorFactoryBase { - friend class QVariantEdit; -public: - QVariantEditorFactoryBase() {} - virtual QWidget * createEditor() = 0; -private: - -}; - - -class QVariantEditorFactories { -public: - static void registerEditorFactory(int meta_id, QVariantEditorFactoryBase * f); - static void unregisterEditorFactory(int meta_id); - static bool isRegisteredEditorFactory(int meta_id); - static QVariantEditorFactoryBase * editorFactory(int meta_id); - -private: - QVariantEditorFactories(); - static QVariantEditorFactories * instance(); - - QMap factories; -}; - - -#endif // QVARIANTEDIT_CUSTOM_H diff --git a/test/qad/widgets/session_manager.cpp b/test/qad/widgets/session_manager.cpp deleted file mode 100644 index a602cf5..0000000 --- a/test/qad/widgets/session_manager.cpp +++ /dev/null @@ -1,236 +0,0 @@ -#include -#include -#include -#include "session_manager.h" - - -void SessionManager::setFile(const QString & file) { - if (file.isEmpty()) { - file_.clear(); - return; - } - QFileInfo fi(file); - if (fi.isAbsolute()) { - file_ = file; - return; - } - file_ = QApplication::applicationDirPath() + "/" + file; -} - - -void SessionManager::removeMainWidget(QWidget * e) { - for (int i = 0; i < widgets.size(); ++i) { - if (widgets[i].first == e->objectName()) { - widgets.remove(i); - --i; - } - } -} - - -void SessionManager::save() { - if (file_.isEmpty()) return; - QPIConfig sr(file_); - QObjectList tsc; - for (int i = 0; i < mwindows.size(); ++i) { - tsc << mwindows[i].second; - sr.setValue(mwindows[i].first + " state", mwindows[i].second->saveState(), false); - sr.setValue(mwindows[i].first + " window state", (int)mwindows[i].second->windowState(), false); - sr.setValue(mwindows[i].first + " geometry " + QString::number((int)mwindows[i].second->windowState()), mwindows[i].second->saveGeometry(), false); - QList sp = mwindows[i].second->findChildren(); - foreach (QSplitter * s, sp) - sr.setValue(mwindows[i].first + " splitter " + s->objectName(), s->saveState(), false); - } - for (int i = 0; i < widgets.size(); ++i) { - tsc << widgets[i].second; - sr.setValue(widgets[i].first + " geometry " + QString::number((int)widgets[i].second->windowState()), widgets[i].second->saveGeometry(), false); - sr.setValue(widgets[i].first + " window state", (int)widgets[i].second->windowState(), false); - } - for (int i = 0; i < checks.size(); ++i) - sr.setValue(checks[i].first, checks[i].second->isChecked(), false); - for (int i = 0; i < lines.size(); ++i) - sr.setValue(lines[i].first, lines[i].second->text(), "s", false); - for (int i = 0; i < combos.size(); ++i) - sr.setValue(combos[i].first, combos[i].second->currentIndex(), false); - for (int i = 0; i < dspins.size(); ++i) - sr.setValue(dspins[i].first, dspins[i].second->value(), false); - for (int i = 0; i < spins.size(); ++i) - sr.setValue(spins[i].first, spins[i].second->value(), false); - for (int i = 0; i < spinsliders.size(); ++i) - sr.setValue(spinsliders[i].first, spinsliders[i].second->value(), false); - for (int i = 0; i < evals.size(); ++i) - sr.setValue(evals[i].first, evals[i].second->expression(), "s", false); - for (int i = 0; i < tabs.size(); ++i) - sr.setValue(tabs[i].first, tabs[i].second->currentIndex(), false); - for (int i = 0; i < buttons.size(); ++i) - sr.setValue(buttons[i].first, buttons[i].second->isChecked(), false); - for (int i = 0; i < stacks.size(); ++i) - sr.setValue(stacks[i].first, stacks[i].second->currentIndex(), false); - for (int i = 0; i < actions.size(); ++i) - sr.setValue(actions[i].first, actions[i].second->isChecked(), false); - for (int i = 0; i < stringlists.size(); ++i) - sr.setValue(stringlists[i].first, *stringlists[i].second, false); - for (int i = 0; i < strings.size(); ++i) - sr.setValue(strings[i].first, *strings[i].second, "s", false); - for (int i = 0; i < colors.size(); ++i) - sr.setValue(colors[i].first, *colors[i].second, false); - for (int i = 0; i < bools.size(); ++i) - sr.setValue(bools[i].first, *bools[i].second, false); - for (int i = 0; i < ints.size(); ++i) - sr.setValue(ints[i].first, *ints[i].second, false); - for (int i = 0; i < floats.size(); ++i) - sr.setValue(floats[i].first, *floats[i].second, false); - QSet all_list; - foreach (QObject * c, tsc) { - all_list |= QSet::fromList(c->findChildren()); - } - QMap funcs = metaFunctions(all_list, "sessionSave"); - //qDebug() << "check for save" << all_list.size(); - foreach (QObject * o, all_list) { - const QMetaObject * mo = o->metaObject(); - QByteArray fn = funcs.value(mo); - if (!mo || fn.isEmpty()) continue; - QByteArray value; - //qDebug() << "save" << o->objectName(); - mo->invokeMethod(o, fn.constData(), Q_ARG(QByteArray*, &value)); - sr.setValue(o->objectName(), value, false); - } - //qDebug() << mcl.size(); - emit saving(sr); - sr.writeAll(); -} - - -void SessionManager::load(bool onlyMainwindow) { - if (file_.isEmpty()) return; - QPIConfig sr(file_); - QObjectList tsc; - for (int i = 0; i < mwindows.size(); ++i) { - tsc << mwindows[i].second; - mwindows[i].second->restoreState(sr.getValue(mwindows[i].first + " state", QByteArray())); - mwindows[i].second->restoreGeometry(sr.getValue(mwindows[i].first + " geometry " + QString::number((int)mwindows[i].second->windowState()), QByteArray())); - mwindows[i].second->setWindowState((Qt::WindowState)(int)sr.getValue(mwindows[i].first + " window state", 0)); - QList sp = mwindows[i].second->findChildren(); - foreach (QSplitter * s, sp) - s->restoreState(sr.getValue(mwindows[i].first + " splitter " + s->objectName(), QByteArray())); - } - for (int i = 0; i < widgets.size(); ++i) { - tsc << widgets[i].second; - widgets[i].second->restoreGeometry(sr.getValue(widgets[i].first + " geometry " + QString::number((int)widgets[i].second->windowState()), QByteArray())); - widgets[i].second->setWindowState((Qt::WindowState)(int)sr.getValue(widgets[i].first + " window state", 0)); - } - if (onlyMainwindow) return; - for (int i = 0; i < checks.size(); ++i) - checks[i].second->setChecked(sr.getValue(checks[i].first, checks[i].second->isChecked())); - for (int i = 0; i < lines.size(); ++i) - lines[i].second->setText(sr.getValue(lines[i].first, lines[i].second->text())); - for (int i = 0; i < combos.size(); ++i) { - QComboBox * c = combos[i].second; - int v = sr.getValue(combos[i].first, c->currentIndex()); - if (v >= 0 && v < c->count()) - c->setCurrentIndex(v); - } - for (int i = 0; i < dspins.size(); ++i) - dspins[i].second->setValue(sr.getValue(dspins[i].first, dspins[i].second->value())); - for (int i = 0; i < spins.size(); ++i) - spins[i].second->setValue(sr.getValue(spins[i].first, spins[i].second->value())); - for (int i = 0; i < spinsliders.size(); ++i) - spinsliders[i].second->setValue(sr.getValue(spinsliders[i].first, spinsliders[i].second->value())); - for (int i = 0; i < evals.size(); ++i) - evals[i].second->setExpression(sr.getValue(evals[i].first, evals[i].second->expression())); - for (int i = 0; i < tabs.size(); ++i) { - QTabWidget * t = tabs[i].second; - int v = sr.getValue(tabs[i].first, t->currentIndex()); - if (v >= 0 && v < t->count()) - t->setCurrentIndex(v); - } - for (int i = 0; i < buttons.size(); ++i) - buttons[i].second->setChecked(sr.getValue(buttons[i].first, buttons[i].second->isChecked())); - for (int i = 0; i < stacks.size(); ++i) - stacks[i].second->setCurrentIndex(qMin((int)sr.getValue(stacks[i].first, stacks[i].second->currentIndex()), stacks[i].second->count())); - for (int i = 0; i < actions.size(); ++i) - actions[i].second->setChecked(sr.getValue(actions[i].first, actions[i].second->isChecked())); - for (int i = 0; i < stringlists.size(); ++i) - *stringlists[i].second = sr.getValue(stringlists[i].first, *stringlists[i].second); - for (int i = 0; i < strings.size(); ++i) - *strings[i].second = sr.getValue(strings[i].first, *strings[i].second).stringValue(); - for (int i = 0; i < colors.size(); ++i) - *colors[i].second = sr.getValue(colors[i].first, *colors[i].second); - for (int i = 0; i < bools.size(); ++i) - *bools[i].second = sr.getValue(bools[i].first, *bools[i].second); - for (int i = 0; i < ints.size(); ++i) - *ints[i].second = sr.getValue(ints[i].first, *ints[i].second); - for (int i = 0; i < floats.size(); ++i) - *floats[i].second = sr.getValue(floats[i].first, *floats[i].second); - QSet all_list; - foreach (QObject * c, tsc) { - all_list |= QSet::fromList(c->findChildren()); - } - QMap funcs = metaFunctions(all_list, "sessionLoad"); - //qDebug() << "check for load" << all_list.size(); - foreach (QObject * o, all_list) { - const QMetaObject * mo = o->metaObject(); - QByteArray fn = funcs.value(mo); - if (!mo || fn.isEmpty()) continue; - QByteArray value = sr.getValue(o->objectName(), QByteArray()); - //qDebug() << "load" << o->objectName(); - mo->invokeMethod(o, fn.constData(), Q_ARG(QByteArray*, &value)); - } - emit loading(sr); -} - - -void SessionManager::clear(bool with_filename) { - mwindows.clear(); - widgets.clear(); - checks.clear(); - lines.clear(); - combos.clear(); - dspins.clear(); - spins.clear(); - spinsliders.clear(); - evals.clear(); - tabs.clear(); - buttons.clear(); - stacks.clear(); - actions.clear(); - stringlists.clear(); - strings.clear(); - colors.clear(); - bools.clear(); - ints.clear(); - floats.clear(); - if (with_filename) setFile(""); -} - - -QMap SessionManager::metaFunctions(const QSet & objects, QByteArray fname) { - QMap funcs; - foreach (QObject * o, objects) { - const QMetaObject * mo = o->metaObject(); - if (!mo) continue; - QByteArray fn; - if (!funcs.contains(mo)) { - for (int i = 0; i < mo->methodCount(); ++i) { - QMetaMethod mm = mo->method(i); - QByteArray mmn = -#if QT_VERSION >= 0x050000 - mm.name(); -#else - mm.signature(); - mmn = mmn.left(mmn.indexOf('(')); -#endif - - if (mmn == fname) { - if (mm.parameterTypes().size() > 0) { - if (mm.parameterTypes()[0] == "QByteArray*") { - fn = mmn; - } - } - } - } - funcs[mo] = fn; - } else fn = funcs[mo]; - } - return funcs; -} diff --git a/test/qad/widgets/session_manager.h b/test/qad/widgets/session_manager.h deleted file mode 100644 index 3a8a5aa..0000000 --- a/test/qad/widgets/session_manager.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef SESSION_MANAGER_H -#define SESSION_MANAGER_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "spinslider.h" -#include "evalspinbox.h" -#include "qpiconfig.h" - -/// for all children widgets of "QMainWindow"s and MainWidgets -/// check for slots -/// * void sessionSave(QByteArray * data); -/// * void sessionLoad(QByteArray * data); - - -class SessionManager: public QObject -{ - Q_OBJECT -public: - SessionManager(const QString & file = QString()) {setFile(file);} - ~SessionManager() {;} - - void setFile(const QString & file); - - void addEntry(QMainWindow * e) {mwindows.push_back(QPair(e->objectName(), e));} - void addEntry(QCheckBox * e) {checks.push_back(QPair(e->objectName(), e));} - void addEntry(QLineEdit * e) {lines.push_back(QPair(e->objectName(), e));} - void addEntry(QComboBox * e) {combos.push_back(QPair(e->objectName(), e));} - void addEntry(QDoubleSpinBox * e) {dspins.push_back(QPair(e->objectName(), e));} - void addEntry(QSpinBox * e) {spins.push_back(QPair(e->objectName(), e));} - void addEntry(SpinSlider * e) {spinsliders.push_back(QPair(e->objectName(), e));} - void addEntry(EvalSpinBox * e) {evals.push_back(QPair(e->objectName(), e));} - void addEntry(QTabWidget * e) {tabs.push_back(QPair(e->objectName(), e));} - void addEntry(QAction * e) {actions.push_back(QPair(e->objectName(), e));} - void addEntry(QAbstractButton * e) {buttons.push_back(QPair(e->objectName(), e));} - void addEntry(QStackedWidget * e) {stacks.push_back(QPair(e->objectName(), e));} - void addMainWidget(QWidget * e) {widgets.push_back(QPair(e->objectName(), e));} - void removeMainWidget(QWidget * e); - - void addEntry(const QString & name, QMainWindow * e) {mwindows.push_back(QPair(name, e));} - void addEntry(const QString & name, QCheckBox * e) {checks.push_back(QPair(name, e));} - void addEntry(const QString & name, QLineEdit * e) {lines.push_back(QPair(name, e));} - void addEntry(const QString & name, QComboBox * e) {combos.push_back(QPair(name, e));} - void addEntry(const QString & name, QDoubleSpinBox * e) {dspins.push_back(QPair(name, e));} - void addEntry(const QString & name, QSpinBox * e) {spins.push_back(QPair(name, e));} - void addEntry(const QString & name, SpinSlider * e) {spinsliders.push_back(QPair(name, e));} - void addEntry(const QString & name, EvalSpinBox * e) {evals.push_back(QPair(name, e));} - void addEntry(const QString & name, QTabWidget * e) {tabs.push_back(QPair(name, e));} - void addEntry(const QString & name, QAbstractButton * e) {buttons.push_back(QPair(name, e));} - void addEntry(const QString & name, QStackedWidget * e) {stacks.push_back(QPair(name, e));} - void addEntry(const QString & name, QAction * e) {actions.push_back(QPair(name, e));} - void addEntry(const QString & name, QStringList * e) {stringlists.push_back(QPair(name, e));} - void addEntry(const QString & name, QString * e) {strings.push_back(QPair(name, e));} - void addEntry(const QString & name, QColor * e) {colors.push_back(QPair(name, e));} - void addEntry(const QString & name, bool * e) {bools.push_back(QPair(name, e));} - void addEntry(const QString & name, int * e) {ints.push_back(QPair(name, e));} - void addEntry(const QString & name, float * e) {floats.push_back(QPair(name, e));} - void addMainWidget(const QString & name, QWidget * e) {widgets.push_back(QPair(name, e));} - -private: - QMap metaFunctions(const QSet & objects, QByteArray fname); - - QVector > mwindows; - QVector > widgets; - QVector > checks; - QVector > lines; - QVector > combos; - QVector > dspins; - QVector > spins; - QVector > spinsliders; - QVector > evals; - QVector > tabs; - QVector > buttons; - QVector > stacks; - QVector > actions; - QVector > stringlists; - QVector > strings; - QVector > colors; - QVector > bools; - QVector > ints; - QVector > floats; - QString file_; - -public slots: - void save(); - void load(bool onlyMainwindow = false); - void clear(bool with_filename = true); - -signals: - void loading(QPIConfig & ); - void saving(QPIConfig & ); - -}; - -#endif // SESSION_MANAGER_H diff --git a/test/qad/widgets/shortcuts.cpp b/test/qad/widgets/shortcuts.cpp deleted file mode 100644 index 234a637..0000000 --- a/test/qad/widgets/shortcuts.cpp +++ /dev/null @@ -1,233 +0,0 @@ -#include "shortcuts.h" - - -void ShortcutEdit::keyPressEvent(QKeyEvent * e) { - Qt::KeyboardModifiers km = e->modifiers(); - km &= ~Qt::KeypadModifier; - km &= ~Qt::GroupSwitchModifier; - if (e->key() != Qt::Key_Control && e->key() != Qt::Key_Shift && - e->key() != Qt::Key_Alt && e->key() != Qt::Key_Meta) - setText(QKeySequence(km | e->key()).toString()); -} - - - -Shortcuts::Shortcuts(QWidget * parent, bool on): QTreeWidget(parent) { - aw = 0; - QImage ti(QSize(16, 16), QImage::Format_ARGB32_Premultiplied); - QPainter p(&ti); - p.setCompositionMode(QPainter::CompositionMode_Clear); - p.eraseRect(ti.rect()); - p.end(); - empty_icon = QPixmap::fromImage(ti); - bfont = font(); - bfont.setWeight(QFont::Bold); - active = on; - setColumnCount(2); -#if QT_VERSION < 0x050000 - header()->setResizeMode(0, QHeaderView::ResizeToContents); - header()->setResizeMode(1, QHeaderView::ResizeToContents); -#else - header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); -#endif - header()->setStretchLastSection(true); - setColumnWidth(1, 200); - setSortingEnabled(true); - QStringList l; - l << tr("Command") << tr("Shortcut"); - setHeaderLabels(l); - assignWindow(parent); -} - - -Shortcuts::~Shortcuts() { - foreach (ShortcutEdit * i, edits) - delete i; - edits.clear(); -} - - -void Shortcuts::changeEvent(QEvent * e) { - if (e->type() == QEvent::LanguageChange) { - QStringList l; - l << tr("Command") << tr("Shortcut"); - setHeaderLabels(l); - } -} - - -void Shortcuts::assignWindow(QWidget * w) { - if (w == 0) return; - while ((qobject_cast(w) == 0) && (w->parentWidget() != 0)) - w = w->parentWidget(); - aw = qobject_cast(w); - updateShortcuts(); -} - - -QStringList Shortcuts::actionTree(QAction * a) { - QStringList tree; - QList aw = a->associatedWidgets(); - if (aw.size() == 0) return tree; - QWidget * cw = 0; - QMenu * tm; - QToolBar * tt; - foreach (QWidget * i, aw) { - tm = qobject_cast(i); - if (tm == 0) continue; - cw = i; - while (cw != 0) { - tm = qobject_cast(cw); - if (tm != 0) { - if (!tm->title().isEmpty()) - tree.push_front(tm->title()); - cw = cw->parentWidget(); - } else break; - } - if (!tree.isEmpty()) return tree; - } - foreach (QWidget * i, aw) { - tt = qobject_cast(i); - if (tt == 0) continue; - cw = i; - if (!tt->windowTitle().isEmpty()) - tree.push_front(tt->windowTitle()); - break; - } - return tree; -} - - -QList > Shortcuts::shortcuts() { - QList > l; - foreach (ShortcutEdit * i, edits) { - if (i->action()->objectName().isEmpty()) continue; - l << QPair(i->action()->objectName(), i->text()); - } - return l; -} - - -void Shortcuts::clear() { - foreach (ShortcutEdit * i, edits) - delete i; - edits.clear(); - hide(); - QList tl = findItems("", Qt::MatchContains); - foreach (QTreeWidgetItem * i, tl) - delete i; - show(); -} - - -bool Shortcuts::checkAction(QAction * a) { - if (a->menu() != 0) return false; - if (a->isSeparator()) return false; - if (a->text().isEmpty()) return false; - if (a->associatedWidgets().isEmpty()) return false; - if (QString(a->metaObject()->className()) != "QAction") return false; - if (qobject_cast(a) != 0) return false; - return true; -} - - -void Shortcuts::updateShortcuts() { - //return; - if (aw == 0 || !active) return; - hide(); - int cpos = verticalScrollBar()->value(); - clear(); -#if QT_VERSION < 0x050000 - header()->setResizeMode(0, QHeaderView::Fixed); -#else - header()->setSectionResizeMode(0, QHeaderView::Fixed); -#endif - QList al = aw->findChildren(); - QTreeWidgetItem * pi, * ci; - QStringList tree; - bool s = isSortingEnabled(), isFound; - setSortingEnabled(false); - foreach (QAction * i, al) { - if (!checkAction(i)) continue; - edits.push_back(new ShortcutEdit()); - tree = actionTree(i); - pi = invisibleRootItem(); - foreach (QString t, tree) { - isFound = false; - for (int j = 0; j < pi->childCount(); ++j) { - if (pi->child(j)->text(0) == t) { - pi = pi->child(j); - isFound = true; - break; - } - } - if (isFound) continue; - ci = new QTreeWidgetItem(pi); - ci->setText(0, t); - ci->setToolTip(0, t); - ci->setFont(0, bfont); - pi->addChild(ci); - pi = ci; - } - ci = new QTreeWidgetItem(pi); - ci->setText(0, i->text()); - ci->setToolTip(0, i->text()); - if (i->icon().isNull()) - ci->setIcon(0, empty_icon); - else - ci->setIcon(0, i->icon()); - edits.back()->ti = ci; - edits.back()->assignAction(i); - pi->addChild(ci); - //qDebug() << "set widget" << edits.back(); - setItemWidget(ci, 1, edits.back()); - } - setSortingEnabled(s); -#if QT_VERSION < 0x050000 - header()->setResizeMode(0, QHeaderView::ResizeToContents); -#else - header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); -#endif - expandAll(); - verticalScrollBar()->setValue(cpos); - show(); -} - - -void Shortcuts::commit() { - foreach (ShortcutEdit * i, edits) - i->commit(); -} - - -void Shortcuts::reset() { - foreach (ShortcutEdit * i, edits) - i->reset(); - updateShortcuts(); -} - - -void Shortcuts::filter(const QString & what) { - hide(); - for (int i = 0; i < topLevelItemCount(); ++i) - filterTree(topLevelItem(i), what); - show(); -} - - -bool Shortcuts::filterTree(QTreeWidgetItem * ti, QString f) { - if (f.isEmpty()) { - for (int i = 0; i < ti->childCount(); ++i) - filterTree(ti->child(i), f); - ti->setHidden(false); - return true; - } - bool isFound = false; - for (int i = 0; i < ti->childCount(); ++i) - if (filterTree(ti->child(i), f)) isFound = true; - if (ti->text(0).indexOf(f, 0, Qt::CaseInsensitive) >= 0 || - ti->text(1).indexOf(f, 0, Qt::CaseInsensitive) >= 0) isFound = true; - ti->setHidden(!isFound); - return isFound; -} diff --git a/test/qad/widgets/shortcuts.h b/test/qad/widgets/shortcuts.h deleted file mode 100644 index 1bddb1a..0000000 --- a/test/qad/widgets/shortcuts.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef SHORTCUTS_H -#define SHORTCUTS_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "clineedit.h" - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class ShortcutEdit: public CLineEdit -{ - Q_OBJECT - friend class Shortcuts; -public: - explicit ShortcutEdit(QWidget * parent = 0): CLineEdit(parent) {ti = 0; ca = 0; connect(this, SIGNAL(textChanged(QString)), this, SLOT(textChanged_(QString)));} - - void assignAction(QAction * a) {clear(); ca = a; reset();} - QAction * action() const {return ca;} - bool isEmpty() const {return text().isEmpty();} - void commit() {if (ca == 0) return; ca->setShortcut(QKeySequence(text()));} - void reset() {if (ca == 0) return; setText(ca->shortcut().toString());} - -private slots: - void textChanged_(QString t) {if (ti != 0) ti->setText(1, t);} - -private: - void keyPressEvent(QKeyEvent * e); - - QAction * ca; - QTreeWidgetItem * ti; - -}; - - -class Shortcuts: public QTreeWidget -{ - Q_OBJECT - -public: - explicit Shortcuts(QWidget * parent = 0, bool on = true); - ~Shortcuts(); - - void assignWindow(QWidget * w); - void setActive(bool on) {active = on;} - QList > shortcuts(); - QStringList actionTree(QAction * a); - static bool checkAction(QAction * a); - -public slots: - void clear(); - void updateShortcuts(); - void commit(); - void reset(); - void filter(const QString & what); - -private: - virtual void updateEditorGeometries() {foreach (ShortcutEdit * i, edits) i->setGeometry(visualRect(indexFromItem(i->ti, 1)));} - virtual void changeEvent(QEvent * ); - bool filterTree(QTreeWidgetItem * ti, QString f); - - QMainWindow * aw; - QVector edits; - QIcon empty_icon; - QFont bfont; - bool active; - -private slots: - -signals: - void shortcutChanged(QAction * , QShortcut & ); - -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // SPINSLIDER_H diff --git a/test/qad/widgets/spinslider.cpp b/test/qad/widgets/spinslider.cpp deleted file mode 100644 index 29ac431..0000000 --- a/test/qad/widgets/spinslider.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "spinslider.h" -#include - - -SpinSlider::SpinSlider(QWidget * parent): QWidget(parent) { - min_ = val_ = 0.; - max_ = 100.; - dec_ = 1; - page = 10.; - ticks_ = 1; - direc = LeftToRight; - square = false; - slider = new QSlider(); - slider->setOrientation(Qt::Horizontal); - slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - spin = new QDoubleSpinBox(); - adjust(); - layout = new QBoxLayout(QBoxLayout::LeftToRight); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(slider); - layout->addWidget(spin); - connect(slider, SIGNAL(valueChanged(int)), this, SLOT(sliderChanged(int))); - connect(spin, SIGNAL(valueChanged(double)), this, SLOT(spinChanged(double))); - setLayout(layout); -} - - -SpinSlider::~SpinSlider() { - delete spin; - delete slider; - delete layout; -} - - -void SpinSlider::setOrientation(Qt::Orientation orient) { - slider->setOrientation(orient); - if (orient == Qt::Horizontal) - slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - else - slider->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); -} - - -void SpinSlider::adjust() { - adjusting = true; - delim = qPow(10, dec_); - spin->setDecimals(dec_); - spin->setRange(min_, max_); - if (square) slider->setRange(sqrt(min_ * delim), sqrt(max_ * delim)); - else slider->setRange(min_ * delim, max_ * delim); - if (val_ < min_) val_ = min_; - if (val_ > max_) val_ = max_; - spin->setValue(val_); - if (square) slider->setValue(static_cast(sqrt(val_ * delim))); - else slider->setValue(static_cast(val_ * delim)); - slider->setPageStep(qRound(page * delim)); - slider->setTickInterval(qRound(ticks_ * delim)); - emit valueChanged(val_); - emit valueChanged(qRound(val_)); - adjusting = false; -} - - -void SpinSlider::sliderChanged(int value) { - if (adjusting) return; - adjusting = true; - if (square) spin->setValue(static_cast(sqr(value) / delim)); - else spin->setValue(static_cast(value) / delim); - val_ = spin->value(); - emit valueChanged(val_); - emit valueChanged(qRound(val_)); - adjusting = false; -} - - -void SpinSlider::spinChanged(double value) { - if (adjusting) return; - adjusting = true; - val_ = value; - if (square) slider->setValue(static_cast(sqrt(value * delim))); - else slider->setValue(qRound(value * delim)); - emit valueChanged(val_); - emit valueChanged(qRound(val_)); - adjusting = false; -} diff --git a/test/qad/widgets/spinslider.h b/test/qad/widgets/spinslider.h deleted file mode 100644 index 6c9d0c8..0000000 --- a/test/qad/widgets/spinslider.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef SPINSLIDER_H -#define SPINSLIDER_H - -#include -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class SpinSlider: public QWidget -{ - Q_OBJECT - Q_ENUMS(Direction) - Q_PROPERTY(double minimum READ minimum WRITE setMinimum) - Q_PROPERTY(double maximum READ maximum WRITE setMaximum) - Q_PROPERTY(double value READ value WRITE setValue) - Q_PROPERTY(int decimals READ decimals WRITE setDecimals) - Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep) - Q_PROPERTY(double pageStep READ pageStep WRITE setPageStep) - Q_PROPERTY(QString prefix READ prefix WRITE setPrefix) - Q_PROPERTY(QString suffix READ suffix WRITE setSuffix) - Q_PROPERTY(QSlider::TickPosition tickPosition READ tickPosition WRITE setTickPosition) - Q_PROPERTY(int tickInterval READ tickInterval WRITE setTickInterval) - Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation) - Q_PROPERTY(Direction direction READ direction WRITE setDirection) - Q_PROPERTY(bool invertedAppearance READ invertedAppearance WRITE setInvertedAppearance) - Q_PROPERTY(bool squareScale READ squareScale WRITE setSquareScale) - Q_PROPERTY(double spinMinimum READ spinMinimum WRITE setSpinMinimum) - Q_PROPERTY(double spinMaximum READ spinMaximum WRITE setSpinMaximum) - -public: - explicit SpinSlider(QWidget * parent = 0); - ~SpinSlider(); - - enum Direction {LeftToRight, RightToLeft, TopToBottom, BottomToTop}; - - double minimum() const {return min_;} - double maximum() const {return max_;} - double spinMinimum() const {return spin->minimum();} - double spinMaximum() const {return spin->maximum();} - double value() const {return val_;} - int decimals() const {return dec_;} - double singleStep() const {return spin->singleStep();} - double pageStep() const {return page;} - QString prefix() const {return spin->prefix();} - QString suffix() const {return spin->suffix();} - QSlider::TickPosition tickPosition() const {return slider->tickPosition();} - int tickInterval() const {return ticks_;} - Qt::Orientation orientation() const {return slider->orientation();} - Direction direction() const {return direc;} - bool invertedAppearance() const {return slider->invertedAppearance();} - bool squareScale() const {return square;} - - void setSingleStep(double step) {spin->setSingleStep(step); slider->setPageStep(qRound(step * delim));} - void setPageStep(double step) {page = step; slider->setPageStep(qRound(page * delim));} - void setPrefix(QString prefix) {spin->setPrefix(prefix);} - void setSuffix(QString suffix) {spin->setSuffix(suffix);} - void setTickPosition(QSlider::TickPosition tp) {slider->setTickPosition(tp);} - void setTickInterval(int ti) {ticks_ = ti; slider->setTickInterval(qRound(ticks_ * delim));} - void setOrientation(Qt::Orientation orient); - void setDirection(Direction d) {direc = d; layout->setDirection((QBoxLayout::Direction)d);} - void setInvertedAppearance(bool yes) {slider->setInvertedAppearance(yes);} - void setSquareScale(bool yes) {square = yes; adjust();} - -public slots: - void setMinimum(double value) {min_ = value; adjust();} - void setMaximum(double value) {max_ = value; adjust();} - void setSpinMinimum(double value) {spin->setMinimum(value);} - void setSpinMaximum(double value) {spin->setMaximum(value);} - void setValue(double value) {val_ = value; spin->setValue(value);} - void setDecimals(int value) {dec_ = value; adjust();} - void reset() {val_ = 0.; spin->setValue(0.);} - -private: - void adjust(); - double sqr(const double & v) {return v * v;} - - double min_, max_, val_, delim, page; - int dec_, ticks_; - bool adjusting, square; - QSlider * slider; - QDoubleSpinBox * spin; - QBoxLayout * layout; - Direction direc; - -private slots: - void sliderChanged(int value); - void spinChanged(double value); - -signals: - void valueChanged(double); - void valueChanged(int); - -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // SPINSLIDER_H diff --git a/test/qcd_utils/CMakeLists.txt b/test/qcd_utils/CMakeLists.txt deleted file mode 100644 index c9d3fba..0000000 --- a/test/qcd_utils/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -project(qcd_utils) -cmake_minimum_required(VERSION 2.6) -if (POLICY CMP0017) - cmake_policy(SET CMP0017 NEW) -endif() -if (NOT LIBPROJECT) - find_package(PIP REQUIRED) - option(LIB "System install" 0) - option(DEBUG "Build with -g3" 0) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall") - if (DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") - endif() -endif() -find_package(QAD REQUIRED) -list(APPEND QT_MULTILIB_LIST ${PROJECT_NAME}) -set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE) -include_directories(${PIP_INCLUDES} ${QAD_INCLUDES}) -file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts") -find_qt(${QtVersions} Core Gui) -qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) -qt_add_library(${PROJECT_NAME} SHARED out_CPP) -qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets qad_graphic cd_utils piqt) -message(STATUS "Building ${PROJECT_NAME}") - -set(QCD_UTILS_UTILS 1) -if(LIBPROJECT) - sdk_install("" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}") - set(QCD_UTILS_UTILS ${UTILS}) -else() - if(LIB) - if(WIN32) - install(FILES ${out_HDR} DESTINATION ${MINGW_INCLUDE}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION QtBin) - else() - install(FILES ${out_HDR} DESTINATION ${CMAKE_INSTALL_PREFIX}/include) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - endif() - message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") - else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin) - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") - endif() -endif() - -if(QCD_UTILS_UTILS) - add_subdirectory(pult) -endif() diff --git a/test/qcd_utils/pult/CMakeLists.txt b/test/qcd_utils/pult/CMakeLists.txt deleted file mode 100644 index 230c5a0..0000000 --- a/test/qcd_utils/pult/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -project(cd_pult) -find_qt(${QtVersions} Core Gui OpenGL) -qt_sources(SRC) -qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) -qt_add_executable(${PROJECT_NAME} WIN32 out_CPP) -qt_target_link_libraries(${PROJECT_NAME} qad_utils qad_widgets qad_graphic qad_application qcd_utils piqt_utils) -message(STATUS "Building ${PROJECT_NAME}") -if(LIB) - if(WIN32) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - else() - if(APPLE) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION /usr/local/bin) - else() - if (DEFINED ANDROID_PLATFORM) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${ANDROID_SYSTEM_LIBRARY_PATH}/usr/bin) - else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin) - endif() - endif() - endif() - #message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") -else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin) - #message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") -endif() diff --git a/test/qcd_utils/pult/cddirectk.cpp b/test/qcd_utils/pult/cddirectk.cpp deleted file mode 100644 index 7ab3be6..0000000 --- a/test/qcd_utils/pult/cddirectk.cpp +++ /dev/null @@ -1,312 +0,0 @@ -#include "cddirectk.h" -#include "ui_cddirectk_type_dialog.h" -#include "cdutils_core.h" -#include "cdutils_k.h" -#include "qcd_core.h" -#include "qcd_model.h" -#include "graphic.h" -#include "piqt.h" -#include "qvariantedit.h" -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace CDUtils; - - -KDockWidget::KDockWidget(QString title, QMainWindow * p): QDockWidget(title, p) { - da = p; - menu = new QMenu(this); - QAction * a = new QAction(QIcon(":/icons/document-edit.png"), "Rename ...", this); - connect(a, SIGNAL(triggered(bool)), this, SLOT(rename())); - dactions << a; - a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove", this); - connect(a, SIGNAL(triggered(bool)), this, SIGNAL(removeRequest())); - dactions << a; - menu_k = new QMenu(this); - menu_k->setTitle(trUtf8("Remove K")); - lay = new QFormLayout(); - lay->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin), 0, 0); - lay->setLabelAlignment(Qt::AlignRight | Qt::AlignVCenter); - QWidget * w = new QWidget(); - w->setAcceptDrops(true); - w->installEventFilter(this); - w->setLayout(lay); - setWidget(w); - type_dialog = new CDDirectKTypeDialog(); -} - - -void KDockWidget::addK(const CDType & t, CDDirectKTypeDialog::TypeInfo ti) { - if (t.cd_type() != CDType::cdK) return; - PIDeque xp = t.path(); - if (k_list.contains(xp)) return; - k_list << xp; - info_list << ti; - //piCout << "add" << xp; - QWidget * ve = ti.create(); - //qDebug() << "add" << ve; - lay->addRow(PI2QString(t.pathString().join(".")) + ":", ve); - QCDCore::instance()->bindWidget(ve, t); - //ve->setValue(); -} - - -QByteArray KDockWidget::save() const { - ChunkStream cs; - cs.add(1, windowTitle()) - .add(2, getList(k_list)) - .add(3, info_list); - return cs.data(); -} - - -void KDockWidget::load(QByteArray ba) { - clear(); - if (ba.isEmpty()) return; - ChunkStream cs(ba); - PIVector > list; - QVector ilist; - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: setWindowTitle(cs.getData()); break; - case 2: list = setList(cs.getData()); break; - case 3: ilist = cs.getData >(); break; - default: break; - } - } - ilist.resize(list.size()); - for (int i = 0; i < list.size_s(); ++i) { - addK(K[list[i]], ilist[i]); - } -} - - -void KDockWidget::clear() { - while (lay->rowCount() > 0) - removeRow(0); - k_list.clear(); - info_list.clear(); -} - - -void KDockWidget::changedGlobal() { - //piCout << "changedGlobal ..." << k_list.size_s() << info_list.size() << lay->count() << lay->rowCount(); - for (int i = 0; i < k_list.size_s(); ++i) { - //piCout << "update" << i << "0"; - if (!K.exists(k_list[i])) { - k_list.remove(i); - info_list.remove(i); - removeRow(i); - --i; - continue; - } - //piCout << "update" << i << "1"; - QLabel * lbl = qobject_cast(lay->itemAt(i, QFormLayout::LabelRole)->widget()); - //piCout << "update" << i << "2"; - if (lbl) lbl->setText(PI2QString(K[k_list[i]].pathString().join(".")) + ":"); - //piCout << "update" << i << "3"; - } - //piCout << "changedGlobal ok"; -} - - -bool KDockWidget::eventFilter(QObject * o, QEvent * e) { - //if (o == graphic->viewport()) { - switch (e->type()) { - case QEvent::DragMove: { - QDragMoveEvent * de = (QDragMoveEvent*)e; - const QMimeData * mime = de->mimeData(); - if (!mime) break; - if (!mime->text().startsWith("k")) break; - de->setDropAction(Qt::CopyAction); - de->accept(); - return true; - } break; - case QEvent::DragEnter: { - QDragEnterEvent * de = (QDragEnterEvent*)e; - const QMimeData * mime = de->mimeData(); - if (!mime) break; - if (!mime->text().startsWith("k")) break; - de->setDropAction(Qt::CopyAction); - de->accept(); - return true; - } break; - case QEvent::Drop: { - QDropEvent * de = (QDropEvent*)e; - const QMimeData * mime = de->mimeData(); - if (!mime) break; - //qDebug() << "drop" << mime->text(); - if (!mime->text().startsWith("k")) break; - CDDirectKTypeDialog::TypeInfo ti; - CDType & k(K[CDCore::stringToPath(Q2PIString(mime->text().mid(1)))]); - if (k.type().left(1) == "n" || k.type().left(1) == "f") { - if (type_dialog->exec() == QDialog::Accepted) - ti = type_dialog->getType(); - else - return true; - } - addK(k, ti); - de->accept(); - return true; - } break; - default: break; - } - //} - return QWidget::eventFilter(o, e); -} - - -void KDockWidget::contextMenuEvent(QContextMenuEvent * e) { - qDeleteAll(menu_k->actions()); - menu_k->clear(); - for (int i = 0; i < k_list.size_s(); ++i) { - QAction * a = new QAction(PI2QString(K[k_list[i]].pathString().join(".")), this); - a->setData(i); - connect(a, SIGNAL(triggered(bool)), this, SLOT(removeK())); - menu_k->addAction(a); - } - QMenu * mwm = da->createPopupMenu(); - menu->clear(); - menu->addActions(dactions); - menu->addMenu(menu_k); - menu->addSeparator(); - menu->addActions(mwm->actions()); - menu->popup(e->globalPos()); - mwm->deleteLater(); -} - - -void KDockWidget::removeRow(int r) { - if (r < 0 || r >= lay->rowCount()) return; -#if QT_VERSION >= 0x050800 - QFormLayout::TakeRowResult rr = lay->takeRow(r); - if (rr.fieldItem) {delete rr.fieldItem->widget(); delete rr.fieldItem;} - if (rr.labelItem) {delete rr.labelItem->widget(); delete rr.labelItem;} -#else - piForTimes (2) { - QLayoutItem * i = lay->itemAt(r+r); - lay->removeItem(i); - if (i) {delete i->widget(); delete i;} - } -#endif -} - - -void KDockWidget::rename() { - QString nn = QInputDialog::getText(this, trUtf8("Rename area"), trUtf8("New area name:"), - QLineEdit::Normal, windowTitle()); - if (nn.isEmpty()) return; - setWindowTitle(nn); -} - - -void KDockWidget::removeK() { - QAction * a = qobject_cast(sender()); - if (!a) return; - int ind = a->data().toInt(); - if (ind < 0 || ind >= k_list.size_s()) return; - k_list.remove(ind); - if (ind >= 0 && ind < info_list.size()) - info_list.remove(ind); - removeRow(ind); -} - - - - -CDDirectK::CDDirectK(QWidget * parent) : QWidget(parent), Ui::CDDirectK() { - setupUi(this); - da = new QMainWindow(); - da->setWindowFlags(frame->windowFlags()); - da->setDockNestingEnabled(true); - layoutMain->addWidget(da); -} - - -CDDirectK::~CDDirectK() { -} - - -void CDDirectK::reset() { - qDeleteAll(docks); - docks.clear(); -} - - -QByteArray CDDirectK::save() const { - ChunkStream cs; - QVector dstates; - foreach (KDockWidget * d, docks) { - dstates << d->save(); - } - cs.add(1, docks.size()) - .add(2, dstates) - .add(3, da->saveState()); - return cs.data(); -} - - -void CDDirectK::load(QByteArray ba) { - reset(); - if (ba.isEmpty()) return; - ChunkStream cs(ba); - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: { - int s = cs.getData(); - piForTimes (s) - addArea(); - } break; - case 2: { - QVector dstates = cs.getData >(); - for (int i = 0; i < piMini(dstates.size(), docks.size()); ++i) - docks[i]->load(dstates[i]); - } break; - case 3: da->restoreState(cs.getData()); break; - default: break; - } - } -} - - -void CDDirectK::addArea() { - KDockWidget * dw = new KDockWidget(QString("area %1").arg(docks.size()), da); - connect(dw, SIGNAL(removeRequest()), this, SLOT(removeArea())); - da->addDockWidget(Qt::RightDockWidgetArea, dw); - docks << dw; - for (int i = 0; i < docks.size(); ++i) - docks[i]->setObjectName(QString("dock_%1").arg(i)); -} - - -void CDDirectK::changedGlobal() { - foreach (KDockWidget * d, docks) - d->changedGlobal(); -} - - -void CDDirectK::removeArea() { - KDockWidget * d = qobject_cast(sender()); - if (!d) return; - docks.removeAll(d); - d->deleteLater(); - for (int i = 0; i < docks.size(); ++i) - docks[i]->setObjectName(QString("dock_%1").arg(i)); -} - - -void CDDirectK::on_buttonAdd_clicked() { - addArea(); -} - - -void CDDirectK::on_buttonRemoveAll_clicked() { - qDeleteAll(docks); - docks.clear(); -} diff --git a/test/qcd_utils/pult/cddirectk.h b/test/qcd_utils/pult/cddirectk.h deleted file mode 100644 index b5d71f4..0000000 --- a/test/qcd_utils/pult/cddirectk.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef CDDIRECTK_H -#define CDDIRECTK_H - -#include "cdgraphics.h" -#include "ui_cddirectk.h" -#include "cddirectk_type_dialog.h" - -class QFormLayout; - - -class KDockWidget: public QDockWidget { - Q_OBJECT -public: - KDockWidget(QString title = QString(), QMainWindow * p = 0); - - void addK(const CDUtils::CDType & t, CDDirectKTypeDialog::TypeInfo ti); - QByteArray save() const; - void load(QByteArray ba); - void clear(); - void changedGlobal(); - - QFormLayout * lay; - -private: - bool eventFilter(QObject * o, QEvent * e); - void contextMenuEvent(QContextMenuEvent * e); - void removeRow(int r); - - QMenu * menu, * menu_k; - QList dactions; - QMainWindow * da; - CDDirectKTypeDialog * type_dialog; - PIVector > k_list; - QVector info_list; - -private slots: - void rename(); - void removeK(); - -signals: - void removeRequest(); - -}; - - - - -class CDDirectK: public QWidget, public Ui::CDDirectK -{ - Q_OBJECT -public: - explicit CDDirectK(QWidget *parent = 0); - ~CDDirectK(); - - void reset(); - QByteArray save() const; - void load(QByteArray ba); - -private: - void addArea(); - - QList docks; - QMainWindow * da; - -public slots: - void changedGlobal(); - -private slots: - void removeArea(); - void on_buttonAdd_clicked(); - void on_buttonRemoveAll_clicked(); - -signals: - -}; - -#endif // CDDIRECTK_H diff --git a/test/qcd_utils/pult/cddirectk.ui b/test/qcd_utils/pult/cddirectk.ui deleted file mode 100644 index a14e715..0000000 --- a/test/qcd_utils/pult/cddirectk.ui +++ /dev/null @@ -1,85 +0,0 @@ - - - CDDirectK - - - - 0 - 0 - 624 - 411 - - - - CD Pult - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::StyledPanel - - - - 0 - - - 0 - - - - - Add new - - - - :/icons/list-add.png:/icons/list-add.png - - - - - - - Remove all - - - - :/icons/edit-delete.png:/icons/edit-delete.png - - - - - - - Qt::Horizontal - - - - 1 - 20 - - - - - - - - - - - - - - diff --git a/test/qcd_utils/pult/cddirectk_type_dialog.cpp b/test/qcd_utils/pult/cddirectk_type_dialog.cpp deleted file mode 100644 index ba95141..0000000 --- a/test/qcd_utils/pult/cddirectk_type_dialog.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include "cddirectk_type_dialog.h" -#include "cdutils_core.h" -#include "qcd_core.h" -#include "qcd_model.h" -#include "piqt.h" -#include "spinslider.h" -#include "qvariantedit.h" - - -CDDirectKTypeDialog::CDDirectKTypeDialog(QWidget * parent) : QDialog(parent), Ui::CDDirectKTypeDialog() { - setupUi(this); -} - - -CDDirectKTypeDialog::~CDDirectKTypeDialog() { -} - - -CDDirectKTypeDialog::TypeInfo CDDirectKTypeDialog::getType() const { - if (!groupBox->isChecked()) return TypeInfo(); - TypeInfo ret; - ret.type = comboType->currentIndex(); - ret.params_d[0] = evalMin->value(); - ret.params_d[1] = evalMax->value(); - ret.params_d[2] = spinDecimals->value(); - ret.params_d[3] = evalStep->value(); - ret.params_s[0] = linePrefix->text(); - ret.params_s[1] = lineSuffix->text(); - return ret; -} - - - - -CDDirectKTypeDialog::TypeInfo::TypeInfo(int type_) { - type = type_; - params_d.resize(4); - params_s.resize(2); -} - - -QWidget * CDDirectKTypeDialog::TypeInfo::create() { - params_d.resize(4); - params_s.resize(2); - switch (type) { - case 0: { - QDoubleSpinBox * ret = new QDoubleSpinBox(); - ret->setMinimum(params_d[0]); - ret->setMaximum(params_d[1]); - ret->setDecimals(params_d[2]); - ret->setSingleStep(params_d[3]); - ret->setPrefix(params_s[0]); - ret->setSuffix(params_s[1]); - return ret; - } break; - case 1: { - QSlider * ret = new QSlider(Qt::Horizontal); - ret->setMinimum(params_d[0]); - ret->setMaximum(params_d[1]); - ret->setSingleStep(params_d[3]); - return ret; - } break; - case 2: { - SpinSlider * ret = new SpinSlider(); - ret->setMinimum(params_d[0]); - ret->setMaximum(params_d[1]); - ret->setDecimals(params_d[2]); - ret->setSingleStep(params_d[3]); - ret->setPrefix(params_s[0]); - ret->setSuffix(params_s[1]); - return ret; - } break; - default: break; - } - return new QVariantEdit(); -} diff --git a/test/qcd_utils/pult/cddirectk_type_dialog.h b/test/qcd_utils/pult/cddirectk_type_dialog.h deleted file mode 100644 index c3ee06a..0000000 --- a/test/qcd_utils/pult/cddirectk_type_dialog.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef CDDIRECTK_TYPE_DIALOG_H -#define CDDIRECTK_TYPE_DIALOG_H - -#include -#include "ui_cddirectk_type_dialog.h" - - -class CDDirectKTypeDialog: public QDialog, public Ui::CDDirectKTypeDialog -{ - Q_OBJECT -public: - explicit CDDirectKTypeDialog(QWidget * parent = 0); - ~CDDirectKTypeDialog(); - - struct TypeInfo { - TypeInfo(int type_ = -1); - QWidget * create(); - int type; - QVector params_d; - QVector params_s; - }; - - TypeInfo getType() const; - -private: - -public slots: - -private slots: - -signals: - -}; - -inline QDataStream & operator <<(QDataStream & s, const CDDirectKTypeDialog::TypeInfo & v) { - s << v.type << v.params_d << v.params_s; - return s; -} -inline QDataStream & operator >>(QDataStream & s, CDDirectKTypeDialog::TypeInfo & v) { - s >> v.type >> v.params_d >> v.params_s; - return s; -} - -#endif // CDDIRECTK_TYPE_DIALOG_H diff --git a/test/qcd_utils/pult/cddirectk_type_dialog.ui b/test/qcd_utils/pult/cddirectk_type_dialog.ui deleted file mode 100644 index 3c4ac3a..0000000 --- a/test/qcd_utils/pult/cddirectk_type_dialog.ui +++ /dev/null @@ -1,232 +0,0 @@ - - - CDDirectKTypeDialog - - - - 0 - 0 - 275 - 310 - - - - CD Pult - - - - - - Custom - - - true - - - - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Type: - - - - - - - - Spin - - - - - Slider - - - - - SpinSlider - - - - - - - - Min: - - - - - - - - - - Max: - - - - - - - 100.000000000000000 - - - - - - - Decimals: - - - - - - - - - - Single step: - - - - - - - 1.000000000000000 - - - - - - - Prefix: - - - - - - - - - - Suffix: - - - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 1 - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - CLineEdit - QLineEdit -
    clineedit.h
    -
    - - EvalSpinBox - QWidget -
    evalspinbox.h
    -
    -
    - - - - groupBox - toggled(bool) - widget - setEnabled(bool) - - - 86 - 49 - - - 94 - 91 - - - - - buttonBox - accepted() - CDDirectKTypeDialog - accept() - - - 297 - 285 - - - 315 - 280 - - - - - buttonBox - rejected() - CDDirectKTypeDialog - reject() - - - 281 - 290 - - - 283 - 307 - - - - -
    diff --git a/test/qcd_utils/pult/cdgraphics.cpp b/test/qcd_utils/pult/cdgraphics.cpp deleted file mode 100644 index ea08f4c..0000000 --- a/test/qcd_utils/pult/cdgraphics.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include "cdgraphics.h" -#include "ui_qcd_graphic.h" -#include "cdutils_core.h" -#include "cdutils_x.h" -#include "qcd_core.h" -#include "qcd_model.h" -#include "graphic.h" -#include "piqt.h" -#include -#include -#include -#include -#include -#include -#include - -using namespace CDUtils; - - -QStringList CDUtils::getList(const PIVector > & x_list) { - QStringList ret; - piForeachC (PIDeque & p, x_list) - ret << PI2QString(CDCore::pathToString(p)); - return ret; -} - - -PIVector > CDUtils::setList(const QStringList & l) { - PIVector > ret; - foreach (QString s, l) - ret << CDCore::stringToPath(Q2PIString(s)); - return ret; -} - - - - -GDockWidget::GDockWidget(QString title, QMainWindow * p): QDockWidget(title, p) { - da = p; - menu = new QMenu(this); - QAction * a = new QAction(QIcon(":/icons/document-edit.png"), "Rename ...", this); - connect(a, SIGNAL(triggered(bool)), this, SLOT(rename())); - dactions << a; - a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove", this); - connect(a, SIGNAL(triggered(bool)), this, SIGNAL(removeRequest())); - dactions << a; - menu_x = new QMenu(this); - menu_x->setTitle(trUtf8("Remove X")); - graphic = new CDGraphicWidget(); - graphic->graphic()->viewport()->setAcceptDrops(true); - graphic->graphic()->viewport()->installEventFilter(this); - setWidget(graphic); -} - - -void GDockWidget::addX(const CDType & t) { - if (t.cd_type() != CDType::cdX) return; - PIDeque xp = t.path(); - if (x_list.contains(xp)) return; - x_list << xp; - int gind = graphic->graphic()->graphicsCount(); - graphic->graphic()->setGraphicsCount(gind + 1); - graphic->graphic()->setGraphicName(PI2QString(t.pathString().join(".")), gind); -} - - -void GDockWidget::drawX(const PIMap > & data) { - for (int i = 0; i < x_list.size_s(); ++i) { - PIString sp = CDCore::pathToString(x_list[i]); - const PIVector & ch(data[sp]); - for (int j = 0; j < ch.size_s(); ++j) - graphic->graphic()->addPoint(ch[j], i, false); - } - graphic->graphic()->updateGraphics(); -} - - -QByteArray GDockWidget::save() const { - ChunkStream cs; - cs.add(1, windowTitle()) - .add(2, getList(x_list)) - .add(3, graphic->graphic()->save()) - .add(4, graphic->ui->evalHistory->expression()) - .add(5, graphic->ui->evalVisible->expression()); - return cs.data(); -} - - -void GDockWidget::load(QByteArray ba) { - if (ba.isEmpty()) return; - ChunkStream cs(ba); - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: setWindowTitle(cs.getData()); break; - case 2: x_list = setList(cs.getData()); break; - case 3: graphic->graphic()->load(cs.getData()); break; - case 4: graphic->ui->evalHistory->setExpression(cs.getData()); break; - case 5: graphic->ui->evalVisible->setExpression(cs.getData()); break; - default: break; - } - } -} - - -void GDockWidget::changedGlobal() { - for (int i = 0; i < x_list.size_s(); ++i) { - if (!X.exists(x_list[i])) { - x_list.remove(i); - graphic->graphic()->removeGraphic(i); - --i; - continue; - } - graphic->graphic()->setGraphicName(PI2QString(X[x_list[i]].pathString().join(".")), i); - } -} - - -bool GDockWidget::eventFilter(QObject * o, QEvent * e) { - //if (o == graphic->viewport()) { - switch (e->type()) { - case QEvent::DragMove: { - QDragMoveEvent * de = (QDragMoveEvent*)e; - const QMimeData * mime = de->mimeData(); - //qDebug() << "enter" << mime; - if (!mime) break; - if (!mime->text().startsWith("x")) break; - de->setDropAction(Qt::CopyAction); - de->accept(); - return true; - } break; - case QEvent::DragEnter: { - QDragEnterEvent * de = (QDragEnterEvent*)e; - const QMimeData * mime = de->mimeData(); - //qDebug() << "enter" << mime; - if (!mime) break; - if (!mime->text().startsWith("x")) break; - de->setDropAction(Qt::CopyAction); - de->accept(); - return true; - } break; - case QEvent::Drop: { - QDropEvent * de = (QDropEvent*)e; - const QMimeData * mime = de->mimeData(); - if (!mime) break; - //qDebug() << "drop" << mime->text(); - if (!mime->text().startsWith("x")) break; - addX(X[CDCore::stringToPath(Q2PIString(mime->text().mid(1)))]); - de->accept(); - return true; - } break; - default: break; - } - //} - return QWidget::eventFilter(o, e); -} - - -void GDockWidget::contextMenuEvent(QContextMenuEvent * e) { - if (graphic->graphic()->underMouse()) return; - qDeleteAll(menu_x->actions()); - menu_x->clear(); - for (int i = 0; i < graphic->graphic()->graphicsCount(); ++i) { - QPixmap icon(da->iconSize()); - icon.fill(graphic->graphic()->graphic(i).pen.color()); - QAction * a = new QAction(QIcon(icon), graphic->graphic()->graphic(i).name, this); - a->setData(i); - connect(a, SIGNAL(triggered(bool)), this, SLOT(removeX())); - menu_x->addAction(a); - } - QMenu * mwm = da->createPopupMenu(); - menu->clear(); - menu->addActions(dactions); - menu->addMenu(menu_x); - menu->addSeparator(); - menu->addActions(mwm->actions()); - menu->popup(e->globalPos()); - mwm->deleteLater(); -} - - -CDGraphicWidget * GDockWidget::viewportGraphic(QObject * o) const { - if (!o) return 0; - while (!qobject_cast(o) && o) - o = o->parent(); - return qobject_cast(o); -} - - -void GDockWidget::rename() { - QString nn = QInputDialog::getText(this, trUtf8("Rename area"), trUtf8("New area name:"), - QLineEdit::Normal, windowTitle()); - if (nn.isEmpty()) return; - setWindowTitle(nn); -} - - -void GDockWidget::removeX() { - QAction * a = qobject_cast(sender()); - if (!a) return; - int ind = a->data().toInt(); - if (ind < 0 || ind >= x_list.size_s()) return; - x_list.remove(ind); - graphic->graphic()->removeGraphic(ind); -} - - - - -CDGraphics::CDGraphics(QWidget * parent) : QWidget(parent), Ui::CDGraphics() { - setupUi(this); - da = new QMainWindow(); - da->setWindowFlags(frame->windowFlags()); - da->setDockNestingEnabled(true); - layoutMain->addWidget(da); -} - - -CDGraphics::~CDGraphics() { -} - - -void CDGraphics::reset() { - qDeleteAll(docks); - docks.clear(); -} - - -QByteArray CDGraphics::save() const { - ChunkStream cs; - QVector dstates; - foreach (GDockWidget * d, docks) { - dstates << d->save(); - } - cs.add(1, docks.size()) - .add(2, dstates) - .add(3, da->saveState()); - X.lock(); - cs.add(4, getList(X.enabledList())); - X.unlock(); - cs.add(5, buttonConfigVisible->isChecked()); - return cs.data(); -} - - -void CDGraphics::load(QByteArray ba) { - reset(); - if (ba.isEmpty()) return; - ChunkStream cs(ba); - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: { - int s = cs.getData(); - piForTimes (s) - addGraphic(); - } break; - case 2: { - QVector dstates = cs.getData >(); - for (int i = 0; i < piMini(dstates.size(), docks.size()); ++i) - docks[i]->load(dstates[i]); - } break; - case 3: da->restoreState(cs.getData()); break; - case 4: - X.lock(); - X.setEnabledList(setList(cs.getData())); - X.unlock(); - break; - case 5: - buttonConfigVisible->setChecked(cs.getData()); - break; - default: break; - } - } -} - - -GDockWidget * CDGraphics::graphicDock(Graphic * o) const { - if (!o) return 0; - foreach (GDockWidget * d, docks) - if (d->widget() == o) - return d; - return 0; -} - - -void CDGraphics::addGraphic() { - GDockWidget * dw = new GDockWidget(QString("area %1").arg(docks.size()), da); - connect(dw, SIGNAL(removeRequest()), this, SLOT(removeGraphic())); - connect(buttonConfigVisible, SIGNAL(toggled(bool)), dw->graphic, SLOT(setConfigVisible(bool))); - connect(buttonLegendVisible, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setLegendVisible(bool))); - connect(buttonBorderInputsVisible, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setBorderInputsVisible(bool))); - connect(buttonPause, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setPaused(bool))); - dw->graphic->setConfigVisible(buttonConfigVisible->isChecked()); - dw->graphic->graphic()->setLegendVisible(buttonLegendVisible->isChecked()); - dw->graphic->graphic()->setBorderInputsVisible(buttonBorderInputsVisible->isChecked()); - da->addDockWidget(Qt::RightDockWidgetArea, dw); - docks << dw; - for (int i = 0; i < docks.size(); ++i) - docks[i]->setObjectName(QString("dock_%1").arg(i)); -} - - -void CDGraphics::receivedX() { - PIMap > data; - X.lock(); - PIVector > x_list = X.enabledList(); - PIVector ch; - piForeachC (PIDeque & p, x_list) { - CDType & t(X[p]); - if (t.xmode_rec() == CDType::X_Current) - ch.resize(1).fill(t.toDouble()); - else - ch = t.history; - t.history.clear(); - data[CDCore::pathToString(t.path())] = ch; - } - //piCout << data; - X.unlock(); - foreach (GDockWidget * d, docks) - d->drawX(data); -} - - -void CDGraphics::changedGlobal() { - foreach (GDockWidget * d, docks) - d->changedGlobal(); -} - - -void CDGraphics::removeGraphic() { - GDockWidget * d = qobject_cast(sender()); - if (!d) return; - docks.removeAll(d); - d->deleteLater(); - for (int i = 0; i < docks.size(); ++i) - docks[i]->setObjectName(QString("dock_%1").arg(i)); -} - - -void CDGraphics::on_buttonAdd_clicked() { - addGraphic(); -} - - -void CDGraphics::on_buttonClear_clicked() { - foreach (GDockWidget * d, docks) - d->graphic->graphic()->clear(); -} - - -void CDGraphics::on_buttonRemoveAll_clicked() { - qDeleteAll(docks); - docks.clear(); -} diff --git a/test/qcd_utils/pult/cdgraphics.h b/test/qcd_utils/pult/cdgraphics.h deleted file mode 100644 index 33ca214..0000000 --- a/test/qcd_utils/pult/cdgraphics.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef CDGRAPHICS_H -#define CDGRAPHICS_H - -#include -#include -#include -#include "ui_cdgraphics.h" -#include "qcd_graphic.h" -#include - -namespace CDUtils { - class CDType; - class CDSection; - QStringList getList(const PIVector > & x_list); - PIVector > setList(const QStringList & l); -} - -class QMainWindow; -class Graphic; - - - - -class GDockWidget: public QDockWidget { - Q_OBJECT -public: - GDockWidget(QString title = QString(), QMainWindow * p = 0); - - void addX(const CDUtils::CDType & t); - void drawX(const PIMap > & data); - QByteArray save() const; - void load(QByteArray ba); - void changedGlobal(); - - CDGraphicWidget * graphic; - -private: - bool eventFilter(QObject * o, QEvent * e); - void contextMenuEvent(QContextMenuEvent * e); - CDGraphicWidget * viewportGraphic(QObject * o) const; - - QMenu * menu, * menu_x; - QList dactions; - QMainWindow * da; - PIVector > x_list; - -private slots: - void rename(); - void removeX(); - -signals: - void removeRequest(); - -}; - - - - -class CDGraphics : public QWidget, public Ui::CDGraphics -{ - Q_OBJECT -public: - explicit CDGraphics(QWidget *parent = 0); - ~CDGraphics(); - - void reset(); - QByteArray save() const; - void load(QByteArray ba); - -private: - GDockWidget * graphicDock(Graphic * o) const; - void addXToGraphic(const QString & xp, Graphic * g); - void addGraphic(); - - QList docks; - QMainWindow * da; - -public slots: - void receivedX(); - void changedGlobal(); - -private slots: - void removeGraphic(); - void on_buttonAdd_clicked(); - void on_buttonClear_clicked(); - void on_buttonRemoveAll_clicked(); - -signals: - -}; - -#endif // CDGRAPHICS_H diff --git a/test/qcd_utils/pult/cdgraphics.ui b/test/qcd_utils/pult/cdgraphics.ui deleted file mode 100644 index 9974f72..0000000 --- a/test/qcd_utils/pult/cdgraphics.ui +++ /dev/null @@ -1,168 +0,0 @@ - - - CDGraphics - - - - 0 - 0 - 624 - 411 - - - - CD Pult - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::StyledPanel - - - - 0 - - - 0 - - - - - Add new - - - - :/icons/list-add.png:/icons/list-add.png - - - - - - - Clear all - - - - :/icons/edit-clear.png:/icons/edit-clear.png - - - - - - - Remove all - - - - :/icons/edit-delete.png:/icons/edit-delete.png - - - - - - - Remove all - - - - :/icons/layer-visible-off.png - :/icons/layer-visible-on.png:/icons/layer-visible-off.png - - - true - - - true - - - - - - - Remove all - - - - :/icons/legend.png:/icons/legend.png - - - true - - - true - - - - - - - Remove all - - - - :/icons/media-playback-pause.png:/icons/media-playback-pause.png - - - true - - - false - - - - - - - Remove all - - - - :/icons/border-line.png:/icons/border-line.png - - - true - - - false - - - - - - - Qt::Horizontal - - - - 1 - 20 - - - - - - - - - - - - - - - - - diff --git a/test/qcd_utils/pult/cdpult.qrc b/test/qcd_utils/pult/cdpult.qrc deleted file mode 100644 index 76a8d63..0000000 --- a/test/qcd_utils/pult/cdpult.qrc +++ /dev/null @@ -1,16 +0,0 @@ - - - icons/db-export.png - icons/db-import.png - icons/Apps-accessories-calculator-icon.png - icons/dialog-information.png - icons/dialog-cancel.png - icons/dialog-ok-apply.png - icons/timer.png - icons/document-revert.png - icons/flame.png - icons/view-refresh.png - icons/format-stroke-color.png - icons/accessories-text-editor.png - - diff --git a/test/qcd_utils/pult/cdpultwindow.cpp b/test/qcd_utils/pult/cdpultwindow.cpp deleted file mode 100644 index e4acefa..0000000 --- a/test/qcd_utils/pult/cdpultwindow.cpp +++ /dev/null @@ -1,292 +0,0 @@ -#include "edockwidget.h" -#include "cdpultwindow.h" -#include "cdutils_core.h" -#include "cdutils_k.h" -#include "cdutils_x.h" -#include "cdutils_m.h" -#include "qcd_core.h" -#include "qcd_view.h" -#include "qcd_model.h" -#include "qcd_modedialog.h" -#include "chunkstream.h" -#include "qvariantedit.h" -#include "piqt.h" -#include "piqt_highlighter.h" -#include "qcodeedit.h" -#include -#include -#include -#include - -using namespace CDUtils; - - -CDPultWindow::CDPultWindow(QWidget *parent) : EMainWindow(parent), Ui::CDPultWindow() { - setupUi(this); - centralWidget()->hide(); - setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North); - CDCore::instance()->initPult(); - def_config = codeConfig->text(); - checkDefaultConfig->setChecked(true); - new ConfigHighlighter(codeConfig->document()); - widgetK->setType(CDUtils::CDType::cdK); - widgetX->setType(CDUtils::CDType::cdX); - widgetC->setType(CDUtils::CDType::cdC); - widgetM->setType(CDUtils::CDType::cdM); - editFileK->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); - editFileX->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); - editFileC->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); - editFileM->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); - log_icons[CDViewWidget::OKIcon] = QIcon(":/icons/dialog-ok-apply.png"); - log_icons[CDViewWidget::FailIcon] = QIcon(":/icons/dialog-cancel.png"); - log_icons[CDViewWidget::WaitIcon] = QIcon(":/icons/timer.png"); - setRecentMenu(menuOpen_recent); - ribbon = new Ribbon(this); - session.setFile("session_cdpult.conf"); - session.addEntry(this); - session.addEntry(ribbon->tabWidget()); - session.load(); - reset(); - connect(widgetK, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); - connect(widgetX, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); - connect(widgetC, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); - connect(widgetM, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); - connect(widgetK->view, SIGNAL(changedGlobal()), widgetDirectK, SLOT(changedGlobal())); - connect(widgetX->view, SIGNAL(changedGlobal()), widgetGraphics, SLOT(changedGlobal())); - connect(widgetX->view, SIGNAL(receivedX()), widgetGraphics, SLOT(receivedX())); - connect(widgetM->view, SIGNAL(messageReceived(QString,int,QString)), this, SLOT(messageReceived(QString,int,QString))); - QCDCore::instance()->bindWidget(widgetK->view); - QCDCore::instance()->setDirectKEnabled(true); - X.start(); - if (windowState() == Qt::WindowMinimized) - setWindowState(Qt::WindowNoState); -} - - -CDPultWindow::~CDPultWindow() { -} - - -void CDPultWindow::loadFile(const QString & fp) { - load(fp); -} - - -void CDPultWindow::apply(bool sessions) { - CDCore::instance()->stop(); - widgetK->setFile(editFileK->value().value().file); - widgetX->setFile(editFileX->value().value().file); - widgetC->setFile(editFileC->value().value().file); - widgetM->setFile(editFileM->value().value().file); - if (checkDefaultConfig->isChecked()) - CDCore::instance()->initPult(); - else - CDCore::instance()->init(Q2PIString(codeConfig->text()), true); - widgetX->view->startX(); - if (sessions) { - widgetGraphics->load(session_gr); - widgetDirectK->load(session_dk); - if (!session_mw.isEmpty()) - restoreState(session_mw); - X.lock(); - PIVector > x_list = X.enabledList(); - X.unlock(); - piForeachC (PIDeque & p, x_list) - X.enable(X[p]); - ((CDItemModel*)widgetX->view->model())->updateModel(); - widgetX->view->expandAll(); - } - dockCDKView->setVisible(checkHasK->isChecked()); - dockCDXView->setVisible(checkHasX->isChecked()); - dockCDCView->setVisible(checkHasC->isChecked()); - dockCDMView->setVisible(checkHasM->isChecked()); - QMetaObject::invokeMethod(this, "changedDock", Qt::QueuedConnection); -} - - -void CDPultWindow::closeEvent(QCloseEvent *e) { - EMainWindow::closeEvent(e); - if (!e->isAccepted()) - return; - QApplication::closeAllWindows(); - session.save(); - session.setFile(QString()); -} - - -void CDPultWindow::reset(bool full) { - setWindowTitle(QString("CD Pult")); - widgetK->reset(); - setChanged(false); -} - - -bool CDPultWindow::load(const QString & path) { - qApp->setOverrideCursor(Qt::WaitCursor); - QPIConfig conf(path, QIODevice::ReadOnly); - QAD::File f = editFileK->value().value(); - checkSyncFiles->setChecked(false); - editFileK->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_k").value(), f.filter))); - editFileX->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_x").value(), f.filter))); - editFileC->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_c").value(), f.filter))); - editFileM->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_m").value(), f.filter))); - checkSyncFiles->setChecked(conf.getValue("sync_files")); - lineSessionName->setText(conf.getValue("session_name")); - last_icon = conf.getValue("icon_path", "").value(); - setAppIcon(conf.getValue("icon", QByteArray())); - checkHasK->setChecked(conf.getValue("has_k")); - checkHasX->setChecked(conf.getValue("has_x")); - checkHasC->setChecked(conf.getValue("has_c")); - checkHasM->setChecked(conf.getValue("has_m")); - checkDefaultConfig->setChecked(conf.getValue("default_config")); - codeConfig->setText(QByteArray2QString(conf.getValue("config", QByteArray()))); - if (codeConfig->text().isEmpty()) - codeConfig->setText(def_config); - session_gr = conf.getValue("session_gr", QByteArray()); - session_dk = conf.getValue("session_dk", QByteArray()); - session_mw = conf.getValue("session_mw", QByteArray()); - setChanged(false); - file_name = path; - apply(true); - qApp->restoreOverrideCursor(); - return true; -} - - -bool CDPultWindow::save(const QString & path) { - session_gr = widgetGraphics->save(); - session_dk = widgetDirectK->save(); - session_mw = saveState(); - QPIConfig conf(path, QIODevice::ReadWrite); - conf.clear(); - conf.setValue("file_k", editFileK->value().value().file); - conf.setValue("file_x", editFileX->value().value().file); - conf.setValue("file_c", editFileC->value().value().file); - conf.setValue("file_m", editFileM->value().value().file); - conf.setValue("sync_files", checkSyncFiles->isChecked()); - conf.setValue("session_name", lineSessionName->text()); - conf.setValue("icon_path", last_icon); - conf.setValue("icon", appIcon()); - conf.setValue("has_k", checkHasK->isChecked()); - conf.setValue("has_x", checkHasX->isChecked()); - conf.setValue("has_c", checkHasC->isChecked()); - conf.setValue("has_m", checkHasM->isChecked()); - conf.setValue("default_config", checkDefaultConfig->isChecked()); - conf.setValue("config", QString2QByteArray(codeConfig->text())); - conf.setValue("session_gr", session_gr); - conf.setValue("session_dk", session_dk); - conf.setValue("session_mw", session_mw); - file_name = path; - return true; - - //widgetK->setFile(path); - //widgetK->save(); -} - - -void CDPultWindow::loadingSession(QPIConfig & conf) { - setRecentFiles(conf.getValue("recent files", QStringList())); -} - - -void CDPultWindow::savingSession(QPIConfig & conf) { - conf.setValue("recent files", recentFiles()); -} - - -QByteArray CDPultWindow::appIcon() const { - QByteArray ret; - if (icon.isNull()) return ret; - QBuffer buff(&ret); - buff.open(QIODevice::WriteOnly); - icon.save(&buff, "png"); - //qDebug() << "s" << ret.size(); - return ret; -} - - -void CDPultWindow::setAppIcon(QByteArray ba) { - if (ba.isEmpty()) { - icon = QImage(); - setWindowIcon(QIcon()); - return; - } - //qDebug() << "l" << ba.size(); - icon = QImage::fromData(ba); - setWindowIcon(QIcon(QPixmap::fromImage(icon))); - //qDebug() << QApplication::windowIcon().availableSizes(); -} - - -void CDPultWindow::addToLog(CDViewWidget::LogIcon icon, const QString & msg) { - QListWidgetItem * ni = new QListWidgetItem(log_icons[icon], "(" + QTime::currentTime().toString() + ") " + msg); - bool s = listLog->verticalScrollBar()->value() == listLog->verticalScrollBar()->maximum(); - listLog->addItem(ni); - if (s) listLog->scrollToBottom(); -} - - -void CDPultWindow::messageReceived(QString path, int type, QString msg) { - MessageType mt = (MessageType)type; - const CDType & t(M.root()[CDCore::stringToPath(Q2PIString(path))]); - if (t.cd_type() != CDType::cdM) return; - if (mt == MessageBox) - QMessageBox::information(this, windowTitle(), QString("[%1]\n%2").arg(PI2QString(t.name()), msg)); -} - - -void CDPultWindow::on_editFileK_valueChanged(const QVariant & p) { - if (!checkSyncFiles->isChecked()) return; - QFileInfo fi(p.value().file); - if (fi.path().isEmpty()) return; - QString n = fi.baseName(); - QString xn(n), cn(n), mn(n); - if (n.contains("k")) { - xn.replace(n.indexOf("k"), 1, "x"); - cn.replace(n.indexOf("k"), 1, "c"); - mn.replace(n.indexOf("k"), 1, "m"); - } else { - xn += "_x"; - cn += "_c"; - mn += "_m"; - } - QString ext = fi.suffix(), dot, dir; - QString kfn(fi.filePath()); - if (!ext.isEmpty()) { - kfn.chop(ext.size()); - if (kfn.endsWith(".")) { - kfn.chop(1); - dot = "."; - } - } - if (!fi.path().isEmpty() && fi.path() != ".") { - dir = fi.path(); - if (!dir.endsWith("/")) - dir += "/"; - } - QAD::File f = editFileK->value().value(); - f.file = dir + xn + dot + ext; editFileX->setValue(QVariant::fromValue(f)); - f.file = dir + cn + dot + ext; editFileC->setValue(QVariant::fromValue(f)); - f.file = dir + mn + dot + ext; editFileM->setValue(QVariant::fromValue(f)); -} - - -void CDPultWindow::on_buttonSessionApply_clicked() { - apply(false); -} - - -void CDPultWindow::on_lineSessionName_textChanged(const QString & t) { - setWindowTitle(QString("CD Pult - %1").arg(t)); -} - - -void CDPultWindow::on_buttonIcon_clicked() { - QList ifl = QImageReader::supportedImageFormats(); - QStringList sfl; foreach (QByteArray s, ifl) sfl << ("*." + QString(s).toLower()); - QString f = QFileDialog::getOpenFileName(this, tr("Select icon"), last_icon, tr("Images") + " (" + sfl.join(" ") + ")"); - if (f.isEmpty()) return; - last_icon = f; - icon = QImage(last_icon); - setWindowIcon(QIcon(QPixmap::fromImage(icon))); -} diff --git a/test/qcd_utils/pult/cdpultwindow.h b/test/qcd_utils/pult/cdpultwindow.h deleted file mode 100644 index 6e8c499..0000000 --- a/test/qcd_utils/pult/cdpultwindow.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef CDPULTWINDOW_H -#define CDPULTWINDOW_H - -#include "emainwindow.h" -#include "ui_cdpultwindow.h" -#include "cdviewwidget.h" -#include "ribbon.h" -#include "piobject.h" - - -class CDPultWindow : public EMainWindow, public Ui::CDPultWindow -{ - Q_OBJECT - Q_ENUMS(LogIcon) -public: - - explicit CDPultWindow(QWidget *parent = 0); - ~CDPultWindow(); - void loadFile(const QString & fp); - void apply(bool sessions); - -private: - - void closeEvent(QCloseEvent *); - void reset(bool full = false); - bool load(const QString & path); - bool save(const QString & path); - QString loadFilter() {return "Pult session(*.conf)";} - QString saveFilter() {return loadFilter();} - void loadingSession(QPIConfig & conf); - void savingSession(QPIConfig & conf); - - QByteArray appIcon() const; - void setAppIcon(QByteArray ba); - - Ribbon * ribbon; - QMap log_icons; - QByteArray session_gr, session_dk, session_mw; - QString def_config, last_icon; - QImage icon; - -private slots: - void addToLog(CDViewWidget::LogIcon icon, const QString & msg); - void messageReceived(QString path, int type, QString msg); - - void on_editFileK_valueChanged(const QVariant & p); - void on_buttonSessionApply_clicked(); - - void on_lineSessionName_textChanged(const QString & t); - void on_buttonIcon_clicked(); -}; - -#endif // CDPULTWINDOW_H diff --git a/test/qcd_utils/pult/cdpultwindow.ui b/test/qcd_utils/pult/cdpultwindow.ui deleted file mode 100644 index e7a1904..0000000 --- a/test/qcd_utils/pult/cdpultwindow.ui +++ /dev/null @@ -1,612 +0,0 @@ - - - CDPultWindow - - - - 0 - 0 - 798 - 593 - - - - CD Pult - - - true - - - QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks - - - - - - 0 - 0 - 798 - 24 - - - - - Main - - - - Open recent - - - - :/icons/document-open-recent.png:/icons/document-open-recent.png - - - - - - - - - - - - - :/icons/document-edit.png:/icons/document-edit.png - - - K - - - 1 - - - - - 0 - - - - - - - - - - - :/icons/dialog-information.png:/icons/dialog-information.png - - - Log - - - 8 - - - - - - - QAbstractItemView::NoEditTriggers - - - false - - - true - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectRows - - - QAbstractItemView::ScrollPerPixel - - - QAbstractItemView::ScrollPerPixel - - - - - - - - - - :/icons/qvariantedit.png:/icons/qvariantedit.png - - - X - - - 1 - - - - - - - - - - - - - :/icons/configure.png:/icons/configure.png - - - Session - - - 2 - - - - - - - Apply - - - - :/icons/dialog-ok-apply.png:/icons/dialog-ok-apply.png - - - - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Name: - - - - - - - - - - - - Select icon... - - - - :/icons/view-preview.png:/icons/view-preview.png - - - - - - - - - K file: - - - - - - - - - - X file: - - - - - - - - - - C file: - - - - - - - - - - Sync files - - - - - - - - - K - - - - - - - X - - - - - - - C - - - - - - - M - - - - - - - - - Default config - - - - - - - M file: - - - - - - - - - - - - - 0 - 0 - - - - include = ip.conf -[connection] -device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s -[] - - - - - DejaVu Sans Mono - 9 - - - - - - - - - - - :/icons/legend.png:/icons/legend.png - - - C - - - 1 - - - - - - - - - - - - - :/icons/format-stroke-color.png:/icons/format-stroke-color.png - - - Graphics - - - 8 - - - - - - - - - - - - - :/icons/tools-wizard.png:/icons/tools-wizard.png - - - Direct K - - - 8 - - - - - - - - - - - - - :/icons/accessories-text-editor.png:/icons/accessories-text-editor.png - - - M - - - 1 - - - - - - - - - - - - - :/icons/document-open.png:/icons/document-open.png - - - Open... - - - Ctrl+O - - - - - - :/icons/document-save.png:/icons/document-save.png - - - Save - - - Ctrl+S - - - - - - :/icons/document-save-as.png:/icons/document-save-as.png - - - Save As... - - - Ctrl+Shift+S - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EMainWindow - QMainWindow -
    emainwindow.h
    - 1 -
    - - CLineEdit - QLineEdit -
    clineedit.h
    -
    - - QCodeEdit - QWidget -
    qcodeedit.h
    -
    - - QVariantEdit - QWidget -
    qvariantedit.h
    -
    - - EDockWidget - QDockWidget -
    edockwidget.h
    - 1 -
    - - CDViewWidget - QWidget -
    cdviewwidget.h
    - 1 -
    - - CDGraphics - QWidget -
    cdgraphics.h
    - 1 -
    - - CDDirectK - QWidget -
    cddirectk.h
    - 1 -
    -
    - - - - - - - - - actionSave - triggered() - CDPultWindow - saveFile() - - - -1 - -1 - - - 399 - 299 - - - - - actionSaveAs - triggered() - CDPultWindow - saveAsFile() - - - -1 - -1 - - - 399 - 299 - - - - - actionOpen - triggered() - CDPultWindow - openFile() - - - -1 - -1 - - - 399 - 299 - - - - - checkSyncFiles - toggled(bool) - editFileX - setDisabled(bool) - - - 786 - 220 - - - 786 - 151 - - - - - checkSyncFiles - toggled(bool) - editFileC - setDisabled(bool) - - - 786 - 220 - - - 786 - 172 - - - - - checkDefaultConfig - toggled(bool) - codeConfig - setDisabled(bool) - - - 786 - 276 - - - 581 - 304 - - - - - checkSyncFiles - toggled(bool) - editFileM - setDisabled(bool) - - - 767 - 205 - - - 767 - 187 - - - - -
    diff --git a/test/qcd_utils/pult/cdviewwidget.cpp b/test/qcd_utils/pult/cdviewwidget.cpp deleted file mode 100644 index a01c87a..0000000 --- a/test/qcd_utils/pult/cdviewwidget.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "cdviewwidget.h" -#include "cdutils_core.h" -#include "qcd_core.h" -#include "qcd_model.h" -#include "qcd_modedialog.h" -#include "qvariantedit.h" -#include - - -CDViewWidget::CDViewWidget(QWidget * parent) : QWidget(parent), Ui::CDViewWidget() { - qRegisterMetaType("CDViewWidget::LogIcon"); - setupUi(this); - connect(view, SIGNAL(sendSucceed()), this, SLOT(sended())); - connect(view, SIGNAL(receiveSucceed()), this, SLOT(received())); - connect(view, SIGNAL(sendFailed()), this, SLOT(sendFailed())); - connect(view, SIGNAL(receiveFailed()), this, SLOT(receiveFailed())); -} - - -CDViewWidget::~CDViewWidget() { -} - - -void CDViewWidget::reset() { - setFile(""); -} - - -void CDViewWidget::setType(int t) { - view->setType((CDUtils::CDType::cdT)t); - tl_u = view->typeLetter().toUpper(); - tl_l = view->typeLetter().toLower(); - view->refresh(); -} - - -void CDViewWidget::setFile(const QString & f) { - view->setFile(f); - view->load(); -} - - -void CDViewWidget::on_buttonSend_clicked() { - if (view->inProgress()) {addToLog(WaitIcon, "processing..."); return;} - addToLog(WaitIcon, "Sending " + tl_u + "..."); - view->send(); -} - - -void CDViewWidget::on_buttonReceive_clicked() { - if (view->inProgress()) {addToLog(WaitIcon, "processing..."); return;} - addToLog(WaitIcon, "Receiving " + tl_u + "..."); - view->receive(); -} - - -void CDViewWidget::on_buttonLoad_clicked() { - view->load(); -} - - -void CDViewWidget::on_buttonSave_clicked() { - view->save(); -} - - -void CDViewWidget::on_buttonParse_clicked() { - QString path = QFileDialog::getOpenFileName(this, "Select header file", "", - QString("%1 Description(%2_description.h);;Headers(*.h)").arg(tl_u, tl_l)); - if (path.isEmpty()) return; - CDUtils::UpdateModeFlags mode = CDUtils::SaveByName; - if (!view->root()->isEmpty()) { - QCDModeDialog cdm; - if (cdm.exec() != QDialog::Accepted) return; - mode = cdm.mode(); - } - view->buildFromHeader(path, mode); -} diff --git a/test/qcd_utils/pult/cdviewwidget.h b/test/qcd_utils/pult/cdviewwidget.h deleted file mode 100644 index 3145666..0000000 --- a/test/qcd_utils/pult/cdviewwidget.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef CDVIEWWIDGET_H -#define CDVIEWWIDGET_H - -#include -#include "ui_cdviewwidget.h" - - -class CDViewWidget : public QWidget, public Ui::CDViewWidget -{ - Q_OBJECT -public: - explicit CDViewWidget(QWidget *parent = 0); - ~CDViewWidget(); - - enum LogIcon {NoIcon, OKIcon, FailIcon, WaitIcon}; - - void reset(); - void setType(int t); - void setFile(const QString & f); - -private: - QString tl_u, tl_l; - -private slots: - void sended() {addToLog(OKIcon, tl_u + " " + tr("sended succesfull"));} - void received() {addToLog(OKIcon, tl_u + " " + tr("received succesfull"));} - void sendFailed() {addToLog(FailIcon, tl_u + " " + tr("NOT sended"));} - void receiveFailed() {addToLog(FailIcon, tl_u + " " + tr("NOT received"));} - void on_buttonSend_clicked(); - void on_buttonReceive_clicked(); - void on_buttonLoad_clicked(); - void on_buttonSave_clicked(); - void on_buttonParse_clicked(); - //void on_buttonCalculate_clicked(); - -signals: - void addToLog(CDViewWidget::LogIcon icon, const QString & msg); - -}; - -#endif // CDVIEWWIDGET_H diff --git a/test/qcd_utils/pult/cdviewwidget.ui b/test/qcd_utils/pult/cdviewwidget.ui deleted file mode 100644 index 5b0ff0b..0000000 --- a/test/qcd_utils/pult/cdviewwidget.ui +++ /dev/null @@ -1,176 +0,0 @@ - - - CDViewWidget - - - - 0 - 0 - 689 - 459 - - - - CD Pult - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - Send - - - - :/icons/flame.png:/icons/flame.png - - - - - - - Receive - - - - :/icons/document-revert.png:/icons/document-revert.png - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - Load - - - - :/icons/document-open.png:/icons/document-open.png - - - - - - - Save - - - - :/icons/document-save.png:/icons/document-save.png - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - Update description ... - - - - :/icons/view-refresh.png:/icons/view-refresh.png - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 1 - 20 - - - - - - - - - - - - Qt::CustomContextMenu - - - QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed - - - true - - - QAbstractItemView::DragOnly - - - QAbstractItemView::ScrollPerPixel - - - QAbstractItemView::ScrollPerPixel - - - - - - - - CDView - QTreeView -
    qcd_view.h
    -
    -
    - - - - - -
    diff --git a/test/qcd_utils/pult/icons/Apps-accessories-calculator-icon.png b/test/qcd_utils/pult/icons/Apps-accessories-calculator-icon.png deleted file mode 100644 index 37a303523edfb12dc581be38e29835d52f44661b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9661 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

    `1wA0LNvU0ZM46;*CiDnG|ED(~o^Jn(`L=>A(e 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 C`rU~D diff --git a/test/qcd_utils/pult/icons/accessories-text-editor.png b/test/qcd_utils/pult/icons/accessories-text-editor.png deleted file mode 100644 index 1d9dca26221995e8939ccb7294cec284ed6ae5ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36782 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

    (C4f(<`o2|&R5 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 VWO1`r?N10izTStu8V^M0{s$gRkv#wa diff --git a/test/qcd_utils/pult/icons/db-export.png b/test/qcd_utils/pult/icons/db-export.png deleted file mode 100644 index 7cfba88eec612b651f35917fbc58b7f36097c0ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33510 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 Am;e9( diff --git a/test/qcd_utils/pult/icons/db-import.png b/test/qcd_utils/pult/icons/db-import.png deleted file mode 100644 index 85bc12150113ef00ead53e8d7ce9d6bd29766382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32628 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

    ;L|6r4RSE-sF3Rh%wo#tl~R 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

    graphic.h
    - - - EvalSpinBox - QWidget -
    evalspinbox.h
    -
    - - - - - evalHistory - valueChanged(double) - graphic - setHistorySize(double) - - - 148 - 363 - - - 156 - 297 - - - - - evalVisible - valueChanged(double) - graphic - setMaxVisibleTime(double) - - - 345 - 361 - - - 342 - 337 - - - - - diff --git a/test/qcd_utils/qcd_modedialog.cpp b/test/qcd_utils/qcd_modedialog.cpp deleted file mode 100644 index 9612588..0000000 --- a/test/qcd_utils/qcd_modedialog.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include "qcd_modedialog.h" -#include "ui_qcd_modedialog.h" - - -QCDModeDialog::QCDModeDialog(QWidget * parent): QDialog(parent) { - ui = new Ui::QCDModeDialog(); - ui->setupUi(this); -} - - -QCDModeDialog::~QCDModeDialog() { - delete ui; -} - - -CDUtils::UpdateModeFlags QCDModeDialog::mode() const { - CDUtils::UpdateModeFlags ret = 0; - if (ui->checkSaveIndex->isChecked()) ret |= CDUtils::SaveByIndex; - if (ui->checkSaveName->isChecked()) ret |= CDUtils::SaveByName; - if (ui->checkMerge->isChecked()) ret |= CDUtils::Merge; - return ret; -} - - -void QCDModeDialog::changeEvent(QEvent *e) { - QDialog::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - - -void QCDModeDialog::on_checkSaveIndex_clicked(bool checked) { - if (!checked) return; - ui->checkSaveName->setChecked(false); -} - - -void QCDModeDialog::on_checkSaveName_clicked(bool checked) { - if (!checked) return; - ui->checkSaveIndex->setChecked(false); -} diff --git a/test/qcd_utils/qcd_modedialog.h b/test/qcd_utils/qcd_modedialog.h deleted file mode 100644 index 702cd20..0000000 --- a/test/qcd_utils/qcd_modedialog.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef QCD_MODEDIALOG_H -#define QCD_MODEDIALOG_H - -#include -#include - -namespace Ui { - class QCDModeDialog; -} - -class QCDModeDialog: public QDialog -{ - Q_OBJECT -public: - explicit QCDModeDialog(QWidget * parent = 0); - ~QCDModeDialog(); - - CDUtils::UpdateModeFlags mode() const; - -protected: - void changeEvent(QEvent *e); - - Ui::QCDModeDialog * ui; - -private slots: - void on_checkSaveIndex_clicked(bool checked); - void on_checkSaveName_clicked(bool checked); - -}; - -#endif // QCD_MODEDIALOG_H diff --git a/test/qcd_utils/qcd_modedialog.ui b/test/qcd_utils/qcd_modedialog.ui deleted file mode 100644 index 0c3d1dd..0000000 --- a/test/qcd_utils/qcd_modedialog.ui +++ /dev/null @@ -1,98 +0,0 @@ - - - QCDModeDialog - - - - 0 - 0 - 251 - 152 - - - - Update description mode - - - - - - Save by index - - - - - - - Save by name - - - - - - - Merge - - - - - - - Qt::Vertical - - - - 20 - 1 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - QCDModeDialog - accept() - - - 106 - 131 - - - 101 - 146 - - - - - buttonBox - rejected() - QCDModeDialog - reject() - - - 182 - 127 - - - 169 - 146 - - - - - diff --git a/test/qcd_utils/qcd_model.cpp b/test/qcd_utils/qcd_model.cpp deleted file mode 100644 index f9264d1..0000000 --- a/test/qcd_utils/qcd_model.cpp +++ /dev/null @@ -1,460 +0,0 @@ -#include "qcd_model.h" -#include "cdutils_interface.h" -#include "cdutils_core.h" -#include "cdutils_x.h" -#include "piqt.h" -#include -#include -#include -#include -#include "qvariantedit.h" -#include "qad_types.h" - - -using namespace CDUtils; - -// CDKItem - -CDItem::CDItem(CDUtils::Interface * i, int _index, CDItem::CDItemType type, CDItem *parent) { - interface = i; - index_ = _index; - parent_ = parent; - type_ = type; - item_count = 0; - expanded = true; -} - - -CDItem::~CDItem() { - qDeleteAll(childs); -} - - -QVariant CDItem::data(int column, int role) const { - if (role == Qt::BackgroundRole) { - switch (type_) { - case ItemCDType: { - CDType & t(interface->section(buildPath())[index_]); - if (t.errorString().isEmpty()) return QBrush(QColor(255, 250, 230)); - else return QBrush(QColor(255, 128, 128)); - } - case ItemCDSection: return QBrush(QColor(230, 250, 230)); - } - } - if (role == Qt::CheckStateRole && type_ == ItemCDType) { - CDType & t(interface->section(buildPath())[index_]); - if (column == cValue && t.cd_type() == CDType::cdK) { - if (t.type() == "b") return t.toBool() ? Qt::Checked : Qt::Unchecked; - else QVariant(); - } - if (column == cName_Cmd && t.cd_type() == CDType::cdX) { - return t.isSelectedX() ? Qt::Checked : Qt::Unchecked; - } - } - if (role == Qt::ToolTipRole && type_ == ItemCDType) { - CDType & t(interface->section(buildPath())[index_]); - return PI2QString(t.errorString()); - } - if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant(); - PIDeque path = buildPath(); - CDSection & rs = interface->section(path); - CDSection s; - switch (type_) { - case ItemCDType: - switch (column) { - case cID: return QString::number(index_); - case cName_Cmd: return PI2QString(rs[index_].name()); - case cType: return stringType(rs[index_].type()); - case cXMode: return QVariant::fromValue(xModeEnum(rs[index_].xmode())); - case cXAvg: return rs[index_].avg(); - case cExpression: return PI2QString(rs[index_].formula()); - case cValue: return value(rs[index_], role); - case cComment: return PI2QString(rs[index_].comment()); - default: break; - } - break; - case ItemCDSection: - s = rs.section(index_); -// piCout << rs.name << rs.alias << s.name << s.alias; - switch (column) { - case cID: return QString("[") + QString::number(index_) + QString("]"); - case cName_Cmd: return PI2QString(s.alias); - case cType: return PI2QString(s.name); - default: break; - } - break; - } - return QVariant(); -} - - -QVariant CDItem::value(CDType & t, int role) const { - if (t.type() == "f") return t.toDouble(); - if (t.type() == "n") return t.toInt(); - if (t.type() == "b") return t.toBool(); - if (t.type() == "e") { - QAD::Enum et = PI2QADEnum(t.enumValues()); - et.selectValue(t.toInt()); - if (role == Qt::EditRole) return QVariant::fromValue(et); - else return et.selectedName(); - } - return PI2QString(t.value()); -} - - -bool CDItem::setData(int column, const QVariant & value) { - if (type_ == ItemCDType) { - CDType & t(interface->section(buildPath())[index_]); - if ((column == cExpression || column == cValue) && (t.cd_type() == CDType::cdK)) { - interface->section(buildPath())[index_].setValue(Q2PIString(value.toString())); - interface->calculate(); - return true; - } - if (t.cd_type() == CDType::cdX) { - switch (column) { - case cName_Cmd: - X.setEnabled(t, value.toBool()); - return true; - case cXMode: - t.setXMode((CDType::XMode)value.toInt()); - return true; - case cXAvg: - t.setAvg(piMax(value.toInt(), 1)); - return true; - default: break; - } - } - } - return false; -} - - -PIDeque CDItem::buildPath() const { - PIDeque path; - CDItem * p = parent_; - while (p) { - path.push_front(p->index_); - p = p->parent_; - } - path.take_front(); - return path; -} - - -QString CDItem::stringType(const PIString & t) const { - QString n = PI2QString(t); - if (n.isEmpty()) return QString(""); - switch (n[0].toLatin1()) { - case 'l': return QString("list"); break; - case 'b': return QString("bool"); break; - case 'n': return QString("int"); break; - case 'f': return QString("double"); break; - case 'c': return QString("color"); break; - case 'r': return QString("rect"); break; - case 'a': return QString("rect"); break; - case 'p': return QString("point"); break; - case 'v': return QString("vector"); break; - case 'i': return QString("IP"); break; - case 'e': return QString("enum"); break; - case 'F': return QString("file"); break; - case 'D': return QString("dir"); break; - } - return QString("string"); -} - - -QAD::Enum CDItem::xModeEnum(int v) const { - QAD::Enum ret; - ret << QAD::Enumerator(CDType::X_Current, "Current") - << QAD::Enumerator(CDType::X_All_Avg, "All, Averaging"); - ret.selectValue(v); - return ret; -} - - -// CDKDelegate - -CDDelegate::CDDelegate(QObject *parent) : QStyledItemDelegate(parent) { -} - - -void CDDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { - CDItem * item = ((CDItemModel*)index.model())->getItem(index); - if (item) { - if (item->itemType() == CDItem::ItemCDType && item->interface->cdType() == CDType::cdC) { - QStyleOptionButton bo; - bo.direction = option.direction; - bo.fontMetrics = option.fontMetrics; - bo.palette = option.palette; - bo.rect = option.rect; - bo.state = option.state;// & ~(QStyle::State_HasFocus | QStyle::State_MouseOver); - bo.text = item->data(1, Qt::DisplayRole).toString(); - QWidget * v = (QWidget*)(painter->device()); - if (v) { - QPoint cp = v->mapFromGlobal(QCursor::pos()); - if (bo.rect.contains(cp, true)) { - //bo.state |= QStyle::State_MouseOver; - if (qApp->mouseButtons().testFlag(Qt::LeftButton)) - bo.state |= QStyle::State_On; - } - } - qApp->style()->drawControl(QStyle::CE_PushButton, &bo, painter); - return; - } - } - QStyledItemDelegate::paint(painter, option, index); - -} - - -QWidget * CDDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { - return new QVariantEdit(parent); -} - - -void CDDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { - QVariantEdit *edit = static_cast(editor); - edit->setValue(index.model()->data(index, Qt::EditRole)); -} - - -void CDDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { - QVariantEdit *edit = static_cast(editor); - QVariant v = edit->value(); - if (v.canConvert()) { - QAD::Enum et = v.value(); - model->setData(index, et.selectedValue(), Qt::EditRole); - } else model->setData(index, v, Qt::EditRole); -} - - -void CDDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { - editor->setGeometry(option.rect); -} - - -QSize CDDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { - QSize s = QStyledItemDelegate::sizeHint(option, index); - s.setWidth(s.width() + 20); - return s; -} - - -// CDItemModel - -CDItemModel::CDItemModel(int type_, QObject *parent) : QAbstractItemModel(parent) { - interface = new Interface((CDType::cdT)type_); - root = 0; - internalRebuild(); -} - - -CDItemModel::~CDItemModel() { - delete root; - delete interface; -} - - -QVariant CDItemModel::data(const QModelIndex &index, int role) const { - if (!index.isValid()) return QVariant(); - CDItem * item = getItem(index); - return item->data(index.column(), role); -} - - -QVariant CDItemModel::headerData(int section, Qt::Orientation orientation, int role) const { - if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { - switch (section) { - case cID: return trUtf8("Index"); - case cName_Cmd: return interface->cdType() == CDType::cdC ? trUtf8("Command") : trUtf8("Name"); - case cType: return trUtf8("Type"); - case cXMode: return trUtf8("Mode"); - case cXAvg: return trUtf8("Averaging"); - case cExpression: return trUtf8("Expression"); - case cValue: return trUtf8("Value"); - case cComment: return trUtf8("Comment"); - } - } - return QVariant(); -} - - -QModelIndex CDItemModel::index(int row, int column, const QModelIndex &parent) const { - if (parent.isValid() && parent.column() != cID) return QModelIndex(); - CDItem * p = getItem(parent); - CDItem * c = p->childs.value(row, 0); - if (c) return createIndex(row, column, c); - else return QModelIndex(); -} - - -QModelIndex CDItemModel::parent(const QModelIndex &index) const { - if (!index.isValid()) return QModelIndex(); - CDItem * c = getItem(index); - CDItem * p = c->parent_; - if (p == root) return QModelIndex(); - return createIndex(p->parent_->childs.indexOf(p), cID, p); -} - - -int CDItemModel::rowCount(const QModelIndex &parent) const { - CDItem * p = getItem(parent); - return p->childs.count(); -} - - -int CDItemModel::columnCount(const QModelIndex &parent) const { - return cLastColumn; -} - - -Qt::ItemFlags CDItemModel::flags(const QModelIndex & index) const { - if (!index.isValid()) return 0; - Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable; - CDItem * item = getItem(index); - if (!item) return 0; - if (item->type_ == CDItem::ItemCDType) { - CDType & t(interface->section(item->buildPath())[item->index_]); - if (t.cd_type() == CDType::cdK) { - if (index.column() == cExpression || index.column() == cValue) - f |= Qt::ItemIsEditable; - if (index.column() == cValue && t.type() == "b") - f |= Qt::ItemIsUserCheckable; - if (index.column() == cName_Cmd) - f |= Qt::ItemIsDragEnabled; - } - if (t.cd_type() == CDType::cdX) { - if (index.column() == cXMode || index.column() == cXAvg) - f |= Qt::ItemIsEditable; - if (index.column() == cName_Cmd) - f |= Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled; - } - } - return f; -} - - -bool CDItemModel::setData(const QModelIndex & index, const QVariant & value, int role) { - if (role == Qt::CheckStateRole && (index.column() == cName_Cmd || index.column() == cValue)) { - CDItem * item = getItem(index); - if (item->type_ == CDItem::ItemCDType) { - CDType & t(interface->section(item->buildPath())[item->index_]); - if (index.column() == cValue && (t.cd_type() == CDType::cdK)) { - if (t.type() == "b") { - bool result = item->setData(index.column(), PI2QString(PIString::fromBool(value.toBool()))); - QModelIndex rin(CDItemModel::index(index.row(), cExpression, index.parent())); - emit dataChanged(rin, rin); - return result; - } - } - if (index.column() == cName_Cmd && (t.cd_type() == CDType::cdX)) { - bool result = item->setData(index.column(), value); - //QModelIndex rin(CDItemModel::index(index.row(), 1, index.parent())); - //emit dataChanged(rin, rin); - return result; - } - } - } - if (role != Qt::EditRole) return false; - CDItem * item = getItem(index); - bool result = item->setData(index.column(), value); - if (result) { - QModelIndex rin(CDItemModel::index(index.row(), cExpression, index.parent())); - emit dataChanged(rin, rin); - emit dataChanged(index, index); - } - return result; -} - - -QMimeData * CDItemModel::mimeData(const QModelIndexList & indexes) const { - if (indexes.size() == 1) { - QModelIndex index = indexes[0]; - if (index.isValid()/* && interface->cdType() == CDType::cdX*/) { - CDItem * item = getItem(index); - if (item) { - CDType & t(interface->section(item->buildPath())[item->index_]); - QMimeData * mime = new QMimeData(); - mime->setText(PI2QString(CDCore::instance()->typeLetter(interface->cdType()) + - CDCore::pathToString(t.path()))); - return mime; - } - } - } - return QAbstractItemModel::mimeData(indexes); -} - - -void CDItemModel::rebuildModel() { - beginResetModel(); - internalRebuild(); - endResetModel(); -} - - -void CDItemModel::buildItem(CDItem * it, CDSection & r) { - //piCout << "build item" << r.name << r.alias; - PIMap::iterator i; - for (i = r.cd.begin(); i != r.cd.end(); ++i) { - it->childs << new CDItem(interface, i.key(), CDItem::ItemCDType, it); - } - it->item_count = it->childs.size(); - PIMap::iterator j; - for (j = r.s.begin(); j != r.s.end(); ++j) { - it->childs << new CDItem(interface, j.key(), CDItem::ItemCDSection, it); - buildItem(it->childs.back(), j.value()); - } -} - - -void CDItemModel::updateModel() { - beginResetModel(); - endResetModel(); -} - - -void CDItemModel::internalRebuild() { - //qDebug() << "[CDKItemModel]" << "internalRebuild()"; - if (root) delete root; - root = new CDItem(interface, 0, CDItem::ItemCDSection, 0); - CDSection & r = interface->root(); - buildItem(root, r); -} - - -CDItem * CDItemModel::getItem(const QModelIndex &index) const { - if (index.isValid()) { - CDItem * item = static_cast(index.internalPointer()); - if (item) return item; - } - return root; -} - - -QModelIndex CDItemModel::indexByPath(const PIDeque & path, int column) const { - if (path.isEmpty()) return QModelIndex(); - CDItem * item = root; - //piCout << path << "..."; - bool ok = false; - for (int i = 0; i < path.size_s() - 1; ++i) { - ok = false; - foreach (CDItem * j, item->childs) - if (j->type_ == CDItem::ItemCDSection && j->index_ == path[i]) { - item = j; - ok = true; - break; - } - if (!ok) return QModelIndex(); - } - ok = false; - foreach (CDItem * j, item->childs) - if (j->type_ == CDItem::ItemCDType && j->index_ == path.back()) { - item = j; - ok = true; - break; - } - if (!ok || !item->parent_) return QModelIndex(); - QModelIndex ret = createIndex(item->parent_->childs.indexOf(item), column, item); - //piCout << path << Q2PIString(item->data(cName_Cmd, Qt::DisplayRole).toString()) << getItem(ret)->buildPath(); - return ret; -} diff --git a/test/qcd_utils/qcd_model.h b/test/qcd_utils/qcd_model.h deleted file mode 100644 index 4021015..0000000 --- a/test/qcd_utils/qcd_model.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef QCD_MODEL_H -#define QCD_MODEL_H - -#include -#include -#include -#include "pistring.h" - -namespace CDUtils { - class CDType; - class CDSection; - class Interface; - - enum Column { - cID , - cName_Cmd , - cType , - cXMode , - cXAvg , - cExpression, - cValue , - cComment , - cLastColumn, - }; -} - -namespace QAD { - struct Enum; -} - -class CDItemModel; - - -class CDItem { - friend class CDItemModel; - friend class CDView; -public: - enum CDItemType{ItemCDType, ItemCDSection}; - CDItem(CDUtils::Interface * interface, int _index, CDItemType type, CDItem * parent); - ~CDItem(); - QVariant data(int column, int role) const; - QVariant value(CDUtils::CDType & t, int role) const; - bool setData(int column, const QVariant & value); - CDItemType itemType() const {return type_;} - PIDeque buildPath() const; - int index() const {return index_;} - - CDUtils::Interface * interface; - bool expanded; - -private: - QString stringType(const PIString & t) const; - QAD::Enum xModeEnum(int v) const; - - CDItem * parent_; - int index_, item_count; - CDItemType type_; - QList childs; -}; - - -class CDDelegate : public QStyledItemDelegate -{ - Q_OBJECT -public: - CDDelegate(QObject *parent = 0); - - void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const; - QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; - void setEditorData(QWidget *editor, const QModelIndex &index) const; - void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; - void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; - QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; - -}; - - -class CDItemModel : public QAbstractItemModel { - Q_OBJECT - friend class CDView; -public: - explicit CDItemModel(int type_, QObject *parent = 0); - ~CDItemModel(); - - QVariant data(const QModelIndex & index, int role) const; - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - Qt::ItemFlags flags(const QModelIndex &index) const; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - QMimeData * mimeData(const QModelIndexList & indexes) const; - CDItem * getItem(const QModelIndex & index) const; - QModelIndex indexByPath(const PIDeque & path, int column = CDUtils::cID) const; - - void buildItem(CDItem * it, CDUtils::CDSection &r); - -public slots: - void rebuildModel(); - void updateModel(); - -private: - void internalRebuild(); - - CDUtils::Interface * interface; - CDItem * root; - -signals: - -}; - -#endif // QCD_MODEL_H diff --git a/test/qcd_utils/qcd_view.cpp b/test/qcd_utils/qcd_view.cpp deleted file mode 100644 index 1edec79..0000000 --- a/test/qcd_utils/qcd_view.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include -#include -#include "cdutils_k.h" -#include "cdutils_x.h" -#include "cdutils_c.h" -#include "cdutils_m.h" -#include "cdutils_core.h" -#include "qcd_view.h" -#include "qcd_model.h" -#include "piqt.h" -#include "pifile.h" - -using namespace CDUtils; - - -CDView::CDView(QWidget * parent) : QTreeView(parent) { - type_ = -1; - model_ = 0; - connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(indexClicked(QModelIndex))); - connect(this, SIGNAL(_qcd_sendFailed()), this, SLOT(cd_sendFailed()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcd_sendSucceed()), this, SLOT(cd_sendSucceed()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcd_receiveFailed()), this, SLOT(cd_receiveFailed()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcd_receiveSucceed()), this, SLOT(cd_receiveSucceed()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcd_receivedX()), this, SLOT(cd_receivedX()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcd_changedGlobal()), this, SLOT(cd_changedGlobal()), Qt::QueuedConnection); -} - - -CDView::~CDView() { - if (model_) delete model_; - model_ = 0; -} - - -void CDView::setType(int cdt) { - if (cdt < 0) return; - if (type_ >= 0) return; - type_ = cdt; - switch ((CDType::cdT)type_) { - case CDType::cdK: - CONNECTU(&K, sended, this, pi_cd_sendSucceed); - CONNECTU(&K, sendFailed, this, pi_cd_sendFailed); - CONNECTU(&K, received, this, pi_cd_receiveSucceed); - CONNECTU(&K, receiveFailed, this, pi_cd_receiveFailed); - CONNECTU(&K, changedGlobal, this, pi_cd_changedGlobal); - break; - case CDType::cdX: - CONNECTU(&X, sended, this, pi_cd_sendSucceed); - CONNECTU(&X, sendFailed, this, pi_cd_sendFailed); - CONNECTU(&X, received, this, pi_cd_receiveSucceed); - CONNECTU(&X, receiveFailed, this, pi_cd_receiveFailed); - CONNECTU(&X, receivedX, this, pi_cd_receivedX); - CONNECTU(&X, changedGlobal, this, pi_cd_changedGlobal); - break; - case CDType::cdC: - CONNECTU(&C, sended, this, pi_cd_sendSucceed); - CONNECTU(&C, sendFailed, this, pi_cd_sendFailed); - CONNECTU(&C, received, this, pi_cd_receiveSucceed); - CONNECTU(&C, receiveFailed, this, pi_cd_receiveFailed); - CONNECTU(&C, changedGlobal, this, pi_cd_changedGlobal); - break; - case CDType::cdM: - CONNECTU(&M, sended, this, pi_cd_sendSucceed); - CONNECTU(&M, sendFailed, this, pi_cd_sendFailed); - CONNECTU(&M, received, this, pi_cd_receiveSucceed); - CONNECTU(&M, receiveFailed, this, pi_cd_receiveFailed); - CONNECTU(&M, changedGlobal, this, pi_cd_changedGlobal); - CONNECTU(&M, messageReceived, this, pi_cd_messageReceived); - break; - default: break; - } - -} - - -void CDView::mousePressEvent(QMouseEvent * e) { - if (type_ == CDType::cdC) { - QModelIndex i = indexAt(e->pos()); - if (i.isValid() && i.column() == cName_Cmd) - update(i); - } - QTreeView::mousePressEvent(e); -} - - -void CDView::mouseReleaseEvent(QMouseEvent * e) { - if (type_ == CDType::cdC) { - QModelIndex i = indexAt(e->pos()); - if (i.isValid() && i.column() == cName_Cmd) - update(i); - } - QTreeView::mouseReleaseEvent(e); -} - - -void CDView::currentChanged(const QModelIndex & cur, const QModelIndex & prev) { - if (type_ == CDType::cdC) { - if (prev.isValid() && prev.column() == cName_Cmd) - update(prev); - } - QTreeView::currentChanged(cur, prev); -} - - -void CDView::refresh() { - if (type_ < 0) return; - if (!model_) { - model_ = new CDItemModel(type_); - setModel(model_); - setItemDelegateForColumn(type_ == CDType::cdC ? cName_Cmd : cValue, new CDDelegate()); - if (type_ == CDType::cdX) - setItemDelegateForColumn(cXMode, new CDDelegate()); - } - model_->rebuildModel(); - switch ((CDType::cdT)type_) { - case CDType::cdK: - setColumnHidden(cXMode, true); - setColumnHidden(cXAvg, true); - break; - case CDType::cdX: - setColumnHidden(cExpression, true); - break; - case CDType::cdC: - case CDType::cdM: - setColumnHidden(cType, true); - setColumnHidden(cXMode, true); - setColumnHidden(cXAvg, true); - setColumnHidden(cExpression, true); - setColumnHidden(cValue, true); - break; - default: break; - } - expandAll(); - for (int i = 0; i < model_->columnCount(); i++) resizeColumnToContents(i); -} - - -void CDView::refreshValues() { - if (!model_) return; - model_->dataChanged(model_->index(0, 0), model_->index(model_->columnCount() - 1, model_->rowCount() - 1)); -} - - -void CDView::setFile(const QString & filename) { - switch ((CDType::cdT)type_) { - case CDType::cdK: K.setFileName(Q2PIString(filename)); break; - case CDType::cdX: X.setFileName(Q2PIString(filename)); break; - case CDType::cdC: C.setFileName(Q2PIString(filename)); break; - case CDType::cdM: M.setFileName(Q2PIString(filename)); break; - default: break; - } -} - - -bool CDView::inProgress() const { - switch ((CDType::cdT)type_) { - case CDType::cdK: return K.inProgress(); break; - case CDType::cdX: return X.inProgress(); break; - case CDType::cdC: return C.inProgress(); break; - case CDType::cdM: return M.inProgress(); break; - default: break; - } - return false; -} - - -void CDView::startX(double freq) { - switch ((CDType::cdT)type_) { - case CDType::cdX: X.start(freq); break; - default: break; - } -} - - -CDSection * CDView::root() { - return CDCore::instance()->root((CDType::cdT)type_); -} - - -QString CDView::typeLetter() const { - return PI2QString(CDCore::instance()->typeLetter((CDType::cdT)type_)); -} - - -void CDView::send() { - busyStatusChanged(true); - switch ((CDType::cdT)type_) { - case CDType::cdK: K.send(); break; - case CDType::cdX: X.send(); break; - case CDType::cdC: C.send(); break; - case CDType::cdM: M.send(); break; - default: break; - } -} - - -void CDView::receive() { - busyStatusChanged(true); - switch ((CDType::cdT)type_) { - case CDType::cdK: K.request(); break; - case CDType::cdX: X.request(); break; - case CDType::cdC: C.request(); break; - case CDType::cdM: M.request(); break; - default: break; - } -} - - -void CDView::save() { - switch ((CDType::cdT)type_) { - case CDType::cdK: K.writeFile(); break; - case CDType::cdX: X.writeFile(); break; - case CDType::cdC: C.writeFile(); break; - case CDType::cdM: M.writeFile(); break; - default: break; - } -} - - -void CDView::load() { - switch ((CDType::cdT)type_) { - case CDType::cdK: - K.readFile(); - K.calculate(); - break; - case CDType::cdX: - X.readFile(); - X.calculate(); - break; - case CDType::cdC: - C.readFile(); - C.calculate(); - break; - case CDType::cdM: - M.readFile(); - M.calculate(); - break; - default: break; - } - refresh(); -} - - -void CDView::clear() { - //piCout << "clearK"; - switch ((CDType::cdT)type_) { - case CDType::cdK: K.root() = CDSection(); break; - case CDType::cdX: X.root() = CDSection(); break; - case CDType::cdC: C.root() = CDSection(); break; - case CDType::cdM: M.root() = CDSection(); break; - default: break; - } - refresh(); -} - - -void CDView::buildFromHeader(const QString & description, int mode) { - if (description.isEmpty()) return; - PIString desc_file = Q2PIString(QDir::current().relativeFilePath(description)); - PIFile f(desc_file, PIIODevice::ReadOnly); - switch ((CDType::cdT)type_) { - case CDType::cdK: K.update(&f, mode); break; - case CDType::cdX: X.update(&f, mode); break; - case CDType::cdC: C.update(&f, mode); break; - case CDType::cdM: M.update(&f, mode); break; - default: break; - } - refresh(); -} - - -void CDView::calculate() { - switch ((CDType::cdT)type_) { - case CDType::cdK: K.calculate(); break; - case CDType::cdX: X.calculate(); break; - case CDType::cdC: C.calculate(); break; - case CDType::cdM: M.calculate(); break; - default: break; - } -} - - -void CDView::indexClicked(const QModelIndex & i) { - if (!model_ || !i.isValid() || type_ != CDType::cdC || i.column() != cName_Cmd) return; - CDItem * item = model_->getItem(i); - if (!item) return; - if (item->itemType() != CDItem::ItemCDType) return; - CDType & t(model_->interface->section(item->buildPath())[item->index()]); - C.sendCommand(t); - emit commandSended(PI2QString(t.pathString().join("."))); - //piCout << t; - qDebug() << PI2QString(t.pathString().join(".")); -} - - -void CDView::cd_sendFailed() { - busyStatusChanged(false); - emit messageStatus("send failed"); - emit sendFailed(); -} - - -void CDView::cd_sendSucceed() { - busyStatusChanged(false); - emit messageStatus("send success"); - emit sendSucceed(); -} - - -void CDView::cd_receiveFailed() { - busyStatusChanged(false); - emit messageStatus("receive failed"); - emit receiveFailed(); -} - - -void CDView::cd_receiveSucceed() { - refresh(); - busyStatusChanged(false); - emit messageStatus("receive success"); - emit receiveSucceed(); -} - - -void CDView::cd_receivedX() { - X.lock(); - PIVector > xl = X.enabledList(); - //piCout << "X" << xl.size(); - piForeachC (PIDeque & x, xl) { - CDType & t(X[x]); - //piCout << t; - //piCout << t.path(); - if (t.cd_type() != CDType::cdX) continue; - update(model_->indexByPath(t.path(), cValue)); - //piCout << CDCore::pathToString(t.path()) << t.toDouble() << "model"; - //qDebug() << "val" << model_->data(model_->indexByPath(t.path(), cValue), Qt::DisplayRole).toDouble(); - } - X.unlock(); - emit receivedX(); -} - - -void CDView::cd_changedGlobal() { - emit changedGlobal(); -} - - -void CDView::pi_cd_messageReceived(PIDeque path, int type, PIString msg) { - QMetaObject::invokeMethod(this, "messageReceived", Qt::QueuedConnection, - Q_ARG(QString, PI2QString(CDCore::pathToString(path))), - Q_ARG(int, type), - Q_ARG(QString, PI2QString(msg))); -} diff --git a/test/qcd_utils/qcd_view.h b/test/qcd_utils/qcd_view.h deleted file mode 100644 index de21062..0000000 --- a/test/qcd_utils/qcd_view.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef QCD_VIEW_H -#define QCD_VIEW_H - -#include "piobject.h" -#include - -namespace CDUtils { - class CDType; - class CDSection; -} - -class CDItemModel; - -class CDView: public QTreeView, public PIObject -{ - Q_OBJECT - PIOBJECT(CDView) -public: - explicit CDView(QWidget *parent = 0); - ~CDView(); - - void setType(int cdt); - void setFile(const QString & filename); - bool inProgress() const; - void startX(double freq = 20.); - CDUtils::CDSection * root(); - QString typeLetter() const; - - CDItemModel * CDModel() {return model_;} - -protected: - void mousePressEvent(QMouseEvent * ); - void mouseReleaseEvent(QMouseEvent * ); - void currentChanged(const QModelIndex & cur, const QModelIndex & prev); - -public slots: - void refresh(); - void refreshValues(); - void send(); - void receive(); - void save(); - void load(); - void clear(); - void buildFromHeader(const QString & description, int mode = 2); - void calculate(); - -private slots: - void indexClicked(const QModelIndex & i); - void cd_sendFailed(); - void cd_sendSucceed(); - void cd_receiveFailed(); - void cd_receiveSucceed(); - void cd_receivedX(); - void cd_changedGlobal(); - -private: - EVENT_HANDLER(void, pi_cd_sendFailed) {emit _qcd_sendFailed();} - EVENT_HANDLER(void, pi_cd_sendSucceed) {emit _qcd_sendSucceed();} - EVENT_HANDLER(void, pi_cd_receiveFailed) {emit _qcd_receiveFailed();} - EVENT_HANDLER(void, pi_cd_receiveSucceed) {emit _qcd_receiveSucceed();} - EVENT_HANDLER(void, pi_cd_receivedX) {emit _qcd_receivedX();} - EVENT_HANDLER(void, pi_cd_changedGlobal) {emit _qcd_changedGlobal();} - EVENT_HANDLER3(void, pi_cd_messageReceived, PIDeque, path, int, type, PIString, msg); - - CDItemModel * model_; - int type_; - -signals: - void sendFailed(); - void sendSucceed(); - void receiveFailed(); - void receiveSucceed(); - void receivedX(); - void changedGlobal(); - void messageStatus(QString msg); - void commandSended(QString msg); - void messageReceived(QString path, int type, QString msg); - void busyStatusChanged(bool busy); - - void _qcd_sendFailed(); // PRIVATE - void _qcd_sendSucceed(); // PRIVATE - void _qcd_receiveFailed(); // PRIVATE - void _qcd_receiveSucceed(); // PRIVATE - void _qcd_receivedX(); // PRIVATE - void _qcd_changedGlobal(); // PRIVATE - -}; - -#endif // QCD_VIEW_H diff --git a/test/qglview/CMakeLists.txt b/test/qglview/CMakeLists.txt deleted file mode 100644 index 48fed03..0000000 --- a/test/qglview/CMakeLists.txt +++ /dev/null @@ -1,61 +0,0 @@ -project(qglview) -cmake_minimum_required(VERSION 2.6) -if (POLICY CMP0017) - cmake_policy(SET CMP0017 NEW) -endif() -if (IBPROJECT) - include(SDKMacros) -else() - option(LIB "System install" 0) - option(DEBUG "Build with -g3" 0) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall") - if (DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") - endif() -endif() -if (MINGW) - find_package(MinGW REQUIRED) -endif() -find_package(QAD REQUIRED) -find_package(OpenGL REQUIRED) -include_directories(${QAD_INCLUDES}) -find_qt(${QtVersions} Core Gui OpenGL Xml) -qt_sources(SRC) -qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) -qt_add_library(${PROJECT_NAME} SHARED out_CPP) -qt_target_link_libraries(${PROJECT_NAME} qad_utils qad_widgets ${OPENGL_LIBRARIES}) -message(STATUS "Building ${PROJECT_NAME}") -if (LIBPROJECT) - sdk_install("qad" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}") -else() - if (LIB) - if (WIN32) - qt_install(FILES ${H} DESTINATION ${MINGW_INCLUDE}/qad) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION QtBin) - else() - qt_install(FILES ${H} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/qad) - qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - endif() - message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") - else() - qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin) - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") - endif() -endif() -foreach(_v ${_QT_VERSIONS_}) - set(MULTILIB_qglview_SUFFIX_Qt${_v} ${_v}) - set(MULTILIB_qglview_SUFFIX_Qt${_v} ${_v} PARENT_SCOPE) -endforeach() -list(APPEND QT_MULTILIB_LIST qglview) -if (NOT DEFINED ANDROID_PLATFORM) - if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/plugin") - add_subdirectory(plugin) - endif() -endif() - -qt_sources(test_SRC DIR "qglview_test") -qt_wrap(${test_SRC} CPPS test_CPP) -qt_add_executable(qglview_test test_CPP) -qt_target_link_libraries(qglview_test ${PROJECT_NAME}) diff --git a/test/qglview/glcamera.cpp b/test/qglview/glcamera.cpp deleted file mode 100644 index 84ee029..0000000 --- a/test/qglview/glcamera.cpp +++ /dev/null @@ -1,260 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "gltypes.h" -#include "qglview.h" - - -Camera::Camera() { - type_ = glCamera; - fov_ = 60.; - angle_limit_lower_xy = 0.f; - angle_limit_upper_xy = 360.f; - angles_.setY(270.f); - depth_start = 0.1f; - depth_end = 1000.f; - mirror_x = mirror_y = false; -} - - -void Camera::anglesFromPoints() { - QVector3D dv = aim_ - pos_, tv; - tv = QVector3D(dv.x(), dv.y(), 0.); - angles_.setZ(atan2f(tv.x(), tv.y()) * rad2deg); - angles_.setY(piClamp(atan2f(tv.length(), dv.z()) * rad2deg, angle_limit_lower_xy, angle_limit_upper_xy) + 180.f); -} - - -void Camera::apply(const GLfloat & aspect) { - glMatrixMode(GL_PROJECTION); - if (aspect <= 1.f) - glScalef(aspect, aspect, 1.f); - QMatrix4x4 pm = glMatrixPerspective(fov_, aspect, depth_start, depth_end); - //pm.perspective(fov_, aspect, depth_start, depth_end); - //qDebug() << pm;// << glMatrixPerspective(fov_, aspect, depth_start, depth_end); - //qDebug() << pm; - setGLMatrix(pm); - glMatrixMode(GL_MODELVIEW); - pm.setToIdentity(); - pm.translate(0., 0., -distance()); - pm.rotate(angles_.y(), 1., 0., 0.); - pm.rotate(angles_.x(), 0., 1., 0.); - pm.rotate(angles_.z(), 0., 0., 1.); - //pm.translate(-aim_); - if (parent_) { - QMatrix4x4 pmat = parent_->worldTransform(); - offset_ = pmat.column(3).toVector3D(); - pmat(0, 3) = pmat(1, 3) = pmat(2, 3) = 0.; - pmat.translate(aim_); - pm *= pmat.inverted(); - //qDebug() << pmat; - } - setGLMatrix(pm); - //qDebug() << angles_; -} - - -QMatrix4x4 Camera::offsetMatrix() const { - QMatrix4x4 ret; - ret.translate(parent_ ? -offset_ : -aim_); - return ret; -} - -/* -void Camera::localTransform(QMatrix4x4 & m) { - return; - if (parent_) - m *= parent_->worldTransform(); - QMatrix4x4 ret; - //qDebug() << "local camera"; - ret.translate(0., 0., -distance()); - ret.rotate(angles_.y(), 1., 0., 0.); - ret.rotate(angles_.x(), 0., 1., 0.); - ret.rotate(angles_.z(), 0., 0., 1.); - //m *= ret.inverted(); -} -*/ - -void Camera::assign(const Camera & c) { - pos_ = c.pos_; - aim_ = c.aim_; - fov_ = c.fov_; - angles_ = c.angles_; - angle_limit_lower_xy = c.angle_limit_lower_xy; - angle_limit_upper_xy = c.angle_limit_upper_xy; - buildTransform(); -} - - -void Camera::panZ(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = QVector2D(dv.x(), dv.y()).length(); - angles_.setZ(angles_.z() + a); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tl, cosf(angles_.z() * deg2rad) * tl, dv.z()); - aim_ = pos_ + dv; - buildTransform(); -} - - -void Camera::panXY(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = dv.length(), tc; - angles_.setY(angles_.y() + a); - angles_.setY(piClamp(angles_.y(), angle_limit_lower_xy, angle_limit_upper_xy)); - tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -cosf(angles_.y() * deg2rad)); - aim_ = pos_ + dv * tl; - buildTransform(); -} - - -void Camera::rotateZ(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = QVector2D(dv.x(), dv.y()).length(); - angles_.setZ(angles_.z() + a); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tl, cosf(angles_.z() * deg2rad) * tl, dv.z()); - aim_ = pos_ + dv; - buildTransform(); -} - - -void Camera::rotateXY(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = dv.length(), tc; - angles_.setY(angles_.y() + a); - angles_.setY(piClamp(angles_.y(), angle_limit_lower_xy, angle_limit_upper_xy)); - tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -cosf(angles_.y() * deg2rad)); - aim_ = pos_ + dv * tl; - buildTransform(); -} - - -void Camera::orbitZ(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = QVector2D(dv.x(), dv.y()).length(); - angles_.setZ(angles_.z() + a); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tl, cosf(angles_.z() * deg2rad) * tl, dv.z()); - pos_ = aim_ - dv; - buildTransform(); -} - - -void Camera::orbitXY(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = dv.length(), tc; - angles_.setY(angles_.y() + a); - angles_.setY(piClamp(angles_.y(), angle_limit_lower_xy, angle_limit_upper_xy)); - tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -cosf(angles_.y() * deg2rad)); - pos_ = aim_ - dv * tl; - buildTransform(); -} - - -void Camera::setAngleZ(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = QVector2D(dv.x(), dv.y()).length(); - angles_.setZ(a); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tl, cosf(angles_.z() * deg2rad) * tl, dv.z()); - aim_ = pos_ + dv; - buildTransform(); -} - - -void Camera::setAngleXY(const float & a) { - QVector3D dv = aim_ - pos_; - float tl = dv.length(), tc; - angles_.setY(a); - tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -cosf(angles_.y() * deg2rad)); - //pos_ = aim_ - dv; - aim_ = pos_ + dv * tl; - buildTransform(); - //anglesFromPoints(); -} - - -void Camera::moveForward(const float & x, bool withZ) { - QVector3D dv;// = aim_ - pos_; - float tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, 0.); - if (withZ) dv.setZ(-cosf(angles_.y() * deg2rad)); - dv.normalize(); - dv *= x; - pos_ += dv; - aim_ += dv; - buildTransform(); -} - - -void Camera::moveLeft(const float & x, bool withZ) { - QVector3D dv;// = aim_ - pos_; - float tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad - float(M_PI_2)) * tc, cosf(angles_.z() * deg2rad - float(M_PI_2)) * tc, 0.f); - if (withZ) dv.setZ(-sinf(angles_.x() * deg2rad)); - dv.normalize(); - dv *= x; - pos_ += dv; - aim_ += dv; - buildTransform(); -} - - -void Camera::moveUp(const float & x, bool onlyZ) { - QVector3D dv; - if (onlyZ) - dv = QVector3D(0., 0., x); - else { - float tc = cosf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -sinf(angles_.y() * deg2rad)); - dv.normalize(); - dv *= x; - } - pos_ += dv; - aim_ += dv; - buildTransform(); -} - - -void Camera::flyCloser(const float & s) { - QVector3D dv = aim_ - pos_; - float tl = dv.length() / (1.f + s), tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -cosf(angles_.y() * deg2rad)); - pos_ = aim_ - dv * tl; - buildTransform(); -} - - -void Camera::flyFarer(const float & s) { - QVector3D dv = aim_ - pos_; - float tl = dv.length() * (1.f + s), tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -cosf(angles_.y() * deg2rad)); - pos_ = aim_ - dv * tl; - buildTransform(); -} - - -void Camera::flyToDistance(const float & d) { - QVector3D dv = aim_ - pos_; - float tc = -sinf(angles_.y() * deg2rad); - dv = QVector3D(sinf(angles_.z() * deg2rad) * tc, cosf(angles_.z() * deg2rad) * tc, -cosf(angles_.y() * deg2rad)); - pos_ = aim_ - dv * d; - buildTransform(); -} - diff --git a/test/qglview/glcamera.h b/test/qglview/glcamera.h deleted file mode 100644 index b427b16..0000000 --- a/test/qglview/glcamera.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLCAMERA_H -#define GLCAMERA_H - -#include "globject.h" - -class Camera; - -//extern QMatrix4x4 globCameraMatrix; -//extern Camera * currentCamera; - -class Camera: public GLObjectBase -{ - friend class QGLView; - friend class GLParticlesSystem; - friend QDataStream & operator <<(QDataStream & s, const GLObjectBase * p); - friend QDataStream & operator >>(QDataStream & s, GLObjectBase *& p); -public: - Camera(); - - void setPos(const QVector3D & p) {pos_ = p; anglesFromPoints(); buildTransform();} - void setAim(const QVector3D & p) {aim_ = p; anglesFromPoints(); buildTransform();} - void move(const QVector3D & p) {pos_ += p; aim_ += p; buildTransform();} - void move(const float & x, const float & y = 0., const float & z = 0.) {pos_ += QVector3D(x, y, z); aim_ += QVector3D(x, y, z); buildTransform();} - void moveForward(const float & x, bool withZ = true); - void moveBackward(const float & x, bool withZ = true) {moveForward(-x, withZ);} - void moveLeft(const float & x, bool withZ = true); - void moveRight(const float & x, bool withZ = true) {moveLeft(-x, withZ);} - void moveUp(const float & x, bool onlyZ = false); - void moveDown(const float & x, bool onlyZ = false) {moveUp(-x, onlyZ);} - void rotateZ(const float & a); - void rotateXY(const float & a); - void rotateRoll(const float & a) {angles_.setX(angles_.x() + a); buildTransform();} - void orbitZ(const float & a); - void orbitXY(const float & a); - void panZ(const float & a); - void panXY(const float & a); - void setFOV(const float & f) {fov_ = f;} - void setAngles(const QVector3D & a) {setRotation(a);} - void setAngleZ(const float & a); - void setAngleXY(const float & a); - void setAngleRoll(const float & a) {angles_.setX(a); buildTransform();} - void setAngleLowerLimitXY(const float & a) {angle_limit_lower_xy = a; buildTransform();} - void setAngleUpperLimitXY(const float & a) {angle_limit_upper_xy = a; buildTransform();} - void setAngleLimitsXY(const float & lower, const float & upper) {angle_limit_lower_xy = lower; angle_limit_upper_xy = upper; buildTransform();} - void setDepthStart(const float & d) {depth_start = d;} - void setDepthEnd(const float & d) {depth_end = d;} - void setMirrorX(bool yes) {mirror_x = yes;} - void setMirrorY(bool yes) {mirror_y = yes;} - void flyCloser(const float & s); - void flyFarer(const float & s); - void flyToDistance(const float & d); - - QVector3D aim() const {return aim_;} - QVector3D angles() const {return rotation();} - QVector3D direction() const {return (aim_ - pos_).normalized();} - QVector3D directionXY() const {QVector3D tv = aim_ - pos_; return QVector3D(tv.x(), tv.y(), 0.).normalized();} - float FOV() const {return fov_;} - float distance() const {return (pos_ - aim_).length();} - float angleZ() const {return angles_.z();} - float angleXY() const {return angles_.y();} - float angleRoll() const {return angles_.x();} - float angleLowerLimitXY() const {return angle_limit_lower_xy;} - float angleUpperLimitXY() const {return angle_limit_upper_xy;} - float depthStart() const {return depth_start;} - float depthEnd() const {return depth_end;} - bool isMirrorX() const {return mirror_x;} - bool isMirrorY() const {return mirror_y;} - void anglesFromPoints(); - void apply(const GLfloat & aspect = 1.); - void assign(const Camera & c); - - QMatrix4x4 offsetMatrix() const; - -private: - QVector3D aim_, offset_; - GLfloat fov_; - GLfloat depth_start; - GLfloat depth_end; - GLfloat angle_limit_lower_xy; - GLfloat angle_limit_upper_xy; - bool mirror_x; - bool mirror_y; - -}; - -#endif // GLCAMERA_H diff --git a/test/qglview/glframebuffer.cpp b/test/qglview/glframebuffer.cpp deleted file mode 100644 index 57004a4..0000000 --- a/test/qglview/glframebuffer.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "glframebuffer.h" - - -GLFramebuffer::GLFramebuffer(int colorAttachments_, bool withDepth, GLenum colorFormat_, GLenum target__) { - is_depth = withDepth; - color_format = colorFormat_; - target_ = target__; - colors.fill(0, colorAttachments_); - fbo = drbo = 0; - tex_d = 0; - wid = hei = 0; - is_changed = false; -} - - -GLFramebuffer::~GLFramebuffer() { - deleteGLFramebuffer(fbo); - deleteGLRenderbuffer(drbo); - for (int i = 0; i < colors.size(); ++i) - deleteGLTexture(colors[i]); - deleteGLTexture(tex_d); -} - - -void GLFramebuffer::resize(int width, int height, bool force) { - if ((wid == width) && (hei == height) && !force) return; - initializeOpenGLFunctions(); - wid = width; - hei = height; - deleteGLFramebuffer(fbo); - glGenFramebuffers(1, &fbo); - glBindFramebuffer(GL_FRAMEBUFFER, fbo); - for (int i = 0; i < colors.size(); ++i) { - deleteGLTexture(colors[i]); - createGLTexture(colors[i], width, height, color_format, target_); - glTexParameteri(target_, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(target_, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(target_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(target_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(target_, GL_TEXTURE_MAX_LEVEL, 4); - glTexParameteri(target_, GL_GENERATE_MIPMAP_SGIS, GL_FALSE); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, target_, colors[i], 0); - } - if (is_depth) { - deleteGLTexture(tex_d); - deleteGLRenderbuffer(drbo); - glGenRenderbuffers(1, &drbo); - glBindRenderbuffer(GL_RENDERBUFFER, drbo); - glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, drbo); - createGLTexture(tex_d, width, height, GL_DEPTH_COMPONENT); - glTexParameteri(target_, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(target_, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(target_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(target_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(target_, GL_GENERATE_MIPMAP_SGIS, GL_FALSE); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, target_, tex_d, 0); - } - glBindFramebuffer(GL_FRAMEBUFFER, 0); - is_changed = false; -} - - -QImage GLFramebuffer::grab() const { - //glReadPixels(0, 0, wid, hei, GL_RGBA, ); - //QImage ret(); - return QImage(); -} - - -void GLFramebuffer::bind() { - if (is_changed) resize(wid, hei); - if (fbo == 0) return; - initializeOpenGLFunctions(); - //glFlush(); - glGetIntegerv(GL_VIEWPORT, prev_view); - //glClearError(); - glBindFramebuffer(GL_FRAMEBUFFER, fbo); - //qDebug() << QString::number(glGetError(), 16); - QVector buffers; - for (int i = 0; i < colors.size(); ++i) - buffers << GL_COLOR_ATTACHMENT0 + i; - glDrawBuffers(buffers.size(), buffers.constData()); - glReadBuffer(GL_COLOR_ATTACHMENT0); - //glDrawBuffer(GL_COLOR_ATTACHMENT0); - glViewport(0, 0, wid, hei); -} - - -void GLFramebuffer::release() { - is_changed = false; - if (fbo == 0) return; - //glFlush(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glViewport(prev_view[0], prev_view[1], prev_view[2], prev_view[3]); -} - - -void GLFramebuffer::setWriteBuffer(int index) { - //QVector buffers; buffers << GL_COLOR_ATTACHMENT0 + index; - glDrawBuffer(GL_COLOR_ATTACHMENT0 + index); - //glDrawBuffers(buffers.size(), buffers.constData()); -} - - -void GLFramebuffer::setWriteBuffers(int * indeces, int count) { - QVector buffers; - for (int i = 0; i < count; ++i) - buffers << GL_COLOR_ATTACHMENT0 + indeces[i]; - glDrawBuffers(buffers.size(), buffers.constData()); -} - - -void GLFramebuffer::bindColorTextures() { - for (int i = colors.size() - 1; i >= 0; --i) { - glActiveTexture(GL_TEXTURE0 + i); - glBindTexture(GL_TEXTURE_2D, colors[i]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - } -} - - -void GLFramebuffer::bindDepthTexture(int channel) { - glActiveTexture(GL_TEXTURE0 + channel); - glBindTexture(GL_TEXTURE_2D, tex_d); -} diff --git a/test/qglview/glframebuffer.h b/test/qglview/glframebuffer.h deleted file mode 100644 index a1d2e8f..0000000 --- a/test/qglview/glframebuffer.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLFRAMEBUFFER_H -#define GLFRAMEBUFFER_H - -#include "gltypes.h" -#include - - -class GLFramebuffer : protected QOpenGLExtraFunctions -{ -public: - GLFramebuffer(int colorAttachments = 1, bool withDepth = true, GLenum colorFormat = GL_RGBA8, GLenum target = GL_TEXTURE_2D); - virtual ~GLFramebuffer(); - - GLuint id() const {return fbo;} - GLuint colorTexture(int index = 0) const {return colors[index];} - GLenum colorFormat() const {return color_format;} - GLuint depthTexture() const {return tex_d;} - GLenum target() const {return target_;} - int width() const {return wid;} - int height() const {return hei;} - QSize size() const {return QSize(wid, hei);} - QImage grab() const; - - void resize(int width, int height, bool force = false); - void bind(); - void release(); - void setReadBuffer(int index) {glReadBuffer(GL_COLOR_ATTACHMENT0 + index);} - void setWriteBuffer(int index); - void setWriteBuffers(int * indeces, int count); - void setColorFormat(GLenum format) {color_format = format; is_changed = true;} - - void copyDepthFrom(GLuint tex) {;} - void bindColorTextures(); - void bindDepthTexture(int channel); - -private: - void deleteGLRenderbuffer(GLuint & drbo) {if (drbo != 0) glDeleteRenderbuffers(1, &drbo); drbo = 0;} - void deleteGLFramebuffer(GLuint & fbo) {if (fbo != 0) glDeleteFramebuffers(1, &fbo); fbo = 0;} - - bool is_depth, is_changed; - QVector colors; - GLenum color_format, target_; - GLuint fbo, drbo, tex_d; - GLint prev_view[4], wid, hei; - -}; - -#endif // GLFRAMEBUFFER_H diff --git a/test/qglview/glmaterial.cpp b/test/qglview/glmaterial.cpp deleted file mode 100644 index 683c2bb..0000000 --- a/test/qglview/glmaterial.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "gltypes.h" -#include "qglview.h" - -QStringList GLTextureManagerBase::search_pathes("."); - - -bool GLCubeTexture::create() { - //qDebug("create"); - destroy(); - glGenTextures(1, &id_); - glBindTexture(GL_TEXTURE_CUBE_MAP, id_); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR/*_MIPMAP_LINEAR*/); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - //glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); - //glClearError(); - glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, format_, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, format_, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, format_, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, format_, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, format_, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, format_, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - //qDebug() << glGetError(); - changed_ = false; - return id_ > 0; -} - - -void GLCubeTexture::load() { - if (isEmpty()) return; - create(); - if (!path(0).isEmpty()) loadFront(path(0)); - if (!path(1).isEmpty()) loadBack(path(1)); - if (!path(2).isEmpty()) loadLeft(path(2)); - if (!path(3).isEmpty()) loadRight(path(3)); - if (!path(4).isEmpty()) loadTop(path(4)); - if (!path(5).isEmpty()) loadBottom(path(5)); -} - - -void GLCubeTexture::loadFromDirectory(const QString & dir) { - QDir d(dir); QFileInfoList sl; - sl = d.entryInfoList(QStringList("front.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) loadFront(sl[0].absoluteFilePath()); - sl = d.entryInfoList(QStringList("back.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) loadBack(sl[0].absoluteFilePath()); - sl = d.entryInfoList(QStringList("left.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) loadLeft(sl[0].absoluteFilePath()); - sl = d.entryInfoList(QStringList("right.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) loadRight(sl[0].absoluteFilePath()); - sl = d.entryInfoList(QStringList("top.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) loadTop(sl[0].absoluteFilePath()); - sl = d.entryInfoList(QStringList("bottom.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) loadBottom(sl[0].absoluteFilePath()); -} - - -void GLCubeTexture::loadPathesFromDirectory(const QString & dir) { - QDir d(dir); QFileInfoList sl; - sl = d.entryInfoList(QStringList("front.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) pathes[0] = sl[0].absoluteFilePath(); - sl = d.entryInfoList(QStringList("back.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) pathes[1] = sl[0].absoluteFilePath(); - sl = d.entryInfoList(QStringList("left.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) pathes[2] = sl[0].absoluteFilePath(); - sl = d.entryInfoList(QStringList("right.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) pathes[3] = sl[0].absoluteFilePath(); - sl = d.entryInfoList(QStringList("top.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) pathes[4] = sl[0].absoluteFilePath(); - sl = d.entryInfoList(QStringList("bottom.*"), QDir::Files | QDir::NoDotAndDotDot); if (!sl.isEmpty()) pathes[5] = sl[0].absoluteFilePath(); -} - - - -QString GLTextureManagerBase::findFile(const QString & path) { - return ::findFile(path, search_pathes); -} - - -GLuint GLTextureManagerBase::loadTexture(const QString & path, bool ownership, bool bump) { - QString p = findFile(path); - if (p.isEmpty()) return 0; - int tid = textureID(p, bump); - if (tid > 0) { - //qDebug() << "[TextureManager] Found" << path << "as" << tid; - return tid; - } - QImage image(p); - if (bump) convertToNormal(image); - //qDebug() << p << image.width() << image.height() << image.format() << bump; - ///tid = currentQGLView->bindTexture(image, GL_TEXTURE_2D/*, GL_RGBA, __GLContext__::MipmapBindOption*/); - //GLuint tid = 0; - GLuint _tid = tid; - createGLTexture(_tid, image);///currentQGLView->bindTexture(image, GL_TEXTURE_2D); - tid = _tid; - if (tid == 0) { - qDebug() << "[TextureManager] Can`t load" << p; - return tid; - } - qDebug() << "[TextureManager] Loaded" << p << "as" << tid; - if (ownership) tex_ids[bump ? 1 : 0].insert(p, tid); - return tid; -} - - -GLuint GLTextureManagerBase::loadTexture(const QImage & im, bool ownership, bool bump) { - if (im.isNull()) return 0; - QImage image(im); - if (bump) convertToNormal(image); - GLuint tid = 0; - createGLTexture(tid, im);///currentQGLView->bindTexture(image, GL_TEXTURE_2D); - if (tid == 0) { - qDebug() << "[TextureManager] Can`t load image"; - return tid; - } - //qDebug() << "[TextureManager] Loaded image as" << tid; - if (ownership) tex_ids[bump ? 1 : 0].insert(QString(), tid); - return tid; -} - - -void GLTextureManagerBase::reloadTexture(GLuint tid, const QString & path) { - QString p = findFile(path); - if (p.isEmpty() || (tid == 0)) return; - QImage image(p); - createGLTexture(tid, image); - if (tid == 0) { - qDebug() << "[TextureManager] Can`t load" << p; - return; - } - qDebug() << "[TextureManager] Reloaded" << p << "as" << tid; -} - - -void GLTextureManagerBase::reloadTexture(GLuint tid, const QImage & im) { - if (im.isNull() || (tid == 0)) return; - QImage image(im); - createGLTexture(tid, image); - qDebug() << "[TextureManager] Reloaded" << tid; -} - - -Vector3d colorVector(QRgb c) { - return Vector3d(((uchar*)(&c))[0] / 255., ((uchar*)(&c))[1] / 255., ((uchar*)(&c))[2] / 255.); -} - - -void GLTextureManagerBase::convertToNormal(QImage & im) { - if (im.isNull()) return; - QImage sim = im.convertToFormat(QImage::Format_ARGB32); - float sum[3] = {0., 0., 0.}; - llong a = 0; - const uchar * sd = sim.constBits(); - for (int i = 0; i < sim.height(); i++) { - for (int j = 0; j < sim.width(); j++) { - sum[2] += sd[a] / 255.f - 0.5f; ++a; - sum[1] += sd[a] / 255.f - 0.5f; ++a; - sum[0] += sd[a] / 255.f - 0.5f; ++a; - ++a; - } - } - float wh = sim.width() * sim.height(); - sum[0] /= wh; - sum[1] /= wh; - sum[2] /= wh; - qDebug() << sum[0] << sum[1] << sum[2]; - if ((qAbs(sum[0]) <= 0.05f) && (qAbs(sum[1]) <= 0.05f) && (sum[2] >= 0.25f)) /// already normal - return; - qDebug() << "convert to bump"; - QImage dim = QImage(sim.width(), sim.height(), QImage::Format_ARGB32); - int tx, ty, w = sim.width(), h = sim.height(); - a = 0; - uchar * dd = dim.bits(); - for (int i = 0; i < sim.height(); i++) { - for (int j = 0; j < sim.width(); j++) { - tx = j - 1; - tx = tx < 0 ? w + tx : tx % w; - ty = i - 1; - ty = ty < 0 ? h + ty : ty % h; - Vector3d p[3], res; - p[0] = colorVector(sim.pixel(j, i)); - p[1] = colorVector(sim.pixel(j, ty)); - p[2] = colorVector(sim.pixel(tx, i)); - res.y = piClamp(0.5f + (p[0].length() - p[1].length()) / 2.f, 0.f, 1.f); - res.x = piClamp(0.5f + (p[0].length() - p[2].length()) / 2.f, 0.f, 1.f); - tx = (j + 1) % w; - ty = (i + 1) % h; - p[1] = colorVector(sim.pixel(j, ty)); - p[2] = colorVector(sim.pixel(tx, i)); - res.y = piClamp(0.5f + (p[0].length() - p[1].length()) / 2.f, 0.f, 1.f); - res.x = piClamp(0.5f + (p[0].length() - p[2].length()) / 2.f, 0.f, 1.f); - res.z = 1.; - dd[a] = res.z * 255; ++a; - dd[a] = res.x * 255; ++a; - dd[a] = res.y * 255; ++a; - dd[a] = 255; ++a; - } - } - im = dim; - //im.save("_bump.png"); -} - - - - -Material::Material(): map_reflection(512) { - color_diffuse = color_specular = Qt::white; - color_self_illumination = Qt::black; - glass = false; - transparency = reflectivity = 0.f; - map_specularity.color_amount = 0.5f; - map_specular.color_amount = 1.f; - iof = 1.f; - dispersion = 0.05f; -} - - -void Material::apply(QOpenGLShaderProgram * prog) { - if (prog) { - setUniformMaterial(prog, *this); - } else { - GLfloat mat_diffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f}; - GLfloat mat_specular[4] = {0.9f, 0.9f, 0.9f, 1.0f}; - GLfloat mat_emission[4] = {0.f, 0.f, 0.f, 1.0f}; - mat_diffuse[0] = map_diffuse.color_amount * color_diffuse.redF(); - mat_diffuse[1] = map_diffuse.color_amount * color_diffuse.greenF(); - mat_diffuse[2] = map_diffuse.color_amount * color_diffuse.blueF(); - mat_diffuse[3] = map_diffuse.color_amount * color_diffuse.alphaF() * (1.f - transparency); - mat_specular[0] = map_specular.color_amount * color_specular.redF(); - mat_specular[1] = map_specular.color_amount * color_specular.greenF(); - mat_specular[2] = map_specular.color_amount * color_specular.blueF(); - mat_emission[0] = map_self_illumination.color_amount * color_self_illumination.redF(); - mat_emission[1] = map_self_illumination.color_amount * color_self_illumination.greenF(); - mat_emission[2] = map_self_illumination.color_amount * color_self_illumination.blueF(); - glColor4f(mat_diffuse[0], mat_diffuse[1], mat_diffuse[2], mat_diffuse[3]); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - //qDebug() << (map_specularity.color_amount)*128.; - glMaterialf(GL_FRONT, GL_SHININESS, (map_specularity.color_amount)*128.f); - glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_diffuse); - } -} - - -void Material::loadTextures(GLTextureManagerBase * tm) { - //qDebug() << "load textures"; - if (!tm) return; - if (!map_diffuse.bitmap_path.isEmpty()) map_diffuse.bitmap_id = tm->loadTexture(map_diffuse.bitmap_path); - if (!map_normal.bitmap_path.isEmpty()) map_normal.bitmap_id = tm->loadTexture(map_normal.bitmap_path, true, true); - if (!map_relief.bitmap_path.isEmpty()) map_relief.bitmap_id = tm->loadTexture(map_relief.bitmap_path); - if (!map_specularity.bitmap_path.isEmpty()) map_specularity.bitmap_id = tm->loadTexture(map_specularity.bitmap_path); - if (!map_specular.bitmap_path.isEmpty()) map_specular.bitmap_id = tm->loadTexture(map_specular.bitmap_path); - if (!map_self_illumination.bitmap_path.isEmpty()) map_self_illumination.bitmap_id = tm->loadTexture(map_self_illumination.bitmap_path); - //if (!map_diffuse_2.bitmap_path.isEmpty()) map_diffuse_2.bitmap_id = tm->loadTexture(map_diffuse_2.bitmap_path); - map_reflection.load(); -} diff --git a/test/qglview/glmaterial.h b/test/qglview/glmaterial.h deleted file mode 100644 index 57fb96d..0000000 --- a/test/qglview/glmaterial.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLMATERIAL_H -#define GLMATERIAL_H - -#include "gltypes.h" -#include "chunkstream.h" - -class GLTexture { -public: - GLTexture(int _width, int _height, const GLenum & _format = GL_RGBA8, const GLenum & _target = GL_TEXTURE_2D) {wid = _width; hei = _height; format_ = _format; target_ = _target; id_ = 0;} - bool create() {destroy(); createGLTexture(id_, wid, hei, format_, target_); return id_ > 0;} - void destroy() {if (id_ > 0) glDeleteTextures(1, &id_); id_ = 0;} - void bind() {if (id_ > 0) glBindTexture(target_, id_);} - void release() {glBindTexture(target_, 0);} - int width() const {return wid;} - int height() const {return hei;} - GLenum format() const {return format_;} - GLenum target() const {return target_;} - GLuint id() const {return id_;} -private: - int wid, hei; - GLenum format_, target_; - GLuint id_; -}; - - -class GLCubeTexture { -public: - GLCubeTexture(int _size, const GLenum & _format = GL_RGBA8) {size = _size; format_ = _format; id_ = 0; changed_ = false; pathes.resize(6);} - bool create(); - void destroy() {if (id_ > 0) glDeleteTextures(1, &id_); id_ = 0;} - void bind() {if (changed_) {changed_ = false; create();} if (id_ > 0) glBindTexture(GL_TEXTURE_CUBE_MAP, id_);} - void release() {glBindTexture(GL_TEXTURE_CUBE_MAP, 0);} - void resize(int _size) {size = _size; changed_ = true;} - void loadFromDirectory(const QString & dir); - void loadFront(const QString & path) {bind(); pathes[0] = path; createGLTexture(id_, rotateQImageLeft(QImage(path)).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), format_, GL_TEXTURE_CUBE_MAP_POSITIVE_X);} - void loadBack(const QString & path) {bind(); pathes[1] = path; createGLTexture(id_, rotateQImageRight(QImage(path)).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), format_, GL_TEXTURE_CUBE_MAP_NEGATIVE_X);} - void loadLeft(const QString & path) {bind(); pathes[2] = path; createGLTexture(id_, QImage(path).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), format_, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y);} - void loadRight(const QString & path) {bind(); pathes[3] = path; createGLTexture(id_, rotateQImage180(QImage(path)).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), format_, GL_TEXTURE_CUBE_MAP_POSITIVE_Y);} - void loadTop(const QString & path) {bind(); pathes[4] = path; createGLTexture(id_, rotateQImageLeft(QImage(path)).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), format_, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);} - void loadBottom(const QString & path) {bind(); pathes[5] = path; createGLTexture(id_, rotateQImageLeft(QImage(path)).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), format_, GL_TEXTURE_CUBE_MAP_POSITIVE_Z);} - void load(); - bool isEmpty() const {foreach (const QString & i, pathes) if (!i.isEmpty()) return false; return true;} - GLenum format() const {return format_;} - void setFormat(GLenum f) {format_ = f; changed_ = true;} - GLuint id() const {return id_;} - const QString & path(int side) const {return pathes[side];} - void setPath(int side, const QString & p) {pathes[side] = p;} - void loadPathesFromDirectory(const QString & dir); -private: - bool changed_; - int size; - GLenum format_; - GLuint id_; - QVector pathes; -}; - -class GLTextureManager; - -class GLTextureManagerBase { -public: - GLTextureManagerBase() {} - virtual ~GLTextureManagerBase() {} - void addSearchPath(const QString & path) {search_pathes << path;} - static QStringList searchPathes() {return search_pathes;} - QString findFile(const QString & path); - GLuint loadTexture(const QString & path, bool ownership = true, bool bump = false); - GLuint loadTexture(const QImage & image, bool ownership = true, bool bump = false); - void reloadTexture(GLuint tid, const QString & path); - void reloadTexture(GLuint tid, const QImage & image); - int textureID(const QString & path, bool bump = false) {return tex_ids[bump ? 1 : 0][path];} - virtual void addTexture(const QString & path) = 0; - virtual void addAnimation(const QString & dir, const QString & name) = 0; - virtual bool loadTextures() = 0; - -protected: - static void convertToNormal(QImage & im); - static QStringList search_pathes; - QMap tex_ids[2]; - -}; - -struct Map { - Map() {bitmap_id = 0; color_amount = 1.f; color_offset = 0.f; animation_frame_rate = -1.f;} - QString bitmap_path; - GLuint bitmap_id; - QPointF bitmap_offset; - float color_amount; - float color_offset; - QString animation; - float animation_frame_rate; -}; - -struct Material { - Material(); - void apply(QOpenGLShaderProgram * prog); - void loadTextures(GLTextureManagerBase * tm); - QString name; - QColor color_diffuse; - QColor color_specular; - QColor color_self_illumination; - bool glass; - float transparency; - float reflectivity; - float iof; - float dispersion; - Map map_diffuse; - Map map_normal; - Map map_relief; - Map map_self_illumination; - Map map_specularity; - Map map_specular; - /*Map map_diffuse_2; - Map map_diffuse_3; - Map map_diffuse_4;*/ - GLCubeTexture map_reflection; -}; - - -inline QDataStream & operator <<(QDataStream & s, const Map & m) { - ChunkStream cs; - cs << cs.chunk(1, m.bitmap_path) << cs.chunk(2, m.color_amount) << cs.chunk(3, m.color_offset) << cs.chunk(4, m.animation) << cs.chunk(5, m.animation_frame_rate); - s << cs.data(); return s; -} -inline QDataStream & operator >>(QDataStream & s, Map & m) { - ChunkStream cs(s); - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: m.bitmap_path = cs.getData(); break; - case 2: m.color_amount = cs.getData(); break; - case 3: m.color_offset = cs.getData(); break; - case 4: m.animation = cs.getData(); break; - case 5: m.animation_frame_rate = cs.getData(); break; - } - } - return s; -} - -inline QDataStream & operator <<(QDataStream & s, const Material & m) { - ChunkStream cs; - cs << cs.chunk(1, m.name) << cs.chunk(2, m.color_diffuse) << cs.chunk(3, m.color_specular) << cs.chunk(4, m.color_self_illumination) - << cs.chunk(5, m.transparency) << cs.chunk(6, m.reflectivity) << cs.chunk(7, m.glass) << cs.chunk(8, m.map_diffuse) << cs.chunk(9, m.map_normal) - << cs.chunk(10, m.map_relief) << cs.chunk(11, m.map_specular) << cs.chunk(12, m.map_specularity) << cs.chunk(13, m.map_self_illumination); - s << qCompress(cs.data()); return s; -} -inline QDataStream & operator >>(QDataStream & s, Material & m) { - QByteArray ba; - s >> ba; - ba = qUncompress(ba); - ChunkStream cs(ba); - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: m.name = cs.getData(); break; - case 2: m.color_diffuse = cs.getData(); break; - case 3: m.color_specular = cs.getData(); break; - case 4: m.color_self_illumination = cs.getData(); break; - case 5: m.transparency = cs.getData(); break; - case 6: m.reflectivity = cs.getData(); break; - case 7: m.glass = cs.getData(); break; - case 8: m.map_diffuse = cs.getData(); break; - case 9: m.map_normal = cs.getData(); break; - case 10: m.map_relief = cs.getData(); break; - case 11: m.map_specular = cs.getData(); break; - case 12: m.map_specularity = cs.getData(); break; - case 13: m.map_self_illumination = cs.getData(); break; - } - } - return s; -} - -#endif // GLMATERIAL_H diff --git a/test/qglview/globject.cpp b/test/qglview/globject.cpp deleted file mode 100644 index a49bdf8..0000000 --- a/test/qglview/globject.cpp +++ /dev/null @@ -1,593 +0,0 @@ -/* - GLObjectBase & Light - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "globject.h" -#include "glcamera.h" -#include "qglview.h" - - -GLObjectBase::GLObjectBase() { - type_ = glMesh; - render_mode = View; - pass_ = Solid; - geom_prim = Triangles; - scale_ = QVector3D(1., 1., 1.); - parent_ = nullptr; - is_root = is_init = is_tex_loaded = selected_ = false; - visible_ = accept_fog = accept_light = cast_shadow = rec_shadow = select_ = true; - line_width = -1.; - blend_src = GL_SRC_ALPHA; - blend_dest = GL_ONE_MINUS_SRC_ALPHA; - type_ = glMesh; - raw_matrix = false; - mat_.setToIdentity(); - view_ = nullptr; -} - - -GLObjectBase::~GLObjectBase() { - //qDebug() << "del" << name() << view_; - if (parent_) parent_->children_.removeAll(this); - if (view_) ((QGLView*)view_)->objectDeleted(this); - foreach (GLObjectBase * c, children_) { - c->parent_ = nullptr; - delete c; - } -} - - -GLObjectBase * GLObjectBase::clone(bool withChildren) { - GLObjectBase * o = new GLObjectBase(); - o->pass_ = pass_; - o->is_init = false; - o->accept_light = accept_light; - o->accept_fog = accept_fog; - o->visible_ = visible_; - o->type_ = type_; - o->raw_matrix = raw_matrix; - o->mat_ = mat_; - o->pos_ = pos_; - o->angles_ = angles_; - o->scale_ = scale_; - o->itransform_ = itransform_; - o->bound = bound; - o->name_ = name_ + "_copy"; - o->blend_src = blend_src; - o->blend_dest = blend_dest; - o->material_ = material_; - o->pos_h = pos_h; - o->points = points; - o->puvws = puvws; - o->faces = faces; - o->uvws = uvws; - o->norms = norms; - o->normals = normals; - o->vbo.vertices_ = vbo.vertices_; - o->vbo.normals_ = vbo.normals_; - o->vbo.texcoords_ = vbo.texcoords_; - o->vbo.colors_ = vbo.colors_; - o->view_ = nullptr; - o->children_.clear(); - if (withChildren) { - for (int i = 0; i < children_.size(); ++i) - o->addChild(children_[i]->clone(withChildren)); - } - return o; -} - - -void GLObjectBase::init() { - calculateBoundingBox(); - vbo.init(); - vbo.rebuffer(); - //material_.reflection.create(); - //qDebug() << "init" << vbo.buffer_; - is_init = true; -} - - -void GLObjectBase::draw(QOpenGLShaderProgram * prog, bool simplest) { - vbo.draw(geom_prim, prog, simplest); - /*if (!d_vertices.isEmpty()) { - glBindBuffer(GL_ARRAY_BUFFER, 0); - glVertexPointer(3, GL_FLOAT, 0, d_vertices.constData()); - glTexCoordPointer(2, GL_FLOAT, 0, d_uvs.constData()); - //glColorPointer(4, GL_FLOAT, 0, d_colors.constData()); - glNormalPointer(GL_FLOAT, 0, d_normals.constData()); - glDrawArrays(geom_prim, 0, d_vertices.size() / 3);*/ - /*if (pass_ == Reflection) { - glActiveTexture(GL_TEXTURE1); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - }*/ - //} -} - - -void GLObjectBase::setView(QGLView * v) { - view_ = v; - foreach (GLObjectBase * c, children_) - c->setView(v); -} - - -void GLObjectBase::addChild(GLObjectBase * o) { - if (o == this) return; - if (o->parent_) - o->parent_->children_.removeAll(o); - children_ << o; - o->parent_ = this; - o->setView((QGLView*)view_); - o->buildTransform(); - if (view_) { - view_->collectLights(); - QList cl = o->children(true); - cl << o; - foreach (GLObjectBase * i, cl) { - emit ((QGLView*)view_)->objectAdded(i); - } - } -} - - -void GLObjectBase::removeChild(GLObjectBase * o) { - if (o == this) return; - children_.removeAll(o); - o->parent_ = nullptr; - o->buildTransform(); - if (view_ != nullptr) view_->collectLights(); -} - - -void GLObjectBase::removeChild(int index) { - children_[index]->parent_ = nullptr; - children_[index]->buildTransform(); - children_.removeAt(index); - if (view_ != nullptr) view_->collectLights(); -} - - -void GLObjectBase::clearChildren(bool deleteAll) { - foreach (GLObjectBase * i, children_) { - i->view_ = nullptr; - i->parent_ = nullptr; - i->clearChildren(deleteAll); - if (deleteAll) { - delete i; - } else { - i->buildTransform(); - } - } - children_.clear(); - if (view_) view_->collectLights(); -} - - -GLObjectBase * GLObjectBase::child(int index) { - if (index < 0 || index >= children_.size()) return nullptr; - return children_[index]; -} - - -GLObjectBase * GLObjectBase::child(const QString & name) { - foreach (GLObjectBase * i, children_) - if (i->name_ == name) return i; - return nullptr; -} - - -const GLObjectBase * GLObjectBase::child(int index) const { - if (index < 0 || index >= children_.size()) return nullptr; - return children_[index]; -} - - -const GLObjectBase * GLObjectBase::child(const QString & name) const { - foreach (GLObjectBase * i, children_) - if (i->name_ == name) return i; - return nullptr; -} - - -QList GLObjectBase::children(bool all_) { - if (!all_) return children_; - QList cl; - addChildren(cl, this); - return cl; -} - - -void GLObjectBase::rotateX(GLfloat a) { - raw_matrix = false; - angles_.setX(angles_.x() + a); - buildTransform(); -} - - -void GLObjectBase::rotateY(GLfloat a) { - raw_matrix = false; - angles_.setY(angles_.y() + a); - buildTransform(); -} - - -void GLObjectBase::rotateZ(GLfloat a) { - raw_matrix = false; - angles_.setZ(angles_.z() + a); - while (angles_.z() < -360.f) angles_.setZ(angles_.z() + 360.f); - while (angles_.z() > 360.f) angles_.setZ(angles_.z() - 360.f); - buildTransform(); -} - - -void GLObjectBase::setRotationX(GLfloat a) { - raw_matrix = false; - angles_.setX(a); - buildTransform(); -} - - -void GLObjectBase::setRotationY(GLfloat a) { - raw_matrix = false; - angles_.setY(a); - buildTransform(); -} - - -void GLObjectBase::setRotationZ(GLfloat a) { - raw_matrix = false; - angles_.setZ(a); - while (angles_.z() < -360.f) angles_.setZ(angles_.z() + 360.f); - while (angles_.z() > 360.f) angles_.setZ(angles_.z() - 360.f); - buildTransform(); -} - - -void GLObjectBase::setRotation(const QVector3D & a) { - raw_matrix = false; - angles_= a; - buildTransform(); -} - - -void GLObjectBase::resetRotation() { - raw_matrix = false; - angles_ = QVector3D(0., 0., 0.); - buildTransform(); -} - - -void GLObjectBase::addChildren(QList & list, GLObjectBase * where) { - foreach (GLObjectBase * i, where->children_) { - list << i; - addChildren(list, i); - } -} - - -void GLObjectBase::loadTextures(bool with_children) { - material_.loadTextures(view_->textureManager()); - if (with_children) - foreach (GLObjectBase * i, children_) i->loadTextures(); - is_tex_loaded = true; - checkPass(); -} - - -void GLObjectBase::calculateBoundingBox() { - bound = vbo.boundingBox(); - QVector c = bound.corners(), tc; - //QMatrix4x4 mat = itransform_.inverted(); - //qDebug() << itransform_ << mat_ << mat; - foreach (QVector3D p, c) - tc << (itransform_ * QVector4D(p, 1)).toVector3D(); - bound = Box3D(tc); - foreach (GLObjectBase * i, children_) { - i->calculateBoundingBox(); - bound |= i->boundingBox(); - } -} - - -void GLObjectBase::setProperty(const QString & pn, const QVariant & v) { - meta[pn] = v; -} - - -QVariant GLObjectBase::property(const QString & pn, bool * exists) const { - if (exists) *exists = meta.contains(pn); - return meta.value(pn); -} - - -bool GLObjectBase::hasProperty(const QString & pn) const { - return meta.contains(pn); -} - - -void GLObjectBase::removeProperty(const QString & pn) { - meta.remove(pn); -} - - -void GLObjectBase::setTransform(const QMatrix4x4 & t) { - raw_matrix = true; - mat_ = t; - pos_ = mat_.column(3).toVector3D(); - mat_.setColumn(3, QVector4D(0., 0., 0., 1.)); - buildTransform(); -} - - -void GLObjectBase::select() { - //qDebug() << "select" << name() << view_; - selected_ = true; - if (view_) - ((QGLView*)view_)->selectObject(this); -} - - -void GLObjectBase::setMaterial(const Material & m, bool with_children) { - material_ = m; - if (with_children) - foreach (GLObjectBase * i, children_) i->setMaterial(m, true); - checkPass(); - is_tex_loaded = false; -} - - -void GLObjectBase::buildTransform() { - itransform_.setToIdentity(); - GLObjectBase * p = parent_; - if (p) - itransform_ = p->itransform_; - if (raw_matrix) { - itransform_.translate(pos_); - itransform_ *= mat_; - //qDebug() << "raw_matrix" << itransform_; - } else - localTransform(itransform_); - //qDebug() << name_ << itransform_; - foreach (GLObjectBase * i, children_) - i->buildTransform(); -} - - -void GLObjectBase::initInternal() { - init(); - loadTextures(); - foreach (GLObjectBase * i, children_) i->initInternal(); -} - - -void GLObjectBase::localTransform(QMatrix4x4 & m) { - m.translate(pos_); - m.rotate(angles_.z(), 0., 0., 1.); - m.rotate(angles_.y(), 0., 1., 0.); - m.rotate(angles_.x(), 1., 0., 0.); - m.scale(scale_); -} - - -void GLObjectBase::checkPass() { - if (float(material_.color_diffuse.alphaF()) * (1.f - material_.transparency) < 1.f) pass_ = Transparent; - else pass_ = Solid; -} - - -QMatrix4x4 GLObjectBase::worldMatrix(QMatrix4x4 parent) const { - QMatrix4x4 mat; - mat.translate(pos_); - if (raw_matrix) { - mat *= mat_; - } else { - if (angles_.z() != 0.f) mat.rotate(angles_.z(), 0., 0., 1.); - if (angles_.y() != 0.f) mat.rotate(angles_.y(), 0., 1., 0.); - if (angles_.x() != 0.f) mat.rotate(angles_.x(), 1., 0., 0.); - mat.scale(scale_); - } - return parent * mat; -} - - -void GLObjectBase::render(int * id, QMap * ids, int sh_id_loc) { - if (!visible_) return; - //glPushMatrix(); - ///qglMultMatrix TODO - material_.apply(nullptr); - if (id != nullptr) { - ++(*id); - ids->insert(*id, this); - //glVertexAttrib1f(sh_id_loc, (*id) / 255.f); - //qDebug() << "assign to" << sh_id_loc << (*id) / 255.f; - } - draw(nullptr); - foreach (GLObjectBase * i, children_) - i->render(id, ids, sh_id_loc); - //glPopMatrix(); -} - - - - -Light::Light(): GLObjectBase(), shadow_map(0, true, GL_R16F) { - type_ = glLight; - light_type = Omni; - intensity = 1.; - angle_start = angle_end = 180.; - decay_linear = decay_quadratic = decay_start = 0.; - decay_const = decay_end = 1.; - direction.setZ(1.); -} - - -Light::Light(const QVector3D & p, const QColor & c, float i): GLObjectBase(), shadow_map(0, true, GL_R16F) { - type_ = glLight; - light_type = Omni; - pos_ = p; - intensity = i; - /*color_ = c;*/ - angle_start = angle_end = 180.; - decay_linear = decay_quadratic = decay_start = 0.; - decay_const = decay_end = 1.; - direction.setZ(1.); -} - - -GLObjectBase * Light::clone(bool withChildren) { - Light * o = new Light(*this); - //GLObjectBase::clone(withChildren); - o->is_init = false; - o->name_ = name_ + "_copy"; - o->view_ = nullptr; - o->children_.clear(); - if (withChildren) { - for (int i = 0; i < children_.size(); ++i) - o->addChild(children_[i]->clone(withChildren)); - } - o->light_type = light_type; - o->direction = direction; - o->angle_start = angle_start; - o->angle_end = angle_end; - o->intensity = intensity; - o->decay_const = decay_const; - o->decay_linear = decay_linear; - o->decay_quadratic = decay_quadratic; - return o; -} - - -void Light::draw(QOpenGLShaderProgram * prog, bool simplest) { - bool l = glIsEnabled(GL_LIGHTING); - glDisable(GL_LIGHTING); - glPointSize(8.); - glColor3f(0., 0., 0.); - glBegin(GL_POINTS); - glVertex3f(0., 0., 0.); - glEnd(); - float s = 10; - if (light_type != Omni) { - glBegin(GL_LINES); - QVector4D dir = QVector4D(direction); - if (raw_matrix) - dir = transform().inverted() * dir; - glVertex3f(0., 0., 0.); - glVertex3f(dir.x() * s, dir.y() * s, dir.z() * s); - glEnd(); - } - if (l) glEnable(GL_LIGHTING); -} - - -QDataStream & operator <<(QDataStream & s, const GLObjectBase * p) { - ChunkStream cs; - //qDebug() << "place" << p->name() << "..."; - cs << cs.chunk(1, int(p->type_)) << cs.chunk(2, p->accept_light) << cs.chunk(3, p->accept_fog) << cs.chunk(4, p->visible_) - << cs.chunk(5, p->cast_shadow) << cs.chunk(6, p->rec_shadow) << cs.chunk(7, p->raw_matrix) << cs.chunk(8, p->line_width) - << cs.chunk(9, int(p->render_mode)) << cs.chunk(10, p->material_) << cs.chunk(11, p->pos_) << cs.chunk(12, p->angles_) - << cs.chunk(13, p->scale_) << cs.chunk(14, p->mat_) << cs.chunk(15, p->vbo) << cs.chunk(16, p->children_.size()) - << cs.chunk(17, p->name_) << cs.chunk(18, p->meta); - //qDebug() << "place self done"; - if (p->type_ == GLObjectBase::glLight) { - //qDebug() << "place light ..."; - const Light * l = (const Light*)p; - cs << cs.chunk(100, l->direction) << cs.chunk(101, l->angle_start) << cs.chunk(102, l->angle_end) << cs.chunk(103, l->intensity) - << cs.chunk(104, l->decay_const) << cs.chunk(105, l->decay_linear) << cs.chunk(106, l->decay_quadratic) - << cs.chunk(107, l->decay_start) << cs.chunk(108, l->decay_end) << cs.chunk(109, int(l->light_type)); - } - if (p->type_ == GLObjectBase::glCamera) { - //qDebug() << "place camera ..."; - const Camera * c = (const Camera*)p; - cs << cs.chunk(200, c->aim_) << cs.chunk(201, c->fov_) << cs.chunk(202, c->depth_start) << cs.chunk(203, c->depth_end) - << cs.chunk(204, c->angle_limit_lower_xy) << cs.chunk(205, c->angle_limit_upper_xy) - << cs.chunk(206, c->mirror_x) << cs.chunk(207, c->mirror_y); - } - //qDebug() << "place" << p->name() << cs.data().size() << s.device()->size(); - s << cs.data(); - foreach (const GLObjectBase * c, p->children_) - s << c; - return s; -} -QDataStream & operator >>(QDataStream & s, GLObjectBase *& p) { - ChunkStream cs(s); - p = nullptr; - int ccnt = 0; - Light * l = nullptr; - Camera * c = nullptr; - //qDebug() << "read obj ..."; - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: - { - GLObjectBase::Type type = (GLObjectBase::Type)cs.getData(); - switch (type) { - case GLObjectBase::glMesh: p = new GLObjectBase(); break; - case GLObjectBase::glLight: p = new Light(); l = (Light*)p; break; - case GLObjectBase::glCamera: p = new Camera(); c = (Camera*)p; break; - default : break; - } - if (p) p->type_ = type; - } - break; - case 2: if (p) p->accept_light = cs.getData(); break; - case 3: if (p) p->accept_fog = cs.getData(); break; - case 4: if (p) p->visible_ = cs.getData(); break; - case 5: if (p) p->cast_shadow = cs.getData(); break; - case 6: if (p) p->rec_shadow = cs.getData(); break; - case 7: if (p) p->raw_matrix = cs.getData(); break; - case 8: if (p) p->line_width = cs.getData(); break; - case 9: if (p) p->render_mode = (GLObjectBase::RenderMode)cs.getData(); break; - case 10: if (p) p->material_ = cs.getData(); break; - case 11: if (p) p->pos_ = cs.getData(); break; - case 12: if (p) p->angles_ = cs.getData(); break; - case 13: if (p) p->scale_ = cs.getData(); break; - case 14: if (p) p->mat_ = cs.getData(); break; - case 15: if (p) p->vbo = cs.getData(); break; - case 16: if (p) ccnt = cs.getData(); break; - case 17: if (p) p->name_ = cs.getData(); break; - case 18: if (p) p->meta = cs.getData(); break; - case 100: if (l) l->direction = cs.getData(); break; - case 101: if (l) l->angle_start = cs.getData(); break; - case 102: if (l) l->angle_end = cs.getData(); break; - case 103: if (l) l->intensity = cs.getData(); break; - case 104: if (l) l->decay_const = cs.getData(); break; - case 105: if (l) l->decay_linear = cs.getData(); break; - case 106: if (l) l->decay_quadratic = cs.getData(); break; - case 107: if (l) l->decay_start = cs.getData(); break; - case 108: if (l) l->decay_end = cs.getData(); break; - case 109: if (l) l->light_type = (Light::Type)cs.getData(); break; - case 200: if (c) c->setAim(cs.getData()); break; - case 201: if (c) c->setFOV(cs.getData()); break; - case 202: if (c) c->setDepthStart(cs.getData()); break; - case 203: if (c) c->setDepthEnd(cs.getData()); break; - case 204: if (c) c->setAngleLowerLimitXY(cs.getData()); break; - case 205: if (c) c->setAngleUpperLimitXY(cs.getData()); break; - case 206: if (c) c->mirror_x = cs.getData(); break; - case 207: if (c) c->mirror_y = cs.getData(); break; - } - } - //qDebug() << p->name() << ccnt; - for (int i = 0; i < ccnt; ++i) { - GLObjectBase * c = nullptr; - s >> c; - if (!c) continue; - c->parent_ = p; - p->children_ << c; - } - return s; -} diff --git a/test/qglview/globject.h b/test/qglview/globject.h deleted file mode 100644 index 362a04a..0000000 --- a/test/qglview/globject.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - GLObjectBase & Light - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLOBJECT_H -#define GLOBJECT_H - -#include "glvbo.h" -#include "glframebuffer.h" -#include "glmaterial.h" - -class Camera; -class QGLView; - -class GLObjectBase -{ - friend class QGLView; - friend class GLRendererBase; - friend QDataStream & operator <<(QDataStream & s, const GLObjectBase * p); - friend QDataStream & operator >>(QDataStream & s, GLObjectBase *& p); - friend GLObjectBase * loadFromQGLFile(const QString & filepath); -public: - enum Type {glMesh, glLight, glCamera, glParticlesSystem}; - enum Pass {Solid, Transparent, Reflection, User}; - enum GeomPrimitives {Triangles = GL_TRIANGLES, Quads = GL_QUADS}; - enum RenderMode {View = 0, Point = GL_POINT, Line = GL_LINE, Fill = GL_FILL}; - - explicit GLObjectBase(); - virtual ~GLObjectBase(); - - virtual GLObjectBase * clone(bool withChildren = true); - - QString name() const {return name_;} - void setName(const QString & name) {name_ = name;} - //virtual GLuint hList() {return list;} - virtual void init(); - virtual void draw(QOpenGLShaderProgram * prog, bool simplest = false); - virtual void update() {} - bool isInit() const {return is_init;} - bool isTexturesLoaded() const {return is_tex_loaded;} - Type type() const {return type_;} - - RenderMode renderMode() const {return render_mode;} - void setRenderMode(RenderMode mode) {render_mode = mode;} - - float lineWidth() const {return line_width;} - void setLineWidth(const float & width) {line_width = width;} - - GLObjectBase * parent() {return parent_;} - void setParent(GLObjectBase * o) {parent_ = o;} - bool hasParent() const {return parent_ != nullptr;} - bool hasChildren() const {return children_.size() != 0;} - void setView(QGLView * v); - - void addChild(GLObjectBase * o); - void removeChild(GLObjectBase * o); - void removeChild(int index); - void clearChildren(bool deleteAll = false); - int childCount() const {return children_.size();} - GLObjectBase * child(int index); - GLObjectBase * child(const QString & name); - const GLObjectBase * child(int index) const; - const GLObjectBase * child(const QString & name) const; - QList children(bool all_ = false); - - bool isVisible() const {return visible_;} - bool isHidden() const {return !visible_;} - void setVisible(bool v) {visible_ = v;} - void setHidden(bool v) {visible_ = !v;} - void show() {visible_ = true;} - void hide() {visible_ = false;} - - bool isReceiveShadows() const {return rec_shadow;} - bool isCastShadows() const {return cast_shadow;} - void setReceiveShadows(bool on) {rec_shadow = on;} - void setCastShadows(bool on) {cast_shadow = on;} - - void move(const QVector3D & dv) {pos_ += dv; buildTransform();} - void moveTo(const QVector3D & dv) {pos_ = dv; buildTransform();} - void move(GLfloat dx, GLfloat dy, GLfloat dz = 0.) {move(QVector3D(dx, dy, dz)); buildTransform();} - void moveTo(GLfloat dx, GLfloat dy, GLfloat dz = 0.) {moveTo(QVector3D(dx, dy, dz)); buildTransform();} - void moveX(GLfloat o) {pos_.setX(pos_.x() + o); buildTransform();} - void moveY(GLfloat o) {pos_.setY(pos_.y() + o); buildTransform();} - void moveZ(GLfloat o) {pos_.setZ(pos_.z() + o); buildTransform();} - void setPosX(GLfloat o) {pos_.setX(o); buildTransform();} - void setPosY(GLfloat o) {pos_.setY(o); buildTransform();} - void setPosZ(GLfloat o) {pos_.setZ(o); buildTransform();} - void setPos(GLfloat x, GLfloat y, GLfloat z) {pos_ = QVector3D(x, y, z); buildTransform();} - void setPos(const QVector3D & p) {pos_ = p; buildTransform();} - void resetPos() {pos_ = QVector3D(0., 0., 0.); buildTransform();} - - QVector3D pos() const {return pos_;} - float posX() const {return pos_.x();} - float posY() const {return pos_.y();} - float posZ() const {return pos_.z();} - QVector3D worldPos() const {return (itransform_ * QVector4D(0, 0, 0, 1.)).toVector3D();} - QMatrix4x4 worldTransform() const {return itransform_;} - - QVector3D rotation() const {return angles_;} - float rotationX() const {return angles_.x();} - float rotationY() const {return angles_.y();} - float rotationZ() const {return angles_.z();} - void rotateX(GLfloat a); - void rotateY(GLfloat a); - void rotateZ(GLfloat a); - void setRotationX(GLfloat a); - void setRotationY(GLfloat a); - void setRotationZ(GLfloat a); - void setRotation(const QVector3D & a); - void resetRotation(); - - QVector3D scale() {return scale_;} - float scaleX() {return scale_.x();} - float scaleY() {return scale_.y();} - float scaleZ() {return scale_.z();} - void scale(const QVector3D & sv) {raw_matrix = false; scale_ *= sv; buildTransform();} - void scale(GLfloat sx, GLfloat sy, GLfloat sz) {raw_matrix = false; scale(QVector3D(sx, sy, sz)); buildTransform();} - void scale(GLfloat sx, GLfloat sy) {raw_matrix = false; scale(QVector3D(sx, sy, sy)); buildTransform();} - void scale(GLfloat sx) {raw_matrix = false; scale(QVector3D(sx, sx, sx)); buildTransform();} - void scaleX(GLfloat a) {raw_matrix = false; scale_.setX(scale_.x() + a); buildTransform();} - void scaleY(GLfloat a) {raw_matrix = false; scale_.setY(scale_.y() + a); buildTransform();} - void scaleZ(GLfloat a) {raw_matrix = false; scale_.setZ(scale_.z() + a); buildTransform();} - void setScale(const QVector3D & a) {raw_matrix = false; scale_ = a; buildTransform();} - void setScale(GLfloat a) {raw_matrix = false; scale_ = QVector3D(a, a, a); buildTransform();} - void setScaleX(GLfloat a) {raw_matrix = false; scale_.setX(a); buildTransform();} - void setScaleY(GLfloat a) {raw_matrix = false; scale_.setY(a); buildTransform();} - void setScaleZ(GLfloat a) {raw_matrix = false; scale_.setZ(a); buildTransform();} - void resetScale() {raw_matrix = false; scale_ = QVector3D(1., 1., 1.); buildTransform();} - - QMatrix4x4 transform() {return mat_;} - void setTransform(const QMatrix4x4 & t); - bool isRawMatrix() {return raw_matrix;} - - bool isAcceptLight() const {return accept_light;} - void setAcceptLight(bool yes) {accept_light = yes;} - - bool isAcceptFog() const {return accept_fog;} - void setAcceptFog(bool yes) {accept_fog = yes;} - - bool isSelected() const {return selected_;} - void setSelected(bool yes) {selected_ = yes;} - void select(); - void deselect() {selected_ = false;} - - bool isSelectable() const {return select_;} - void setSelectable(bool yes) {select_ = yes;} - /* - bool isWriteDepth() const {return write_depth_;} - void setWriteDepth(bool yes) {write_depth_ = yes;}*/ - - QColor color() const {return material_.color_diffuse;} - void setColor(const QColor & c) {material_.color_diffuse = c; checkPass();} - - GLenum srcAlpha() const {return blend_src;} - GLenum destAlpha() const {return blend_dest;} - void setSrcAlpha(GLenum mode) {blend_src = mode;} - void setDestAlpha(GLenum mode) {blend_dest = mode;} - - void setMaterial(const Material & m, bool with_children = false); - Material & material() {return material_;} - - const Box3D & boundingBox(bool withChildren = true) const {return bound;} - GLVBO & VBO() {return vbo;} - - void calculateBoundingBox(); - - void setProperty(const QString & pn, const QVariant & v); - QVariant property(const QString & pn, bool * exists = 0) const; - bool hasProperty(const QString & pn) const; - void removeProperty(const QString & pn); - - QVector3D pos_h; - QVector points, puvws; - QVector faces, uvws, norms; - QVector normals; - - //QVector d_vertices, d_normals, d_uvs; - -protected: - void addChildren(QList & list, GLObjectBase * where); - void loadTextures(bool with_children = false); - //void deleteTextures() {foreach (GLuint i, textures) currentQGLView->deleteTexture(i); textures.clear();} - void buildTransform(); - void initInternal(); - void render(int * id = nullptr, QMap * ids = nullptr, int sh_id_loc = 0); - void checkPass(); - virtual void localTransform(QMatrix4x4 & m); - QMatrix4x4 worldMatrix(QMatrix4x4 parent) const; - - int pass_; // Pass - bool is_init, is_tex_loaded, accept_light, accept_fog, /*write_depth_,*/ visible_, cast_shadow, rec_shadow, select_, selected_, raw_matrix; - bool is_root; - float line_width; - Type type_; - GeomPrimitives geom_prim; - RenderMode render_mode; - Material material_; - Box3D bound; - QVector3D pos_, angles_, scale_; - QList children_; - QList textures; - QMatrix4x4 itransform_, mat_; - //QColor color_; - QString name_; - GLenum blend_src, blend_dest; - GLObjectBase * parent_; - QGLViewBase * view_; - GLVBO vbo; - QVariantMap meta; - -}; - -inline bool operator <(const GLObjectBase & f, const GLObjectBase & s) {return f.pos_h.z() < s.pos_h.z();} - -class Light: public GLObjectBase { - friend class QGLView; - friend class GLRendererBase; -public: - enum Type {Omni, Directional, Cone}; - - Light(); - Light(const QVector3D & p, const QColor & c = Qt::white, float i = 1.); - virtual GLObjectBase * clone(bool withChildren = true); - virtual void init() {shadow_map.resize(512, 512); is_init = true;} - virtual void draw(QOpenGLShaderProgram * prog, bool simplest = false); - - QVector3D direction, dir0, dir1; - float angle_start; - float angle_end; - float intensity; - float decay_const; - float decay_linear; - float decay_quadratic; - float decay_start; - float decay_end; - Type light_type; - GLFramebuffer shadow_map; - QMatrix4x4 shadow_matrix; - -protected: - -}; - -template -inline T globject_cast(GLObjectBase * object) {return reinterpret_cast(object);} - -template -inline T globject_cast(const GLObjectBase * object) {return reinterpret_cast(object);} - - -QDataStream & operator <<(QDataStream & s, const GLObjectBase * p); -QDataStream & operator >>(QDataStream & s, GLObjectBase *& p); - -#endif // GLOBJECT_H diff --git a/test/qglview/globject_editor.cpp b/test/qglview/globject_editor.cpp deleted file mode 100644 index af7d3c7..0000000 --- a/test/qglview/globject_editor.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "globject_editor.h" -#include "ui_globject_editor.h" - - -GLObjectEditor::GLObjectEditor(QWidget * parent): QWidget(parent) { - ui = new Ui::GLObjectEditor(); - ui->setupUi(this); - active = true; - object = 0; - rmodes << GLObjectBase::View << GLObjectBase::Point << GLObjectBase::Line << GLObjectBase::Fill; - ui->groupLight->setEnabled(false); -} - - -void GLObjectEditor::changeEvent(QEvent * e) { - return; - QWidget::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - - -void GLObjectEditor::setObject(GLObjectBase * o) { - object = o; - if (object == 0) { - ui->groupLight->setEnabled(false); - return; - } - ui->buttonDiscardRawMatrix->setEnabled(o->isRawMatrix()); - active = false; - ui->spinPosX->setValue(object->posX()); - ui->spinPosY->setValue(object->posY()); - ui->spinPosZ->setValue(object->posZ()); - ui->spinRotationX->setValue(object->rotationX()); - ui->spinRotationY->setValue(object->rotationY()); - ui->spinRotationZ->setValue(object->rotationZ()); - ui->spinScaleX->setValue(object->scaleX()); - ui->spinScaleY->setValue(object->scaleY()); - ui->spinScaleZ->setValue(object->scaleZ()); - ui->spinLineWidth->setValue(object->lineWidth()); - ui->checkVisible->setChecked(object->isVisible()); - ui->checkAcceptLight->setChecked(object->isAcceptLight()); - ui->checkAcceptFog->setChecked(object->isAcceptFog()); - ui->checkCastShadows->setChecked(object->isCastShadows()); - ui->checkReceiveShadows->setChecked(object->isReceiveShadows()); - ui->comboRenderMode->setCurrentIndex(rmodes.indexOf(object->renderMode())); - ui->groupLight->setEnabled(object->type() == GLObjectBase::glLight); - if (object->type() == GLObjectBase::glLight) { - Light * l = globject_cast(object); - //bool is_dir = l->light_type == Light::Directional, is_cone = l->light_type == Light::Cone; - ui->buttonLightColor->setColor(l->color()); - ui->comboLightType->setCurrentIndex(l->light_type); - ui->spinLightIntensity->setValue(l->intensity); - ui->spinLightDecayConst->setValue(l->decay_const); - ui->spinLightDecayLinear->setValue(l->decay_linear); - ui->spinLightDecayQuadratic->setValue(l->decay_quadratic); - ui->spinLightAngleStart->setValue(l->angle_start); - ui->spinLightAngleEnd->setValue(l->angle_end); - ui->spinLightDirectionX->setValue(l->direction.x()); - ui->spinLightDirectionY->setValue(l->direction.y()); - ui->spinLightDirectionZ->setValue(l->direction.z()); - } - active = true; -} - - -void GLObjectEditor::objectChanged() { - if (!active || object == 0) return; - if (!object->isRawMatrix()) { - object->setPosX(ui->spinPosX->value()); - object->setPosY(ui->spinPosY->value()); - object->setPosZ(ui->spinPosZ->value()); - object->setRotationX(ui->spinRotationX->value()); - object->setRotationY(ui->spinRotationY->value()); - object->setRotationZ(ui->spinRotationZ->value()); - object->setScaleX(ui->spinScaleX->value()); - object->setScaleY(ui->spinScaleY->value()); - object->setScaleZ(ui->spinScaleZ->value()); - } - object->setLineWidth(ui->spinLineWidth->value()); - object->setVisible(ui->checkVisible->isChecked()); - object->setAcceptLight(ui->checkAcceptLight->isChecked()); - object->setAcceptFog(ui->checkAcceptFog->isChecked()); - object->setCastShadows(ui->checkCastShadows->isChecked()); - object->setReceiveShadows(ui->checkReceiveShadows->isChecked()); - object->setRenderMode((GLObjectBase::RenderMode)rmodes[ui->comboRenderMode->currentIndex()]); - if (object->type() == GLObjectBase::glLight) { - Light * l = globject_cast(object); - //bool is_dir = l->light_type == Light::Directional, is_cone = l->light_type == Light::Cone; - l->setColor(ui->buttonLightColor->color()); - l->light_type = (Light::Type)ui->comboLightType->currentIndex(); - l->intensity = ui->spinLightIntensity->value(); - l->decay_const = ui->spinLightDecayConst->value(); - l->decay_linear = ui->spinLightDecayLinear->value(); - l->decay_quadratic = ui->spinLightDecayQuadratic->value(); - l->angle_start = ui->spinLightAngleStart->value(); - l->angle_end = ui->spinLightAngleEnd->value(); - l->direction = QVector3D(ui->spinLightDirectionX->value(), ui->spinLightDirectionY->value(), ui->spinLightDirectionZ->value()).normalized(); - } - emit changed(); -} - - -void GLObjectEditor::on_spinLightAngleStart_valueChanged(double v) { - if (ui->spinLightAngleEnd->value() < v) - ui->spinLightAngleEnd->setValue(v); -} - - -void GLObjectEditor::on_spinLightAngleEnd_valueChanged(double v) { - if (ui->spinLightAngleStart->value() > v) - ui->spinLightAngleStart->setValue(v); -} - - -void GLObjectEditor::on_buttonDiscardRawMatrix_clicked() { - if (!active || !object) return; - object->setPosX(ui->spinPosX->value()); - object->setPosY(ui->spinPosY->value()); - object->setPosZ(ui->spinPosZ->value()); - object->setRotationX(ui->spinRotationX->value()); - object->setRotationY(ui->spinRotationY->value()); - object->setRotationZ(ui->spinRotationZ->value()); - object->setScaleX(ui->spinScaleX->value()); - object->setScaleY(ui->spinScaleY->value()); - object->setScaleZ(ui->spinScaleZ->value()); - ui->buttonDiscardRawMatrix->setEnabled(false); -} diff --git a/test/qglview/globject_editor.h b/test/qglview/globject_editor.h deleted file mode 100644 index 7caa3dc..0000000 --- a/test/qglview/globject_editor.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLOBJECT_EDITOR_H -#define GLOBJECT_EDITOR_H - -#include "globject.h" - -namespace Ui { - class GLObjectEditor; -}; - -class GLObjectEditor: public QWidget -{ - Q_OBJECT -public: - explicit GLObjectEditor(QWidget * parent = 0); - - void setObject(GLObjectBase * o); - -protected: - void changeEvent(QEvent * e); - - Ui::GLObjectEditor * ui; - bool active; - GLObjectBase * object; - QList rmodes; - -private slots: - void objectChanged(); - void on_spinLightAngleStart_valueChanged(double v); - void on_spinLightAngleEnd_valueChanged(double v); - void on_buttonDiscardRawMatrix_clicked(); - -signals: - void changed(); - -}; - -#endif // GLOBJECT_EDITOR_H diff --git a/test/qglview/globject_editor.ui b/test/qglview/globject_editor.ui deleted file mode 100644 index de26c1d..0000000 --- a/test/qglview/globject_editor.ui +++ /dev/null @@ -1,1087 +0,0 @@ - - - GLObjectEditor - - - - 0 - 0 - 329 - 707 - - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - 2 - - - 2 - - - - - Position X - - - - - - - -99999.000000000000000 - - - 99999.000000000000000 - - - - - - - Position Y - - - - - - - -99999.000000000000000 - - - 99999.000000000000000 - - - - - - - Position Z - - - - - - - -99999.000000000000000 - - - 99999.000000000000000 - - - - - - - Rotation X - - - - - - - Rotation Y - - - - - - - Rotation Z - - - - - - - -180.000000000000000 - - - 180.000000000000000 - - - - - - - -180.000000000000000 - - - 180.000000000000000 - - - - - - - -180.000000000000000 - - - 180.000000000000000 - - - - - - - Scale X - - - - - - - Scale Y - - - - - - - Scale Z - - - - - - - 4 - - - -99999.000000000000000 - - - 99999.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - 4 - - - -99999.000000000000000 - - - 99999.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - 4 - - - -99999.000000000000000 - - - 99999.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - Render mode - - - - - - - - View - - - - - Point - - - - - Line - - - - - Fill - - - - - - - - Visible - - - - - - - Accept light - - - - - - - Accept fog - - - - - - - Line width - - - - - - - 0.000000000000000 - - - 99999.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - Cast shadows - - - - - - - Receive shadows - - - - - - - Light - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - 2 - - - 0 - - - - - Color - - - - - - - - - - Type - - - - - - - - Omni - - - - - Directional - - - - - Cone - - - - - - - - Intensity - - - - - - - 0.000000000000000 - - - 128.000000000000000 - - - 1.000000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - Decay const - - - - - - - 0.000000000000000 - - - 64.000000000000000 - - - 1.000000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - Decay linear - - - - - - - 0.000000000000000 - - - 64.000000000000000 - - - 1.000000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - Decay quadratic - - - - - - - 0.000000000000000 - - - 64.000000000000000 - - - 1.000000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - Angle Start - - - - - - - 0.000000000000000 - - - 180.000000000000000 - - - 1 - - - 5.000000000000000 - - - 30.000000000000000 - - - - - - - Angle End - - - - - - - 0.000000000000000 - - - 180.000000000000000 - - - 1 - - - 5.000000000000000 - - - 30.000000000000000 - - - - - - - Direcion X - - - - - - - -1.000000000000000 - - - 1.000000000000000 - - - 0.000000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - Direcion Y - - - - - - - Direcion Z - - - - - - - -1.000000000000000 - - - 1.000000000000000 - - - 0.000000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - -1.000000000000000 - - - 1.000000000000000 - - - 1.000000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - - - - false - - - Discard raw transform - - - - - - - - SpinSlider - QWidget -
    spinslider.h
    -
    - - ColorButton - QPushButton -
    colorbutton.h
    -
    -
    - - - - spinPosX - valueChanged(double) - GLObjectEditor - objectChanged() - - - 312 - 9 - - - 321 - 5 - - - - - spinPosY - valueChanged(double) - GLObjectEditor - objectChanged() - - - 307 - 40 - - - 320 - 36 - - - - - spinPosZ - valueChanged(double) - GLObjectEditor - objectChanged() - - - 317 - 73 - - - 321 - 61 - - - - - spinRotationX - valueChanged(double) - GLObjectEditor - objectChanged() - - - 97 - 78 - - - 82 - 73 - - - - - spinRotationY - valueChanged(double) - GLObjectEditor - objectChanged() - - - 317 - 123 - - - 320 - 96 - - - - - spinRotationZ - valueChanged(double) - GLObjectEditor - objectChanged() - - - 292 - 128 - - - 321 - 125 - - - - - spinScaleX - valueChanged(double) - GLObjectEditor - objectChanged() - - - 295 - 156 - - - 321 - 150 - - - - - spinScaleY - valueChanged(double) - GLObjectEditor - objectChanged() - - - 273 - 177 - - - 321 - 175 - - - - - spinScaleZ - valueChanged(double) - GLObjectEditor - objectChanged() - - - 297 - 202 - - - 321 - 200 - - - - - checkVisible - toggled(bool) - GLObjectEditor - objectChanged() - - - 185 - 268 - - - 76 - 242 - - - - - checkAcceptLight - toggled(bool) - GLObjectEditor - objectChanged() - - - 104 - 277 - - - 61 - 261 - - - - - checkAcceptFog - toggled(bool) - GLObjectEditor - objectChanged() - - - 210 - 314 - - - 79 - 288 - - - - - checkCastShadows - toggled(bool) - GLObjectEditor - objectChanged() - - - 208 - 337 - - - 55 - 310 - - - - - checkReceiveShadows - toggled(bool) - GLObjectEditor - objectChanged() - - - 212 - 360 - - - 78 - 334 - - - - - spinLineWidth - valueChanged(double) - GLObjectEditor - objectChanged() - - - 303 - 366 - - - 321 - 359 - - - - - comboRenderMode - currentIndexChanged(int) - GLObjectEditor - objectChanged() - - - 299 - 228 - - - 321 - 228 - - - - - buttonLightColor - colorChanged(QColor) - GLObjectEditor - objectChanged() - - - 270 - 423 - - - 320 - 393 - - - - - comboLightType - currentIndexChanged(int) - GLObjectEditor - objectChanged() - - - 292 - 447 - - - 320 - 429 - - - - - spinLightIntensity - valueChanged(double) - GLObjectEditor - objectChanged() - - - 255 - 469 - - - 318 - 463 - - - - - spinLightDecayConst - valueChanged(double) - GLObjectEditor - objectChanged() - - - 303 - 492 - - - 320 - 489 - - - - - spinLightDecayLinear - valueChanged(double) - GLObjectEditor - objectChanged() - - - 289 - 511 - - - 318 - 517 - - - - - spinLightDecayQuadratic - valueChanged(double) - GLObjectEditor - objectChanged() - - - 299 - 535 - - - 325 - 543 - - - - - spinLightAngleStart - valueChanged(double) - GLObjectEditor - objectChanged() - - - 295 - 559 - - - 321 - 569 - - - - - spinLightAngleEnd - valueChanged(double) - GLObjectEditor - objectChanged() - - - 301 - 585 - - - 320 - 595 - - - - - spinLightDirectionX - valueChanged(double) - GLObjectEditor - objectChanged() - - - 302 - 612 - - - 332 - 607 - - - - - spinLightDirectionY - valueChanged(double) - GLObjectEditor - objectChanged() - - - 313 - 636 - - - 330 - 633 - - - - - spinLightDirectionZ - valueChanged(double) - GLObjectEditor - objectChanged() - - - 313 - 654 - - - 326 - 659 - - - - - - objectChanged() - -
    diff --git a/test/qglview/glparticles_system.cpp b/test/qglview/glparticles_system.cpp deleted file mode 100644 index ca83fa4..0000000 --- a/test/qglview/glparticles_system.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "glparticles_system.h" - - -GLParticlesSystem::GLParticlesSystem(const QVector3D & pos): GLObjectBase() { - pass_ = GLObjectBase::Transparent; - freq = 40.f; - birthRate_ = 10.f; - lifeDuration_ = 2.f; - fade_time = 0.5f; - size_ = 1.f; - additionalSpeed = 0.f; - initialSpeed_ = 1.f; - need_birth = -1.f; - tex_rect.setRect(0., 0., 1., 1.); - tex_scale = QSizeF(); - emitterPosition_ = pos; - emitterDirection_.setZ(1.); - speedDirection_.setZ(1.); - speedDecay_ = initialAngle_ = enlargeSpeed_ = enlargeSpeedJitter_ = baseAngle_ = 0.f; - lifeDurationJitter_ = speedJitter_ = speedDirectionJitter_ = sizeJitter_ = angleJitter_ = 0.f; - active_ = birthEnabled_ = true; - is_diffuse_anim = add_vert_face = false; - emitterType_ = Cone; - tick_life = 1.f / freq; - tick_birth = birthRate_ / freq; -} - - -void GLParticlesSystem::update() { - //qDebug() << "update" << need_birth << tick_birth; - if (!active_) return; - //QMutexLocker locker(&mutex); - Particle cp(lifeDuration_); - if (birthEnabled_) need_birth += tick_birth; - qDebug() << "update" << particles.size(); - if (need_birth >= 1.f) { - cp.pos = emitterPosition_; - //qDebug() << "speed" << cp.speed; - cp.speedDecay = 1.f + speedDecay_; - for (int i = 0; i < floor(need_birth); ++i) { - cp.lifeDuration = lifeDuration_ + urand(lifeDurationJitter_); - switch (emitterType_) { - case Omni: - cp.speed = QVector3D(urand(), urand(), urand()).normalized() * initialSpeed_ * (1.f + urand(speedJitter_)); - break; - case Cone: case Box: - cp.speed = emitterDirection_ * initialSpeed_ * (1.f + urand(speedJitter_)); - cp.speed += orthToVector(cp.speed, speedDirectionJitter_); - break; - } - if (emitterType_ == Box) - cp.pos = emitterRect_.randomPoint(); - //qDebug() << "before" << cp.speed.length(); - lengthenVector(cp.speed, additionalSpeed); - //qDebug() << "after" << cp.speed.length(); - cp.size = size_ + urand(sizeJitter_); - cp.angle = initialAngle_ + urand(angleJitter_); - cp.enlargeSpeed = (enlargeSpeed_ + urand(enlargeSpeedJitter_)) * tick_life; - /*if (is_diffuse_anim) { - if (material_.diffuse.animation_frame_rate < 0 && animation->bitmaps.size() > 0) - cp.animationFrameRate = animation->bitmaps.size() / cp.lifeDuration; - else - cp.animationFrameRate = material_.diffuse.animation_frame_rate; - }*/ - if (tex_scale.isEmpty()) cp.tex_rect.setSize(tex_rect.size()); - else cp.tex_rect.setSize(tex_rect.size() * tex_scale); - cp.tex_rect.moveTopLeft(tex_rect.topLeft() + QPointF(uprand(tex_rect.width() - cp.tex_rect.width()), uprand(tex_rect.height() - cp.tex_rect.height()))); - //cp.tex_rect = tex_rect; - particles.push_back(cp); - } - need_birth -= floor(need_birth); - } - for (int i = 0; i < particles.size(); ++i) { - Particle & c(particles[i]); - foreach (const QVector3D & f, forces) - c.speed += f; - c.lifeCurrent += tick_life; - //qDebug() << "life" << c.lifeCurrent << c.lifeDuration; - if (c.lifeCurrent > c.lifeDuration) { - //qDebug() << "remove" << i; - particles.remove(i); - i--; - continue; - } - c.pos += c.speed * tick_life; - c.speed /= c.speedDecay; - c.size += c.enlargeSpeed; - //if (c.lifeCurrent > 1.) c.angle += urand(5.); - } -} - - -void GLParticlesSystem::draw(QOpenGLShaderProgram * prog, bool) { - if (particles.isEmpty()) return; - if (view_ == nullptr) return; - pass_ = GLObjectBase::Transparent; - Camera * camera(view_->camera()); - QVector3D apos = camera->pos(), dir = camera->direction(); - //qDebug() << dir; - //qDebug() << camera.angles(); - //qDebug() << camera.angle_xy; - GLfloat cxyc, czs, czc; - GLfloat dx, dy, cdx, cdy, cdz, a, tr_r = material_.color_diffuse.redF(), - tr_g = material_.color_diffuse.greenF(), - tr_b = material_.color_diffuse.blueF(), - tr_a = material_.color_diffuse.alphaF() * (1.f - material_.transparency); - //cxys = sin(camera.angle_xy * deg2rad); - cxyc = cosf(camera->angles_.y() * deg2rad); - czs = sinf(camera->angles_.z() * deg2rad); - czc = cosf(camera->angles_.z() * deg2rad); - - dx = -czc; - dy = czs; - vertices.clear(); - texcoords.clear(); - colors.clear(); - for (int i = 0; i < particles.size(); ++i) - //particles[i].pos_h.setZ((particles[i].pos - apos).lengthSquared()); - particles[i].pos_h.setZ(particles[i].pos.distanceToPlane(apos, dir)); - qSort(particles.begin(), particles.end()); - glBegin(GL_POINTS); - foreach (const Particle & i, particles) { - //glVertex3f(i.pos.x(), i.pos.y(), i.pos.z()); - a = (i.lifeDuration - i.lifeCurrent) / fade_time; - if (a > 1.f) a = 1.f; - a *= tr_a; - cdx = dx * i.size; - cdy = dy * i.size; - cdz = i.size; - vertices << i.pos.x() - cdx << i.pos.y() - cdy << i.pos.z() - cdz; - vertices << i.pos.x() - cdx << i.pos.y() - cdy << i.pos.z() + cdz; - vertices << i.pos.x() + cdx << i.pos.y() + cdy << i.pos.z() + cdz; - vertices << i.pos.x() + cdx << i.pos.y() + cdy << i.pos.z() - cdz; - cdx = i.size; - cdy = i.size; - texcoords << i.tex_rect.right() << i.tex_rect.top(); - texcoords << i.tex_rect.right() << i.tex_rect.bottom(); - texcoords << i.tex_rect.left() << i.tex_rect.bottom(); - texcoords << i.tex_rect.left() << i.tex_rect.top(); - colors << tr_r << tr_g << tr_b << a; - colors << tr_r << tr_g << tr_b << a; - colors << tr_r << tr_g << tr_b << a; - colors << tr_r << tr_g << tr_b << a; - if (add_vert_face) { - if (cxyc > 0.f) { - vertices << i.pos.x() - cdx << i.pos.y() - cdy << i.pos.z(); - vertices << i.pos.x() + cdx << i.pos.y() - cdy << i.pos.z(); - vertices << i.pos.x() + cdx << i.pos.y() + cdy << i.pos.z(); - vertices << i.pos.x() - cdx << i.pos.y() + cdy << i.pos.z(); - } else { - vertices << i.pos.x() - cdx << i.pos.y() - cdy << i.pos.z(); - vertices << i.pos.x() - cdx << i.pos.y() + cdy << i.pos.z(); - vertices << i.pos.x() + cdx << i.pos.y() + cdy << i.pos.z(); - vertices << i.pos.x() + cdx << i.pos.y() - cdy << i.pos.z(); - } - texcoords << i.tex_rect.right() << i.tex_rect.top(); - texcoords << i.tex_rect.right() << i.tex_rect.bottom(); - texcoords << i.tex_rect.left() << i.tex_rect.bottom(); - texcoords << i.tex_rect.left() << i.tex_rect.top(); - colors << tr_r << tr_g << tr_b << a; - colors << tr_r << tr_g << tr_b << a; - colors << tr_r << tr_g << tr_b << a; - colors << tr_r << tr_g << tr_b << a; - } - } - glEnd(); - //bool cae = glIsEnabled(GL_COLOR_ARRAY), nae = glIsEnabled(GL_NORMAL_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - glBindBuffer(GL_ARRAY_BUFFER, 0); - //glNormal3f(vn.x(), vn.y(), vn.z()); - glNormal3f(0., 0., 1.); - glDepthMask(false); - glEnable(GL_COLOR_ARRAY); - glDisable(GL_NORMAL_ARRAY); - glVertexPointer(3, GL_FLOAT, 0, vertices.constData()); - glTexCoordPointer(2, GL_FLOAT, 0, texcoords.constData()); - glColorPointer(4, GL_FLOAT, 0, colors.constData()); - //glEnable(GL_ALPHA_TEST); - //glAlphaFunc(); - glDrawArrays(GL_QUADS, 0, vertices.size() / 3); - glDepthMask(true); - //glDisable(GL_ALPHA_TEST); - //if (!cae) glDisable(GL_COLOR_ARRAY); - //if (nae) glEnable(GL_NORMAL_ARRAY); -} - - - -GLParticlesSystem::Particle::Particle(float life_dur) { - size = 1.; - angle = lifeCurrent = 0.; - speedDecay = 0.; - lifeDuration = life_dur; - tex_rect = QRectF(0, 0, 1, 1); -} diff --git a/test/qglview/glparticles_system.h b/test/qglview/glparticles_system.h deleted file mode 100644 index d57525a..0000000 --- a/test/qglview/glparticles_system.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLPARTICLES_SYSTEM_H -#define GLPARTICLES_SYSTEM_H - -#include -#include "gltexture_manager.h" -#include "globject.h" -#include "glcamera.h" - -class GLParticlesSystem: public QObject, public GLObjectBase, protected QOpenGLFunctions -{ - Q_OBJECT - Q_PROPERTY(float birthRate READ birthRate WRITE setBirthRate) - Q_PROPERTY(float lifeDuration READ lifeDuration WRITE setLifeDuration) - Q_PROPERTY(float size READ size WRITE setSize) - Q_PROPERTY(float enlargeSpeed READ enlargeSpeed WRITE setEnlargeSpeed) - Q_PROPERTY(float initialAngle READ initialAngle WRITE setInitialAngle) - Q_PROPERTY(float initialSpeed READ initialSpeed WRITE setInitialSpeed) - Q_PROPERTY(float speedDecay READ speedDecay WRITE setSpeedDecay) - Q_PROPERTY(float baseAngle READ baseAngle WRITE setBaseAngle) - Q_PROPERTY(QVector3D speedDirection READ speedDirection WRITE setSpeedDirection) - Q_PROPERTY(QVector3D emitterPosition READ emitterPosition WRITE setEmitterPosition) - Q_PROPERTY(QVector3D emitterDirection READ emitterDirection WRITE setEmitterDirection) - Q_PROPERTY(float lifeDurationJitter READ lifeDurationJitter WRITE setLifeDurationJitter) - Q_PROPERTY(float speedJitter READ speedJitter WRITE setSpeedJitter) - Q_PROPERTY(float speedDirectionJitter READ speedDirectionJitter WRITE setSpeedDirectionJitter) - Q_PROPERTY(float sizeJitter READ sizeJitter WRITE setSizeJitter) - Q_PROPERTY(float enlargeSpeedJitter READ enlargeSpeedJitter WRITE setEnlargeSpeedJitter) - Q_PROPERTY(float angleJitter READ angleJitter WRITE setAngleJitter) - Q_PROPERTY(bool active READ isActive WRITE setActive) - Q_PROPERTY(bool birthEnabled READ isBirthEnabled WRITE setBirthEnabled) - Q_PROPERTY(float fadeTime READ fadeTime WRITE setFadeTime) -public: - GLParticlesSystem(const QVector3D & pos = QVector3D()); - ~GLParticlesSystem() {;} - - enum Type {Cone, Omni, Box}; - - struct Particle { - Particle(float life_dur = 40.); - QVector3D pos; - QVector3D pos_h; - QVector3D speed; - QRectF tex_rect; - float speedDecay; - float size; - float angle; - float enlargeSpeed; - float lifeDuration; - float lifeCurrent; - float animationFrameRate; - }; - - void update(); - void draw(QOpenGLShaderProgram * prog, bool); - - float birthRate() const {return birthRate_;} - float lifeDuration() const {return lifeDuration_;} - float size() const {return size_;} - float enlargeSpeed() const {return enlargeSpeed_;} - float initialAngle() const {return initialAngle_;} - float initialSpeed() const {return initialSpeed_;} - float speedDecay() const {return speedDecay_;} - float baseAngle() const {return baseAngle_;} - QVector3D speedDirection() const {return speedDirection_;} - QVector3D emitterPosition() const {return emitterPosition_;} - QVector3D emitterDirection() const {return emitterDirection_;} - Box3D emitterRect() const {return emitterRect_;} - float lifeDurationJitter() const {return lifeDurationJitter_;} - float speedJitter() const {return speedJitter_;} - float speedDirectionJitter() const {return speedDirectionJitter_;} - float sizeJitter() const {return sizeJitter_;} - float enlargeSpeedJitter() const {return enlargeSpeedJitter_;} - float angleJitter() const {return angleJitter_;} - bool isActive() const {return active_;} - bool isBirthEnabled() const {return birthEnabled_;} - GLParticlesSystem::Type emitterType() const {return emitterType_;} - float fadeTime() const {return fade_time;} - bool isAddVerticalFaceEnabled() const {return add_vert_face;} - - void setBirthRate(const float & arg) {birthRate_ = arg; tick_birth = birthRate_ / freq;} - void setLifeDuration(const float & arg) {lifeDuration_ = arg;} - void setSize(const float & arg) {size_ = arg;} - void setEnlargeSpeed(const float & arg) {enlargeSpeed_ = arg;} - void setInitialAngle(const float & arg) {initialAngle_ = arg;} - void setInitialSpeed(const float & arg) {initialSpeed_ = arg;} - void setBaseAngle(const float & arg) {baseAngle_ = arg;} - void setSpeedDecay(const float & arg) {speedDecay_ = arg;} - void setSpeedDirection(const QVector3D & arg) {speedDirection_ = arg;} - void setEmitterPosition(const QVector3D & arg) {emitterPosition_ = arg;} - void setEmitterDirection(const QVector3D & arg) {emitterDirection_ = arg.normalized();} - void setEmitterRect(const Box3D & arg) {emitterRect_ = arg;} - void setLifeDurationJitter(const float & arg) {lifeDurationJitter_ = arg;} - void setSpeedJitter(const float & arg) {speedJitter_ = arg;} - void setSpeedDirectionJitter(const float & arg) {speedDirectionJitter_ = arg;} - void setSizeJitter(const float & arg) {sizeJitter_ = arg;} - void setEnlargeSpeedJitter(const float & arg) {enlargeSpeedJitter_ = arg;} - void setActive(const bool & arg) {active_ = arg;} - void setAngleJitter(const float & arg) {angleJitter_ = arg;} - void setBirthEnabled(const bool & arg) {birthEnabled_ = arg;} - void setEmitterType(const GLParticlesSystem::Type & arg) {emitterType_ = arg;} - void setFadeTime(const float & arg) {fade_time = arg;} - void setAddVerticalFaceEnabled(const bool & arg) {add_vert_face = arg;} - void setTextureRect(const QRectF & arg) {tex_rect = arg;} - void setTextureScale(const float & x, const float & y) {tex_scale = QSizeF(x, y);} - void setTextureScale(const QSizeF & arg) {tex_scale = arg;} - - void addForce(const QVector3D & f) {forces << f;} - void birthParticles(int count) {need_birth += count;} - - float frequency() const {return freq;} - void setFrequency(const float & f) {freq = f;} - - float additionalSpeed; - -private: - QVector3D speedDirection_, emitterPosition_, emitterDirection_; - QRectF tex_rect; - QSizeF tex_scale; - Box3D emitterRect_; - QMutex mutex; - GLParticlesSystem::Type emitterType_; - GLTextureManager::Animation * animation; - QVector vertices, texcoords, colors; - QVector particles; - QVector forces; - float birthRate_, initialSpeed_, speedDecay_, lifeDuration_, size_, freq, need_birth, tick_birth, tick_life, fade_time; - float lifeDurationJitter_, speedJitter_, speedDirectionJitter_, sizeJitter_, angleJitter_, initialAngle_; - float enlargeSpeed_, enlargeSpeedJitter_, baseAngle_; - bool active_, birthEnabled_, is_diffuse_anim, add_vert_face; - -}; - -inline bool operator <(const GLParticlesSystem::Particle & f, const GLParticlesSystem::Particle & s) {return f.pos_h.z() > s.pos_h.z();} - -#endif // GLPARTICLES_SYSTEM_H diff --git a/test/qglview/glprimitives.cpp b/test/qglview/glprimitives.cpp deleted file mode 100644 index 7d307db..0000000 --- a/test/qglview/glprimitives.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "glprimitives.h" - - -void GLPrimitivePoint::draw(QOpenGLShaderProgram * prog, bool simplest) { - glPointSize(sz); - glColor3f(material_.color_diffuse.redF(), material_.color_diffuse.greenF(), material_.color_diffuse.blueF()); - glBegin(GL_POINTS); - glVertex3d(0., 0., 0.); - glEnd(); -} - - - -void GLPrimitiveLine::draw(QOpenGLShaderProgram * prog, bool simplest) { - glColor3f(material_.color_diffuse.redF(), material_.color_diffuse.greenF(), material_.color_diffuse.blueF()); - glBegin(GL_LINES); - glVertex3f(p0.x(), p0.y(), p0.z()); - glVertex3f(p1.x(), p1.y(), p1.z()); - glEnd(); -} - - - -GLPrimitiveCube::GLPrimitiveCube(float width, float length, float height, QVector3D pos): GLObjectBase() { - geom_prim = Quads; - w = width; - l = length; - h = height; - moveTo(pos); - //init(); -} - - -void GLPrimitiveCube::init() { - float hw = w / 2.f, hl = l / 2.f, hh = h / 2.f; - //list = glGenLists(1); - //glNewList(list, GL_COMPILE); - //glColor4d(material_.color_diffuse.redF(), material_.color_diffuse.greenF(), material_.color_diffuse.blueF(), material_.color_diffuse.alphaF()); - vbo.init(); - QVector & d_vertices(vbo.vertices()), & d_normals(vbo.normals()), & d_uvs(vbo.texcoords()); - d_vertices.clear(); - d_normals.clear(); - d_uvs.clear(); - for (int i = 0; i < 4; ++i) - d_normals << 0. << -1. << 0.; - d_vertices << -hw << -hl << -hh; - d_vertices << hw << -hl << -hh; - d_vertices << hw << -hl << hh; - d_vertices << -hw << -hl << hh; - d_uvs << 0. << 0. << 1. << 0. << 1. << 1. << 0. << 1.; - for (int i = 0; i < 4; ++i) - d_normals << 0. << 1. << 0.; - d_vertices << -hw << hl << -hh; - d_vertices << -hw << hl << hh; - d_vertices << hw << hl << hh; - d_vertices << hw << hl << -hh; - d_uvs << 0. << 0. << 1. << 0. << 1. << 1. << 0. << 1.; - for (int i = 0; i < 4; ++i) - d_normals << -1. << 0. << 0.; - d_vertices << -hw << -hl << -hh; - d_vertices << -hw << -hl << hh; - d_vertices << -hw << hl << hh; - d_vertices << -hw << hl << -hh; - d_uvs << 0. << 0. << 1. << 0. << 1. << 1. << 0. << 1.; - for (int i = 0; i < 4; ++i) - d_normals << 1. << 0. << 0.; - d_vertices << hw << -hl << -hh; - d_vertices << hw << hl << -hh; - d_vertices << hw << hl << hh; - d_vertices << hw << -hl << hh; - d_uvs << 0. << 0. << 1. << 0. << 1. << 1. << 0. << 1.; - for (int i = 0; i < 4; ++i) - d_normals << 0. << 0. << -1.; - d_vertices << -hw << -hl << -hh; - d_vertices << -hw << hl << -hh; - d_vertices << hw << hl << -hh; - d_vertices << hw << -hl << -hh; - d_uvs << 0. << 0. << 1. << 0. << 1. << 1. << 0. << 1.; - for (int i = 0; i < 4; ++i) - d_normals << 0. << 0. << 1.; - d_vertices << -hw << -hl << hh; - d_vertices << hw << -hl << hh; - d_vertices << hw << hl << hh; - d_vertices << -hw << hl << hh; - d_uvs << 0. << 0. << 1. << 0. << 1. << 1. << 0. << 1.; - is_init = true; - vbo.rebuffer(); -} - - -GLPrimitiveEllipsoid::GLPrimitiveEllipsoid(float width, float length, float height, int seg_wl, int seg_h, QVector3D pos) { - geom_prim = GLObjectBase::Triangles; - w = width; - l = length; - h = height; - swl = seg_wl; - sh = seg_h; - moveTo(pos); - //init(); -} - - -void GLPrimitiveEllipsoid::putTriangle(const QVector3D & v0, const QVector3D & v1, const QVector3D & v2) { - vbo.vertices() << v0.x() << v0.y() << v0.z() << v1.x() << v1.y() << v1.z() << v2.x() << v2.y() << v2.z(); - QVector3D n = QVector3D::normal(v1 - v0, v2 - v0); - for (int i = 0; i < 3; ++i) - vbo.normals() << n.x() << n.y() << n.z(); - return; - QVector3D s(w, l, h); - n = (v0 * s).normalized(); vbo.normals() << n.x() << n.y() << n.z(); - n = (v1 * s).normalized(); vbo.normals() << n.x() << n.y() << n.z(); - n = (v2 * s).normalized(); vbo.normals() << n.x() << n.y() << n.z(); -} - - -void GLPrimitiveEllipsoid::init() { - QVector points; - vbo.clear(); - vbo.init(); - int ret = 0; - int hseg = sh + 1, wlseg = swl + 1; - float crw, crl, a, ch, twl; - QVector3D cp(0., 0., -h / 2.f); - points << cp; - for (int i = 1; i < hseg; i++) { - ch = -cosf((float)i / hseg * float(M_PI)); - cp.setZ(ch * h / 2.f); - twl = sqrtf(1.f - ch * ch) / 2.f; - crw = twl * w; - crl = twl * l; - for (int j = 0; j < wlseg * 2; j++) { - a = (float)j / wlseg * float(M_PI); - cp.setY(crw * sinf(a)); - cp.setX(crl * cosf(a)); - points << cp; - ret = points.size() - 1; - if (i == 1) - if (j > 0) putTriangle(points[0], points[ret], points[ret - 1]); - if (j > 0) { - if (i > 1) { - putTriangle(points[ret - wlseg * 2 - 1], points[ret], points[ret - 1]); - putTriangle(points[ret - wlseg * 2], points[ret], points[ret - wlseg * 2 - 1]); - } - } - } - if (i == 1) putTriangle(points[0], points[ret - wlseg * 2 + 1], points[ret]); - else { - putTriangle(points[ret - wlseg * 2 + 1], points[ret], points[ret - wlseg * 2]); - putTriangle(points[ret - wlseg * 2 + 1], points[ret - wlseg * 2], points[ret - wlseg * 4 + 1]); - } - } - points << QVector3D(0., 0., h / 2.f); - ret = points.size() - 1; - putTriangle(points[ret - 1], points[ret - wlseg * 2], points[ret]); - for (int j = 1; j < wlseg * 2; j++) - if (j > 0) putTriangle(points[ret - wlseg * 2 + j - 1], points[ret - wlseg * 2 + j], points[ret]); - is_init = true; - vbo.rebuffer(); -} - - -void GLPrimitiveAxis::draw(QOpenGLShaderProgram * prog, bool simplest) { - float bs = 1.f; - float as = 0.1f; - float aw = 0.07f; - float cr_x = 0.8f, cg_y = 0.75f, cb_z = 0.8f; - glBegin(GL_LINES); - glColor3f(cr_x, 0, 0); - glVertex3f(-bs, 0, 0); - glVertex3f(bs, 0, 0); - glVertex3f(bs, 0, 0); - glVertex3f(bs-as, aw, 0); - glVertex3f(bs, 0, 0); - glVertex3f(bs-as, -aw, 0); - glVertex3f(bs, 0, 0); - glVertex3f(bs-as, 0, aw); - glVertex3f(bs, 0, 0); - glVertex3f(bs-as, 0, -aw); - glColor3f(0, cg_y, 0); - glVertex3f(0, -bs, 0); - glVertex3f(0, bs, 0); - glVertex3f(0, bs, 0); - glVertex3f(0, bs-as, aw); - glVertex3f(0, bs, 0); - glVertex3f(0, bs-as, -aw); - glVertex3f(0, bs, 0); - glVertex3f(aw, bs-as, 0); - glVertex3f(0, bs, 0); - glVertex3f(-aw, bs-as, 0); - glColor3f(0, 0, cb_z); - glVertex3f(0, 0, -bs); - glVertex3f(0, 0, bs); - glVertex3f(0, 0, bs); - glVertex3f(aw, 0, bs-as); - glVertex3f(0, 0, bs); - glVertex3f(-aw, 0, bs-as); - glVertex3f(0, 0, bs); - glVertex3f(0, aw, bs-as); - glVertex3f(0, 0, bs); - glVertex3f(0, -aw, bs-as); - glEnd(); -} diff --git a/test/qglview/glprimitives.h b/test/qglview/glprimitives.h deleted file mode 100644 index ad3e8f1..0000000 --- a/test/qglview/glprimitives.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLPRIMITIVE_CUBE_H -#define GLPRIMITIVE_CUBE_H - -#include "globject.h" - - -class GLPrimitivePoint: public GLObjectBase -{ -public: - GLPrimitivePoint(double size = 1., QVector3D pos = QVector3D()) {sz = 8.;} - virtual void draw(QOpenGLShaderProgram * prog, bool simplest = false); -private: - double sz; -}; - - - - -class GLPrimitiveLine: public GLObjectBase -{ -public: - GLPrimitiveLine(QVector3D p0_ = QVector3D(), QVector3D p1_ = QVector3D()) {p0 = p0_; p1 = p1_;} - virtual void draw(QOpenGLShaderProgram * prog, bool simplest = false); - QVector3D point0() const {return p0;} - QVector3D point1() const {return p1;} - void setPoint0(const QVector3D & p) {p0 = p;} - void setPoint1(const QVector3D & p) {p1 = p;} -private: - QVector3D p0, p1; -}; - - - - -class GLPrimitiveCube: public GLObjectBase -{ -public: - GLPrimitiveCube(float width = 1., float length = 1., float height = 1., QVector3D pos = QVector3D()); - virtual void init(); -private: - float w, l, h; -}; - - - - -class GLPrimitiveEllipsoid: public GLObjectBase -{ -public: - GLPrimitiveEllipsoid(float width = 1., float length = 1., float height = 1., int seg_wl = 10, int seg_h = 10, QVector3D pos = QVector3D()); - virtual void init(); -private: - void putTriangle(const QVector3D & v0, const QVector3D & v1, const QVector3D & v2); - float w, l, h; - int swl, sh; -}; - - -class GLPrimitiveAxis: public GLObjectBase -{ -public: - GLPrimitiveAxis() {accept_fog = accept_light = cast_shadow = rec_shadow = select_ = false;} - virtual void draw(QOpenGLShaderProgram * prog, bool simplest = false); -}; - - -#endif // GLPRIMITIVE_CUBE_H diff --git a/test/qglview/glrendererbase.cpp b/test/qglview/glrendererbase.cpp deleted file mode 100644 index 8eac634..0000000 --- a/test/qglview/glrendererbase.cpp +++ /dev/null @@ -1,321 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "glrendererbase.h" -#include "globject.h" -#include "qglview.h" - - -GLRendererBase::GLRendererBase(QGLView * view_): view(*view_) { - white_image = QImage(1, 1, QImage::Format_ARGB32); - white_image.fill(0xFFFFFFFF); - white_image_id = 0; - violent_image = QImage(1, 1, QImage::Format_ARGB32); - violent_image.fill(QColor(127, 127, 255)); - violent_image_id = 0; -} - - -void GLRendererBase::setupLight(const Light & l, int inpass_index, int gl_index) { - QVector3D lp = l.worldPos(), ld = (l.itransform_ * QVector4D(l.direction, 0.)).toVector3D().normalized(); - GLfloat pos[] = {0.f, 0.f, 0.f, 0.f}; - GLfloat dir[] = {0.f, 0.f, 0.f}; - GLfloat col[] = {0.f, 0.f, 0.f}; - pos[0] = l.light_type == Light::Directional ? -l.direction.x() : lp.x(); - pos[1] = l.light_type == Light::Directional ? -l.direction.y() : lp.y(); - pos[2] = l.light_type == Light::Directional ? -l.direction.z() : lp.z(); - pos[3] = l.light_type == Light::Directional ? 0. : 1.; - dir[0] = ld.x(); - dir[1] = ld.y(); - dir[2] = ld.z(); - col[0] = l.visible_ ? l.color().redF() * l.intensity : 0.f; - col[1] = l.visible_ ? l.color().greenF() * l.intensity : 0.f; - col[2] = l.visible_ ? l.color().blueF() * l.intensity : 0.f; - glEnable(gl_index); - //glLightfv(gl_index, GL_AMBIENT, ambient); - glLightfv(gl_index, GL_DIFFUSE, col); - glLightfv(gl_index, GL_SPECULAR, col); - glLightfv(gl_index, GL_POSITION, pos); - glLightf(gl_index, GL_CONSTANT_ATTENUATION, l.decay_const); - glLightf(gl_index, GL_LINEAR_ATTENUATION, l.decay_linear); - glLightf(gl_index, GL_QUADRATIC_ATTENUATION, l.decay_quadratic); - if (l.light_type == Light::Cone) { - glLightfv(gl_index, GL_SPOT_DIRECTION, dir); - glLightf(gl_index, GL_SPOT_CUTOFF, l.angle_end / 2.f); - glLightf(gl_index, GL_SPOT_EXPONENT, (1.f - piClamp((l.angle_end - l.angle_start) / (l.angle_end + 0.001f), 0., 1.f)) * 128.f); - } else { - glLightf(gl_index, GL_SPOT_CUTOFF, 180.); - } - -} - - -void GLRendererBase::setupAmbientLight(const QColor & a, bool first_pass) { - GLfloat ambient[] = {0.0f, 0.0f, 0.0f, 1.f}; - if (first_pass) { - ambient[0] = view.ambientColor_.redF(); - ambient[1] = view.ambientColor_.greenF(); - ambient[2] = view.ambientColor_.blueF(); - } - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); -} - - -void GLRendererBase::setupShadersLights(int lights_count) { - /*foreach (QOpenGLShaderProgram * i, view.shaders_ppl) { - i->bind(); - i->setUniformValue("lightsCount", lights_count); - i->setUniformValue("acc_light", lights_count > 0); - //i->setUniformValue("mat", mvm); - }*/ -} - - -#define BIND_TEXTURE(ch, map) if (rp.prev_tex[ch] != mat.map.bitmap_id) { \ - rp.prev_tex[ch] = mat.map.bitmap_id; \ - glActiveTexture(GL_TEXTURE0 + ch); glBindTexture(GL_TEXTURE_2D, mat.map.bitmap_id); \ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, view.feature(QGLView::qglAnisotropicLevel).toInt());} - -void GLRendererBase::setupTextures(GLObjectBase & o, GLRendererBase::RenderingParameters & rp, bool first_object) { - if (first_object) { - view.glReleaseTextures(); - return; - } - setupShadersTextures(o, rp); - Material & mat(o.material_); - if (rp.light) { - if (o.accept_light) {if (!rp.prev_light) {glSetLightEnabled(true); rp.prev_light = true;}} - else {if (rp.prev_light) {glSetLightEnabled(false); rp.prev_light = false;}} - } - if (rp.fog) { - if (o.accept_fog) {if (!rp.prev_fog) {glSetFogEnabled(true); rp.prev_fog = true;}} - else {if (rp.prev_fog) {glSetFogEnabled(false); rp.prev_fog = false;}} - } - if (rp.textures) { - BIND_TEXTURE(0, map_diffuse) - BIND_TEXTURE(1, map_normal) - BIND_TEXTURE(2, map_relief) - BIND_TEXTURE(3, map_self_illumination) - BIND_TEXTURE(4, map_specularity) - BIND_TEXTURE(5, map_specular) - glActiveTexture(GL_TEXTURE0); - } -} - -#undef BIND_TEXTURE - - -void GLRendererBase::setupLights(int pass, int lights_per_pass) { - int light_start, light_end, lmax; - light_start = pass * lights_per_pass; - light_end = qMin((pass + 1) * lights_per_pass, view.lights_.size()); - setupAmbientLight(view.ambientColor_, pass == 0); - if (!view.lights_.isEmpty()) { - setupShadersLights(light_end - light_start); - for (int i = light_start; i < light_end; ++i) - setupLight(*view.lights_[i], i - light_start, GL_LIGHT0 + i - light_start); - lmax = light_start + 8; - for (int i = light_end; i < lmax; ++i) - glDisable(GL_LIGHT0 + i - light_start); - } else { - setupShadersLights(0); - for (int i = 0; i < 8; ++i) - glDisable(GL_LIGHT0 + i); - } -} - - -void GLRendererBase::applyFilteringParameters() { - if (view.isFeatureEnabled(QGLView::qglLinearFiltering)) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); - } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, view.feature(QGLView::qglAnisotropicLevel).toInt()); -} - - -void GLRendererBase::renderObjects(int pass, int light_pass, void * shaders, bool textures, bool light, bool fog) { - RenderingParameters rpl; - rpl.pass = pass; - rpl.light_pass = light_pass; - rpl.shaders = shaders; - rpl.textures = textures; - rpl.light = rpl.prev_light = light; - rpl.fog = rpl.prev_fog = fog; - rpl.view_matrix = rp.view_matrix; - rpl.prev_view_matrix = rp.prev_view_matrix; - rpl.proj_matrix = rp.proj_matrix; - rpl.prev_proj_matrix = rp.prev_proj_matrix; - rpl.cam_offset_matrix = view.camera()->offsetMatrix(); - //qDebug() << "view:" << rp.view_matrix; - for (int i = 0; i < 32; ++i) rpl.prev_tex[i] = 0; - setupTextures(view.objects_, rpl, true); - glSetLightEnabled(rpl.prev_light); - glSetFogEnabled(rpl.prev_fog); - glSetCapEnabled(GL_TEXTURE_2D, rpl.textures); - glSetCapEnabled(GL_BLEND, pass == GLObjectBase::Transparent); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_TEXTURE_CUBE_MAP); - glPushMatrix(); - renderSingleObject(view.objects_, rpl); - glPopMatrix(); -} - - -void GLRendererBase::renderSingleObject(GLObjectBase & o, RenderingParameters & rpl) { - if (!o.isInit()) - o.init(); - if (!o.isTexturesLoaded()) - o.loadTextures(); - if (!o.visible_) return; - if (rpl.pass == o.pass_) { - Material & mat(o.material_); - QMatrix4x4 curview = rpl.view_matrix * rpl.cam_offset_matrix * o.itransform_, prevview = rpl.prev_view_matrix * rpl.cam_offset_matrix * o.itransform_; - setupTextures(o, rpl, false); - mat.apply((QOpenGLShaderProgram*)rpl.shaders); - glSetPolygonMode(o.render_mode != GLObjectBase::View ? o.render_mode : (view.rmode != GLObjectBase::View ? view.rmode : GL_FILL)); - glLineWidth(o.line_width > 0.f ? o.line_width : view.lineWidth_); - glPointSize(o.line_width > 0.f ? o.line_width : view.lineWidth_); - o.update(); - if (o.pass_ == GLObjectBase::Transparent) { - glActiveTexture(GL_TEXTURE0 + 3); - if (mat.reflectivity > 0.f) { - glEnable(GL_TEXTURE_CUBE_MAP); - if (!mat.map_reflection.isEmpty()) mat.map_reflection.bind(); - else glDisable(GL_TEXTURE_CUBE_MAP); - } else glDisable(GL_TEXTURE_CUBE_MAP); - if (rpl.light_pass > 0) glDisable(GL_TEXTURE_CUBE_MAP); - GLfloat gm[16], bc[4] = {mat.reflectivity, mat.reflectivity, mat.reflectivity, mat.reflectivity}; - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); - glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, bc); - glGetFloatv(GL_MODELVIEW_MATRIX, gm); - glMatrixMode(GL_TEXTURE); - ///glLoadTransposeMatrixf(gm); - glScalef(-1., -1., -1.); - glMatrixMode(GL_MODELVIEW); - glActiveTexture(GL_TEXTURE0); - } - if (rpl.shaders) { - //qDebug() << o.name() << curview << curview.determinant(); - setUniformMatrices((QOpenGLShaderProgram*)rpl.shaders, rpl.proj_matrix, curview, rpl.prev_proj_matrix, prevview); - } else { - glMatrixMode(GL_MODELVIEW); - setGLMatrix(curview); - } - o.draw((QOpenGLShaderProgram*)rpl.shaders); - } - foreach (GLObjectBase * i, o.children_) - renderSingleObject(*i, rpl); -} - - -void GLRendererBase::renderShadow(Light * l, QOpenGLShaderProgram * prog, QMatrix4x4 mat) { - Camera cam; - QVector3D wp = l->worldPos(); - cam.setPos(wp); - cam.setAim(wp + (/*l->worldTransform() */ QVector4D(l->direction)).toVector3D()); - cam.setDepthStart(view.camera()->depthStart()); - cam.setDepthEnd(view.camera()->depthEnd()); - cam.setFOV(l->angle_end); - cam.apply(1.); - /*cam.rotateXY(l->angle_end); - QVector3D rdir = l->direction * cos(l->angle_end / 2. * deg2rad); - l->dir0 = cam.direction() - rdir; - cam.rotateXY(-l->angle_end); - cam.rotateZ(l->angle_end); - l->dir1 = cam.direction() - rdir;*/ - //qDebug() << rdir << l->dir0 << l->dir1; - RenderingParameters rpl; - rpl.pass = GLObjectBase::Solid; - rpl.shaders = prog; - rpl.textures = rpl.light = rpl.fog = false; - rpl.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX); - rpl.proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX); - rpl.cam_offset_matrix = cam.offsetMatrix(); - QMatrix4x4 mbias; - mbias.scale(0.5, 0.5, 0.5); - mbias.translate(1., 1., 1.); - l->shadow_matrix = mbias*rpl.proj_matrix*rpl.view_matrix*rpl.cam_offset_matrix*mat;//;// * mbias; - //qDebug() << mbias; - //glPushMatrix(); - renderSingleShadow(view.objects_, rpl); - //glPopMatrix(); -} - - -void GLRendererBase::renderSingleShadow(GLObjectBase & o, RenderingParameters & rpl) { - if (!o.isInit()) - o.init(); - if (!o.visible_) return; - if (rpl.shaders) { - //qDebug() << o.name() << curview << curview.determinant(); - setUniformMatrices((QOpenGLShaderProgram*)rpl.shaders, rpl.proj_matrix, rpl.view_matrix * rpl.cam_offset_matrix * o.itransform_); - } else { - glMatrixMode(GL_MODELVIEW); - setGLMatrix(rpl.view_matrix * rpl.cam_offset_matrix * o.itransform_); - } - glPolygonMode(GL_FRONT_AND_BACK, o.render_mode != GLObjectBase::View ? o.render_mode : (view.rmode != GLObjectBase::View ? view.rmode : GL_FILL)); - glLineWidth(o.line_width > 0.f ? o.line_width : view.lineWidth_); - glPointSize(o.line_width > 0.f ? o.line_width : view.lineWidth_); - o.draw((QOpenGLShaderProgram*)rpl.shaders, true); - foreach (GLObjectBase * i, o.children_) - renderSingleShadow(*i, rpl); -} - - - - -GLRendererBase::RenderingParameters::RenderingParameters() { - shaders = nullptr; - cur_shader = nullptr; -} - - -void GLRendererBase::RenderingParameters::prepare() { - proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX); - view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX); - viewproj_matrix = proj_matrix * view_matrix; - normal_matrix = view_matrix.normalMatrix(); - proj_matrix_i = proj_matrix.inverted(); - view_matrix_i = view_matrix.inverted(); - viewproj_matrix_i = viewproj_matrix.inverted(); -} - - -void GLRendererBase::RenderingParameters::setUniform(QOpenGLShaderProgram * prog) { - if (!prog) return; - prog->setUniformValue("qgl_ModelViewMatrix", view_matrix); - prog->setUniformValue("qgl_ProjectionMatrix", proj_matrix); - prog->setUniformValue("qgl_ModelViewProjectionMatrix", viewproj_matrix); - prog->setUniformValue("qgl_NormalMatrix", normal_matrix); - prog->setUniformValue("qgl_ModelViewMatrixInverse", view_matrix_i); - prog->setUniformValue("qgl_ProjectionMatrixInverse", proj_matrix_i); - prog->setUniformValue("qgl_ModelViewProjectionMatrixInverse", viewproj_matrix_i); - prog->setUniformValue("qgl_ModelViewMatrixTranspose", view_matrix.transposed()); - prog->setUniformValue("qgl_ProjectionMatrixTranspose", proj_matrix.transposed()); - prog->setUniformValue("qgl_ModelViewProjectionMatrixTranspose", viewproj_matrix.transposed()); - prog->setUniformValue("qgl_ModelViewMatrixInverseTranspose", view_matrix_i.transposed()); - prog->setUniformValue("qgl_ProjectionMatrixInverseTranspose", proj_matrix_i.transposed()); - prog->setUniformValue("qgl_ModelViewProjectionMatrixInverseTranspose", viewproj_matrix_i.transposed()); -} diff --git a/test/qglview/glrendererbase.h b/test/qglview/glrendererbase.h deleted file mode 100644 index 74542f2..0000000 --- a/test/qglview/glrendererbase.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLRENDERERBASE_H -#define GLRENDERERBASE_H - -#include "glcamera.h" -#include "glshaders.h" - -class GLRendererBase: public QObject , protected QOpenGLExtraFunctions -{ - friend class QGLView; - Q_OBJECT -public: - GLRendererBase(QGLView * view_); - virtual void prepareScene() {;} - virtual void renderScene() = 0; - - struct RenderingParameters { - RenderingParameters(); - void prepare(); - void setUniform(QOpenGLShaderProgram * prog); - int pass; - int light_pass; - bool light; - bool fog; - bool textures; - bool prev_light; - bool prev_fog; - GLuint prev_tex[32]; - void * shaders; - QMatrix4x4 view_matrix, view_matrix_i, prev_view_matrix; - QMatrix4x4 proj_matrix, proj_matrix_i, prev_proj_matrix; - QMatrix4x4 viewproj_matrix, viewproj_matrix_i; - QMatrix3x3 normal_matrix; - QMatrix4x4 cam_offset_matrix; - QOpenGLShaderProgram * cur_shader; - }; - - RenderingParameters rp; - -protected: - virtual void setupLight(const Light & l, int inpass_index, int gl_index); - virtual void setupAmbientLight(const QColor & a, bool first_pass); - virtual void setupShadersLights(int lights_count); - virtual void setupTextures(GLObjectBase & object, GLRendererBase::RenderingParameters & rp, bool first_object = false); - virtual void setupShadersTextures(GLObjectBase & object, GLRendererBase::RenderingParameters & rp) {} - virtual void reloadShaders() {} - virtual void init(int width, int height) {} - virtual void resize(int width, int height) {} - - void setupLights(int pass, int lights_per_pass); - inline void applyFilteringParameters(); - void renderObjects(int pass, int light_pass, void * shaders = 0, bool textures = true, bool light = true, bool fog = true); - void renderSingleObject(GLObjectBase & o, RenderingParameters & rpl); - void renderShadow(Light * l, QOpenGLShaderProgram * prog = 0, QMatrix4x4 mat = QMatrix4x4()); - void renderSingleShadow(GLObjectBase & o, RenderingParameters & rpl); - - QGLView & view; - QImage white_image, violent_image; - GLuint white_image_id, violent_image_id; - -}; - -#endif // GLRENDERERBASE_H diff --git a/test/qglview/glshaders.cpp b/test/qglview/glshaders.cpp deleted file mode 100644 index 151e77b..0000000 --- a/test/qglview/glshaders.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "gltypes.h" -#include "qglview.h" - -const char qgl_vertex_head[] = - "in vec3 _qgl_Vertex;\n" - "in vec3 qgl_Normal;\n" - "in vec3 qgl_Tangent;\n" - "in vec3 qgl_Bitangent;\n" - "in vec2 qgl_Texture;\n" - "in vec4 qgl_Color;\n" - "out vec2 qgl_FragTexture;\n" - "out vec4 qgl_FragColor;\n" - "vec4 qgl_Vertex = vec4(_qgl_Vertex, 1.);\n" - "vec4 qgl_ftransform() {return qgl_ModelViewProjectionMatrix * qgl_Vertex;}\n"; - -const char qgl_fragment_head[] = - "in vec2 qgl_FragTexture;\n" - "in vec4 qgl_FragColor;\n" - "out vec4 qgl_FragData[gl_MaxDrawBuffers];\n"; - -const char qgl_uniform[] = - "uniform mat4 qgl_ModelViewMatrix;\n" - "uniform mat4 qgl_ProjectionMatrix;\n" - "uniform mat4 qgl_ModelViewProjectionMatrix;\n" - "uniform mat3 qgl_NormalMatrix;\n" - "uniform mat4 qgl_ModelViewMatrixInverse;\n" - "uniform mat4 qgl_ProjectionMatrixInverse;\n" - "uniform mat4 qgl_ModelViewProjectionMatrixInverse;\n" - "uniform mat4 qgl_ModelViewMatrixTranspose;\n" - "uniform mat4 qgl_ProjectionMatrixTranspose;\n" - "uniform mat4 qgl_ModelViewProjectionMatrixTranspose;\n" - "uniform mat4 qgl_ModelViewMatrixInverseTranspose;\n" - "uniform mat4 qgl_ProjectionMatrixInverseTranspose;\n" - "uniform mat4 qgl_ModelViewProjectionMatrixInverseTranspose;\n"; - -const char qgl_structs[] = - "const int qgl_MaxLights = 8;\n" - "struct QGLLight {\n" - " vec4 color;\n" - " vec4 position;\n" - " vec4 direction;\n" - " float intensity;\n" - " float startAngle;\n" - " float startAngleCos;\n" - " float endAngle;\n" - " float endAngleCos;\n" - " float constantAttenuation;\n" - " float linearAttenuation;\n" - " float quadraticAttenuation;\n" - " sampler2DShadow shadow;\n" - //" sampler2D shadowColor\n" - " mat4 shadowMatrix;\n" - //" vec4 shadowDir0;\n" - //" vec4 shadowDir1;\n" - "};\n" - "struct QGLMap {\n" - " float offset;\n" - " float amount;\n" - " sampler2D map;\n" - "};\n" - "struct QGLMaterial {\n" - " float transparency;\n" - " float reflectivity;\n" - " float iof;\n" - " float dispersion;\n" - " vec4 color_diffuse;\n" - " vec4 color_specular;\n" - " vec4 color_self_illumination;\n" - " QGLMap map_diffuse;\n" - " QGLMap map_normal;\n" - " QGLMap map_relief;\n" - " QGLMap map_self_illumination;\n" - " QGLMap map_specularity;\n" - " QGLMap map_specular;\n" - "};\n" - "uniform QGLLight qgl_AmbientLight;\n" - "uniform QGLLight qgl_Light[qgl_MaxLights];\n" - "uniform QGLMaterial qgl_Material;\n"; - - -QString loadShaderFile(QOpenGLShaderProgram * prog, QOpenGLShader::ShaderType type, const QString & file) { - QFile f(file); - if (!f.open(QIODevice::ReadOnly)) return ""; - QString all = QString::fromUtf8(f.readAll()); - int i = all.indexOf("#version"); - QString version = all.mid(i + 8, all.indexOf("\n", i) - i - 8).trimmed(); - if (version.toInt() >= 150) { - int ip = all.indexOf("\n", i); - if (ip < 0) return all; - if (type == QOpenGLShader::Vertex) { - all.insert(ip + 1, qgl_vertex_head); - } - if (type == QOpenGLShader::Fragment) { - all.insert(ip + 1, qgl_fragment_head); - } - all.insert(ip + 1, qgl_structs); - all.insert(ip + 1, qgl_uniform); - } - prog->addShaderFromSourceCode(type, all); -// qDebug() << "********" << all; - return all; -} - - -bool loadShaders(QOpenGLShaderProgram * prog, const QString & name, const QString & dir) { - prog->removeAllShaders(); - QDir d(dir); - QFileInfoList sl; - //qDebug() << "[QGLView] Shader \"" + name + "\" load shaders from" << d.absolutePath(); - sl = d.entryInfoList(QStringList(name + ".geom"), QDir::Files | QDir::NoDotAndDotDot); - foreach (const QFileInfo & i, sl) { - //qDebug() << "[QGLView] Shader \"" + name + "\" add geometry shader:" << i.fileName(); - loadShaderFile(prog, QOpenGLShader::Geometry, i.absoluteFilePath()); - } - sl = d.entryInfoList(QStringList(name + ".vert"), QDir::Files | QDir::NoDotAndDotDot); - foreach (const QFileInfo & i, sl) { - //qDebug() << "[QGLView] Shader \"" + name + "\" add vertex shader:" << i.fileName(); - loadShaderFile(prog, QOpenGLShader::Vertex, i.absoluteFilePath()); - } - sl = d.entryInfoList(QStringList(name + ".frag"), QDir::Files | QDir::NoDotAndDotDot); - foreach (const QFileInfo & i, sl) { - //qDebug() << "[QGLView] Shader \"" + name + "\" add fragment shader:" << i.fileName(); - loadShaderFile(prog, QOpenGLShader::Fragment, i.absoluteFilePath()); - } - if (!prog->link()) { - qDebug() << "[QGLView] Shader \"" + name + "\" link error: " + prog->log(); - return false; - } - return true; -} - - -void setUniformMatrices(QOpenGLShaderProgram * prog, QMatrix4x4 proj, QMatrix4x4 view, QMatrix4x4 prevproj, QMatrix4x4 prevview) { - if (!prog) return; - if (!prog->isLinked()) return; - QMatrix4x4 mvpm = proj * view; - QMatrix4x4 pmvpm = prevproj * prevview; - QMatrix3x3 nm = view.normalMatrix(); - //nm.in; - prog->setUniformValue("qgl_ModelViewMatrix", view); - prog->setUniformValue("qgl_ProjectionMatrix", proj); - prog->setUniformValue("prev_ModelViewProjectioMatrix", pmvpm); - prog->setUniformValue("prev_ModelViewMatrix", prevview); - prog->setUniformValue("qgl_ModelViewProjectionMatrix", mvpm); - prog->setUniformValue("qgl_NormalMatrix", nm); - //prog->setUniformValue("qgl_BumpMatrix", nm.); - prog->setUniformValue("qgl_ModelViewMatrixTranspose", view.transposed()); - prog->setUniformValue("qgl_ProjectionMatrixTranspose", proj.transposed()); - prog->setUniformValue("qgl_ModelViewProjectionMatrixTranspose", mvpm.transposed()); -} - - -void setUniformMap(QOpenGLShaderProgram * prog, QString map_name, const Map & map, int channel, int def_channel) { - if (!prog) return; - if (!prog->isLinked()) return; - prog->setUniformValue(("qgl_Material." + map_name + ".offset").toLatin1().constData(), map.color_offset); - prog->setUniformValue(("qgl_Material." + map_name + ".amount").toLatin1().constData(), map.color_amount); - prog->setUniformValue(("qgl_Material." + map_name + ".map").toLatin1().constData(), map.bitmap_id > 0 ? channel : def_channel); -} - - -void setUniformMaterial(QOpenGLShaderProgram * prog, const Material & mat) { - if (!prog) return; - if (!prog->isLinked()) return; - QOpenGLFunctions *glFuncs = QOpenGLContext::currentContext()->functions(); - GLfloat mat_diffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f}; - mat_diffuse[0] = mat.color_diffuse.redF(); - mat_diffuse[1] = mat.color_diffuse.greenF(); - mat_diffuse[2] = mat.color_diffuse.blueF(); - mat_diffuse[3] = mat.color_diffuse.alphaF() * (1.f - mat.transparency); - glFuncs->glVertexAttrib4f(prog->attributeLocation("qgl_Color"), mat_diffuse[0], mat_diffuse[1], mat_diffuse[2], mat_diffuse[3]); - prog->setUniformValue("qgl_Material.transparency", mat.transparency); - prog->setUniformValue("qgl_Material.reflectivity", mat.reflectivity); - prog->setUniformValue("qgl_Material.iof", mat.iof); - prog->setUniformValue("qgl_Material.dispersion", mat.dispersion); - prog->setUniformValue("qgl_Material.color_diffuse", mat.color_diffuse); - prog->setUniformValue("qgl_Material.color_self_illumination", mat.color_self_illumination); - prog->setUniformValue("qgl_Material.color_specular", mat.color_specular); - setUniformMap(prog, "map_diffuse", mat.map_diffuse, 0, 6); - setUniformMap(prog, "map_normal", mat.map_normal, 1, 7); - setUniformMap(prog, "map_relief", mat.map_relief, 2, 6); - setUniformMap(prog, "map_self_illumination", mat.map_self_illumination, 3, 6); - setUniformMap(prog, "map_specularity", mat.map_specularity, 4, 6); - setUniformMap(prog, "map_specular", mat.map_specular, 5, 6); - -} - - -void setUniformLights(QOpenGLShaderProgram * prog, const QVector & lights, const QMatrix4x4 & mat, int shadow_start) { - for (int i = 0; i < lights.size(); ++i) - setUniformLight(prog, lights[i], QString("qgl_Light[%1]").arg(i), mat, shadow_start + i); -} -/* -" vec3 position;\n" -" vec3 direction;\n" -" vec4 color;\n" -" float intensity;\n" -" float startAngle;\n" -" float endAngle;\n" -" float constantAttenuation;\n" -" float linearAttenuation;\n" -" float quadraticAttenuation;\n" -" sampler2DShadow shadow;\n" -" mat4 shadowMatrix;\n" -*/ -void setUniformLight(QOpenGLShaderProgram * prog, Light * light, QString ulightn, const QMatrix4x4 & mat, int shadow) { - if (!prog) return; - if (!prog->isLinked()) return; - QMatrix4x4 m = mat * light->worldTransform(); - QVector4D pos(0, 0, 0, 1.), dir(light->direction);//, dir0(light->dir0), dir1(light->dir1); - pos = m * pos; - dir = (mat * dir).normalized(); - float ang_start = light->angle_start / 2.f, ang_end = light->angle_end / 2.f; - if (light->light_type == Light::Omni) - ang_start = ang_end = 180.; - //qDebug() << "light" << light->name() << ulightn << pos; - prog->setUniformValue((ulightn + ".position").toLatin1().constData(), pos); - prog->setUniformValue((ulightn + ".direction").toLatin1().constData(), dir); - prog->setUniformValue((ulightn + ".intensity").toLatin1().constData(), GLfloat(light->intensity)); - prog->setUniformValue((ulightn + ".startAngle").toLatin1().constData(), GLfloat(ang_start)); - prog->setUniformValue((ulightn + ".startAngleCos").toLatin1().constData(), GLfloat(cosf(ang_start * deg2rad))); - prog->setUniformValue((ulightn + ".endAngle").toLatin1().constData(), GLfloat(ang_end)); - prog->setUniformValue((ulightn + ".endAngleCos").toLatin1().constData(), GLfloat(cosf(ang_end * deg2rad))); - prog->setUniformValue((ulightn + ".color").toLatin1().constData(), light->color()); - prog->setUniformValue((ulightn + ".constantAttenuation").toLatin1().constData(), GLfloat(light->decay_const)); - prog->setUniformValue((ulightn + ".linearAttenuation").toLatin1().constData(), GLfloat(light->decay_linear)); - prog->setUniformValue((ulightn + ".quadraticAttenuation").toLatin1().constData(), GLfloat(light->decay_quadratic)); - prog->setUniformValue((ulightn + ".shadow").toLatin1().constData(), shadow); - prog->setUniformValue((ulightn + ".shadowColor").toLatin1().constData(), shadow); - prog->setUniformValue((ulightn + ".shadowMatrix").toLatin1().constData(), light->shadow_matrix); - //qDebug() << light->shadow_matrix; - //prog->setUniformValue((ulightn + ".shadowDir0").toLatin1().constData(), (mat * dir0)); - //prog->setUniformValue((ulightn + ".shadowDir1").toLatin1().constData(), (mat * dir1)); - //qDebug() << light->direction << light->dir0 << light->dir1; -} diff --git a/test/qglview/glshaders.h b/test/qglview/glshaders.h deleted file mode 100644 index 62f8939..0000000 --- a/test/qglview/glshaders.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLSHADERS_H -#define GLSHADERS_H - -#include "gltypes.h" - -class Map; -class Material; -class Light; - -QString loadShaderFile(QOpenGLShaderProgram * prog, QOpenGLShader::ShaderType type, const QString & file); -bool loadShaders(QOpenGLShaderProgram * prog, const QString & name, const QString & dir = QString()); -void setUniformMatrices(QOpenGLShaderProgram * prog, QMatrix4x4 proj, QMatrix4x4 view, QMatrix4x4 prevproj = QMatrix4x4(), QMatrix4x4 prevview = QMatrix4x4()); -void setUniformMap(QOpenGLShaderProgram * prog, const Map & map, int channel, int def_channel); -void setUniformMaterial(QOpenGLShaderProgram * prog, const Material & mat); -void setUniformLights(QOpenGLShaderProgram * prog, const QVector & lights, const QMatrix4x4 & mat, int shadow_start); -void setUniformLight(QOpenGLShaderProgram * prog, Light * light, QString ulightn, const QMatrix4x4 & mat = QMatrix4x4(), int shadow = 0); -#endif // GLSHADERS_H diff --git a/test/qglview/gltexture_manager.cpp b/test/qglview/gltexture_manager.cpp deleted file mode 100644 index e87ef8e..0000000 --- a/test/qglview/gltexture_manager.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "gltexture_manager.h" - - -bool GLTextureManager::loadTextures() { - //glGenTextures(); - QFileInfoList fil; - Animation anim; - for (int i = 0; i < anim_pathes.size(); ++i) { - anim.path = anim_pathes[i].second; - anim.bitmaps.clear(); - fil = QDir(anim_pathes[i].first).entryInfoList(QDir::Files, QDir::Name); - foreach (const QFileInfo & fi, fil) { - if (fi.baseName().indexOf(anim_pathes[i].second) < 0) continue; - anim.bitmaps << loadTexture(fi.filePath(), false); - } - qDebug() << "[TextureManager] Loaded" << anim.bitmaps.size() << "frames"; - anim_ids << QPair(anim_pathes[i].second, anim); - } - anim_pathes.clear(); - foreach (const QString & i, tex_pathes) - loadTexture(i, true); - tex_pathes.clear(); - return true; -} - - -void GLTextureManager::deleteTextures() { - for (int i = 0; i < 2; ++i) { - QList texs = tex_ids[i].values(); - qDebug() << "[TextureManager] Delete" << texs.size() << "textures"; - if (!texs.isEmpty()) glDeleteTextures(texs.size(), &texs[0]); - tex_ids[i].clear(); - } - qDebug() << "[TextureManager] Delete" << anim_ids.size() << "animations"; - for (int i = 0; i < anim_ids.size(); ++i) - glDeleteTextures(anim_ids[i].second.bitmaps.size(), anim_ids[i].second.bitmaps.data()); - anim_ids.clear(); -} - - -void GLTextureManager::deleteTexture(const QString & name) { - for (int i = 0; i < 2; ++i) { - if (tex_ids[i].contains(name)) { - GLuint id = tex_ids[i][name]; - glDeleteTextures(1, &id); - tex_ids[i].remove(name); - } - } -} diff --git a/test/qglview/gltexture_manager.h b/test/qglview/gltexture_manager.h deleted file mode 100644 index 27fb36e..0000000 --- a/test/qglview/gltexture_manager.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLTEXTUREMANAGER_H -#define GLTEXTUREMANAGER_H - -#include "glmaterial.h" -#include -#include - -class GLTextureManager: public GLTextureManagerBase -{ -public: - GLTextureManager() {;} - ~GLTextureManager() {deleteTextures();} - - struct Animation { - QString path; - QVector bitmaps; - GLuint bitmapID(const int frame) {if (frame < 0 || frame >= bitmaps.size()) return 0; return bitmaps[frame];} - }; - - void addTexture(const QString & path) {tex_pathes << path;} - void addAnimation(const QString & dir, const QString & name) {anim_pathes << QPair(dir, name);} - bool loadTextures(); - void deleteTextures(); - void deleteTexture(const QString & name); - Animation * findAnimation(const QString & name) {for (int i = 0; i < anim_ids.size(); ++i) if (anim_ids[i].first == name) return &(anim_ids[i].second); return 0;} - - QVector > anim_ids; - -private: - QStringList tex_pathes; - QList > anim_pathes; - -}; - -#endif // GLTEXTUREMANAGER_H diff --git a/test/qglview/gltypes.cpp b/test/qglview/gltypes.cpp deleted file mode 100644 index 98b2dcc..0000000 --- a/test/qglview/gltypes.cpp +++ /dev/null @@ -1,379 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "glcamera.h" -#include "qglview.h" - -#include - -//__GLWidget__ * currentQGLView; -//QMutex globMutex; - - -QString readCharsUntilNull(QDataStream & s) { - QString str; - char ch; - s.readRawData(&ch, 1); - while (ch != '\0') { - str += ch; - s.readRawData(&ch, 1); - } - return str; -} - - -QString findFile(const QString & file, const QStringList & pathes) { - QFileInfo fi(QString(file).replace("\\", "/")); - //qDebug() << "search" << file << "in" << pathes; - if (fi.exists()) return fi.absoluteFilePath(); - QString fn = fi.fileName(); - if (fn.contains("/")) fn = fn.mid(fn.lastIndexOf("/")); - foreach (QString p, pathes) { - QFileInfoList fil = QDir(p).entryInfoList(QStringList(fn), QDir::Files | QDir::NoDotAndDotDot); - //qDebug() << "findFile" << fn << "in" << p << "->" << fil.size(); - if (!fil.isEmpty()) - return fil[0].absoluteFilePath(); - } - return QString(); -} - - -void glDrawQuad(QOpenGLShaderProgram * prog, QVector4D * corner_dirs, GLfloat x, GLfloat y, GLfloat w, GLfloat h) { - glResetAllTransforms(); - glSetPolygonMode(GL_FILL); - int loc = prog ? prog->attributeLocation("qgl_Color") : 0, - locv = prog ? prog->attributeLocation("qgl_Vertex") : 0, - loct = prog ? prog->attributeLocation("qgl_Texture") : 0, - locc = prog ? prog->attributeLocation("view_corner") : 0; - glBegin(GL_QUADS); - QOpenGLFunctions *glFuncs = QOpenGLContext::currentContext()->functions(); - if (prog) { - glFuncs->glVertexAttrib3f(loc, 1.f, 1.f, 1.f); - } - glColor3f(1.f, 1.f, 1.f); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[0]); - glFuncs->glVertexAttrib2f(loct, 0.f, 0.f); - glFuncs->glVertexAttrib2f(locv, x, y); - } - glTexCoord2f(0.f, 0.f); - glVertex2f(x, y); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[1]); - glFuncs->glVertexAttrib2f(loct, 1.f, 0.f); - glFuncs->glVertexAttrib2f(locv, x + w, y); - } - glTexCoord2f(1.f, 0.f); - glVertex2f(x + w, y); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[2]); - glFuncs->glVertexAttrib2f(loct, 1.f, 1.f); - glFuncs->glVertexAttrib2f(locv, x + w, y + h); - } - glTexCoord2f(1.f, 1.f); - glVertex2f(x + w, y + h); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[3]); - glFuncs->glVertexAttrib2f(loct, 0.f, 1.f); - glFuncs->glVertexAttrib2f(locv, x, y + h); - } - glTexCoord2f(0.f, 1.f); - glVertex2f(x, y + h); - glEnd(); -} - - -QMatrix4x4 getGLMatrix(GLenum matrix) { - GLfloat gm[16]; - glGetFloatv(matrix, gm); - float qm[16]; - for (int i = 0; i < 16; ++i) - qm[i] = gm[i]; - return QMatrix4x4(qm).transposed(); -} - - -void setGLMatrix(QMatrix4x4 matrix) { - GLfloat gm[16]; - float qm[16]; - matrix.transposed().copyDataTo(qm); - for (int i = 0; i < 16; ++i) - gm[i] = qm[i]; - glLoadMatrixf(gm); -} - - -void qglMultMatrix(const QMatrix4x4 & m) { - GLfloat gm[16]; - float qm[16]; - m.transposed().copyDataTo(qm); - for (int i = 0; i < 16; ++i) - gm[i] = qm[i]; - glMultMatrixf(gm); -} - - -void createGLTexture(GLuint & tex, int width, int height, const GLenum & format, const GLenum & target) { - glClearError(); - if (tex == 0) { - glGenTextures(1, &tex); - glBindTexture(target, tex); - } - //glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - if (format == GL_DEPTH_COMPONENT || format == GL_DEPTH_COMPONENT16 || format == GL_DEPTH_COMPONENT24 || format == GL_DEPTH_COMPONENT32) - glTexImage2D(target, 0, format, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, nullptr); - else { - int t = GL_UNSIGNED_BYTE; - int f = GL_RGBA; - if (format == GL_RGB32F || format == GL_RGB16F || format == GL_RGBA32F || format == GL_RGBA16F) - t = GL_FLOAT; - if (format == GL_RGB32F || format == GL_RGB16F || format == GL_RGB8 || format == GL_RGB) - f = GL_RGB; - glTexImage2D(target, 0, format, width, height, 0, f, t, nullptr); - //glGenerateMipmap(target); - //qDebug() << "glTexImage2D" << width << height << QString::number(t, 16); - } - //qDebug() << QString::number(glGetError(), 16); -} - - -void createGLTexture(GLuint & tex, const QImage & image, const GLenum & format, const GLenum & target) { - if (tex == 0) { - glGenTextures(1, &tex); - } - glBindTexture(target, tex); - QImage im = image.mirrored(false, true);///__GLWidget__::convertToGLFormat(image); - //const QImage & cim(im); - //glClearError(); - //glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - if (target == GL_TEXTURE_1D || target == GL_TEXTURE_2D || target == GL_TEXTURE_3D) { - glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_REPEAT); - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(target, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); - } - glTexImage2D(target, 0, format, im.width(), im.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, im.bits()); - //qDebug() << tex << im.width() << im.height() << im.bits() << glGetError(); -} - - -QMatrix4x4 glMatrixPerspective(float angle, float aspect, float near_, float far_) { - QMatrix4x4 ret; - float t = 1.f / (tanf(angle * deg2rad / 2.f)), e = 2.4e-7f; - ret(0, 0) = t / aspect; - ret(1, 1) = t; - ret(2, 2) = e - 1.f;//far_ / (far_ - near_) - 1.; - ret(2, 3) = (e - 2.f) * near_;//2. * far_ * near_ / (far_ - near_); - ret(3, 2) = -1.f; - ret(3, 3) = 0.f; - return ret; -} - - -QImage rotateQImageLeft(const QImage & im) { - QImage ri(im.height(), im.width(), im.format()); - QPainter p(&ri); - p.rotate(90); - p.drawImage(0, -im.height(), im); - p.end(); - return ri; -} - - -QImage rotateQImageRight(const QImage & im) { - QImage ri(im.height(), im.width(), im.format()); - QPainter p(&ri); - p.rotate(-90); - p.drawImage(-im.width(), 0, im); - p.end(); - return ri; -} - - - - -QColor colorFromString(const QString & str) { - QString s = str.trimmed(); - int i = s.indexOf("\t"); - float r, g, b; - r = s.left(i).toFloat(); s = s.right(s.length() - i - 1); i = s.indexOf("\t"); - g = s.left(i).toFloat(); s = s.right(s.length() - i - 1); - b = s.toFloat(); - return QColor(r * 255.f, g * 255.f, b * 255.f); -} - - -QVector3D orthToVector(const QVector3D & v, const float & scale) { - if (v.isNull()) return QVector3D(); - QVector3D rv, fn, sn; - if (v.x() != 0.f) rv.setZ(1.); - else if (v.y() != 0.f) rv.setX(1.); - else rv.setY(1.); - fn = QVector3D::crossProduct(v, rv).normalized(); - sn = QVector3D::crossProduct(v, fn).normalized(); - return fn * urand(scale) + sn * urand(scale); -} - - -QVector3D rotateVector(const QVector3D & v, const QVector3D & a) { - QMatrix4x4 m; - m.rotate(a.z(), 0., 0., 1.); - m.rotate(a.y(), 0., 1., 0.); - m.rotate(a.x(), 1., 0., 0.); - return m * v; -} - - -void setVectorLength(QVector3D & v, const float & l) { - float vl = v.length(); - if (vl == 0.f) return; - float c = l / vl; - v *= c; -} - - -void lengthenVector(QVector3D & v, const float & l) { - float vl = v.length(); - if (l == 0.f || vl == 0.f) return; - float c = 1.f + l / vl; - v *= c; -} - - -Vector3d::Vector3d(const QString & str) { - QString s = str.trimmed(); - int i = s.indexOf("\t"); - x = s.left(i).toFloat(); s = s.right(s.length() - i - 1); i = s.indexOf("\t"); - y = s.left(i).toFloat(); s = s.right(s.length() - i - 1); - z = s.toFloat(); -} - - -Vector3i::Vector3i(const QString & str) { - QString s = str.trimmed(); - int i = s.indexOf("\t"); - p0 = s.left(i).toInt(); s = s.right(s.length() - i - 1); i = s.indexOf("\t"); - p1 = s.left(i).toInt(); s = s.right(s.length() - i - 1); - p2 = s.toInt(); -} - - -void glEnableDepth() { - glEnable(GL_DEPTH_TEST); - //glDepthFunc(GL_GREATER); - glDepthFunc(GL_LESS); - glDepthMask(GL_TRUE); -} - - -void glDisableDepth() { - glDisable(GL_DEPTH_TEST); - glDepthMask(GL_FALSE); -} - - -void glClearFramebuffer(const QColor & color, bool depth) { - glClearColor(color.redF(), color.greenF(), color.blueF(), color.alphaF()); - //glClearDepth(0.); - if (depth) - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - else - glClear(GL_COLOR_BUFFER_BIT); -} - - - - -QGLViewBase::QGLViewBase() { - camera_ = new Camera(); - textures_manager = new GLTextureManager(); -} - - -QGLViewBase::~QGLViewBase() { - delete textures_manager; -} - - -Camera * QGLViewBase::camera() { - return camera_; -} - - -const Camera * QGLViewBase::camera() const { - return camera_; -} - - -void QGLViewBase::setCamera(Camera * camera) { - camera_ = camera; -} - - -GLTextureManagerBase * QGLViewBase::textureManager() { - return textures_manager; -} - - -Box3D::Box3D(const QVector & points) { - x = y = z = width = length = height = angle_z = angle_xy = angle_roll = 0.f; - if (points.isEmpty()) return; - float ix, iy, iz, ax, ay, az; - ix = ax = points[0].x(); - iy = ay = points[0].y(); - iz = az = points[0].z(); - for (int i = 1; i < points.size(); ++i) { - ix = qMin(ix, points[i].x()); ax = qMax(ax, points[i].x()); - iy = qMin(iy, points[i].y()); ay = qMax(ay, points[i].y()); - iz = qMin(iz, points[i].z()); az = qMax(az, points[i].z()); - } - x = ix; - y = iy; - z = iz; - length = ax - ix; - width = ay - iy; - height = az - iz; -} - - -QVector Box3D::corners() const { - QVector ret; - ret << QVector3D(x, y, z) << QVector3D(x, y + width, z) << QVector3D(x, y, z + height) << QVector3D(x, y + width, z + height) - << QVector3D(x + length, y, z) << QVector3D(x + length, y + width, z) - << QVector3D(x + length, y, z + height) << QVector3D(x + length, y + width, z + height); - return ret; -} - - -Box3D & Box3D::operator |=(const Box3D & o) { - if (isEmpty()) *this = o; - else { - GLfloat mx = x + length, my = y + width, mz = z + height; - GLfloat omx = o.x + o.length, omy = o.y + o.width, omz = o.z + o.height; - x = qMin(x, o.x); y = qMin(y, o.y); z = qMin(z, o.z); - mx = qMax(mx, omx); my = qMax(my, omy); mz = qMax(mz, omz); - length = mx - x; width = my - y; height = mz - z; - } - return *this; -} diff --git a/test/qglview/gltypes.h b/test/qglview/gltypes.h deleted file mode 100644 index 27658ec..0000000 --- a/test/qglview/gltypes.h +++ /dev/null @@ -1,348 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLTYPES_H -#define GLTYPES_H - -#if WIN32 || WIN64 || _WIN32 || _WIN64 || __WIN32__ || __WIN64__ -# define WINDOWS -#endif -#if __QNX__ || __QNXNTO__ -# define QNX -#endif -#ifdef __APPLE__ -# define MAC -#endif -#ifndef WINDOWS -# ifndef QNX -# ifndef MAC -# define LINUX -# endif -# endif -#endif -#if __GNUC__ -# define CC_GCC -#elif _MSC_VER -# define CC_VC -#endif - - -#include -#ifndef WINDOWS -# ifdef MAC -# include -# include -# include -# else -# include -# include -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef QNX -# include -# include -#else -# include -# include -#endif -#include - - -#ifdef WINDOWS -# define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -# define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#endif - -#ifndef M_PI -# define M_PI 3.14159265358979323846 -#endif -#ifndef M_2PI -# define M_2PI 6.28318530717958647692 -#endif -#ifndef M_PI_3 -# define M_PI_3 1.04719755119659774615 -#endif - -#ifndef GL_RGBA16F -# define GL_RGBA16F GL_RGBA16F_ARB -#endif - -using std::complex; - -#ifndef PIP_VERSION -typedef long long llong; -typedef unsigned char uchar; -typedef unsigned short int ushort; -typedef unsigned int uint; -typedef unsigned long ulong; -typedef unsigned long long ullong; -typedef long double ldouble; - -const float deg2rad = atanf(1.f) / 45.f; -const float rad2deg = 45.f / atanf(1.f); - -# ifdef WINDOWS -inline int random() {return rand();} -# endif -#else -#define random randomi -#endif - -#ifdef CC_VC -inline float round(const float & v) {return floor(v + 0.5);} -#endif -inline float randomu() {return float(random()) / RAND_MAX;} - -inline const QSizeF operator *(const QSizeF & f, const QSizeF & s) {return QSizeF(f.width() * s.width(), f.height() * s.height());} -#ifndef PIP_VERSION -template inline void piSwap(Type & f, Type & s) {Type t = f; f = s; s = t;} -template inline Type piMin(const Type & f, const Type & s) {return (f > s) ? s : f;} -template inline Type piMin(const Type & f, const Type & s, const Type & t) {return (f < s && f < t) ? f : ((s < t) ? s : t);} -template inline Type piMax(const Type & f, const Type & s) {return (f < s) ? s : f;} -template inline Type piMax(const Type & f, const Type & s, const Type & t) {return (f > s && f > t) ? f : ((s > t) ? s : t);} -template inline Type piClamp(const Type & v, const Type & min, const Type & max) {return (v > max ? max : (v < min ? min : v));} -inline ushort letobe_s(ushort v) {return (v << 8) | (v >> 8);} -#endif -// return [-1, 1] -inline float urand(const float & scale = 1.) {return ((float)rand() / RAND_MAX - .5f) * (scale + scale);} -// return [0, 1] -inline float uprand(const float & scale = 1.) {return ((float)rand() / RAND_MAX) * scale;} -QString readCharsUntilNull(QDataStream & s); -QString findFile(const QString & file, const QStringList & pathes); -inline QColor operator *(const QColor & c, float v) {return QColor(piClamp(c.red() * v, 0, 255), piClamp(c.green() * v, 0, 255), piClamp(c.blue() * v, 0, 255), piClamp(c.alpha() * v, 0, 255));} -inline QColor operator /(const QColor & c, float v) {return QColor(piClamp(c.red() / v, 0, 255), piClamp(c.green() / v, 0, 255), piClamp(c.blue() / v, 0, 255), piClamp(c.alpha() / v, 0, 255));} - -//extern __GLWidget__ * currentQGLView; - -inline void qglColor(const QColor & c) {glColor4f(c.redF(), c.greenF(), c.blueF(), c.alphaF());} -void qglMultMatrix(const QMatrix4x4 & m); -void glEnableDepth(); -void glDisableDepth(); -inline void glResetAllTransforms() {glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity();} -inline void glClearError() {int c = 100; while (glGetError() != GL_NO_ERROR && --c > 0) glGetError();} -inline void glClearAccumulation(const QColor & color = Qt::black) {glClearAccum(color.redF(), color.greenF(), color.blueF(), color.alphaF()); glClear(GL_ACCUM_BUFFER_BIT);} -void glClearFramebuffer(const QColor & color = Qt::black, bool depth = true); -inline void glSetCapEnabled(GLenum cap, bool on = true) {if (on) glEnable(cap); else glDisable(cap);} -inline void glSetLightEnabled(bool on) {if (on) glEnable(GL_LIGHTING); else glDisable(GL_LIGHTING);} -inline void glSetFogEnabled(bool on) {if (on) glEnable(GL_FOG); else glDisable(GL_FOG);} -inline void glSetPolygonMode(GLenum mode) {glPolygonMode(GL_FRONT_AND_BACK, mode);} -void glDrawQuad(QOpenGLShaderProgram * prog = nullptr, QVector4D * corner_dirs = nullptr, GLfloat x = -1.f, GLfloat y = -1.f, GLfloat w = 2.f, GLfloat h = 2.f); -QMatrix4x4 getGLMatrix(GLenum matrix); -void setGLMatrix(QMatrix4x4 matrix); -inline void deleteGLTexture(GLuint & tex) {if (tex != 0) glDeleteTextures(1, &tex); tex = 0;} -//# define QGLCI if (!QOpenGLContext::currentContext()) return; QOpenGLFunctions gf(QOpenGLContext::currentContext()); -//# define QGLC gf. -//inline void glActiveTextureChannel(int channel) {QGLCI gf.glActiveTexture(GL_TEXTURE0 + channel);} -//inline void glDisableTextures(int channels = 8) {QGLCI for (int i = channels - 1; i >= 0; --i) {glActiveTextureChannel(i); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_CUBE_MAP);}} -//inline void glReleaseTextures(int channels = 8) {QGLCI for (int i = channels - 1; i >= 0; --i) {glActiveTextureChannel(i); glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_CUBE_MAP, 0);}} -//inline void glReleaseFramebuffer() {QGLCI gf.glBindFramebuffer(GL_FRAMEBUFFER, 0);} -//inline void glReleaseShaders() {QGLCI gf.glUseProgram(0);} -//inline void deleteGLFramebuffer(GLuint & fbo) {QGLCI if (fbo != 0) gf.glDeleteFramebuffers(1, &fbo); fbo = 0;} -//inline void deleteGLRenderbuffer(GLuint & drbo) {QGLCI if (drbo != 0) gf.glDeleteRenderbuffers(1, &drbo); drbo = 0;} -//inline void deleteGLBuffer(GLuint & bo) {QGLCI if (bo != 0) gf.glDeleteBuffers(1, &bo); bo = 0;} -//inline void deleteGLVertexArray(GLuint & va) {QGLCI if (va != 0) gf.glDeleteVertexArrays(1, &va); va = 0;} -void createGLTexture(GLuint & tex, int width, int height, const GLenum & format = GL_RGBA8, const GLenum & target = GL_TEXTURE_2D); -void createGLTexture(GLuint & tex, const QImage & image, const GLenum & format = GL_RGBA8, const GLenum & target = GL_TEXTURE_2D); -inline void qglTranslate(const QVector3D & v) {glTranslatef(v.x(), v.y(), v.z());} -inline void qglScale(const QVector3D & v) {glScalef(v.x(), v.y(), v.z());} -QMatrix4x4 glMatrixPerspective(float angle, float aspect, float near_, float far_); -QImage rotateQImageLeft(const QImage & im); -QImage rotateQImageRight(const QImage & im); -inline QImage rotateQImage180(const QImage & im) {return im.mirrored(true, true);} -//const double deg2rad = atan(1.) / 45.; -//const double rad2deg = 45. / atan(1.); - -struct Box3D { - GLfloat x; - GLfloat y; - GLfloat z; - GLfloat width; - GLfloat length; - GLfloat height; - GLfloat angle_z; - GLfloat angle_xy; - GLfloat angle_roll; - Box3D() {x = y = z = width = length = height = angle_z = angle_xy = angle_roll = 0.f;} - Box3D(const QVector3D & center, GLfloat hwid, GLfloat hlen, GLfloat hhei) {x = center.x() - hwid; y = center.y() - hlen; z = center.z() - hhei; width = 2 * hwid; length = 2 * hlen; height = 2 * hhei; angle_z = angle_xy = angle_roll = 0.f;} - Box3D(const QVector & points); - bool isEmpty() const {return (qAbs(width) < 1E-6f) || (qAbs(length) < 1E-6f) || (qAbs(height) < 1E-6f);} - QVector3D randomPoint() const {return QVector3D(uprand(length) + x, uprand(width) + y, uprand(height) + z);} - QVector3D pos() const {return QVector3D(x, y, z);} - QVector3D size() const {return QVector3D(length, width, height);} - QVector3D center() const {return QVector3D(length / 2.f + x, width / 2.f + y, height / 2.f + z);} - QVector3D angles() const {return QVector3D(angle_xy, angle_roll, angle_z);} - QVector corners() const; - void setPos(const QVector3D & p) {x = p.x(); y = p.y(); z = p.z();} - void setAngles(const QVector3D & a) {angle_xy = a.x(); angle_roll = a.y(); angle_z = a.z();} - void setSize(const QVector3D & s) {length = s.x(); width = s.y(); height = s.z();} - Box3D & moveTo(const QVector3D & v) {x = v.x(); y = v.y(); z = v.z(); return *this;} - Box3D & move(const QVector3D & v) {x += v.x(); y += v.y(); z += v.z(); return *this;} - Box3D movedTo(const QVector3D & v) const {Box3D t(*this); t.x = v.x(); t.y = v.y(); t.z = v.z(); return t;} - Box3D moved(const QVector3D & v) const {Box3D t(*this); t.x += v.x(); t.y += v.y(); t.z += v.z(); return t;} - Box3D & operator |=(const Box3D & o); -}; - -inline QDebug operator <<(QDebug d, const Box3D & v) {d << "Box3D {start (" << v.x << "," << v.y << "," << v.z << "), size (" << v.length << "," << v.width << "," << v.height << ")}"; return d;} - -struct Vector3d; - -GLfloat dot(const Vector3d & v0, const Vector3d & v1); - -struct Vector3d { - GLfloat x; - GLfloat y; - GLfloat z; - Vector3d(GLfloat x_ = 0., GLfloat y_ = 0., GLfloat z_ = 0.) {x = x_; y = y_; z = z_;} - Vector3d(const QVector3D & v) {x = v.x(); y = v.y(); z = v.z();} - Vector3d(const QString & str); - inline void clear() {x = y = z = 0.;} - inline GLfloat length() const {return sqrtf(x*x + y*y + z*z);} - inline GLfloat lengthSquared() const {return x*x + y*y + z*z;} - Vector3d & normalize() { - GLfloat l = length(); - if (l == 0.f) return *this; - x /= l; y /= l; z /= l; - return *this; - } - Vector3d normalized() {return Vector3d(*this).normalize();} - Vector3d projectTo(Vector3d dir) {dir.normalize(); return dir * dot(dir, *this);} - Vector3d operator *(const GLfloat v) {return Vector3d(x*v, y*v, z*v);} - Vector3d operator /(const GLfloat v) {return Vector3d(x/v, y/v, z/v);} - Vector3d operator +(const GLfloat v) {return Vector3d(x+v, y+v, z+v);} - Vector3d operator -(const GLfloat v) {return Vector3d(x-v, y-v, z-v);} - Vector3d operator +(const Vector3d & v) {return Vector3d(x + v.x, y + v.y, z + v.z);} - Vector3d operator -(const Vector3d & v) {return Vector3d(x - v.x, y - v.y, z - v.z);} - Vector3d operator -() {return Vector3d(-x, -y, -z);} - Vector3d & operator *=(const GLfloat & v) {x *= v; y *= v; z *= v; return *this;} - Vector3d & operator /=(const GLfloat & v) {x /= v; y /= v; z /= v; return *this;} - Vector3d & operator +=(const GLfloat & v) {x += v; y += v; z += v; return *this;} - Vector3d & operator -=(const GLfloat & v) {x -= v; y -= v; z -= v; return *this;} - Vector3d & operator +=(const Vector3d & v) {x += v.x; y += v.y; z += v.z; return *this;} - Vector3d & operator -=(const Vector3d & v) {x -= v.x; y -= v.y; z -= v.z; return *this;} - bool operator ==(const Vector3d & v) {return x == v.x && y == v.y && z == v.z;} - QVector3D toQVector3D() const {return QVector3D(x, y, z);} -}; - -inline Vector3d operator *(const Vector3d & v0, const Vector3d & v1) { - return Vector3d(v0.y * v1.z - v1.y * v0.z, v1.x * v0.z - v0.x * v1.z, v0.x * v1.y - v1.x * v0.y); -} -inline GLfloat dot(const Vector3d & v0, const Vector3d & v1) {return v0.x*v1.x + v0.y*v1.y + v0.z*v1.z;} - -struct Vector2d { - GLfloat x; - GLfloat y; - Vector2d(GLfloat x_ = 0., GLfloat y_ = 0.) {x = x_; y = y_;} - Vector2d(const Vector3d & v3) {x = v3.x; y = v3.y;} - Vector2d operator *(const GLfloat v) {return Vector2d(x*v, y*v);} - Vector2d operator /(const GLfloat v) {return Vector2d(x/v, y/v);} - Vector2d operator +(const GLfloat v) {return Vector2d(x+v, y+v);} - Vector2d operator -(const GLfloat v) {return Vector2d(x-v, y-v);} - Vector2d operator +(const Vector3d & v) {return Vector3d(x + v.x, y + v.y);} - Vector2d operator -(const Vector3d & v) {return Vector3d(x - v.x, y - v.y);} - Vector2d operator +(const Vector2d & v) {return Vector2d(x + v.x, y + v.y);} - Vector2d operator -(const Vector2d & v) {return Vector2d(x - v.x, y - v.y);} - Vector2d & operator *=(const GLfloat & v) {x *= v; y *= v; return *this;} - Vector2d & operator /=(const GLfloat & v) {x /= v; y /= v; return *this;} - Vector2d & operator +=(const GLfloat & v) {x += v; y += v; return *this;} - Vector2d & operator -=(const GLfloat & v) {x -= v; y -= v; return *this;} - Vector2d & operator +=(const Vector3d & v) {x += v.x; y += v.y;; return *this;} - Vector2d & operator -=(const Vector3d & v) {x -= v.x; y -= v.y;; return *this;} -}; - -struct Vector3i { - Vector3i(int p0_ = 0, int p1_ = 0, int p2_ = 0) {p0 = p0_; p1 = p1_; p2 = p2_;} - Vector3i(const QString & str); - Vector3i movedX(const int & o) {return Vector3i(p0 + o, p1, p2);} - Vector3i movedY(const int & o) {return Vector3i(p0, p1 + o, p2);} - Vector3i movedZ(const int & o) {return Vector3i(p0, p1, p2 + o);} - Vector3i moved(const int & x, const int & y, const int & z) {return Vector3i(p0 + x, p1 + y, p2 + z);} - int p0; - int p1; - int p2; - bool operator ==(const Vector3i & o) const {return p0 == o.p0 && p1 == o.p1 && p2 == o.p2;} - bool operator !=(const Vector3i & o) const {return p0 != o.p0 || p1 != o.p1 || p2 != o.p2;} - QVector3D toQVector3D() const {return QVector3D(p0, p1, p2);} -}; - -inline Vector3i operator +(const Vector3i & f, const Vector3i & s) {return Vector3i(f.p0 + s.p0, f.p1 + s.p1, f.p2 + s.p2);} -inline Vector3i operator -(const Vector3i & f, const Vector3i & s) {return Vector3i(f.p0 - s.p0, f.p1 - s.p1, f.p2 - s.p2);} -inline Vector3i operator /(const Vector3i & f, const int & s) {return Vector3i(f.p0 / s, f.p1 / s, f.p2 / s);} -inline uint qHash(const Vector3i & v) {return v.p0 + v.p1 * 1024 + v.p2 * 1024 * 1024;} -inline QDebug operator <<(QDebug d, const Vector3d& v) {d.nospace() << "{" << v.x << ", " << v.y << ", " << v.z << "}"; return d.space();} -inline QDebug operator <<(QDebug d, const Vector3i & v) {d.nospace() << "{" << v.p0 << ", " << v.p1 << ", " << v.p2 << "}"; return d.space();} - -inline QDataStream & operator <<(QDataStream & s, const Vector3d & v) {s << v.x << v.y << v.z; return s;} -inline QDataStream & operator >>(QDataStream & s, Vector3d & v) {s >> v.x >> v.y >> v.z; return s;} -inline QDataStream & operator <<(QDataStream & s, const Vector3i & v) {s << v.p0 << v.p1 << v.p2; return s;} -inline QDataStream & operator >>(QDataStream & s, Vector3i & v) {s >> v.p0 >> v.p1 >> v.p2; return s;} - -QColor colorFromString(const QString & str); -inline float cosABV(const QVector3D & v0, const QVector3D & v1) { - float l = v0.length() * v1.length(); - if (l == 0.f) return 0.; - return (QVector3D::dotProduct(v0, v1)) / l; -} -inline QVector3D projection(const QVector3D & v, const QVector3D & to) {return to.normalized() * v.length() * cosABV(v, to);} -QVector3D orthToVector(const QVector3D & v, const float & scale = 1.); -QVector3D rotateVector(const QVector3D & v, const QVector3D & a); -void setVectorLength(QVector3D & v, const float & l); -void lengthenVector(QVector3D & v, const float & l); -inline float squareLength(const QVector3D & from, const QVector3D & to) {return (to.x() - from.x())*(to.x() - from.x()) + (to.y() - from.y())*(to.y() - from.y()) + (to.z() - from.z())*(to.z() - from.z());} -inline QVector3D directionFromAngles(const QVector3D & a) {return rotateVector(QVector3D(1., 0., 0.), a);} -inline float frac(const float & x, const float & b) {return x - int(x / b) * b;} - -class GLObjectBase; -class QGLView; -class Light; -class Camera; -class GLTextureManagerBase; - -class QGLViewBase -{ - friend class GLObjectBase; -public: - QGLViewBase(); - virtual ~QGLViewBase(); - Camera * camera(); - const Camera * camera() const; - void setCamera(Camera * camera); - GLTextureManagerBase * textureManager(); -protected: - virtual void collectLights() = 0; - Camera * camera_; - GLTextureManagerBase * textures_manager; -}; - -#endif // GLTYPES_H diff --git a/test/qglview/glvbo.cpp b/test/qglview/glvbo.cpp deleted file mode 100644 index 83e031b..0000000 --- a/test/qglview/glvbo.cpp +++ /dev/null @@ -1,317 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "glvbo.h" - - -GLVBO::GLVBO(GLenum usage_) { - buffer_ = 0; - va_ = 0; - usage = usage_; - changed = true; -} - - -GLVBO::~GLVBO() { - //destroy(); -} - - -void GLVBO::init() { - initializeOpenGLFunctions(); - if (!isInit()) { - //glGenVertexArrays(1, &va_); - glGenBuffers(1, &buffer_); - } - changed = true; -} - - -void GLVBO::destroy() { - if (buffer_ != 0) glDeleteFramebuffers(1, &buffer_); - buffer_ = 0; -// if (va_ != 0) glDeleteVertexArrays(1, &va_); -// va_ = 0; -} - - -void GLVBO::calculateBinormals() { - tangents_.clear(); - bitangents_.clear(); - if (vertices_.isEmpty() || texcoords_.isEmpty()) return; - int vcnt = vertices_.size() / 3; - if (texcoords_.size() != vcnt * 2) return; - int tcnt = vcnt / 3; - //qDebug() << "calculateBinormals" << vcnt << tcnt << vertices_.size() << texcoords_.size() << "..."; - for (int t = 0; t < tcnt; ++t) { - int vi = t*9, ti = t*6; - Vector3d v0(vertices_[vi + 0], vertices_[vi + 1], vertices_[vi + 2]); - Vector3d v1(vertices_[vi + 3], vertices_[vi + 4], vertices_[vi + 5]); - Vector3d v2(vertices_[vi + 6], vertices_[vi + 7], vertices_[vi + 8]); - Vector2d t0(texcoords_[ti + 0], texcoords_[ti + 1]); - Vector2d t1(texcoords_[ti + 2], texcoords_[ti + 3]); - Vector2d t2(texcoords_[ti + 4], texcoords_[ti + 5]); - Vector3d dv1 = v1 - v0, dv2 = v2 - v0; - Vector2d dt1 = t1 - t0, dt2 = t2 - t0; - Vector3d tan; - Vector3d bitan; - tan = (dv1 * dt2.y - dv2 * dt1.y).normalize(); - bitan = (dv2 * dt1.x - dv1 * dt2.x).normalize(); - for (int i = 0; i < 3; ++i) { - tangents_ << tan.x << tan.y << tan.z; - bitangents_ << bitan.x << bitan.y << bitan.z; - } - //qDebug() << " t" << t << vi << ti << dv1.toQVector3D() << "..."; - } - //qDebug() << "calculateBinormals" << vcnt << tcnt << tangents_.size(); -} - - -bool GLVBO::rebuffer(bool clear_) { - initializeOpenGLFunctions(); - QVector data; - //data.clear(); - calculateBinormals(); - data << vertices_; - if (!normals_.isEmpty()) { - data << normals_; - has_normals = true; - } else has_normals = false; - if (!texcoords_.isEmpty()) { - data << texcoords_; - has_texcoords = true; - } else has_texcoords = false; - if (!colors_.isEmpty()) { - data << colors_; - has_colors = true; - } else has_colors = false; - if (!tangents_.isEmpty()) { - data << tangents_ << bitangents_; - has_binormals = true; - } else has_binormals = false; - //glBindVertexArray(va_); - //qDebug() << "load buffer" << data.size() << buffer_; - glBindBuffer(GL_ARRAY_BUFFER, buffer_); - glBufferData(GL_ARRAY_BUFFER, data.size() * sizeof(GLfloat), data.constData(), usage); - glBindBuffer(GL_ARRAY_BUFFER, 0); - //glBindVertexArray(0); - vert_count = vertices_.size() / 3; - changed = false; - //qDebug() << "rebuff" << buffer_ << vert_count; - if (clear_) clear(); - return !isEmpty(); -} - - -void GLVBO::draw(GLenum type, QOpenGLShaderProgram * prog, bool simplest) { - if (buffer_ == 0 || vert_count == 0) return; - if (changed) rebuffer(); - //qDebug() << "draw" << vert_count; - void * offset = (void*)(vert_count * 3 * sizeof(GLfloat)); - //glBindVertexArray(va_); - void * offsets[5] = {0, 0, 0, 0, 0}; - if (!simplest) { - if (has_normals) { - offsets[0] = offset; - offset = (void*)(llong(offset) + vert_count * 3 * sizeof(GLfloat)); - } - if (has_texcoords) { - offsets[1] = offset; - offset = (void*)(llong(offset) + vert_count * 2 * sizeof(GLfloat)); - } - if (has_colors) { - offsets[2] = offset; - offset = (void*)(llong(offset) + vert_count * 4 * sizeof(GLfloat)); - } - if (has_binormals) { - offsets[3] = offset; - offset = (void*)(llong(offset) + vert_count * 3 * sizeof(GLfloat)); - offsets[4] = offset; - } - } - - glBindBuffer(GL_ARRAY_BUFFER, buffer_); - if (prog) { - locs.clear(); - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - int loc = prog->attributeLocation("_qgl_Vertex"); - glEnableVertexAttribArray(loc); - glVertexAttribPointer(loc, 3, GL_FLOAT, 0, 0, 0); - locs << loc; - if (!simplest) { - loc = prog->attributeLocation("qgl_Normal"); - if (has_normals) { - glEnableVertexAttribArray(loc); - glVertexAttribPointer(loc, 3, GL_FLOAT, 0, 0, offsets[0]); - locs << loc; - } else - glDisableVertexAttribArray(loc); - loc = prog->attributeLocation("qgl_Texture"); - if (has_texcoords) { - glEnableVertexAttribArray(loc); - glVertexAttribPointer(loc, 2, GL_FLOAT, 0, 0, offsets[1]); - locs << loc; - } else - glDisableVertexAttribArray(loc); - loc = prog->attributeLocation("qgl_Color"); - if (has_colors) { - glEnableVertexAttribArray(loc); - glVertexAttribPointer(loc, 4, GL_FLOAT, 0, 0, offsets[2]); - locs << loc; - } else - glDisableVertexAttribArray(loc); - loc = prog->attributeLocation("qgl_Tangent"); - int loc2 = prog->attributeLocation("qgl_Bitangent"); - if (has_binormals) { - glEnableVertexAttribArray(loc); - glEnableVertexAttribArray(loc2); - glVertexAttribPointer(loc, 3, GL_FLOAT, 0, 0, offsets[3]); - glVertexAttribPointer(loc2, 3, GL_FLOAT, 0, 0, offsets[4]); - locs << loc << loc2; - } else { - glDisableVertexAttribArray(loc); - glDisableVertexAttribArray(loc2); - } - } - } else { - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, 0, 0); - if (!simplest) { - if (has_normals) { - glEnableClientState(GL_NORMAL_ARRAY); - glNormalPointer(GL_FLOAT, 0, offsets[0]); - } else glDisableClientState(GL_NORMAL_ARRAY); - if (has_texcoords) { - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, 0, offsets[1]); - } else glDisableClientState(GL_TEXTURE_COORD_ARRAY); - if (has_colors) { - glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_FLOAT, 0, offsets[2]); - } else glDisableClientState(GL_COLOR_ARRAY); - } - } - //qDebug() << "draw" << vert_count << buffer_ << offsets[0] << offsets[1] << offsets[3]; - glDrawArrays(type, 0, vert_count); - //qDebug() << "draw" << vert_count << buffer_ << "done"; - glBindBuffer(GL_ARRAY_BUFFER, 0); - foreach (int l, locs) - glDisableVertexAttribArray(l); -} - - -void GLVBO::clear() { - vertices_.clear(); - normals_.clear(); - texcoords_.clear(); - colors_.clear(); -} - - -void GLVBO::translatePoints(const QVector3D & dp) { - if (vertices_.isEmpty()) return; - int vcnt = vertices_.size() / 3; - for (int i = 0; i < vcnt; ++i) { - int vi = i * 3; - vertices_[vi + 0] += dp.x(); - vertices_[vi + 1] += dp.y(); - vertices_[vi + 2] += dp.z(); - } - changed = true; -} - - -void GLVBO::scalePoints(const QVector3D & dp) { - if (vertices_.isEmpty()) return; - int vcnt = vertices_.size() / 3; - for (int i = 0; i < vcnt; ++i) { - int vi = i * 3; - vertices_[vi + 0] *= dp.x(); - vertices_[vi + 1] *= dp.y(); - vertices_[vi + 2] *= dp.z(); - } - changed = true; -} - - -bool GLVBO::saveToFile(const QString & filename) { - if (filename.isEmpty()) return false; - QFile f(filename); - QByteArray ba; - if (f.open(QFile::WriteOnly)) { - QDataStream out(&ba, QFile::WriteOnly); - out << vertices_ << normals_ << texcoords_ << colors_; - ba = qCompress(ba); - f.resize(0); - f.write(ba); - f.close(); - return true; - } - return false; -} - - -bool GLVBO::loadFromFile(const QString & filename) { - if (filename.isEmpty()) return false; - QFile f(filename); - QByteArray ba; - if (f.open(QFile::ReadOnly)) { - ba = f.readAll(); - if (ba.isEmpty()) return false; - ba = qUncompress(ba); - QDataStream in(ba); - in >> vertices_ >> normals_ >> texcoords_ >> colors_; - changed = true; - f.close(); - return !isEmpty(); - } - return false; -} - - -Box3D GLVBO::boundingBox() const { - if (vertices_.size() < 3) return Box3D(); - int vcnt = vertices_.size() / 3; - //qDebug() << "calculateBinormals" << vcnt << tcnt << vertices_.size() << texcoords_.size() << "..."; - GLfloat mix, miy, miz, max, may, maz; - Vector3d v0(vertices_[0], vertices_[1], vertices_[2]); - mix = max = v0.x; - miy = may = v0.y; - miz = maz = v0.z; - Box3D bound; - for (int t = 1; t < vcnt; ++t) { - int vi = t*3; - Vector3d v(vertices_[vi + 0], vertices_[vi + 1], vertices_[vi + 2]); - if (mix > v.x) mix = v.x; - if (max < v.x) max = v.x; - if (miy > v.y) miy = v.y; - if (may < v.y) may = v.y; - if (miz > v.z) miz = v.z; - if (maz < v.z) maz = v.z; - } - bound.x = mix; - bound.y = miy; - bound.z = miz; - bound.length = max - mix; - bound.width = may - miy; - bound.height = maz - miz; - return bound; -} diff --git a/test/qglview/glvbo.h b/test/qglview/glvbo.h deleted file mode 100644 index 2f5ed06..0000000 --- a/test/qglview/glvbo.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef GLVBO_H -#define GLVBO_H - -#include "gltypes.h" -#include "chunkstream.h" - -class GLVBO : protected QOpenGLFunctions -{ - friend class GLObjectBase; - friend QDataStream & operator <<(QDataStream & s, const GLVBO & m); - friend QDataStream & operator >>(QDataStream & s, GLVBO & m); -public: - GLVBO(GLenum usage = GL_DYNAMIC_DRAW); - ~GLVBO(); - - //GLVBO & operator =(const GLVBO & o) {return *this;} - - void init(); - void destroy(); - bool rebuffer(bool clear_ = false); - void draw(GLenum type, QOpenGLShaderProgram * prog, bool simplest = false); - void clear(); - - GLuint buffer() const {return buffer_;} - int verticesCount() const {return vertices_.size() / 3;} - bool isInit() const {return buffer_ != 0;} - bool isEmpty() const {return vertices_.size() < 3;} - - QVector & vertices() {changed = true; return vertices_;} - QVector & normals() {changed = true; return normals_;} - QVector & texcoords() {changed = true; return texcoords_;} - QVector & colors() {changed = true; return colors_;} - - void translatePoints(const QVector3D & dp); - void scalePoints(const QVector3D & dp); - - bool saveToFile(const QString & filename); - bool loadFromFile(const QString & filename); - - Box3D boundingBox() const; - -private: - void calculateBinormals(); - - QVector vertices_, normals_, texcoords_, colors_, tangents_, bitangents_; - QVector locs; - GLenum usage; - GLuint buffer_, va_; - int vert_count; - bool changed, has_normals, has_texcoords, has_colors, has_binormals; - -}; - - -inline QDataStream & operator <<(QDataStream & s, const GLVBO & m) { - ChunkStream cs; - //qDebug() << "place VBO" << m.vertices_.size() << m.normals_.size() << m.texcoords_.size() << m.colors_.size() << "..."; - cs << cs.chunk(1, m.vertices_) << cs.chunk(2, m.normals_) << cs.chunk(3, m.texcoords_) << cs.chunk(4, m.colors_) << cs.chunk(5, m.usage); - //qDebug() << "place VBO done" << cs.data().size() << "..."; - s << qCompress(cs.data()); return s; -} -inline QDataStream & operator >>(QDataStream & s, GLVBO & m) { - QByteArray ba; - s >> ba; - ba = qUncompress(ba); - ChunkStream cs(ba); - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: m.vertices_ = cs.getData >(); break; - case 2: m.normals_ = cs.getData >(); break; - case 3: m.texcoords_ = cs.getData >(); break; - case 4: m.colors_ = cs.getData >(); break; - case 5: m.usage = cs.getData(); break; - } - } - m.changed = true; - return s; -} - -#endif // GLVBO_H diff --git a/test/qglview/glwidget.cpp b/test/qglview/glwidget.cpp deleted file mode 100644 index 94972ca..0000000 --- a/test/qglview/glwidget.cpp +++ /dev/null @@ -1,268 +0,0 @@ -#include "glwidget.h" -#include "renderer_simple.h" -#include "renderer_deferred_shading.h" -#include - - -GLWidget::GLWidget(QWidget *parent) : QWidget(parent) { - view_ = new QGLView(); - view_->setFlag(Qt::FramelessWindowHint); - container = QWidget::createWindowContainer(view_, this); - lay = new QVBoxLayout(this); - lay->addWidget(container); - lay->setContentsMargins(0, 0, 0, 0); - lay->setSpacing(0); - setMouseTracking(true); - setWindowIcon(QIcon("://icons/qglview.png")); - connect(view_, &QGLView::doubleClick, this, &GLWidget::viewDoubleClicked); -} - - -QColor GLWidget::backColor() const { - return view_->backColor(); -} - - -qreal GLWidget::lineWidth() const { - return view_->lineWidth(); -} - - -qreal GLWidget::FOV() const { - return view_->FOV(); -} - - -qreal GLWidget::depthStart() const { - return view_->depthStart(); -} - - -qreal GLWidget::depthEnd() const { - return view_->depthEnd(); -} - - -QColor GLWidget::ambientColor() const { - return view_->ambientColor(); -} - - -bool GLWidget::isLightEnabled() const { - return view_->isLightEnabled(); -} - - -bool GLWidget::isGrabMouseEnabled() const { - return view_->isGrabMouseEnabled(); -} - - -bool GLWidget::isMouseRotateEnabled() const { - return view_->isMouseRotateEnabled(); -} - - -bool GLWidget::isMouseSelectionEnabled() const { - return view_->isMouseSelectionEnabled(); -} - - -bool GLWidget::isCameraOrbit() const -{ - return view_->isCameraOrbit(); -} - - -bool GLWidget::isHoverHaloEnabled() const { - return view_->isHoverHaloEnabled(); -} - - -QColor GLWidget::hoverHaloColor() const { - return view_->hoverHaloColor(); -} - - -qreal GLWidget::hoverHaloFillAlpha() const { - return view_->hoverHaloFillAlpha(); -} - - -bool GLWidget::isSelectionHaloEnabled() const { - return view_->isSelectionHaloEnabled(); -} - - -QColor GLWidget::selectionHaloColor() const { - return view_->selectionHaloColor(); -} - - -qreal GLWidget::selectionHaloFillAlpha() const { - return view_->selectionHaloFillAlpha(); -} - - -void GLWidget::addObject(GLObjectBase * o) { - view_->addObject(o); -} - - -QByteArray GLWidget::saveCamera() { - ChunkStream cs; - const Camera * c = view()->camera(); - cs.add(1, c->posX()); - cs.add(2, c->posY()); - cs.add(3, c->posZ()); - cs.add(4, c->aim().x()); - cs.add(5, c->aim().y()); - cs.add(6, c->aim().z()); - cs.add(7, c->angleZ()); - cs.add(8, c->angleXY()); - cs.add(9, c->angleRoll()); - cs.add(10, c->FOV()); - return cs.data(); -} - - -void GLWidget::restoreCamera(const QByteArray &ba) { - if (ba.isEmpty()) return; - ChunkStream cs(ba); - QVector3D pos, aim, ang; - while (!cs.atEnd()) { - switch (cs.read()) { - case 1: pos.setX(cs.getData()); break; - case 2: pos.setY(cs.getData()); break; - case 3: pos.setZ(cs.getData()); break; - case 4: aim.setX(cs.getData()); break; - case 5: aim.setY(cs.getData()); break; - case 6: aim.setZ(cs.getData()); break; - case 7: ang.setZ(cs.getData()); break; - case 8: ang.setY(cs.getData()); break; - case 9: ang.setX(cs.getData()); break; - case 10: setFOV(cs.getData()); break; - default: break; - } - } - view()->camera()->setPos(pos); - view()->camera()->setAim(aim); - view()->camera()->setAngles(ang); -} - - -void GLWidget::stop() { - view_->stop(); -} - - -void GLWidget::start(float freq, GLRendererBase * r) { - if (r == nullptr) r = new RendererSimple(view_); - GLRendererBase * pr = nullptr; - view_->setRenderer(r, &pr); - if (pr != nullptr && pr != r) delete pr; - view_->start(freq); -} - - -void GLWidget::setBackColor(const QColor & c) { - view_->setBackColor(c); -} - - -void GLWidget::setLineWidth(const qreal & arg) { - view_->setLineWidth(arg); -} - - -void GLWidget::setFOV(const qreal & arg) { - view_->setFOV(arg); -} - - -void GLWidget::setDepthStart(const qreal & arg) { - view_->setDepthStart(arg); -} - - -void GLWidget::setDepthEnd(const qreal & arg) { - view_->setDepthEnd(arg); -} - - -void GLWidget::setAmbientColor(const QColor & arg) { - view_->setAmbientColor(arg); -} - - -void GLWidget::setLightEnabled(const bool & arg) { - view_->setLightEnabled(arg); -} - - -void GLWidget::setGrabMouseEnabled(const bool & arg) { - view_->setGrabMouseEnabled(arg); -} - - -void GLWidget::setMouseRotateEnabled(const bool & arg) { - view_->setMouseRotateEnabled(arg); -} - - -void GLWidget::setMouseSelectionEnabled(const bool & arg) { - view_->setMouseSelectionEnabled(arg); -} - - -void GLWidget::setCameraOrbit(const bool & arg) { - view_->setCameraOrbit(arg); -} - - -void GLWidget::setHoverHaloEnabled(const bool & arg) { - view_->setHoverHaloEnabled(arg); -} - - -void GLWidget::setHoverHaloColor(const QColor & arg) { - view_->setHoverHaloColor(arg); -} - - -void GLWidget::setHoverHaloFillAlpha(const qreal & arg) { - view_->setHoverHaloFillAlpha(arg); -} - - -void GLWidget::setSelectionHaloEnabled(const bool & arg) { - view_->setSelectionHaloEnabled(arg); -} - - -void GLWidget::setSelectionHaloColor(const QColor & arg) { - view_->setSelectionHaloColor(arg); -} - - -void GLWidget::setSelectionHaloFillAlpha(const qreal & arg) { - view_->setSelectionHaloFillAlpha(arg); -} - - -void GLWidget::viewDoubleClicked() { -// qDebug() << "click widget!!"; - if (view_->windowState() == Qt::WindowFullScreen) { -// view_->hide(); - container = QWidget::createWindowContainer(view_, this); - lay->addWidget(container); - container->show(); -// show(); - } else { -// hide(); - view_->setParent(nullptr); - view_->showFullScreen(); - lay->removeWidget(container); - } -// qDebug() << "click widge done!"; -} diff --git a/test/qglview/glwidget.h b/test/qglview/glwidget.h deleted file mode 100644 index 87eb6f1..0000000 --- a/test/qglview/glwidget.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef GLWIDGET_H -#define GLWIDGET_H - -#include - - -class QGLView; -class GLRendererBase; -class GLObjectBase; - -class GLWidget : public QWidget -{ - Q_OBJECT - Q_PROPERTY (QColor backColor READ backColor WRITE setBackColor) - Q_PROPERTY (qreal lineWidth READ lineWidth WRITE setLineWidth) - Q_PROPERTY (qreal FOV READ FOV WRITE setFOV) - Q_PROPERTY (qreal depthStart READ depthStart WRITE setDepthStart) - Q_PROPERTY (qreal depthEnd READ depthEnd WRITE setDepthEnd) - Q_PROPERTY (QColor ambientColor READ ambientColor WRITE setAmbientColor) - Q_PROPERTY (bool grabMouse READ isGrabMouseEnabled WRITE setGrabMouseEnabled) - Q_PROPERTY (bool mouseRotate READ isMouseRotateEnabled WRITE setMouseRotateEnabled) - Q_PROPERTY (bool mouseSelection READ isMouseSelectionEnabled WRITE setMouseSelectionEnabled) - Q_PROPERTY (bool cameraOrbit READ isCameraOrbit WRITE setCameraOrbit) - Q_PROPERTY (bool hoverHalo READ isHoverHaloEnabled WRITE setHoverHaloEnabled) - Q_PROPERTY (QColor hoverHaloColor READ hoverHaloColor WRITE setHoverHaloColor) - Q_PROPERTY (qreal hoverHaloFillAlpha READ hoverHaloFillAlpha WRITE setHoverHaloFillAlpha) - Q_PROPERTY (bool selectionHalo READ isSelectionHaloEnabled WRITE setSelectionHaloEnabled) - Q_PROPERTY (QColor selectionHaloColor READ selectionHaloColor WRITE setSelectionHaloColor) - Q_PROPERTY (qreal selectionHaloFillAlpha READ selectionHaloFillAlpha WRITE setSelectionHaloFillAlpha) -public: - explicit GLWidget(QWidget *parent = nullptr); - QGLView * view() {return view_;} - - QColor backColor() const; - qreal lineWidth() const; - qreal FOV() const; - qreal depthStart() const; - qreal depthEnd() const; - QColor ambientColor() const; - bool isLightEnabled() const; - bool isGrabMouseEnabled() const; - bool isMouseRotateEnabled() const; - bool isMouseSelectionEnabled() const; - bool isCameraOrbit() const; - bool isHoverHaloEnabled() const; - QColor hoverHaloColor() const; - qreal hoverHaloFillAlpha() const; - bool isSelectionHaloEnabled() const; - QColor selectionHaloColor() const; - qreal selectionHaloFillAlpha() const; - - void addObject(GLObjectBase * o); - QByteArray saveCamera(); - void restoreCamera(const QByteArray & ba); - -public slots: - void stop(); - void start(float freq = 60.0, GLRendererBase * r = nullptr); - void setBackColor(const QColor & c); - void setLineWidth(const qreal & arg); - void setFOV(const qreal & arg); - void setDepthStart(const qreal & arg); - void setDepthEnd(const qreal & arg); - void setAmbientColor(const QColor & arg); - void setLightEnabled(const bool & arg); - void setGrabMouseEnabled(const bool & arg); - void setMouseRotateEnabled(const bool & arg); - void setMouseSelectionEnabled(const bool & arg); - void setCameraOrbit(const bool & arg); - void setHoverHaloEnabled(const bool & arg); - void setHoverHaloColor(const QColor & arg); - void setHoverHaloFillAlpha(const qreal & arg); - void setSelectionHaloEnabled(const bool & arg); - void setSelectionHaloColor(const QColor & arg); - void setSelectionHaloFillAlpha(const qreal & arg); - -private slots: - void viewDoubleClicked(); - -private: - QWidget * container; - QGLView * view_; - QLayout * lay; - -signals: -}; - -#endif // GLWIDGET_H diff --git a/test/qglview/icons/alpha.png b/test/qglview/icons/alpha.png deleted file mode 100644 index 543566938cf5681db007530efc6b64c4ae67c096..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPaBR`)C--V~^b^?X8JzX3_G|ngA*^(*DZ1&*w>+aAw xosBLAs~RN^{P_RBevQy<^L#m8)nAzm45u$~80FZyPX%gY@O1TaS?83{1ONw+E@}V( diff --git a/test/qglview/icons/application-exit.png b/test/qglview/icons/application-exit.png deleted file mode 100644 index ed5f8b2515e72608d2de9d45fb80ff481926066e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 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 diff --git a/test/qglview/icons/document-import.png b/test/qglview/icons/document-import.png deleted file mode 100644 index 293b5a03f7dba7bff36556b8329872bfdca9330c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2411 zcmV-x36%DUP)f zKlhw-&%NX$V`v42NruUWDNh05@tonAv5@Db&l%FTBnlbhNj-uFg)^)z#(h8oKY^b$1Q)J>A_dMsH6~cJ%gwoWJ(~ zeTVNF;&B+atD{2#er$MQECPPWA9Ne}o`~!{dR-eS(5L?1J%8PA{aDbazcGw{2bdtx z3ouL&76klsd;$Xb-tbYZaigZjojZHhb+om)UI>U#U!UubFaUDg3;c})c_9V~0TKd- zyaagi;bXW_MMZ^Mvu2IEe*L=pPf3Y)FHfSs-wmh-0|TS|V1S;f*SqvUV(1Yf5puu0 z1Ym(a12a*6?V4Nm)?039Xvop7T)E=@cl4TEK1iBL!Zo!Tr58UL4BoJ ze5sKiGy>jlZ6I1%S(z&>E%jFNL?C$oKJa9RfL(j=TlD*2xTp7GQX%w_h`a`Y#SNlOn$=fUq<$&H9ii8M!Q;-O`S6%`%m5mJzZt2pcen3Qd zzr|v9Pphh`a;+^bSk#jo9v*hX^o9p^4Rjy>=0&JSgnENqOJedCfE941it=(-{Px@K z!Gi~$JYXQjL|t8-pDmFdw)c3KYu$rbjE7uIZYB|N;O8xXKMqripC3Pd-2L~+5iG?s zxq>H3yM6mMqWt~H$jD;>^wB+#IA&wWK=0ivaaS0A}n67&EL;}Y<^1SqSBDEH+4&6_v79-9&QuOB>E z`O%|CtQjKi?i6&Dxt ziYzC$kO6n|{~aC@ zMEEnnCAc^1aGel87xA3FFS4=QqI2ju%clQ7WZz|0JVdp-01pUJqW@m@|BN{Odrvyo4; zkm{sVK!I(LKX3gH$UYHx;TLfhTE2X_Te)(jTfKU<&qC|huXp^mV8H^nXwjmvWT7-& zg49LSi?EQh7Sb$CiPwO19U%V;d<1aa)YKHO10W^Oz^T=@zi4*RKRiivtCIYHPo12>yz+S>dD5L5>a9MGOv8EJHrQE4+%d-EnPqIgg(ufP;} zEH2{S!guc6@x~F+dfV0AGC=sIeG_mF#q86_j^mC2h+$!>Qf2@VI+ZB5ZRVv*m%Jba zs_J)TmY6)VgvCW1(zkBi!T^lnH%ir2RTzb{C%=uoW`_n>%E~0*byEJg1OQ00aYuv- ztE*S9vc;6&YcWcF-Un(IU+s$<#f!lC; z!4V}y_wC!~S9EQXHf`GEwr<_(*P6qJ4>KbfVrJ&dng1*(D0oHIANLHXj|p;}5*JeI z%XJXXB8Yo1gBv$)bU7OFl&Q0sn)UL_MaJiAzU-mpAs|K0(>9UE`nXqYeOw2>$LG(V zKkxSM-;X=0o|60dfNyJQ$<$gp~EirZ`gI2^{O zIi@eO06t+w;f@_U+_`h-eAO!QbLYOqWDM`FZ|yNpincC2%x5^u*Hitghh(u zNj4DFKC@=cT5V%~RhFM90l0)_L48*EbA0WjBL7$Zha_bKtM7#i7u>O9#}JXR_;@sZ z`t+qX-YbU5A~4|s)W>cVgWo|~brQgo#Z;G6lvl0JIbT|e0GOw5w!(fzE9^uH zcmn}gHim?ZLcyDs&6YlKpBD3f0+?#E@^R6YVHOS^JlOK$)TwV8`7itb$(Z1VAHL?E zys^P&k;1h&EMpBAS+ZowQTzV)jr?cB0o#N(K8j`L8-8W@wc$;}BExSCivxaZ_?_YR z0e>+3(eNk3pACO8{MGO`5PtiS;p>K}swzLI_R+9$croA;S@6jSp9**>!lwg16Tq_< d{I{R5{U04HWW?&f=6L`B002ovPDHLkV1jwcqb2|V diff --git a/test/qglview/icons/document-new.png b/test/qglview/icons/document-new.png deleted file mode 100644 index 61db97ae49ca9bd542c685c973df94e0e0daa460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2461 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 AfdBvi diff --git a/test/qglview/icons/document-save-.png b/test/qglview/icons/document-save-.png deleted file mode 100644 index cc380a03aee7f4add3e6b6b78338ff6e031c9688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2122 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 B^11*3 diff --git a/test/qglview/icons/edit-clear-locationbar-rtl.png b/test/qglview/icons/edit-clear-locationbar-rtl.png deleted file mode 100644 index 6c4b83b7ac6e451f461973dac0c9a6c53dedef25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*(*`Bv~l~6?FSDYJaY8Nv17;1UpRl|%9VTf?mc|? z@cHxSFJHcV_3G8zw{Jgu`0)Aj=PzHr{QC9l_wV0-{`@KR`o0Pn77`^ve!&d#@_Ksq z_8}pusXI=cy7Kht(+?kh{P_EqYvr0*Ks9qcT^vIsBJkEM|1so z>*;dxIy;s3ojI&$kq&AP_I<(sjrDEsaU~GX3SIsdMei7bh)})pLEh`3!Xi^UM4W+LIZr$zxaOz7mw|A28X|&gK2(h zZfSoyEkX7Ar7SOshe$kJ@wtDv=f<5!bjpH@N4L9nR{6W;bYuBbX#H42w#$q|FGoYkR7TQxAVVC~AgvlcDbQ{K}v zz)cqHtE#WH+tMnPL>x$^K&cL@=%%l{d{cK)X)1KPX3v;gl4lwwgdERi@@M$WfsL{? zP3)eLTi{~|fOrH9%Ru@V9LpV0qngA+;sn5whQ6+jjvrr!>i^mx(;;26*la$T(-0mV zM6EV|5;_BFz$$UjH5GQd1)8dx zW$%Zmk#1*hIjlV+=?;EPa9k=7g`$b#;sWMW{kp}nRc!428shS@9j29Ip{OZjyKMj{ zG9;eH^E^zu)Bdikvh?_!mu@q(n3*v73Z?HG|HJ$KtcH9J10IQl4im gAunrc0{^W1Pl-(m{G3O!W1aTUgGKN%6@}cL`d0sS5o>yped=IE{-7;x28@w z?{(Ng;8?o(vZal2UCV9SDn2q^kz14h;ArvQ8^O9iIQDs;w`*7+VDp{f_ZlWKjr z)#jWRvnDK(uc_Jn=1hKh7{h^v8aJ_m2#-3&dS~D8ALfP$ET*!d=Iaj$ESaLv%HXJJ zadX**`|pc8)DD~|l;Q1I%+aL4pv!&XZJDLtiIt|8wDsLQZsnLs95p=my!g*?kHg2f ze}skYh-*HqEXlpecGB}onN3VDlz0sp?)p^E4K+@`E$^}V!kg~`uY(tgCWzj2SkAUA zhv5~wSpvTuPll7r+MOC)9ESz0WW}p&`9(OEY-(cc;=5QH8+dok<}z*b-~0I2y#2;5 zm%ceYifxa*+WiUnz4IqbQQ=IBY~#^CEhHY#9paTJbKGK|^!~uRnp-kXG?@4ro-by5 zaqMZ<%Gv6Zf0wV?sdn1z0IR9imMNmDb$a0zwKG0V)~~O%Gci?|KU*m}BkiApw!tmN Y4DJ^lh1J@%z&K#=boFyt=akR{0F^SkGXMYp diff --git a/test/qglview/icons/edit-delete.png b/test/qglview/icons/edit-delete.png deleted file mode 100644 index 87cd0b0125d6193c16c59f25b88396493e885f6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*<;sHJ( zuK)l4Z(v|p!N9PVfuWs&p^JfGA_Kz=28KBd467IzAX4jDSb*GiKE6H%hCBv_Tn2_L z28Klp4AZo=>*d6nRHQFelpgl-Jed$XS6*hniPlkf`z7+iOXNkDC`v6+mRl+(v`kK5 zwTk$9b?ME9YMZs?_j%bL_HsDk<9sU2r$Je2`?nP^4n zy$lTd7#Q|j8XpwoI%I5o$k*ermDN#8qhmrm$Ax%K+S#3Uu|MtSb;ix@0t3SZA)d=& zVVA>0E~h43Ns7Cc5PLm2@wTwQZ4try!urld@myOUR3yfXZwfVuCELX$$gHBz;HAv3GxeOFfuao00U1?PcLu(fWV*& z*YDnY^6b^8FJFJbz;6)v0|bBn{{8pwYTmshp#IsOE{-7*lD!9A#hMrxSP$@P+)yej zFHd4mDu4d>{K5|<=XpdH-eIeeoFkI5#Mch*eE5E3q& zsDJ)QWe~HZu=JPqwHHm!J!tPMoAuVM<=A|yGuL0$MD)r}t=B23K4h_=$wxfq{j{s6 zvbJ;1RM`0b{&%I*Q{~<_^9mg*KC_8ox^*ST366Hw_&MDTLh{a=g|okJNlO7blfl!~ K&t;ucLK6VLNBNWh diff --git a/test/qglview/icons/edit-find.png b/test/qglview/icons/edit-find.png deleted file mode 100644 index 9a462c0b9a40035c6c0cccb0491276d18098ac6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vk7#J9t0(?ST z|Ns9Flpzl=GBN@+vaqmlae?d=5D*X)6y)aS=HufN5)zV@mX?>72dWVk78Vs16%!K^ z7Z;b1kN}Fy$jB%wE32resHrNetE+2hXlQF|>*(m{>gpO98JQRvnrX&tshF9W zS!l>x>ZsZnXt+8#cqlS>d3pKz`ub^d`uX_<8_R?S2Ze=&MS9p~MEGW8WMqcBWoBk( zWn~o=vQON3vRn3KWzqag8Vm&QB{TPb^AhC@(M9%goCzPEIUH)ypqRpZ(583aDtGr;B5V z#MI;j1+D__&jtn`IEoMd$ocec)*P8x?>^-S*iBzCZ{MahYc{Q$ry<^PUhnzJ?6r@c ztw>t?TJt!ch=9q~LgNj=AsY+}HXDkvWCav`{CMp`Sm@PjAHEd^K1vcOGB7Ou6mb1w z;O7D(<3fQXf$bakxeCGr1p^Deac?shPo7|~?Gyi(Nr{OQKXQH9YC0+5!PO#O&aF?9 z6CP~l;Vr!SC^g~HbfYO^326xlViU}!JV|G|b^639jzYybjq(f(=Z{Mqoh4|b5A+Fx Mr>mdKI;Vst0N7E%9smFU diff --git a/test/qglview/icons/edit-guides.png b/test/qglview/icons/edit-guides.png deleted file mode 100644 index d26483960a4dcbadb1f43e5338886914f179d9e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j|KP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iXV< z7c?snYm~(R00E#$L_t(|+KrMwYZO5khoASIo!yNm$8O|E8he{GqNU=uNN;Zus-Gb4P}#Y7A?ygXPKr96UOJL@!>R*>ELDtA1kf(LUSRwVPELmLx=%zus$aSl7`2@O146zfYCK8uCTp@eddeLoc{v>-MjzqkF`<&0000j6lR&1TgAAr&ZD!k+qP}W%jJ@CJRS#CRRM9ND9TBQ-xjmkjMQ-h5{U#%r&Fla zYOo82VSMr$Ij3T=SddLTjly+Z+O#GUI#oqsWi!YTYX~Mp1c=N6n29LEN`M@2&z|S8 zz?K6UxCItq2SjA@zXAxJ_(ltgM1XRn1uCLIxCJIj9r$!Vb_lQ|29qtzg5l3_{kb(5 zjm9I~{uX%RpAOcb`;j_K(Y$)So_lkBnZvay{frS1X+EDb*~^{h3eETC3$-v9491ub zaDdSvvJPx#24YJ`L;wH)0002_L%V+f000SaNLh0L00VXa00VXbebs`@00007bV*G`2ipf2 z5f1MO_vl!NDy2!q(wRLC{lU>hk|7A?&#&NUx#3*NsEGh#?SNe z;e`kO5T(>j03J~;Y!}|myq)P3w~KYQF!|eTeA>7-S(}XK_vV#SNQYh!3z!VQ7k4G!;ogP ziSPSFQA8qV{b)8Hm!|3QJxm*tUCM>uMWb@|N zk(VREhnPkjVsVErLm!x?xwOB(zj$zP(C_m3JQEWW%g!z5DgQg-IL=C=(Rh4XTRNSl zQmJfOmNnaMw^wVm+T0+Yo}S(;7K^j8wzhU$E|-%)Ut1ikil9pxRc^=(v7tizPbUN6!eXiEiT>GUh2m+!gLPXFsjUWil)S61AP)hZ=mP{rC zUDq#anuds=RL^xbn;p`6nrAYZ-hg2kD~{tVA08h5rfqzDd>Oznj3vi$7SH1-rQ}~U Z{sb_v1Uf{wNjd-k002ovPDHLkV1mj;9L)d# diff --git a/test/qglview/icons/item.png b/test/qglview/icons/item.png deleted file mode 100644 index 50bfddbfa29e1b8edd2d07e365d3d554eb40581b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x37?{gIn6dV1(;1*3dx@v7EBkGB2|+ytC)E5ZC#9Ta_AqPjcJ8oi=#E=; z?DoPf3(O=mmZtwX|FHcq`=9Rt<{pz$>aFI+E!JSV_`J$!X2Q-Gxt!Z^{9-JQ3gX?Y z9ULw#%Q6f0-=C<$8FT&Z-OYIdZHhjZT>?ckP777eQ$B6v68PmY_ui&WI)ZJAU5gxI zuS@j0CGIgTv)5&$)aq-#J#eXJ_2{`!`Fhj@H=?B%}-8@m+M``_=&9uH*Pa^sRo>+4-6M^5QY@6L)8`()!D z8fv>uG3?t>wHBal3X8;U3up(2hH7+uIwX<3@#U_6BHG40$;U0f=WUPf&NZ7|$&es% lY+CWY$}R0vCe8Z)0JRB|3DF3=|YfF7jDEZ>IVpdRI~vVL~%?rHj{Mb-aA4?aN$HkpY6+e zIJ}%A@;qlRND8>Ne);a1hpoZcM@ORNcT0CDpm2lpt8;$t;5m`HA+Mts_V&s9W~>cf zetj;y8B(ff-fq3o6i^ss-tluMK}bpJ9RCvtKmqnoV4WvU2M7e2b^n@kK&}DWEA7Qj z+`01X%TpaFO`sJG5esISB#+&7>@2gVH>sP%}a+DuI`p-7R~pI$1Y5x z9J%rcDSiulyep{dI#Oy%ghc%waq@#~ax=Pj`qhjEu-38}b?Q6+eS$+ zxgkjtHlh#o1_P#oDl|xq z)$=3opuA-AQ-@kiO_W*dZ1Abw6Jy@#*R^Fg!5P*sA&3jgil^7k&X>BCo8zhBfN|0000j diff --git a/test/qglview/icons/node-add.png b/test/qglview/icons/node-add.png deleted file mode 100644 index 80b5c61c6e67c8a593e30a12114e28a2a61bb3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 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

    Q!t<|C}rxlUYes)3aq;oaHjZFQ6)* zV&Bu@F^JQTJ6;Gg!*`OK2r~}&^7Y|rNY7=#=ik3$P{g;qNH5YKdGte;`M7ko?*#2#<2W27 z-l@B1?}{-K_&hQ&aDUp=l(X`k$&p82DsQs9PL2;z4#{zW!DHS}O2cv8(_brP~u_B_i3%8EyZ1m+cV z$~`wGA#sxHuC=}8)+)4j)y3%HMB7lMlDJ+}VQF7!%W?Ach_)}m9G{VHf90!bf$2wa zefFR#1w@?SmSQ#jKUaxZG6~TIp5zYv{rmG+5imCB;|hBkhuPWCYun#F98Yv~V(h1rGVU_%GNENN)V5`Eva{MC8(JyCO zOY>Vswd=R%)z#J`!sv9+Be*!e(bHWJHoN174=GDaX&;v9_ypg7pL99W^cOJ5EEP+y zf1~IuS8$tjTBd6vT^(RE1>M~(L(dP0`ovS1n)2jUhO|e0nfx|YIK^aXq2slw@PI#F zbB7AksPez(IP$NdpsBf%vXU|ccmXNnHUjbEr+svTPO%;RCtS@BXTL%8$jj>&->eU; z4;tSZ7(9)C8t)YgP~k)XbN#2#(?f)j`{YOx)iL<~#fcPpAGH@bt=@w~Umw@R(G)s= zRa8>fqgXsj7_<{&5eExrST$x{1)TGGd1aq%gZAD|RkPWTDz6fqte|d3Z`9NOb4cwz z9i<|SSVaM#kVfZ4ho2Ef@ETS9$9b43b~eoNl}7K03UH6h-7_BYPv{+8Ky% zehOiu5)|sHTuzAF^sn|DAHA&9eEVJ`8d5$@a|b}<;gXUfF@M33J^md$w=KTpl*;r2 z=IsNhLzvDewLmDJlMz{C4{Om9Z(ZGR+1rIyx9-W(JEn1H<#wMZS{^Ky4Q@=RDbl>Obp0*$^t zBKyF+R>@bg`($^wo!+NCCh*QrOkBiYg1@bWa{a3{Odu%S1Z8H z!dNvGZbmq`oYQHv^|0NQvGs&Q-`(fe?VRKDQ5c);Cc)=?aovo+DxA;}^x!ymsiAx3 zBHtXfCY!(2&AuPH4uGGRB^G9FQyASYsizC5Vk!j=@q?Kby(lsLt?=Du6&%$F4QcOk z33=Wffj_prW6nTtY-ryS6NdQSN7*a`35L0qizQM0`YURb{}gdxK9SEikm$pfINowi(??(Ng(V)5TbnRzqOndL3etBKag=cwon+H^w zQhp8IxdGwYBZVzQvhuf(%0#l4##lOk6m`Yty=L(&lM~O?#)pCw4!AjdTN5Ostt5A(^>BH>Ob#-e4 zbUkXxUAqfm4encRWjIqsp~+z(9c@~k|8~bZZJtBVlC=NX?aMf zE{Mimu>7!h-|$y_mq#3!0xm$lAmw(R=HYm}fp_}X;K1RIoV#QxIuCv*XAlCuaxeFD zs`M~Jjj^#|smM=zBSZd{Y3aXwIc;eOyXou~GBFCxjvTsF7C02(d%tmcq~hKfNO2&2 zV~S7q<*`|6IapZtOJgQ4w&n#uNp<9%!=}f_x98jMP8uMc*?Lu=3og&L% zKy9O7`JSFps<&w6C0@i`6?Nm9d+*|O_iv^D>6ej}^&?5irve@nt7t>Z1hzcaz8Srb zq0(~;x4r(A)2JmOIatLN7)Nc&;LgF+{X%;~SmmHO4RNKEZ6jl^*+3o!w}xkC>u55< znl6)-@l8}KS))#9{uM;7y#C>rhszDo;dPG}>WTj|rGVWs7`!*J$Y-ozidN8D(_51; zO9cxmXcQE)WMC`PiJpVA+=LvSgg)D*Low@ZbKK77^fTeRAWfjf2?cXakz-lX)GYpz?||qH<1m5DkIabc4B?y(x~927or#9Tcc=`mSG?Dn3mKKpPg&` zty#%kB!EA&mg$tU|Gn3dI}FW(=Z?`My-14(zc`}W+O{*Gf|V7hAPdL02{9ET+u!)# zLwBs6&}c|7waD`NDU^R- z1#>>$)Q`W#rcORd>Bp~aOF|_S-X)9qyQ&6Q9ob`+#~CiWF1x?cmL?esaxLh-1Ch^C zG??NZ^OpEo5)nXC4RFhOQ9L{_msZ#aoTXmcE%2vqe2>-&*IQ;IoerC7pbQ~Rv@<&gNnj*{nFmbSN{wDgB;$< z4DSuzog8k9X>B}oQZ%|LQ26*$qFq$*OV$KXBa0}7D`&|f6`^n~-JcY<=&#lu9rLcj z9x!{vK2by&9~g%Ee0Q$@%PsfGkmZ>dM*$-L)z_7D_xZE&EiWQha^oECnL9Z~4vhQ~ zF3!tChFsRHNKfCFyoL%0;HfwSmB}*DI`LKpPi!Q`*n6&R#6bL6=3$=Bj}oFP_$4oc zF86`j(s6@^%6+-H$@gs9H53dVXl$=w=pV|qC9xy13q)+nN`Gq3YG&Nyk(Cn`5kA## z)xESf!e84MyBrjUtNTc(p!mgXrL%)Gxw1n#MP_+@B$F@Pm=9m3NdVzS}vc{*=s zmB{wR_5YDV&HmnDhH~0m%Ng0*UlOLW^eVcDNRa2PQey@NLOd4U{o7V~8us*Y=Y>M( zsS~(qzJ>UPoa=20->5Y{1DRMJ)GEFwb9M0Ty~;90L~M&rN7;W8U#7t20jtIL3H7Pd zgBG2}@UtJrsNW3ILBn`OnosbA3|9`+r;GSY`XBN9sJV6-xcr+=^JnOY`N!NNmyxW` zpLI~9t>VfSEir5u%z>=d&ivR3H}zx>qR37#Qi^{U|K1)Z!r0+Vn=-=%DlcgQK0XZi ztuFUg$dM9wDI{g+4L&_Gu$6X+cBv?i>K(j4B0X61n7ypR2l{WE7Ly6l89Ec{)017<4Pf`vDG&nzvwQ+6Q5 zrczR7feSh5dw5+*Jv~(z`&Oj%R)#Tb9b$*dRfVtZ@{i_^U;j7|@V$K@0Ognc2`Nz! z&1HGyeeJjQH1(a?;C?5xIdlXw;5l?SD?n2rW^~KLPdpYmIT0WkAgTDy#g(r6y-iG3 zUs*{>2@hI{drcU5uZ6FAhHZ{bYPT#UMLhu^Wo0uLkhZId@vFYg-zqcPD>SP2MU#@` z9nmO=nE1GfHqd|t98$gr|7Krrz6ioFxT%t^lpb%xn~E_H^4K-j8a|J(y2?J4+8o4v zb^-H8Uspz;HOvr>0m7{rY*k~gJO_FQdtY?l>p`23JwvD7XPh7FE%V@M$o|W1U847V zetdFrQE%~Bf_V4g#6h0)6oi+jDngF4ff+- z=f6lQ+S2i(KrZt8c23UC^RR-2 zU>FNBIOz10cDzOO5bq%%AJFkDE;+msPe@2N`e?W>x4L5ES}Et2`t>3S$F$r#25Z>r z^#eOswQ1)U+qzs_dk?dV4;gbkc`N5;mPE#l2bQBU<{h~BxCMJZfV2w8@Ry_U@fIxc zA$qr7tYpUjwc4@P#F~OIjm;nS&c17@}9UmvxREvLEf?%{84a@ql|mXFnzW{#~GOWVinM8z->9N;2O# zOA%7VwG%ZtDV7RQ=DF9Vj<;1pTms^{Yv+5vSWgW>5o8URp#LPbuM#8VBtGGWF(2G% z656KVu&r}=Wk9Lup<^8`Dn&_&gpEm=r(p;3J_2}Xs>crBuqR<3v$Db(?E+Db9@^R` zRxc8K)zSuU%@bKR%*5TDUa~@k{PPyV)2JC~>kAzM+P>cSR!cxl>NZ*xdFtw>1(&$D zsI^DtcXw?CPne^MtmL`4v4Qr)@u3vlI{DFZQoSm7M z;vt7MqQohg(}qPSm$S_Du+_TLZ5}bIs);hC^JzY6XtB5Quw($=1ITNIaC;#WB8=SJ zkg#`rCB>||4>`ueD#?=i%A&*X#D*x(!9ia-UplH-4sw7Gxgbfzh!Pl>%N%kZ-(m#U ziV8gjGF$Ik=nCru`S%+mut_|JFmnE3#&iBV&XbEp0A|4SF^M$w^#Fe%?{XQ z)&Hu?n)me8W=i!Qvbpb_#Q`PY-t}h0;? z!ppRxXR9NJp2co;l?wqRP+r{O(Vd#}PN;G9>#C7PTs+nw%HY&ruT&;2fR8}N%;E*W zNZ39!qy?wt5>^I;N=rR_7+U5xtz~c;P|snRaqii*AtItNb|HP1IPj4Ym{4)rg2dC4 z9BpJ^*DP$XbtFHwyrT2HtIYLHx_Q%zTfKPDUS(rysd~*N_U)ehnOL zyAj3H{4F}=-IwFf%9$!nFRyr()h2b(q}AVl%}Bb9$`azj zQ;BiEMsBiIQ>ysx#>R60I*}5Y@yq8FycgxTt2ZPcd%c612P-YpVK!>|GDmP zQgi7@xdoD8rkbOI=B0Bi;(=jhVU$ANx$8Y|)LfWr*vQa?8nFxCnV-zDl z%feh*Pg?Ki`~Ce^Wy}2UFzx5~3$o@RJ!JvA_$ z{uzto%2mgOc}R*zf+%<{m_BCR_C#f)iO;YBe>j6JEj?`om<@c{2Ptio(igq=^E`cG z@)GA7r}wm?!U19nu_dH?|64D$NUdn(1x_@ShR~wBVkP{+)yIguqDJ#o+Ev;V%c9c$ z@BP}FBg2VNUA^OyArjd^GTDKF<BT8(fcal>SDbCv;B zQJXN(lm0&li?-->D>g*Y4-U^YKc_bSY-ytvKy_~qdT{tAro_@wE}NSliUS>Jc512$eNp9Up_;Az`{p!KX%GK;~? z(@h3uAuwD!Tr1Z$)7LjMK2u}Q-=_O3*;Z`2e`h__$koMr%zI2gd6XBs;@)Fg53~yp zRd$R2cpw6l9dN@35xAR`Jfb0I)~Yc{lO;D;vh$!$w`gbmPrvUjYHaMgsE%t)aBAA0 z?myk&a$xJC$jD<;V=6dKwv#1$U(e6$r}fP2I8O;v*K<9b_MOyIt25=HZ2O)yKM}>& zS--GbI%<*N?Kc&(t&fv_8DeIRr7pwz#ihIZX{B@B>-|9ht9-o2Yz46 z&p=FU=7Z)-#D1qhUR1pb49t;Zj*WoR&5Z>vy4f=ET zk>3yUUZ;y&c}+qByMn}gVKx8n-`B|3$bKKu&##~2L<$gmRJ$^;3XC4=OWB^UiyJzC z6;T*%z*C}SKnT`%PNDeY|L>}(@`&7dW+axaGvc7vnfL}LAnQJeHEN5CL7#ZZM*`jM z_4U>9Mm@}`-bK^&1|2$ivZ556&#i-^_Q0s}-JF^3zreq})l#9Pa%bMya46jgFR}$m zOEb;UGcQtGf*txCbptfZSX;>!<(1??#3lr+~?w%5jY3YO?CnLP!_UK1IzX09H%2+;77a09|FT-4dl z0q0?_BQEwEu{UDRBiWOeh;9gOuu=C+JOlt)W3KD*Snre+0_$gG!~xm0Sr{=P$VrA- z)~4=|M;kOjv!z~_3$zge_@d=epKipXGBOsL7MeQ6N+zND_yfX0fj~}c-6jNxfca6( zo%s>KJ_}%?cV{8WDrRWat>zKmNW(bA3JP;B?2FWXDDf4;uNX7fYth44qRwc77d)vo zv$MO!ZcYzc`aE>Qsc;)+;!Qx36pJEIsY5MH(Jg*#asMX2??jALzya$ z*D~1T6lQY7Th+%v&cp1DfC43Bi$4tL&3}12axciNF!{(nB=H3?ahJy7bINc$yI(>H zPTux4s*Kf_HCY$VkmBV|zT~2Y6V-GF!uKF%hbi zn3xNlJlKqk+W7GN@E0I=Q;mVW2sys8(Em;B^ex-sy7Dj+e(>nzbY@~CybdP-SwYP6 z{kpiTf9I92$5b!$?7V)`*V_IG^`R1V|IXkufxU&WWA=o552BJ7i0w0npvC&kTj}@f z{#t7%l~?wzR6k3$TM5)+laRlZ|HgX5Ir;OW zL{o@oZtbQaw}OIOsEj3p5Vs%nwpef1myi15JDt%o2IPYRqU0?#=4K!;sL%A^@?e5I zvT&(R{=3w0bKpzO9@gkygjMkx%}LyzC1qTnlhBoB1Z-~6BN(qRJzf3c`33h~b;Vis z7`|$^=<VoV%rt~$vCiq2!Q&>JDHgxz zRqzQx;R$a_*LZLaK4}2-0_GL&>E306a*9!oQCP60S?zg=e&O%gk2TwFAJ0lnJ?TCPMGxJUi}#yUQaZVH{muu43(z1phYE!y zkW+9ub}PPf@SZPNTEBRW+9xhr@SP%*5{ak9$D6YMVPB_q3t~r~q1|bmsrV#_=exu8MGB3Q7O#% z<1-)iG3OMf$K~M6b2VCwQ$2n{kOE(Il<{IO7zDXekRLI{$KN-{&vF8UGhdxpA148% zVnH^b?kG+L2!9-TE|P!hP}+b^_`!+-7EBun2)p3->5=QW*$D+7M9PHa@z4=%(aybn zq8Y#NqLMD_TSzwa`D7 zAqs_5UcGk^ri%r(=65s*z0|NI^vabrX*Oy0)k7st;1Ucss96DVu@XceM@0y|B{cn( zwha)}4H&+@FQKH@*YHlB)V9&Zt@+n*(h;gxX+L-*g$EsuC0W<10F!~Sfw3q@+{k+! zPcRx7X*{S&eeffn;;V8J04q|)*MnJ+-u=_KZ>#$T-$)TOQ(IjCjYsqYc+4xZ5{I}x72#y z^~M)>%SNs$_Q~YDe#)R6w6isbtbbw(6Csj7l&4XVmeX@Vdr#pPL%n&@5!5=HTJT9` zAKA}d9SrL^iB*YJBr~TTJ^^d!8#Ssbc57AAucK?QRP@wjwUCKvkm=P2|Fz>eB8<0P zy}i9$-g=>-9aXPiPH&{90}7T;B5#MV@V5T-E(k%52k=V$F}NVv%}az)dU{;EO@6*{ zB^Pg>nh+%~@kk*wS)y9EF*jo{Dv8@Hj3<`0Z^CG^+b-F`n?MEU#uW65PvDzUIm|Qn z$AT}y!fuc1TsY$wnNU0>q7f8s_Ie3?4&KMFkxar)&S4Xwhrupy%Y&l~GyS;_MyT!s zWMw;VddjGsh-!5W5i4r}OLfils)DuYPMGvvH!pM-k-!9*nzmin0ReJs6+|K}#S;fa z*0J}f!l***m+}Y}kQ<@ZV3-#76Cl@XaRYBf8;gmF3(+d7rJ1Y{u&T1Z^`h>LEwA}B z@UmySJafav-JdDSB_T1g^u7@WCOp@Mqb6C>xjY)ww4{)C%Z~-r*Pxjmq56tdL^?*Xy^Vo-=bT`;Y}X#5esPvuQ4(;OnDUWx|>Is7K;`AA8iNUnFxDc-LT*e!9*eu(S${ zRG`Buq6k}8R3q8*=}`qlz*#O8=2DotqXm;8GvL_wZUkH9i(0M^a8ZhW4*}y^Gmybq zni-lIL1RAD6VwwKO#`FYEPTmP{}?q6Q*KjkCYQ%aipc=Z!p+|LA9Iit4-VShE9L~k zc=3q-%Yf8w8;Ue?9MGpYej7b{0Q$vs>%K{ACl~#lr$GwO{qIIJLKIPHMigQ1FMz!Q zd>($1BoPY#QCW^h5D7Bz1-m#7W?&hlG}-S(B=p~{f(+R zQ3BbV1K1(0uJyNFvQj}>t6j^E^=9WqO6bVE20m+js}VqCe^sznc4d8>UryGT0TF&Q z*)jU$Y;U3=(HUUKs4y3P&@;qs(hLuu8Wszs+X+anTn9(PzdVD4oe*bFP8tVNf)X)e zpKbo1^haJr@L>}dvFl!BZ`XcFF@YqlchwR*J#x<%7pspg(AW{w$OS;FRrAd%NyLmw z-gN2n@jpAAmtrmB{_62M3pe1*7x>j&46g!az^jHeBO`I$4}l``Wy{WkMQ-DLJ13x~ z40)dqq*W@c2$h@X_eNdXhJ$kV&V3Cg2mL+UGkN^~`+CucD>a+q*YK6_m7K2O;m+Pp zuG1Nyt4zT;0$czi!~iCe^c=YEtBYbS*Gf<8+owfF6XFCv3V!5y>xl(@?(*CvcQG|J zf)~@MYu!oYHTKij#?xa!Lol2o_rw=kS4R$`CPK*EXz_4y~kuEpucc4(f^wO6< z@sIg&g-H@S&~Sul%?%q^_HE0_0-_~ItC8&R^n4c>tij@!)@MeBzwGErg$=pN-P`OR ztc4Lpv;}X^H>C{yF)foO3=c-EDQ@~NjrOhINv0~qGoQIWbGjp->Cp-17O za7U-h)4!r{@MuBOuXD{k-%(knGcXVo^E?C?(@EbE!6y|iB@Q(NtkH^ZSAR}z>&C+- zTB>KGl4#8=@q)!ieSS~VGZ3&wY4msj!)qr)o~1?9ggLfA%O^J~e_Q!>>u{=DWwZ+w z{{`;T0ff}uRczq;_0Yv)=evARBheIAY(JBz9P01)OK(ZNty+Fal}3;GZ}Z=eR$i4w z7Tk4fp^^!iSP^v>GHcA-%Fu|}YO$V$XO|Ji|X_1$yZ)#B7^KSrc+;a4kP zfqfZ-EvJXT8I#OEgd9Cw)fpis>K;S4#qgl$*$>rA+2I0-pElaFwyKtG}HX;apZTuAA8KC z`>DxcFNJQ*fjjE@_*KSye$lhLHNPDV?3C>bZ6j~^~!PC!ub{CwiqIxD}h(L{J`|M(7Q@sP_Z}OEUmSute zGvGg3fbh%k*)rZKs%gBMS(PA`?Y6+O%7f*T*kS1MecJEpV;qw#y?8pHfYSnLug^j) z#cu(TvHbV?h2Ev@4Z7cdH^$8xK=g8+#ibwq>>s>rQWctZq`T|VOADn4rDzWNc+HOg zC|b8LR8&0bT6vpsM~%L88N}nGR`|%G52jFfgVt(F`J~}Pad6FZc3`pmF(-ja3F8$F zJ$)Hk9oAJfP&Hup0|ixn!0JH9`VOTLxj`o;wMEW)+4f1}h+Mcqpy#UbQJm60?JYOu zzWQ8xJ*R|-h$QfJ6zb{uA3fJxs5A{o8vH)>ed@phbzG+Q!#7)VL6w#Kxa}QRO$II6 zAo-o6L-&61^_+S$kOUWSjq8>(Czlw+l-{Gh>U+|fz0lr$O_BAtG6htsFi4c~ER_w~r~&Mq!w^|DYV z)ape-N}`WGiCr|sq;~&ncV@NjsVyWnWX}Ml_83I9xgbV@Wb^s%hZ#XVOe|<1I{iZK z;`qe%z4QCxw}@Bx_X9+rj$#xmn|e-mkMX^j%oTw|$+(}`2iQY`moEHiR?tPL6U6PZ ziodcB^#}~Ez91kBZy7s}`yu%U(gFFh7jE+-<2vJ-z(nko0*v5xY&`e)t>0Teonqt2 zPp03dZ0@@~EO^NjdA~N%`4_Ks%|Z`_uHS^6jSIn(a9Rhc%Y`Hnf871!Vgi%}FySU^Ad!gjGAg^(&RPF0GWa z{?tk1wd(3RyJOtfx^>R-9s|V8@(&e~3IaQVJ5U}k|E2VLL3ei-r|);y!rC(dn)&** zbKR`Qn_lKKRR#Q`P}$0GAd`@*ducH@?FC-h*oPD}1t48LNw9MAdZ0KKYR{2?4GPfpaPf4hEY8aEV_6ElStz}KKjUr2+oBnv3=`!y z+bRn9AD~t~3pT9m)(#$oDXMSSm4d(R!8QlUb5;k1GRPaphdEw(E{3?Agskdi*3?M0 z-wZM?)&E~qePvixQP=IJJEdDuK}rtYAxKE8ba!_*f`TC3-QC??M+8JTba!_*ckB1Q z-@SMHJmAB>z1LcEjycAdb9tHQ*vfKL*y;kyW4;8yRj?w4VA-;@{W&ZxE+!6O)>s!3MEQS;weCOkPNrtG9%a^^* ztguXt-W9~hgh+o3%)ri`A?u&jkM3V%XX0iy+F9^lvB+z+Zo(>AEk8-%OTnM?enA6# z!}|=djZ_nd;rJ;Rf9UFbGOU4P6>ZSq?{*mh=DgsJlMbDb=3JJ1BW!+0+oXdAsAb6G z{BY6WsK)g@wdoVj-7^=v;~ic3r|KVWZX}x|n;a3wRj5%sJDciEU$2i?8awrHS5vi` z6TqsDw|_bYH$R^9dr_U*iyGvV7d0Ho(zgv5uXkW$^RJO3oKvPR-Sb~{xVy**{kX6c z@*Iw|_P{~{(EWn4v$FKxf0Fw&YjO@|6?Ag6RHov1xNO5E2OK&;@FV z>*v^~*&B;3Zc<`a>G}%tF4zO*QPVOf*dDga;Je}9?J|&tcGk&?J)&6EcaIDyXXN^p z|4nvF*-P2vLk4L-d82B|rU&6P=t}Yh+?>i2bl)n-tI(H5>@d#jHVW6tzJLs( zLZ~yN(uMLzDp*|c!DCaIX<{+w`_|s!R(;ioRiN#Pu%X~;a~-pZ!}1_fhTFz24jxYR zX3I0aHq`2|*?65<6-d;?w_T`RNM1XZ&jK28u&`e7lizZmbEh!#e#ITDpUZt5jz5h* zZFvj$D2szd(R14Q98fxpj&2xwHmRVN5ruaj2c?P-#KM|{V*Yx~jy229q*56i**cXZ z8yu6Q>6oSy{5QN<?XL@`m!lu|d`Wp~z#6R^>2?oj1PHy0G`=yXsA1RU0OWm#8n^sH~1^{ij2T7f`Pb=s?Z;fvv-@n&+<>t~j{ z;K-ZGnc+p|VCG;ZkXQpq?Vf!7MWBr9gk)i`0lzkc%gs$9LEWxWy^y|^bip-;{=UHy z5BHvC?uai=ZM(f&8j*^w9mIl%v>zLrbAC?~(5&4(;2`A?cq2 zj=#@D&-5~BjQcSc7!gNr!%c#|lkqSDh@NRWb@SK0h6A-K%TUxyRE0omfC;V&(qOaOEWj%O z9q=Xa@W%uMufj=)mB>CAYHMW6a1C(}Js~gxk0>2)=jpjWl=)cC%I?UTtIveiM-9-% zq$FESvWAenC+Itc+Yaxl)Kf?;#nNNF2QuG8WZUufapWh;_Ny6|>Z61&F*GZmmkkUK zek`(-wv;Xr(`5cVu(f5)>jLX2Bd8u&|#O}2rpE8j&)Hs~DfF^>7*VH%p`Zc9)dAxi=gu+BD%nz(u@iV}f}1x&AovA@ALyHl#E>aO3E6TXvHKaD5f?ZXFYPXb`}Cq3KlC^0}qL{4cyZLl=k z{QQNr>TG#*v_47zq9}ac7(V-UC3a>GDzpdR?xQ%~S5KC{SZdCvbSF+Z%U2rGsyqSq z`jg+(pWZ%aJ-(kma}-u5BFYCBdxlcqFrXabf9@NahS)WfQz*(y_3cxBLmgJ^85i0P z&VUD|CCi{EB@Q8=2)7)yT?OCSR|&0zHaCcGS(|Zi2tC4g`gU|y zJV*7<+=+Fz2Ono=(m>LqVYiCxZr>cwa?f%V%V1I`#@+!UJkhTU@VLANiQdS4`?Dqw zZJIHfF?-xqGf*|C+T0%P3maA&R(YfAJ52^(RR43`mCHrO{+C#-bYHE}<8sU4%KXUa zHGUVeSv(5am0#hOnfBF&PO8Xc;S2+aqCUZF8l(%qjA|67Qp<1jauwC=ikHVnafTq? zx8HcMJBPV|ZB4gg_;4P0hd)2?f{X9q z&c9V4H>UCV@zaGifdD6_)V=;DR?j+0hu=u`nWk_212>Ss~wW8N`rbjB*mg1)q) zw4*uY;f_5N>_30P{h>xYHeEJCU?utDyqPGv=@U|vkSt3Ov8wa}vxHa6@p{w3)Kq3; zLHFt<6KI_LkGBY_i<9Ei&VI+hAa!5a68g+cz?2{^hOSoy6+YR>cj`vGA zZQvogPb(PQPNr#G>4>SRNh(PyokKSsC>s!aSZt2ymKb5|dp1fOyZTP$agO6*CODz`Y%)&kx)&zk9R|-tpYexJpWHI8QCygh~Hq*R1em;IaHum%A zp%bUMnF$gw&kDH1g$KO?#tGIM9hv&})oc$aGd~s*gbc`T?i9k5j%38dDu&wG?#>Rn zy81B<10P+E1Z@#TAGwc=%ME+VU7QfZ)_f?r^PVaY&AcU5KYki9DB?Cho14OH)w=%j z&ZBTGj=|S->(M7&9I2k-Dr+YZxvQL19-$x-JlSt!$|B1OXI9tG9UmeqY9q{}7M^oAyU8u8d&y}2Vj-#}cAq#O<)aQflbWP-S%nz$#n7+rXlLTtg!enpeCm?oQ?-%db(7tT z_(izIHT&v;FEsCjk#ULjNm3LbobZ`z70X7=Ol|rq{i`QQc7ohFzgBZEmp?{Ij^!t~F1 z<8abibKuVh06wEf`s5?B*fE-)6RRA12!QFcxd@jpL!xr}ZU7^}w5e%BYq+VI`7J}S zxh||7h4Bx*CgP5a7xe7@Yv84ejE@_*y#s?!$z5H~pU8XR=+L4&ahBm^eAX?zpW52v z>7IJhpUI~BkO|&MMt)geNo-$x1(k7`KO%)e=WSC|EnMw?4U^uL{p*+_4_C$fmZ%J{=Bt`#}1TdqPGEG ztMtEN5DU8jfZx@cvmj1Aqfk5FNZ+?baog-MR!r@iN72V53*8>D8Nm2eQ$BC*Q~zA} zuPtBprHY~feJ*Hl(2mpgFIuUmzsb$@?UROVhNL3Y1MtffU+$!$xcV9IH^JYD?a*)YnRmoZU9$mUeDBJ4W^xxWnI9yP{Dk}XzMNN( zJ_|*gM9aUNqT7qP8_{vw=c~t?LuKuAC9xzase-JvBw?7a6c*z0cp$nXnsb2Xpw-Eb z2roQ{58=DYDi3#zL9qeT+B;YXS_s<5$~r;b%k^p3slXs&A|j$qD-6_3mQM+C_~+lq zMLlS_e+_KE-QNvyJT(?NGkFR_+yBkFXz80oV0dPve^zseJ}j*%KnOBY^R?vrIS78D~y5KK|BA94^9CSia8G$D3wQOSS! zi1xxwNTdy~N9_lFJ`1c>832034Wh0uU$9(l2j|dn*?tc%w+m0VThGCZrS!KW?o!d(2LBfFtc&UYno7!x&cA@2u5 zUxHvX{|qb|as^m?qNrghWU>+gYP-2K^knj*0ptdusz?h~5SZ0>(4OGpdW{r_~%&_5J6N5HKkU)y%B|r4a9ZZ-#Fd zl4=IG`G-$IOXCj{6KH3f!%~TK_z)MiGZOwc#U0p`?h?=!BWg!2vhNU}FTLCl`wfg6sKl*Iy8hrsIciN5T_d19xE;J7l(d zi&TiB>8*cegsA%$%xth14!b|N)z#E2d1v1xUWLf4ZKNV?Of5%iI#nX`nb*zEY)_n0)#5R0qj*FgQ7u!8Zpkux#U{y(A%@+Va z2>^6KHWP(x)GXOLdm!F91qB@f9?jwgU?QdSG?ZOhGe|7H8)B`Kg!3C)0>cF5KirG= zv4p%sg|6@!eMmWSWjQAB$Jb_=ga@Gl(Cadz1)*=@f1z)M51;i!t@6Z#(6YzqMYg=@ zU+9Y%S=MbYGnDC#>?fh;-BbTvL)?HcDCSwlvyL=!Qg=;XP2c*_sj0CAQqf2{dg@dC zSDjy#lr*1wGFw|aY|siTZ9lZOHa{(hT)O_Nh`#DyX&DVF99dHBwrc`hE(v`~!$nREqew_6e84FL4l3(!Kn?fQ2s=TRtbofuLc^wk13MviNiXKwQRK_;!B^RrEDMV9*@JrvG&H&KX?}B zzC3X|FBr|Juftm#(nOlR13shsE!Xg*j8Dv%NsZBxpQtIo?zT&N)oKYT0y!T)vIC2 z1x~8=UssnBs?E0apFVUnUROLiws}EkKLunQ9#TE{sC5g}u2YNN#%jowZQ8tyNN9WG z3FFt5kW|I0AoE#6ASMn$(bM6y3fp<61ft9uMwilRMlLcs??$7=T%7kWWMrwK1CYSA z@hgK{P%zW0JH&FRs{=B_c7Ffq&x8jU0D(<-zc=a8A3s{wplPEfz01!e1fD)2tcwYC z_IBX3b6iJ%ZkA82W;9k+SHFJl!zHX)R^N-sXNzPe$90A6W`_#ZehW`uGGuE7#*aA1 zI7iL;YPBT}A6TQOyV|s?WIMmZx{+ceq$g1{y>GPjeI%6r(m-mWlp#v0a%!het>Cey z_waRxz0M^nHT9>|fv-Z69u-_#q}o?)Ifn0(R}b?Zv}|;RssBciM}hZp1LWuPzf^w> z2EX&KRR80f;`&_5_m5BJg9t3e#U(zmeUGj@dvR|os{Fg<&eoq^_I!d zw7Qbo@iv;}XivCi`v+Z2pIPjH3~+x`R#+ZIq|_n+=MRlypMh<{Qd_B)%u2x9=UnCeL|sF;GBV;*OjY=^K~@TK8$^j^>=LwXhZyJ{Tu!7$;@S$!MhX!oV^*F0p+9JT$pew|`@2 zzHmWOv9M{|(MJ|r@<-U~gThFEbRgpEg>*vJ7ru9tJ4(Rz%aP0ZAO81{dv5{Z^bCzQ z3(?c{^?{8I_J(j-swAd3Hdo01@=0*0Uf7vjel+){@EjYX966|+i3VY$tzwJM!5$yC z^}q1?!QpeP)ii%e0yH&82_+(R@Hh@!ZNawGG+zj%JB z=|0`=u`i~a=)C{-Bypv6rByaL#_yMaO{4iu|G6{pLK1V$1m4NIMg{SI$t0QZ1S@_j zJS85xul1%E{h0V`3oxa5{BK%Bm3KTM>vQ(IL!gg0eoBRN%1J+2^1{6 z6dEAl*rV#!19+N~4R7I9lMHVK@Lv`I9pKkmvC}Y+mIiG9!~=_+VLP7lPQ$yD%_jbt z9R0QFax?!ZCaM4`P}crejuQgyw~m5W*)$OeFn#{0wAUv%pj`hyUV!f}6An{idEe9& zTV$PG&z{s7RC$x8jDUqtCo7)l3;3CWSO4(<2sD@zw+L1L2c<@+(lJT@UP zVKH3dytrK)?yq0ZC(cmGpbvaDAs;x~g?78ghBr1Mac-uaoxJhZD~@X*-cNt?>UZ$4 zKy`1yD)q4Gk$l0iZg%Fj?y=@#V}m~bD0l_|$n3~*m-Y>!2{jE32s8C50{$$71!52a zRB&J(jWo=bjdkueXFEr`MFfN7pbd|j4tXn=lS?^y2HR_6S@WI$a8T75y_g>G;}re& z!a!sgw=E&7H3W*eOT5~c_hSz&s(0kItKXvC8V4Wm{fG{9s)Ge zO4f8g7v)277>5#Fo`iM}BWQfn$gIOIC!cdSiOx!)&?c=(+(636fFe)X!cstM!$$Qs=iqJ1p5S&kwKY27sB(({;2MO z!c&T%D9Z}PoFrJ|vE}fq{?%%lRGx2sA%F2ZoP<0Drc{t4q((;OVSE`klVOX4%|*dY zF(n*O&hCFtmGygZP-2X2CiHUqEw^oPAq_+2Mx(;g9-dvgwvd6XjT*@tc9U%#(F}wL z8JT1@<@N3L&(kwfRJ==9V9b@T9!%pMyc)6^ z;#9_&f7E|M4vkPaIf3+(84gVRE!}5dYa;2*435xOtM|}n7wYSL;=%^2iyK>6-L@yR zE05aR`w9@3FBv9UJlx4pLKgRCViz#Asll(4Tl(z7Q!=D0Q7_GI7lY3XlsPrhG^W72X`2;zf&zt-a-%T3Zrz8gD*>bF< z`~wE&Fe$Q{w=asCNW<*jHvN9)Z1^)6v)>m3_*c~%gLH;uz?Z<~ExK5Vys*)JlCVx> zG%0{1==^nCFbxe_*hkyVs&vh6kQG$zJfGibA|$-}*vC-yYvN-4IECHj_wmUWWQSlE zwD3CwKespGmO^mL*vOFvz#%0FNVDAj_^oa5Zt$vpfj&FyyPpH?;N=440?zV=Iah2) z##y?Iab~%A>j^jCTBamje{G!cR1se?wRm2Q|MDE2!;FgZHZHn)D4w(~$Zu&rwfT;G zH-&k)GPS}NN{Z~EJ+r>78lNT^ku*+=SDQ_DG3pQqgvK$ zsEfQ;l0wi^JD&w#cyl8mh~9<@0259RD%ZL|*>Fk;KHIrZ*aw)&FOsg&i$&dm&A zKKXwcGh4!cj2WE&2>f{NO5=!?Uptco97tR6u0KG)RuVs5p_R}$jJF3 z$jCKxmuT~C5t>hq9)7a(5xMtk0IX>rKDvJpZzBmf|*=@rJ^Y?`T^51 z{D72Q3P$;!^8GNKda2fy)|NJ7PfvwyTRW#^v4|d9l59U^A?sHf;h?nMb0;YdlIRYK ze%)v8N9nKV+TPwD#u6-l^$d3VRHvv$XDi)89*hpxp*)(n8=h({Dmqp3GNgxPak0%O z-GdF8e^4&}ydtpIxhw9aO7>nbO~eNI6%Nkl-;)_-PYNn((;M-F z%o(~ksDG%(smDWKpgPJ@10r_uji^1qJbE4!0FFuf)c`H|(4Gwr=1>wr4U#OyT)_)u z#)G10{KsRk3Oo+S=IHkRpw%K?a2o zn^$fS$|l%TqE9>i{P6kV!9l7$({mX!j_j)46t$5#R4YURPN!_WMm;xAPsOAyr;(k7 zg=~`<&+01*ik}1l4K{qDJc#g4@PWKY@MeoWtk(Q~%DEj8UM zPxZP~4-dHltdVO3;M}kUP=u)aVrZlk)BqwsezU zT8@U+eN*4Eet^?uBmg|iKsLbf;azp+!~Znh=$63=M- zuwMmMRlq6Q!Z{JcRlXuH4$br09_Cs6JoQ=iV1Jp0?_>{Y)AfG&J+w8AuEkk)?{IO> z_lSp1ceCcn+$P;0=eIWACzXEEA-#nZ7omxgC~A6f|m({ z8_~WFJRB%6MLIY@;1MQ-+yi)7yu1N5NA#&nHy==QlkxEF3e3IgTNS-rOQ$wknjexf z#5T#zGD&^-#-w^K62G@i&mOF0^xD(&Ci9l)hUQ!Lf&cZ#Ii$g>ZF24*sOQz6?+*~O zfzy%Msva*2PK%2&^S5%IZv;{|dh}RHm?oFnQ{24%GX0%S5lj(G=U+2BYR?ngpomQQ{CQv(@<~uXV2g3nY7A>OAr&5*^=;P?n&>#iKufg z>1^q22gSv283m}I_7pS*m>DBmjB#R#aAQEx#~C*r$VbT7V!LIuM0UQF6%QG3!Hc=Z z0;gC48F~p{S(QbvO#r~KdYZw1d@)v54DNBQdl^klQB2W!3&Tbp!fOw*l@TA1F!Y}j zed#9`1xgtavfbMoUMDA~Bypb0-Zk;C@E0a)zP7hx?Mq2mze;}Fe8M*s_(F4z&DR`C z8r9G+Oz!k`O$gJ`)|CO(EvEznS_Rx+v@Z$B!-^D+Qb&w*GE~1&Dg}K_H81h-a22(y zGzqDy%c*m{?CY*$IX)#f~cPUnEm0$5~ZU2DDkV-7O%JN zW@^)P5fz($J?30s60RUU;_25M=*Ay^qOWBO2R?$VDv*zY} zS#KpiV+-dx{*k9#euXj#S^-um(nAMI9YI9Ge3WF4}j>57EQ0$H&;JJMH}jx5G&@R8OyHIfEnJ>RD%5*qZ`t>mz1D%MpXe z#{$Q}+PQQ>^gVKAeOGCephdPr9E`1&%IJ8;I9LEOZ#gsbTjEo%pop8+rX<|ex2zwP zh=jhGcQ8Pwf__qu#1D#SP7C-At37D% zMJ$5@xwb$hI|e^qS^h&|5gIAS>W811^;{HCU8w!J52cyK)?!gb+TQN0`V3!jO>|$e znp>QDRb^9>K;cd3{SkT;tYBEOh#+j58ng!8mlEr+QfK)3B-zi$+iTw6Yt2z;P->*5 z6;M)9@e9;9-4spr1dM)sx!!S4gBA_25XSc=^m=;grmL;0tbz^d%|?q1BC07Rb7>sF z5ueBz9Z+s*p1caT%wDR%)|50a8*$;`-Q9wA^!tqX2c;OLm^=CChi8a4ydjLm7Qyq2 z?c405y@vdV{?+`aIm8?+EWqaBLmSpyOrxc5dN%TgTj1l8u%;%`H=8v>0&8oK{lM&6 zi~EorNt5^~-Ai92rQ+%+dC2I4WZl~$Oh*@=O0D{iPS`@*e)#?Nd-Eg8ktd&f2TBPX z^@#;R4|l1>vnxwW?~mG0bX^-;$s=4u_j9r{vNHxDI~SHz4W5g{ii(OlO<|UT5_2*? z*S45`R$!`**%FRv;g%U(s~mKbB}(N#(?6-Hs-8LTNiwluKl%0%2L%QGQkj^KE~~B+ zY;wK(L3b4&dw;F$`_yuyrV}oK3338iO^(dZtn9_J9kXj9B23d^XYwOwZfkM@jL53B z_2Fm1ixh25MQCA!r!~5TOD~LbLusn5F?1Qcq-hGZ=%wRwXXi8@7smKSswg`R`Q;j3 zBk(*N+w9Nq`(+G|U<>D}L|~Iqa+pe4GaJ$wZt2;ePU$CQc~#lwBBcSKP3(`ppAOC`|11ln=r8#x6_HN8GTB3)t z`=*mtI%kE+SJ;s7FM75>uQDh~S^|c{ z4T|noxIk8@xw%|1d|yxW%xgk+QO#2e|YB!%x7m zUEag2HDNGRup<>D6;y>XH=E5ZX-l;gfUbyoYAKZj5xXM_P`b!+dfzpu zqvMLqE##Ygbg%%LD=|Aeg(&!i zEcVsTP7WHj4k?PLi(DNsyneIyu=mV)PIu9WMv4^4suP2cs%lU_`VFlOW%1~w*}}Yh z!h(jYWm*Dp(=3T)Xq`~jI4aPX1boEoq)p8J`3eZ7*z2gdv1%8~8|C4%bW+*n4DNNT z*jil1N=q{{!dv&X?BOT9AjHOA9c8v|kZ){Bcx$e|A!z5gcc8t0$C%yiMbPNbLDi<1 zhweV&Z9M*C0%VfJa{9{}(3r|6 z4Fe8?_;os2fdv1_8vszF@2h$Am66rGPdB}U9u<{1=G?d2D}n6dVG>lJO+?NV6>JSHmtTd-B(-(nu!q z3TnUc9B9Y^*aZDBe&p9>#yJh^v9g3W^X%$1igcE2O`O%#&O+AuLp@C*)vQ2EAMdv; z0ZTB%+Qi0;>P}B=xJ(SpfWHY-2$Ex~C0|;2e|keK$;&tSL9>I=#mTY6Q(eh@&yhHx zpV8vphc+lc;&4RY1{&|ELC>&mIaPoC^oaps$$p7&FmmvLVPQ4LaKpg`-?2d~y9+21 zeEjsBj2lFPv&USmE4-d}@D=bCIV0D1C9cJ;E~O1sU(~Mkq3wHp<<R%3`LiOEQ3e>&2=tW2a!O@y2u z@h|oy8e9OLxuTk5K!W=bEIifJ7~`AujrfvmIN<#NL|_(M@YBdkMGyE>Dcq<2XD8yx z>5oTv!L<0~Wc{DtBfdu*Fw(VUB2i*}M^m^oo;;sCWWo=sb$D<*xd1(}e&RigACxOu zMHaAA3(}7lbf;5D7r1$gi;hH#NE>Lqw@=~hGk&Aqu($V@5fH#|hP{u>h{L(5#P4iN z*L(rQ{i1CA4X;=v@j$-%Q8GmQ7Wd<%_jG^$4XyD9IhKUE`^<-$Uxr#X4^x!Zt~#p@ zN?$sM*n3zM5(_6zYtr7)YAZ8bai^sQAZcscl!xB~!g0U889$ZdUbd4_X9;8^FVzUc`n20CTNRKBPLJ+=ZdV z+4|B>+0?Yuwc4@N)mzX;L456U`wr=JizI*78tW4pd@@`nsUM#~t0bkn+aRij5~z78 z6as&()g;ekUjvbTh?$-OMb9}gIc$C!t`L~~f40$JLya+wF$&6v!}dehg^>}3I2a`i z3p0=o-~a;c+2JUJ;mp|J8x?ZQnH2@%aRP&TUz{Ag*D7DHUUwkf+~yH5bnAceo*pOo ziMEcZ&61E4B@ww4?i{;g&b_3E3S9Yjoz2a{yB)HU%+9W^(zsy*S_&nNF-f@i4uU07 z0{g26f`9sh4y5NdY8A&*^JqKV>GB$^qc}4K@nsy3$<~cD3yx-NPz{oq0s_- zW=c6oVya;P$@;U7vyR~D_xO_&^^WSTXq9BVWc-IZWRor?dgiu%mXWt3SLXt68#Nso zdV6{<@%ui(1)>$hjkiEbEphw?G5t)0fkjsixxb=1_wx0{vnd6mfQqBGRnI=+w{C8s zVHD&y`>xK;EI+h~JZ%pTC1}HFeCKJz{2V@}il2Ia<5A2z$0P_jxK0DUA^X@#qF5pNg_(IpL320a&U6Bc``*oOeZZkN&TF z_14k+p2Nr79P#=KwUe`c7C?a0Sw$kE1K?KUX6BRh2>1hhlPL*@qZ1qplrYMi(E6&I z$xF>SoP?mSUaspcw7S3i{V}0fP-pzwIwa9Y)Vr|#mkE@73zbDWmZlLF)|7>7iug0F zr}vsVW}+a4EvgM|4u7*)TPIj^J+vA@va+IDT=ChrX?AJJV-4g4Fn;3`!vT$iA0i&? z)~GGRc78~a8iq-7r#!3J<=4jOq(vg_+~3q);GqvYGB zfR^B2|Ka`D*n!Y005tEtM)6x_`pf+DHp7F=f13x^A7Ep7Ir7y&v{f1fq4R$|In_?M zqLE8B#{qs7`OG$E;7nz2CPLcA6W7ajp=B;Xwe<_sBoHu!93G{>!%BYouk$XVNz}o9Y81 z70-2Pb;Xc?Tvt2Y5$2V6vpPm>*^#t#O(n=t+*f_H9x}3N_n`++rHzq8@Kb^B)J3P! z3DNgg0CEH1)P8{8RSvlm`t%+Az__j0EiL0?H(uMV*0zh7LVELhj+Wx@gYRiWX`aX% zdRd@7nWMcX*Jfi}14anW6gK?hK1nUZOVq=tpf9gDxg;3_Lr|a^YbLNv_x=0egphUiYkZli>En4N16Q)tiS?qo!cvz5DrzS;N@Q3L3Gs|}-h%wNh%NCmLgxD#<0Xu0g zYVNxqy65JW^zy{`Vq-%g61n2JKR4WPS)dyn!*~evTkwcQfW;W=kSUjl=3fIl=p(Pg zFUtiv`6z|Wn4kxEc==Zu9~N8G==b?1on=L{Q=JfRIB8q`h0^O}nM^$KUDH-k7K!(& z`9oTWS$Oyd$v;m-8)IXeNznW}n%Z63)z#Iv_3hsJI`SJMDvJBeb~6Lt&7IURtSXR_ z#|BI(;do_;fZbo?HqiO5hzjCO8)I4afTE)HVTf*PB`9?1G*?lVD zp0DLn=YG8{dH?6@|2Wd5YgjlT`G4DV(!Mv7i6v!$RZ`?4mdrP=pD2l|{Gpto6VunX zJL;n~*@J^f;Z&kjqGVxtt^hY?CMPM)IH^c2evexY+-JyU89dmR@)vy9TNziio8RZ# zyL!4^WA$V8Lr_s!lVo4#m@jkii$yN^r}cuD42eabcyzI2Y<_t8ckx^AMI4QE^k|at zP)|G54Q@}JZ<YPogO+r+m|6eZvrYEMSM=5YU#5%!B z2rhp6udwS>u=u?14Iws!Y3WBB&R!QM6a3}k@9Sm*b8~SiEKlDXjjv0|FjxULa_S8H*XK$J97ZUX<<~ZRg}Lx4F_&`R!l^ z!ZmI&lz>|JJ^a!hR@BNc^4t!CAs$g0r#$w z2u|`ADUQhEmMpEfXzoZvPyuY*t^eak)cV5dc1NNN5!{;E5!1_6oRTk&EdkDY;p(GY0SzZdOTn?WdP&R2e}o?%j<9jx0wvd+<0r+`i$=S) zdktIamt*D8$r52lAVuW^-IDdpRxUcuIu~7`k&(rk$_?mSP0h)N$%kYJ_7r|8MR*{^ zxPmnZ2T=TW^+E#tzI_q`Q^?BM$q0IeDt$i+OEa5LWq!YYbY5vROba{&5CLpI9AMT7o`?(2mK+pA+yP* zBb9pURTINS6otLnTLqupUADz!d*lAN5cH?8!=}R~jj~rJf9kMA>d|R(u|?Lu>;J9- zcG35udnVT>*Kg&lE+LbU$;;dC-&0C#%K7>(&vLj&Q??8K@X#X2>=)}@B{^DHwh_;4 zyl*Xzn6kyE{Mh?Z73QRT@_s z_loWVRmqGI!IO^wAQAqUd9igpgl&91q*C$;Hbt0|D3sd)GquniGsQ>j%f-I3YJM~{ zL;7n)#G4E@Nfg_RxtT;OS}>TlnzlMn38r}V&a&yyjYq^vw59Jd{{t)vQV z>eA@dFk*u^0Ou%htx$yVjLynVK45?juoCjqu{fj@31%&|aGN-OSM@_?a-(!GB?bix zzofU=vuIlaASL!{H zBOg2QVF`77mf+R1N=h%Pq`W-w67D<=Z}WF`9MXzCk7@q5ooT@2f8LR^#C1Cvt^2w& z(ZuUm=4|0sj|e0epoLI$AY9rEU!z57*J0rKI&LjIK$_TX=?%RLS7lhjE!g=BvSNfN zeo_3gGJoEmWQaWT*MAC#GKn16V6K@W)Ow+G(!+zjTjmaEP2wH6Pz-s(RK8od3}1$u z&!-&?65{kZaie9jPGWxNw)0kZVLDIyhv~P@>wR@+CB?|IH?F26M|B;txCOr#AMCc~ zl$3IZ60^K92*;z^`^NVA$L=<-pyv?K;zw^WUaD>?IUM}~G$OP7@V3$-0^iN3bNc@p zg9`8ZyT-l$h5e3LXC%MJ@L)D2K@|XXU~b(S{4;VRHPH)jhGP<0((HU|IS;2GXIm}D zJ+5#{Mwtp|@Sywww~hpA*>DyikRd^0k((ath*u_+V4r}y#X^zu5$D%$+DYEVms@iI z0b!*5m<|HrLIsgN(#zXXocqFMWri{EFA|uj-R!@}p|n5~y@9DYj>63ELRrL8{rtC`N zXlBkbelMFNh7_}f7-(hyQsLn^boEGh(K_R^%}@CNTJ)aJc*UqUxUXyG^XE5bgANbJ z`7F}#Oj!kp-B?h`zFhh}fA}%tGBwbh8;-4=CQ)ErU1OPEj$L+KUqep6wNxcSJfYTO z@MdZIGe?E91A6Ph3ejCdJ(m}L_%jT}P|{Ok&`&Msc$efD-rlZyqyt_jmfg`&tfTza z_gi0e|M^XCtqnY2N6mNu59oQf-~saVIbRqK zI({{ei|<*>vc6UWrI6oy9aFv$Dge#TiW9GZl;Pn?Gq7#I*VA|Do%xqpFO)t>NczB%~FjLqr8h=>`QsrMnyH z?uH{EDJ|XI-3`*+A&qp$q4Rz4ckegud%y9XGY01`;OzbEz4n}Q&9#@#8^&LaR?g80 zYD1HW1#>6q>G3tJmd>e;HiDEtPtmTzurPoCo$ytBjgnk{l0LB%T%IG;{-_9tyC^>O zgX5;o0JV5O%*l=2yN0(caYkM*rDT&DB|W4zc3f~nes9Eo^nUc2KAR{bTaMAY-s_)n z%dmFa7u*Ehe#hg;n#}y}spVsmYj!h|pCUjnUq@hKF0qhgr3Hi~_U8@yTigdfu$24V zuFo#$#0D#SaLR9f-m4Ecih@OmHL<_79o{z-?WZ8xCT?;rwFq<(gg*~|6|?#gtX(5v zg4r;92t!@|2>3cXKGt`|NXk+ftNy3HOGHy!b2$z3`|`kFmLP$MAAXKGb~$!EDs-&B zzoguIC;oFBC(ASCI@C$2s8|))+TR8xB|*(eb||@*nqHV#rexK=aiVnFlJ0z=Q1!_I ztYJnu;rtg*)c))})-qi%;GvczwK&{UA6-RjvQ5P{hjE94_aHGg^@4OMMdxQ#*Qu~) zyc6&Bcy%>cz1#J#dUqE4_sQ)0qs11K6ITKg`{zPMXC8g5LY_mc(0{cXjFWnZAM!!_ zj#el_D}Ftz1`!STa;h!0>Q3%pTj@+9=ni*v6uNYKd&T8_ZI43@a9lUs|F|uEs=THnScd zdNY2_dUSI-;sThv=R}wn)Bp;GO(Zs$FuAz^Rn(Si!@quSafkU$S$$dh5qnPOjQfYQ_$pE zIU06W{N0z7`9(V(wGFQn@fIQ47CXYXN+b{*Z*$~R>O8PCrM#<3TBBoch$}f~C?VkF zLwNL*uxcw0ItfpoS!$@SjjT+E?d|QAO>OUomB`b~*=>;AJeeRty|Q1wTECi}Nlpeo z*8SoUpfAD$d$NV9t6BZ1*}6}in_g)>0hYJtI6>f4r$TIc_i#@5NC%MGeZ)M8*;gXI zyq+f`XPjRg6GS1*^T9sL{}3jSt}$||-_SZ#oR-E~o7UEww@{|9*N`Fmjz?bQ6;I}P zoR)&B2|ph0zjOzc(Ye__(~glT@qbJ^4Ltu$J5ov5&6IAR84N+g1Jf9iW-^NxFXqrk z2hWNd;;&uEC{$=vHPz+w1U9}TsRs^oS=C|=4wndhpOr#&=I#EMQ-sz0(J4~J$xsxb zs1RaphfDgLv|eLtXUAgKg1A&GW95kz0trw>+`Ztbfh2NkKUc7#jM#xBRBQQ z1g_c(MbXzZ4K%&qf}Fa2dRAgB7<^W=t{cc{Qzk0^%N}!6)hGuHc&3L z&Ef(E?h1tl?r_;`;Cqvl9Aa74^?x2h#wVvM{I~&E>g${DFGB^1N3BwWOKW1lv4ksf zaaViJIW^wR{XbkdIIQmVS6geR|CbBL%YP8#jo{NCUVPzkJ>s`n^N(>2y#>Ppf#bU> zpFxyWx|Ob4LSWIP5gVN%d}JtohzKu;&3D5n{r$iXjMT;-IzE(uHTj1d@LCY5@o%MV zYUCfW*)-TRI6l|a_m%XQaDYtW=sxD6jj+MJt{lXEAY zwk_%~*AeeqIB&5M8KeipSPoW{-(|Lp+L>@Gbc%1RyT%;44`HCzle-CAKA&!HUj{cD z+=`@iR3YXm&?;r>h6diKRX$G)Hr9UMsSLWzDg8*%f9~xinyEUtmgm*a>ZecZ#{?K5 z5`xQ(9pOi7QfxC8rx?*YjT^R7=MLt&DP$bpL`vm2S zWP)*OjI6T7tzCyOw}?;|$jhF{*8fLon6yEpyRHZp*rPueTK##7al2w6FW)G5oM@8iagos3 zdB2XCp~s-?I*rb{raF#&_L`&xZ(+nrJ0f)0Q&N4E&WN1r#BR|1t|8|UW2=r?v}_$% z{5S8suzw7|cet>1_)Ui)75`k^OWgk|uzNI%i9>)R=pV4^_+B=g;9kJ>f(&0F=>hB3 zegmBa-SJzkmT$rZ-Hxyqnf{b`HcX#L&#_&@QAQ;Jg_Rr6EQ9TN;D z*~-)}137T9zpuQSh7fA|#@QwzE{%yTU@T_ zedIY%JGF&zgipwl4JW{5-Mc!ebq{wWQrI zQhk}92}>nXE&LJ^9_Go3RNdBD$h&eoa_SoEHCb{~mM>6ix*>XW%hyj^UqGe^T8#q- z-}UBzY&F((8EzekT zS8!2s|FX_<$wi_m+s(hCVlZGk?9hOqm8z>24?x&qBm!EGW#C3PcMZDN5zY7Q2bm?b zw8+EBN0-Zg*x2&%J{RTxFt7nL912Sw=fyj7e0&LhlkW%HS>wyMA{l=PbFkXE%_lA$ zTTc%R+}-emuCL3NEg|nm+yyn>+H6|iUQ%HOGm>kO;cYxyzs-gxSXf}0Nu5ZX6czrw zmm8@~wWg<+rxkR8VZWv%oJnxkJq&32`0;Z(xHv42P9plh6&30esC@-}nTo`zgGfZ0 zK%-{qpAOCsOuhWlCtu)S;O^n8T?51{hgjcTns()<^E7Ge*|R7z4OzNkbJ#dJx%4He zC)_V(N-VuWBtrZW`P1W3Ar8TUtC%gv)4SrbrR7kQk|dlVRW?7EPlUs&Dp=b z!Wou!FS+Ms?_w<+Gs5&E#hg zuAl4ImDQD{rFFvd;8_3emJAB+7@ed#Tto4sAWmA?_ga<&FF=y z3LXq6F;~{-^b=7~y{yK&K+ld?Qay)X(TaT9(ge5+40DGAeFy%)K6iSkZLloRnH+Mk=UI`3hC*cl8!pQ zcAB1+%laB>cNMv5bxCm^*Cn!mn+|d2Gp`hj6-0~9}d`$4gpjIQ1`<_ny+p9*EWzl)f)n_S*L9?cOYyhR19$p26Eq zbrZQH(?%fF*Loqk?!zWg6u*}>g>$xhT*&85L!YC9GD4G~S0L*X&mOLK7 zy`{6}bDY=p`_7*V3iqLj+8R zH^EE?by=B{BP|+&8u&9+cFQEVM>tUCi?0}`;Fxn!m zGlC$2fM;{@#HPD5BuGP+nj`)cy!@Jtu7LYxKlIs{z*BriOl7i&M9zk65zkEijm)mO z8#Beh_8T<>1X0b}4pK=+M`R#QQ982VTgdy*mB~tZA?Q5JX1n#JrCslWp91Os&6NFi-H({phe(!?EZ2((+UYq z7C{mUMMVa@w@qx@Md_~=m{S(`8|d+}$zPg67@^V+bR#tg)V6vAC6=&rrTx(H*s)mI zI`xb{X^Uwd=I1a-U7z~;P$zeid7XJ(qL}?#KH>`WxWH%ZYPFF|;5Dbg!S5V9F+C`@ zC-S=AhVER}4v%K&*|sC|5vr?JS7Mjg5WRtao=?W{f3)o`i-Qd-k@G>3I${ z5zMA>Y!8)+u7&H${rFEI5MAHcHrf}cMlVYD!GPwMjr~}ziLsWMqI`Z z2;AZIIBJ`Tf=;0;ukP{w4R4-wFQBAs_q`Ii6tT18RdwGy;_-|5C0&G4XHPPPYk+5P zedSK-kiRVdy`;qM$dAc;zv4T8B+M7@!%fm)*D&%-)_Lql4n_{f60n;2dTw-SsJJlq zNPWGo@4=FkR9?kKPJP+^ZKqm+%G8LFx<>fnhN8eQXX7oG<3;_BVzyON!%b)Se#P)w zLv1DU$uLJ!tuqJtx1d-m1@44FIP}aBvd?>1)?sa|joMuoWBlrFu1K*)cd(rwjSf#K zX+zJlU~;E=U^Fds(!~CF%*Xj|(8S(%gPcr`v)I%?MC#_s1N0{|OI@Wh4;us#vN<>n z9eeAis07m7jQ1G7F7qME5P!C+7>RDy*)C zE3U66b^DQ}Kc3@AC@5RJ9@pDe413x$A3t|n$5<>m-wfqaFX8iz@s4p?jCS2PEY&pR z`kM&%6m?%4HYb-D{vlnp#o8c4$Kc~=L{+e|-@kTr#!nr9#w$Ua3%+NECoy@KSF;$D z?mD#1dDmP#^n4Tb|KcCZ^sz*#Sf*G8tFD|lt+0bRwhd}u4QGT$}Lqk?!JFg{rXc@`K^)>%i{KOt6>jTY>N!F z&*wGzdHx@QVVN@7Y^aD2Ui(_p-L>++wgI9v*JlALL< zC!APxQthmi7c!Sya`V0G-{JY?sy_Z{bX4mq*fxSX-;k@&j*lvE=WwQM$T@whc0wl> zE+}JXr`X4km7eQ7YTb0x&3jm>!Zy2)7&0!OAHQ(otht&;wtbE<%;S+2zb{LP((~zU zzRLr=a~gg&B~W2@&^GVQ)8*&ukd-lGxso_M3Ba^Wniv7jA?Bj1<5g*Ka*CSb?EIY{ z5(*3qu2?NCZig#9U)tNF(pOflulL#>FowwHM@F0r#&dW=gYaZJb0JpHT8%}`4frr} z;nR3R*6}u-6KGj;Su+%=HgWuksh6;IZ>@1gPB6b~w23f^v9kV8rY<8^H8Cs@7NTL8 zE9)nM?}ty~C=k}R4;fU;7tGp;h@9K|7fK)kn<-;gd-!pOA97n?=j`v|@1i@>86>YF z*b{u>F0R#<=am9h?r7Y(i!Xfvw6E<`W)H(Rnno#uH$QK0-n#$NEV-aQTH!;jpSpZ5 zXz|9LmeIBi%FwD9qfDoVRwZ&P z<5(3^rvVE(8^5ueYy@D|?T||O19T03Q*m0cyd;Lve0vp1Bhphea3LIu5Q-3_|BTxZ zDTzDNa=gabd4GtHeS0Re^@IE|oF4un@B?s-2s0#DW!w&e82VqKIZ~i4+tx|A74zvAMY?0LpWLM5 z!n86?MO8ohQT+L3B>HQ8h(kanx}SUc)`q7u?XR>b^rg@3%yQ=Yn)fvu8!?VjQt`=l z8v{nxt(B1R_;}oBfp3K)2RAYg6A`gTkQuAbksyOn0?yNr!xZhti#@~H!TE*l~V zNzVoA*#O?6tHvDn`PWTDN}?rNb!*`uvOygLYH2iBAc;v?Z^}g#zeX?%wb45L@Txc# zyUL;~@O>^i60afH6Uy{wfZ2fX{WGEWPw*K-Zi^r0?`?^RSr&UF`oSBRMN{(Zizc~w zTmd6-h`JtRl?7ez66uKcNqjf7SPT~37~NQ}VRBZ?)X>!!a(~xu^V`O^adwtFk$6bL zBDYZf^}C1}4%bBk9iOmdA^z9o5y=Lzw+mMd7iK7!&Dbs!r@6n!LjkC#yu&H?5S&;MhYNk?A9tC(X@iMfrrWEl8i@gU^?!S3b87b)DRGJazC} zp)x)E5Dljl!Ol?;jf|m5`+~DCJK^%AxevMj?FC3GHqYal;?>GKRhuPb*;0XW<{+Fk z!?b9$RVhtL4VlE_n#Dc;QecJlHTE@nZ7$3o_}5dK{LR3?khzz+r@UXNio>Mv0kWcH z#XK6ptE!T^9X*)(mb8B2tU5IbLa5`p4LROR=`|1M?#9G|$Y^lT2<(QpNS$OmgU|9&X>G7tZ3pz7e&7L0tUuiO!5quMV;Fz+C|=N-4z9ehd33=zz&J2GTQd1J`*rrfeR=wC z)1T9^sT_j_`K%N*n0on4RrfEba@ucoJk;VO4Z(Oec@(D_%-LbT_?u-&{t3W;IOU1} z8*Al51GbQh__8fW=AUAEZ?Lm|S_(hXKP5doBf#Jjk#m1ap(KS;=0@XFN=Jr##Hp=2 zo6OEs`DEE8jSnaey!(XvVhpkkyZcmCjL(jiV2lL__8e02^Y;n#wWR56!?sOxO6aKx z%HO@Bdo^IRH}JIdk9v$91Dd}RlzPyRpvC?}1xKn8g4rAP1gGjbI<8%_Av z=L?>852K!rr@P&Q%LcI=w0RKm9tr=F&0TuD=sSm<8o7rGZswDqJS}nen{bc2pA|nV zh!pcCL2&I~D*6mS=u$X%0_Y>v^xku7FuCVpGV&$tNJ}5xwWeSTdQe)V=;PH4^IMdc zR(Y0|f<#QysMST`FN0(M&3V&mi1eYfB?m{&caw_Q!qHEmXrfO=jV&)!wpI>SB+J-+ z!j?jHe+i~Z15goU@I@S4(?S@59WgSc$d~DC4p+s;m-7^>b*_}%o`A%jL&(6!>;XD! zR1jq3R#j+jBg8hSuCs@W6W27T>JPlB$(gOBx==0;!2o$61l`QEop(SFNxJFjc5uD! zHKqaCz^#*-lhf|VRGKfxgo&$o%0o&583M3$%!UtX)j@ac^Y9F1eFP?)7QY)2ZQl;i z(g(Y|^01r02@Vc?YL=;su>VdF{)r@6^m?yPEsC z%I2tcYT#Y-7EWrxnEBIIB?#xx-K&gx8M)R;(@% zgBPUXE0LG*A8gm@Sy>2L2ufq;*Gfc7&=CWvRm|lXhwF!Cq zRaeq!FuSjvh9e@bW_}d*4kRM}QWHh4*gNu7kLPRP8E}{4aYPa>ZV#-gTp`i30%B zjUX@#-45a=BgeD99n0GOD#jrtMMI4;*;VOlV!SMcQs;4bG4Qaqq^D9R(x_H^Rfhy* z0qV4@(B=G@>2wrH*-G36b1ayX&W}?NVhnamjm z#+*Q(^Q+B(($c@qlX;VQ3=A4f-WG6}7&((T+@!TeV1)I#l_9LS>bKV3o$etqhK$U2 z#wX1q50n*L6t6(7XZca-0kxh_D%oB*Hv6~tOzxf|Z@Qvmc#3Tq?9{1Hvbk00()P4T43$n=dVG#4>txD>NaH~F(wgeQE91#h! zxvRLVoRWk39dsIw`s!n2ZRdu~AI|kXJ@emFw6w^I<*nDw&biJFne!-dcXT9@yLcFd zG)s}I6j0+&Godfn6#pRxUd=N2fV31uc}qztd@hGcDN!*}U(`x<1ZS_{AwfxKr1;}t zsIXc6a{OE5on~5C)!0Xs{`X^$vZkBtotV!GF&DBK(*>qK3;^{P|BIToU*g<8H36^% zU5Z;LHT4?1Vh5#Go0%?x-_h|_Z#^nFb2qg1_hYwN_xDZ*Am1V-2gtl(vm~t?&zC{v z##=}7gzBnfWmhdxAu-Cfr=OOBkHXzWR3U1~rRD6Id8I*USb??iYF03tSB35Q&|cEE zDYxD=dK66*U-s~B!nqQpm8b4r2++oGqktXiU6Uj$ZScE%j3mGV~8 zgYj|0G_3(fHJBpI2Hle16E zy(X_OO9Scy>i_EIzo5vhF>xOu(Fu{xt2TMmbLi*_ZJhN)^#Vo4&kp~xez?OP`S!$( z12VV@nSOJALmQ7P0UN|)r!$)glPD^pY$iKC`-Kw~1!B0kS4n?6dg$L0_M$*gMPB^m zj>W;2Ue;K4-;%Vn{4W_Xm;aX{0<6SP?iEnG&Ov&0+-}!-8XR}w*UAJxb$L|G)pPFW zXH^7Iww>ei^AqCp)z#0*JhbLrIhn`6+A$-i+F}ORBTw%NWXDb*nIF91ztW$^!F=TL z!KFY(nl)!$nw1U%Te+1Xl_8mgfKS-suzQ7VoGsxn5 z;ueVbSn9meBnKVxNH~{ks4-_s`kYG=2=8A4lL0UhFpKU9ZdF4Fai1AEdxlh#?d# zMU+x0rNR_*a(C%50lf5?ce~ENi@657=4dcm%x)QH3@117nE5|oKU`na>LCf$K(i9Q zV*_Waz@#6n^7-;69A4*)D*SKDAbWZ7yB<_*PVJF%9*uR05u0i`IAo(nCVY2}caA?U zqt(4G=h3_77P*ax<##Ad?=>KPZ(hl%ttvN;-q>h@gox~$d$4;jQhV`9W6jCp*!GZ*l4Mch&dyH#rz!SOLxN4n z2U9Yu0H~Yh6ZFrJP-obGfu~DUtraaM_ZuWtXwhA~c=i)LFKgcl%@Q!y8nX(-poxDO ze)%=xb#vEyXYkeVElE;9L|~(1Xf|Z3+NA&lvlap_gt+C&kh$LpA ze(jikKYZB>nTME%WDBYQ6G-g?qERoDh!4`zz|BEmHwI(0i59S0CsyUj7T<6U1 z@Xxh4Pj)vpD0V1z0=DrP5rE`0m&oK5Fw}0(ys|vJ&AJk6F+01!U+v&rVf%rgs$bWL z2Dq`;@S+0lA*_vQ}!AkQ7AYVS7M`Z zLf*BId#XY?GuU9VKrUp2*3Legm$zfv#&4eDt0?s^)GTlBGo2Oi9c}OB66Zqr7%OWq z$rm$PGg@_3eEuUEZSAe(|IPo)@9v?EIUnn`{)YXyt0oGTH@4v;#6=QThzb%LN>1dPV-XUZjh~B8(7I(~a(7(E zxR(;XI%kkNEhsRQ z=pKp(cz5vqC3D>jbj0WUp3wx3VXaz*;!fyVtNwJXC7VhD#3}^zn6d1Sn_;*U9Z3=q z{TRlK73OH)g&vPg8-=WaRqt`DXtag@PAjv}laqV4a=!9*3~s`v5UU=ECQq7EVf3pH zOc1!I?A?6xreQ8Gsw=9yD%K(!$3Jh|U)Le8tdbD89-A48ZN7XJxJ?Pl2tL^TIfDM~ ziQoQl5L~EJ6L>l;%>vS2kTanXPnIPbpDLfDE}<^Tf)GQn{{8<&qo**Ik*q*86vZWH zo4sTA=FY@nV$aI@7g?qi+T*NgocZ`H9t zcXPP>H$fCgt$Vb}Jb!ejq*=RUYnb{CvQRl4^nCas5Ap#6M%L${8@{Uaxf2PV)A}qy_9kUlftK=d*p;#pHeC# z9*VA=&W>LpOAXKO&F}pT_42Bfn174bUk*#}J?955_bm9Z08LBQH7JN!XZ9DGKvLY{ zDrZ4_tSKSUlQ_rjJCL?;{gh(OkQfLch1Y$Gj%tZ;?A7}ET-yb`w%l3@17;c=4cyW! z7yxFENxywDppfxtyN}Le@D9@w#ow3PmNRC)V{`7CeP=qHl<qmSic;A8n`>)L0 zLD)T=`0lHh<~}=h5N7n?bh*VeqhDUt3%I z)<{HjebqV4Sllqt;yE6kO*xstM&v54HG|CN4Yt9p^nd`=EVUBn-N(Tww(#JstyqUk z#MR37%^|QvADt+@*(qH28eB3vM~86_y)9twDA=h+T?hj(0ZwVo2?6y$TzX+gQ{Yzk zQvC8K5#WP;qV_JuP$jzRPd0r(XlQ6ju2c2!-Ny^$7x>7akE8M_UeG@Tu8EX-uaats zD7}H?)CI|Yb+gKv&6+LGFm1#vqW{wc1By)MdOlO3Wdyb??>Fx^ujIbTwr#U(`=zwJ z8hNjNZA*)$r~BW)p+{A?t}#dl20PC-2e9#!xJiM;(=L_s8^_Mm1=7pf{)O-O4D(#K zGC7a=iQF2l$^06bdMpZ`Th+vgV^pfLLN^igsNq|6a5(~bkdby`;5QL?g`EWkOyDH+ zC{+4!<9k?Y(oE+S%W)l)ZR6PE*l!LCl=Ag*^wyM*y;HgiyQcUmYXHo@eW^_%U5A5G z0^|z-tZguCgdSBDTGDT^aG_zW!O@HDNDu0}kv?QSU7C2B_#wKplXTPzNu(biWzJwh z{X?xu-%C8Xtd>U?K06+sV4`fP66u0`?kBw~62Pm(_6q`xOC8{ibI@JgXSGM{?qnBg zxNZKb+8lBYerj_}q{l7?;?=d9@V`F@KyHD(+A*k0(*6ax!(qEM3PYjb>|{$cHBdv1 z^~H%&nUq9X{1xFX`d0*O-}kNMfsPwVQKG=BEn5UZlsbd-2V7PLBXzNUF-!5yY+HKz zrHvH1B)O{_@*YkN*ZQgM&$iN2)!%h~ivr_zsdpHu!;T+>&{FR(AF)u8n9BLlv|r0& z;PP^XvEevo@yQu!7I{_*wCUf8wJ99*gJz-Pag}y$bXjQO5veAD?^~CPCNgzAN6^%4 zQF4I@bVHXM_ZzxTF^J3GnJJs@9>IE(+o3eHFYfmeP(4M%!L7bT+|qZ=-V&%UgPe+q zt=B2eblyh@u%11*q!9uwqBU=T_Kr_XqaFxq+?Rv524J!jB;|uFNq$VUNZFWR8b>W6 zg`3j83q#F=t;aUw%s;g_>`YDlxyhWYmPNo>`d?%+h%cM*35XLv-8#{p2N>SGODV>L~_A-l9F>9 zWE)s;ZjE-D#}QP`x<3DJcf*I(7%*>SJ_uW-OErbn@mabq(t@iJshRg^orw)eXdp25 zg&x$@G;eHL@$7hK^+ynhSsfZ(xU!{s%SULm=b*RW#Fs8DHb0ia-$|5Gcj0GS1Tr={ zF=;!t6hRt-Me^yuHnm!f8Cl;Q8+nC@V5|Y2Qt_|9DkEuw;N=nG%oqZdCHU+p#IK)X zwcR@spB%0v)RSW;%FJl#R@;}i}mgpRZ;rIMXjIQ&1;v>Jw17; zy5d%G1D6rOQIP7ux?iTUBOe7n;q;_j8x~F+JxBQ>~vRh22%^rSq?f}2ImJX+u z=(9^6euryaXwA&?e*4>jDD-yB;?4)#CgW*BQSonsXkkuOY|JB>-%t4i4FG9qs!~}> zs&85sRj^dxE7<-FW^78ul*+C$-iOz(@?^p0cH;PwEMJMl6U8TAvC5Nimn&B z4R@^@#d(a8h%txr^x2H5d?&#$hYBv8{ekZ1Q#)rnqB$?^v#7@&4>A`d4+f5il>YLb z-!VN1nYkPKw7SU;RAYl-6EU~_sH9KJd!q!8mY9r^rMt2g+zX93h zs3i=v=^4ZgI!LMPEzh(~PI_`NZ5MsDeDPvC`fBg|k9nEhKIw8Dsu4BxmEQMqLjW`q z3~8+M*su2;x|mGMJ=_}F*(n_~KKciElXP;&1nim*+%zOZN)ExBJ`p9^I-m~^vCaR4 zp5H&p(8yiP_kN?{PeeU31Kjb?C=`6bsa44@D$n1HsVAS=GK7L*ni>?ml(xBb8vfF- z5;<2CMkqwQCiTHnMMl2=RjaICD4m?VVt-=4lSiBHQ)8U5p_J)E zOK~G{EBl3PZsxx|DE}jUfGQ6;`T|w|luGg9XaO^Jsz;kTa0HTAS>P9 zf(NkE(v<+Wo40*ZE>SS2#z7d*>#t9L$fns@EiYmpJUh@)nf&zTS1PE&`kb=sI9`(+ zbB!(D^JZ(K4khyyz8jz$IECME?}0s15VW+qz00R6eRb>rabOnW6b#)Fc+waN@n|OK zW>lcI5$M0$V|jvvw}!uFcyMw2Rs5@XoNelVatN)H99l!X9Nq~!WU2B7mP3n;cMT&W z@k*we^v8DAAL(>go&pw{Q>?&IU5y71kQ)=L$GCKrqj!ymfd!_QYD?Qt@j>GpxE_gh ze&}bF3g&fWgdI_j=&-)ACoo284HgswJaBFTXfU5&_`B{=F<%5@&+r|1VGDjaWbb2s z>HNXQ{jPs__||SC2N6+-UD!w1hcFnH{&nRKp0`>PUB^nrbLgetw%fw*c>CViqYXCgChK_&gZ${5S_J zTf+af4LWiz?^?-WhKUcahdDzMPWQDGrLNDBncUm{EyyN(D&;4VTh&jNnc#Q_OeX(g zM!A&2v;RtZRI?t1#H=!)Q25M$BH1YCG7F)TQhQELPOc?$JkjOK-?-Tx@%-UyvURdG zNlxq&e`}ZnlJqX>r)=nTQf{i>Tc&%RnCt#TuS5N^QOALY1QFUw0@D@>_Ox zRIGr44h7Nm&gMatK^3B4o0h@ezV|=^@HT%keh=3oW-;W={#&&n4Xl$JH*#t$)6pWx8Wsdni z|A-8jGU#j!nI1(4KJ&B= zHeX=W?N_&Dd5aygvi{@5am%0`ziLS-qgY1CdSdc1{X9`L1u78L)LGB11Fhy{fswbB z-3Ty66C;QRL$>8s!38GCwTXttT4Eaf)w}FaFo;cae%*2U5vi=mPbt!G=wV^N+6l-) zQ)AcwA2v6J6xy%Kb5~XCdOA&|$@&np-)|qs6Go1D)uDDCEs@=#Z8NwQZ@Xzj&X?lG z|EJrq#OkCfvgGP&g^g*5Bu9D+0HfCUw^leHefadU5zPvFH7rer`{p z)vx93TyiG4)ID2IKT9f0N`LE!+%sLbxAI%{()w~(6@{r#JOSR+qy6t#i;Ak_?@1$+ zgRx%_IC3rpvG~OI4Y26+6+r#ZT#-;@DLlX6POGZw>#}$gla{QY@Kc1zYjgxIib9bY ziObmW^s7V)R);H3i8)pPEx9 zli$0<1#D&Z4*I$Unum!id0CGthtDmEN7R|Q$BX`S%nzh5y8`2M={g@4j6l)M@-b!l zo=HZ04-XnUpah?+LgWW(vw{xuvOv~OX<92WI zH`=;cIA1LgryMo7>RB^k+&+G}=YlUUim;8yvA#;7(PrgX`crAvKV~0i=N8e&;>9Toay*#J>(d3DrTIQNhdJz0fx5?>e~Im3P)P-y$g<2& z;F5af3Ar%KBhe}NBcf*So)MsHrG7D1+Z_z9y?Yx8Yu9VHAMo_h)B6H$3`THFWpBL3l$rV?bE*7ed z85Q;Tr@Yn7?tZEbfFM2N5v1=%$|k>tI4yY4#_KpVjXsAhb?`%5{|8Ffujs6wt&fie zu)%=M&+4gkm3RBvxV3p1u?@}R-m5RG5o=eL0fh{)nb8GT*{A?SmlV@Jsa5wXBeUH? z>SQTx>wjXz9n-;$4QwgYGbHY%-1aBvM-@iA-u>pmFOZ_YzFoauy^bza^$L7yd_50U zQ8S{sm_FEo7Igg65$&6^#DK1GH*eW#-x~l--Vy;#frC@dm5#+7+kX*{z3w_TnwL3F zh>hQZ3m*KE6l+ryg{6hKiZdLLz4!4E+&?RyzGMR|P#1^*?=_Ya!kYl|B0Rr9ArO0j zA;eI7iV4Ypbn-hmIaQrc@xJ5K(?gsFsI5as-@-s!#=99FCD07~lC-qMe8mk>L_7EK z*Vej9qp0I^QNe#$>N$F|2E9y;A${e&O@Yr%&90IV3SAi6wlwK5IxT9=v`%$|^PjKj zl731E{uW2{7Iu$)8fQysej6x38>5oM*c^co2UQc^$B!zgF6$PiX!hw zZq1d~(NV+xX$u@*AL^`e(~v$e>K>{;HN8~luTg`h3Uafz0 zEbvwdM4WuIsCYqJaH~lZugmjX-RYPJ(IeMV$KwAPh|9woQX0Sk_?*5qALmx(QB}xy z$zmFe%^oFKG$x*A9~v!tlX^~^PF+=RZ4Gv{4iMGOLZo!Dp@0#><{*24=0x~ zgB#_)b<)}e69#)FB1?K>^fx&st#>#RBodbS|G1Y^pF6iYSHsO@?3Olomz+e#= zxpHjNx6X1+lTFEnU8n0G=I)jhO;f@dwCdbCtu=>hLu^UAt@$GtpbJoXyd2>j^Br@6 z8l=OisOZ?q@X2Rn{5+<2GiQ3<-X*seQ>)~MH%?j()oO*24Us$=xsS8>fYuV|nxfTN zp4+YgCc>+9MK1WpxJMtO==^I8pxhOpY5y)($E;b%P>)$WW|r!JN=szm||nYT`%Mrb6;!`++aTA zBe6hcg;gGop*?)zY5U}}$B`C8rz}vn=7yG6;5Ex{w%=75lz(|15bx0jHvGLk zggu1c%C*QoAm5RjnV&h2{!2*J{TW8vHogjT^Vi|8ciQSnqxA5o8M1sb{-xyK-g-eX z!YzaH?Vm3oGpAEPOiJu|G(`D)^%&=IIet6TR@wOx_gnny?>BoLlC8f_60Qcp?ucBm zLZBx<-U-_K1u6doV~MEQ-kJ+v!#;h-C&$pk=<4WXg^a8rn^eustgPY2I@qJoV-L$< zjjk=iLMyKft-)fE+5PGuZg|+OSk^s&g%cWux;W!SPe!(2al%Q4obAp(!94NX+K~(6 zO1lR+hN070MC7vw2L~1>xs6hf20c9{q8VlaWq(r>*;QSZw*08c^U44kCMHKe z+$_P2w*19tKLU6{6HfrS71b#A=ezXA5hF^E!k4dzD-`x0eW=2*boT!{t9C=SZ@E24 z`w=)pR^{IbdIS|qouGB@#7(mB@xf2uVEy7!P7DbP|59XD_kUF=f2Z&jP-HSW_wEuMvoEH+QZzcI)7qLpRqJ&U>XN zrDNTODfa`7EN~JMV4$5hfBekGW}veOzlH{v>X`f%d2unxb9dj}PtH(pIqjx9CWO)4 zL{zj%!aborO-Eb4rzt%8L9m1OTn`VXjfSu!z+2c10jWz+(kL0c19*koPgfy~Fw{-&VxF zL1dH9zP^)+02(D91LyqfJr)4HH~W)Z`rzA^P+{fQ{TrSqhsTFybg(LAF>vkWpn$

    spinslider.h
    - - - ColorButton - QPushButton -
    colorbutton.h
    -
    - - MaterialMapEditor - QWidget -
    material_map_editor.h
    - 1 - - changed() - -
    - - - - - colorDiffuse - colorChanged(QColor) - MaterialEditor - materialChanged() - - - 326 - 49 - - - 282 - 17 - - - - - colorSpecular - colorChanged(QColor) - MaterialEditor - materialChanged() - - - 325 - 128 - - - 284 - 45 - - - - - spinTransparent - valueChanged(double) - MaterialEditor - materialChanged() - - - 443 - 448 - - - 283 - 149 - - - - - spinReflect - valueChanged(double) - MaterialEditor - materialChanged() - - - 443 - 470 - - - 284 - 174 - - - - - spinIOF - valueChanged(double) - MaterialEditor - materialChanged() - - - 443 - 492 - - - 284 - 236 - - - - - checkGlass - toggled(bool) - MaterialEditor - materialChanged() - - - 443 - 382 - - - 284 - 84 - - - - - colorSelfIllum - colorChanged(QColor) - MaterialEditor - materialChanged() - - - 376 - 202 - - - 326 - 63 - - - - - spinDispersion - valueChanged(double) - MaterialEditor - materialChanged() - - - 460 - 514 - - - 326 - 288 - - - - - mapDiffuse - changed() - MaterialEditor - materialChanged() - - - 445 - 63 - - - 469 - 63 - - - - - mapSpecular - changed() - MaterialEditor - materialChanged() - - - 443 - 143 - - - 467 - 143 - - - - - mapSelfIllum - changed() - MaterialEditor - materialChanged() - - - 447 - 216 - - - 468 - 216 - - - - - mapBump - changed() - MaterialEditor - materialChanged() - - - 450 - 308 - - - 469 - 260 - - - - - mapRelief - changed() - MaterialEditor - materialChanged() - - - 450 - 353 - - - 469 - 304 - - - - - mapSpecularity - changed() - MaterialEditor - materialChanged() - - - 442 - 257 - - - 474 - 250 - - - - - - materialChanged() - - diff --git a/test/qglview/material_map_editor.cpp b/test/qglview/material_map_editor.cpp deleted file mode 100644 index ceaddfe..0000000 --- a/test/qglview/material_map_editor.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "material_map_editor.h" -#include "ui_material_map_editor.h" - - -MaterialMapEditor::MaterialMapEditor(QWidget * parent): QWidget(parent) { - ui = new Ui::MaterialMapEditor(); - ui->setupUi(this); - active = true; -} - - -void MaterialMapEditor::changeEvent(QEvent * e) { - return; - QWidget::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - - -void MaterialMapEditor::resizeEvent(QResizeEvent * e) { - ui->iconedLabel->setFixedWidth(ui->iconedLabel->height()); - ui->iconedLabel->setIconSize(ui->iconedLabel->size()); -} - - -void MaterialMapEditor::updateIcon() { - ui->iconedLabel->setIcon(QIcon(ui->linePath->property("GLpath").toString())); -} - - -void MaterialMapEditor::setMap(const Map & m) { - active = false; - ui->sliderAmount->setValue(m.color_amount); - ui->sliderOffset->setValue(m.color_offset); - ui->linePath->setProperty("GLpath", m.bitmap_path); ui->linePath->setText(QFileInfo(m.bitmap_path).fileName()); - updateIcon(); - active = true; -} - - -Map MaterialMapEditor::map() { - Map m; - m.color_amount = ui->sliderAmount->value(); - m.color_offset = ui->sliderOffset->value(); - m.bitmap_path = ui->linePath->property("GLpath").toString(); - return m; -} - - -void MaterialMapEditor::on_buttonSelect_clicked() { - QString str = QFileDialog::getOpenFileName(this, "Select image", ui->linePath->property("GLpath").toString(), "Images(*.bmp *.jpg *.jpeg *.png *.tif *.tiff *.tga);;All files(*)"); - if (str.isEmpty()) return; - ui->linePath->setProperty("GLpath", str); - ui->linePath->setText(QFileInfo(str).fileName()); - updateIcon(); - mapChanged(); -} - - -void MaterialMapEditor::on_buttonClear_clicked() { - ui->linePath->setText(""); - ui->linePath->setProperty("GLpath", ""); - updateIcon(); - mapChanged(); -} diff --git a/test/qglview/material_map_editor.h b/test/qglview/material_map_editor.h deleted file mode 100644 index 4384558..0000000 --- a/test/qglview/material_map_editor.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef MATERIAL_MAP_EDITOR_H -#define MATERIAL_MAP_EDITOR_H - -#include -#include "glmaterial.h" - -namespace Ui { - class MaterialMapEditor; -}; - -class MaterialMapEditor: public QWidget -{ - Q_OBJECT -public: - explicit MaterialMapEditor(QWidget * parent = 0); - - void setMap(const Map & m); - Map map(); - -protected: - void changeEvent(QEvent * e); - void resizeEvent(QResizeEvent * e); - void updateIcon(); - - bool active; - Ui::MaterialMapEditor * ui; - -private slots: - void mapChanged() {if (active) emit changed();} - void on_buttonSelect_clicked(); - void on_buttonClear_clicked(); - -signals: - void changed(); - -}; - -#endif // MATERIAL_MAP_EDITOR_H diff --git a/test/qglview/material_map_editor.ui b/test/qglview/material_map_editor.ui deleted file mode 100644 index f97cf3d..0000000 --- a/test/qglview/material_map_editor.ui +++ /dev/null @@ -1,178 +0,0 @@ - - - MaterialMapEditor - - - - 0 - 0 - 509 - 74 - - - - - 0 - - - 0 - - - - - IconedLabel::RightToLeft - - - - - - - - - 2 - - - - - - - - X - - - - - - - ^ - - - - - - - - - Amount: - - - - - - - -10.000000000000000 - - - 10.000000000000000 - - - 1.000000000000000 - - - 2 - - - 0.050000000000000 - - - 0.200000000000000 - - - - - - - Offset: - - - - - - - -10.000000000000000 - - - 10.000000000000000 - - - 2 - - - 0.050000000000000 - - - 0.200000000000000 - - - - - - - - - - SpinSlider - QWidget -
    spinslider.h
    -
    - - IconedLabel - QFrame -
    iconedlabel.h
    -
    -
    - - - - linePath - textChanged(QString) - MaterialMapEditor - mapChanged() - - - 175 - 19 - - - 99 - 73 - - - - - sliderAmount - valueChanged(double) - MaterialMapEditor - mapChanged() - - - 440 - 38 - - - 512 - 37 - - - - - sliderOffset - valueChanged(double) - MaterialMapEditor - mapChanged() - - - 497 - 66 - - - 511 - 65 - - - - - - mapChanged() - -
    diff --git a/test/qglview/openglwindow.cpp b/test/qglview/openglwindow.cpp deleted file mode 100644 index 8dc5d39..0000000 --- a/test/qglview/openglwindow.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "openglwindow.h" -#include -#include -#include -#include - - -OpenGLWindow::OpenGLWindow(QWindow *parent) - : QWindow(parent) - , m_context(nullptr) - , m_device(nullptr) -{ - setFlag(Qt::FramelessWindowHint); - setSurfaceType(QWindow::OpenGLSurface); - QSurfaceFormat format = QSurfaceFormat::defaultFormat(); -// qDebug() << format; -#ifdef QT_OPENGL_ES_2 - format.setRenderableType(QSurfaceFormat::OpenGLES); -#else - if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { - format.setVersion(2, 0); - format.setProfile(QSurfaceFormat::NoProfile); - } -#endif - format.setDepthBufferSize(24); - format.setSamples(8); -// format.setStencilBufferSize(8); - setFormat(format); - QSurfaceFormat::setDefaultFormat(format); -} - - -OpenGLWindow::~OpenGLWindow() { - delete m_device; -} - - -void OpenGLWindow::render(QPainter *painter) { -} - - -void OpenGLWindow::initialize() { -} - - -void OpenGLWindow::render() { -// if (!m_device) m_device = new QOpenGLPaintDevice; -// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); -// m_device->setSize(size() * devicePixelRatio()); -// m_device->setDevicePixelRatio(devicePixelRatio()); -// QPainter painter(m_device); -// render(&painter); -} - - -void OpenGLWindow::renderLater() { - requestUpdate(); -} - - -bool OpenGLWindow::event(QEvent *event) { - switch (event->type()) { - case QEvent::UpdateRequest: - renderNow(); - return true; - default: - return QWindow::event(event); - } -} - - -void OpenGLWindow::exposeEvent(QExposeEvent *event) { - if (isExposed()) renderNow(); -} - - -void OpenGLWindow::renderNow() { - if (!isExposed()) - return; - bool needsInitialize = false; - if (!m_context) { - m_context = new QOpenGLContext(this); - m_context->setFormat(requestedFormat()); - m_context->create(); - needsInitialize = true; - } - m_context->makeCurrent(this); - if (needsInitialize) { - initializeOpenGLFunctions(); - initialize(); - } - render(); - m_context->swapBuffers(this); -} - diff --git a/test/qglview/openglwindow.h b/test/qglview/openglwindow.h deleted file mode 100644 index 6816665..0000000 --- a/test/qglview/openglwindow.h +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -class QPainter; -class QOpenGLContext; -class QOpenGLPaintDevice; - - -class OpenGLWindow : public QWindow, protected QOpenGLFunctions -{ - Q_OBJECT -public: - explicit OpenGLWindow(QWindow *parent = nullptr); - ~OpenGLWindow(); - - virtual void render(QPainter *painter); - virtual void render(); - - virtual void initialize(); - - QOpenGLContext * context() {return m_context;} - -public slots: - void renderLater(); - void renderNow(); - -protected: - bool event(QEvent *event) override; - - void exposeEvent(QExposeEvent *event) override; - -private: - QOpenGLContext *m_context; - QOpenGLPaintDevice *m_device; -}; - diff --git a/test/qglview/plugin/CMakeLists.txt b/test/qglview/plugin/CMakeLists.txt deleted file mode 100644 index 2cdd25f..0000000 --- a/test/qglview/plugin/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -project(qglview_plugin) -include_directories("..") -add_definitions(-DQT_PLUGIN) -add_definitions(-DQT_NO_DEBUG) -add_definitions(-DQT_SHARED) -add_definitions(-DQDESIGNER_EXPORT_WIDGETS) -find_qt(${QtVersions} Core Designer Gui Widgets OpenGL) -qt_sources(SRC) -qt_wrap(${SRC} CPPS out_CPP QMS out_QM) -qt_add_library(${PROJECT_NAME} SHARED out_CPP) -qt_target_link_libraries(${PROJECT_NAME} qglview) -qt_install(TARGETS ${PROJECT_NAME} DESTINATION QtPlugins/designer) diff --git a/test/qglview/plugin/qglview_designerplugin.cpp b/test/qglview/plugin/qglview_designerplugin.cpp deleted file mode 100644 index 708776b..0000000 --- a/test/qglview/plugin/qglview_designerplugin.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "qglview_designerplugin.h" -#include "qglviewplugin.h" - - -QGLViewDesignerPlugin::QGLViewDesignerPlugin(QObject * parent): QObject(parent) -{ - m_widgets.append(new QGLViewPlugin(this)); -} - - -QList QGLViewDesignerPlugin::customWidgets() const { - return m_widgets; -} - diff --git a/test/qglview/plugin/qglview_designerplugin.h b/test/qglview/plugin/qglview_designerplugin.h deleted file mode 100644 index db6fc67..0000000 --- a/test/qglview/plugin/qglview_designerplugin.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef QGLVIEW_DESIGNERPLUGIN_H -#define QGLVIEW_DESIGNERPLUGIN_H - -#include -#include - - -class QGLViewDesignerPlugin: public QObject, public QDesignerCustomWidgetCollectionInterface -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "qad.qglview") - Q_INTERFACES(QDesignerCustomWidgetCollectionInterface) -public: - QGLViewDesignerPlugin(QObject * parent = 0); - virtual QList customWidgets() const; - -private: - QList m_widgets; - -}; - -#endif // QGLVIEW_DESIGNERPLUGIN_H diff --git a/test/qglview/plugin/qglviewplugin.cpp b/test/qglview/plugin/qglviewplugin.cpp deleted file mode 100644 index d20f2f2..0000000 --- a/test/qglview/plugin/qglviewplugin.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "glwidget.h" -#include "qglviewplugin.h" -#include -#include "glprimitives.h" -#include "qglview.h" - - -QGLViewPlugin::QGLViewPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void QGLViewPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool QGLViewPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * QGLViewPlugin::createWidget(QWidget * parent) { - GLWidget * w = new GLWidget(parent); - if (m_initialized) { - auto axis = new GLObjectBase(); - GLObjectBase * obj; - float al = 1.; - obj = new GLPrimitiveLine(QVector3D(0, 0, -al), QVector3D(0, 0, al)); - obj->material().color_diffuse = Qt::darkBlue; obj->setAcceptLight(false); - obj->setSelectable(false); - axis->addChild(obj); - obj = new GLPrimitiveLine(QVector3D(-al, 0, 0), QVector3D(al, 0, 0)); - obj->material().color_diffuse = Qt::darkRed; obj->setAcceptLight(false); - obj->setSelectable(false); - axis->addChild(obj); - obj = new GLPrimitiveLine(QVector3D(0, -al, 0), QVector3D(0, al, 0)); - obj->material().color_diffuse = Qt::darkGreen; obj->setAcceptLight(false); - obj->setSelectable(false); - axis->addChild(obj); - w->view()->addObject(axis); - auto cam_light = new Light(); - cam_light->intensity = 0.5; - cam_light->setName("Camera_Light"); - w->view()->camera()->addChild(cam_light); - w->start(); - } - return w; -} - - -QString QGLViewPlugin::name() const { - return QLatin1String("GLWidget"); -} - - -QString QGLViewPlugin::group() const { - return QLatin1String("Display Widgets"); -} - - -QIcon QGLViewPlugin::icon() const { - return QIcon("://icons/qglview.png"); -} - - -QString QGLViewPlugin::toolTip() const { - return QLatin1String(""); -} - - -QString QGLViewPlugin::whatsThis() const { - return QLatin1String(""); -} - - -bool QGLViewPlugin::isContainer() const { - return false; -} - - -QString QGLViewPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString QGLViewPlugin::includeFile() const { - return QLatin1String("glwidget.h"); -} - diff --git a/test/qglview/plugin/qglviewplugin.h b/test/qglview/plugin/qglviewplugin.h deleted file mode 100644 index 6516afb..0000000 --- a/test/qglview/plugin/qglviewplugin.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef QGLVIEWPLUGIN_H -#define QGLVIEWPLUGIN_H - -#include -#include - - -class QGLViewPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - explicit QGLViewPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif //QGLVIEWPLUGIN_H diff --git a/test/qglview/propertyeditor.cpp b/test/qglview/propertyeditor.cpp deleted file mode 100644 index cce7e95..0000000 --- a/test/qglview/propertyeditor.cpp +++ /dev/null @@ -1,408 +0,0 @@ -#include "propertyeditor.h" - - -QWidget * Delegate::widgetForProperty(QWidget * parent, const QModelIndex & index) const { - QWidget * w = 0; - int type = 0; - QVariant value = index.data(Qt::UserRole); - if (index.data(Qt::UserRole + 2).toString() == "__flags") return 0; - if (index.data(Qt::UserRole + 1).toString() == "__flag") { - qulonglong key = index.data(Qt::UserRole).toULongLong(); - value = index.parent().data(Qt::UserRole); - //QMetaProperty prop = index.parent().data(Qt::UserRole + 1).value(); - w = new QCheckBox(parent); type = 14; ((QCheckBox*)w)->setChecked(((value.toULongLong() & key) == key && key != 0) || (value.toULongLong() == 0 && key == 0)); - ((QCheckBox*)w)->setText("0x" + QString::number(key, 16).toUpper()); - connect((QCheckBox*)w, SIGNAL(clicked(bool)), this, SLOT(changedFlag())); - //qDebug() << prop.enumerator().name(); - } else { - if (value.canConvert()) { - PropertyValuePair prop = value.value(); - if (prop.first.isEnumType()) { - w = new QComboBox(parent); type = 13; ((QComboBox*)w)->setCurrentIndex(value.toInt()); - w->setProperty("__prop", QVariant::fromValue(prop.first)); - QMetaEnum menum = prop.first.enumerator(); - for (int i = 0; i < menum.keyCount(); ++i) { - ((QComboBox*)w)->addItem(QString(menum.key(i)) + " (0x" + QString::number(menum.value(i), 16).toUpper() + ")", menum.value(i)); - if (menum.value(i) == prop.second.toInt()) - ((QComboBox*)w)->setCurrentIndex(i); - } - connect((QComboBox*)w, SIGNAL(currentIndexChanged(int)), this, SLOT(changed())); - } - } else { - switch (value.type()) { - case QVariant::Int: w = new QSpinBox(parent); type = 2; ((QSpinBox*)w)->setRange(-0x7FFFFFFF, 0x7FFFFFFF); connect((QSpinBox*)w, SIGNAL(valueChanged(int)), this, SLOT(changed())); break; - case QVariant::UInt: w = new QSpinBox(parent); type = 3; ((QSpinBox*)w)->setRange(0, 0xFFFFFFFF); connect((QSpinBox*)w, SIGNAL(valueChanged(int)), this, SLOT(changed())); break; - case QVariant::LongLong: w = new QSpinBox(parent); type = 4; ((QSpinBox*)w)->setRange(-0x7FFFFFFF, 0x7FFFFFFF); connect((QSpinBox*)w, SIGNAL(valueChanged(int)), this, SLOT(changed())); break; - case QVariant::ULongLong: w = new QSpinBox(parent); type = 5; ((QSpinBox*)w)->setRange(0, 0xFFFFFFFF); connect((QSpinBox*)w, SIGNAL(valueChanged(int)), this, SLOT(changed())); break; - case QVariant::Double: w = new QDoubleSpinBox(parent); type = 6; ((QDoubleSpinBox*)w)->setRange(-999999999, 999999999); ((QDoubleSpinBox*)w)->setDecimals(3); connect((QDoubleSpinBox*)w, SIGNAL(valueChanged(double)), this, SLOT(changed())); break; - case QVariant::Bool: w = new QCheckBox(parent); type = 7; ((QCheckBox*)w)->setChecked(value.toBool()); connect((QCheckBox*)w, SIGNAL(toggled(bool)), this, SLOT(changed())); break; - case QVariant::Color: w = new ColorButton(parent); type = 8; ((ColorButton*)w)->setUseAlphaChannel(true); ((ColorButton*)w)->setColor(value.value()); connect((ColorButton*)w, SIGNAL(colorChanged(QColor)), this, SLOT(changed())); break; - case QVariant::Point: w = new QPointEdit(parent); type = 9; ((QPointEdit*)w)->setDecimals(0); ((QPointEdit*)w)->setValue(QPointF(value.toPoint())); connect((QPointEdit*)w, SIGNAL(valueChanged(QPointF)), this, SLOT(changed())); break; - case QVariant::PointF: w = new QPointEdit(parent); type = 10; ((QPointEdit*)w)->setDecimals(3); ((QPointEdit*)w)->setValue(value.toPointF()); connect((QPointEdit*)w, SIGNAL(valueChanged(QPointF)), this, SLOT(changed())); break; - case QVariant::Rect: w = new QRectEdit(parent); type = 11; ((QRectEdit*)w)->setDecimals(0); ((QRectEdit*)w)->setValue(QRectF(value.toRect())); connect((QRectEdit*)w, SIGNAL(valueChanged(QRectF)), this, SLOT(changed())); break; - case QVariant::RectF: w = new QRectEdit(parent); type = 12; ((QRectEdit*)w)->setDecimals(3); ((QRectEdit*)w)->setValue(value.toRectF()); connect((QRectEdit*)w, SIGNAL(valueChanged(QRectF)), this, SLOT(changed())); break; - case QVariant::String: default: w = new CLineEdit(parent); type = 1; ((CLineEdit*)w)->setDefaultText(value.toString()); connect((CLineEdit*)w, SIGNAL(textChanged(QString)), this, SLOT(changed())); break; - } - } - } - if (w == 0) return 0; - /*QPalette pal = w->palette(); - pal.setColor(QPalette::Window, Qt::white); - w->setPalette(pal);*/ - w->setAutoFillBackground(true); - w->setProperty("__type", type); - return w; -} - - -void Delegate::setWidgetProperty(QWidget * w, const QVariant & value) const { - if (w == 0) return; - switch (w->property("__type").toInt()) { - case 1: ((CLineEdit*)w)->setText(value.toString()); break; - case 2: case 3: case 4: case 5: ((QSpinBox*)w)->setValue(value.toInt()); break; - case 6: ((QDoubleSpinBox*)w)->setValue(value.toDouble()); break; - case 7: ((QCheckBox*)w)->setChecked(value.toBool()); break; - case 8: ((ColorButton*)w)->setColor(value.value()); break; - case 9: ((QPointEdit*)w)->setValue(value.value()); break; - case 10: ((QPointEdit*)w)->setValue(value.value()); break; - case 11: ((QRectEdit*)w)->setValue(value.value()); break; - case 12: ((QRectEdit*)w)->setValue(value.value()); break; - } -} - - -const QVariant Delegate::widgetProperty(QWidget * w) const { - if (w == 0) return QVariant(); - switch (w->property("__type").toInt()) { - case 1: return QVariant::fromValue(((CLineEdit*)w)->text()); break; - case 2: return QVariant::fromValue(((QSpinBox*)w)->value()); break; - case 3: return QVariant::fromValue(((QSpinBox*)w)->value()); break; - case 4: return QVariant::fromValue(((QSpinBox*)w)->value()); break; - case 5: return QVariant::fromValue(((QSpinBox*)w)->value()); break; - case 6: return QVariant::fromValue(((QDoubleSpinBox*)w)->value()); break; - case 7: return QVariant::fromValue(((QCheckBox*)w)->isChecked()); break; - case 8: return QVariant::fromValue(((ColorButton*)w)->color()); break; - case 9: return QVariant::fromValue(((QPointEdit*)w)->value().toPoint()); break; - case 10: return QVariant::fromValue(((QPointEdit*)w)->value()); break; - case 11: return QVariant::fromValue(((QRectEdit*)w)->value().toRect()); break; - case 12: return QVariant::fromValue(((QRectEdit*)w)->value()); break; - case 13: return QVariant::fromValue(PropertyValuePair(w->property("__prop").value(), ((QComboBox*)w)->itemData(((QComboBox*)w)->currentIndex()))); break; - default: return QVariant(); break; - } - return QVariant(); -} - - -void Delegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const { - if (index.data(Qt::UserRole + 1).toString() != "__flag") - model->setData(index, widgetProperty(editor), Qt::UserRole); -} - - -void Delegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { - QStyledItemDelegate::paint(painter, option, index); - QVariant value = index.data(Qt::UserRole); - QStyle * style = QApplication::style(); - QStyleOption * so = 0; - QStyleOptionComplex * soc = 0; - QString text; - QRect rect; - QPalette::ColorRole role = (option.state.testFlag(QStyle::State_Selected) && option.state.testFlag(QStyle::State_Active) ? QPalette::HighlightedText : QPalette::WindowText); - if (index.data(Qt::UserRole + 2).toString() == "__flags") { - text = "0x" + QString::number(value.toInt(), 16).toUpper(); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - return; - } - if (index.data(Qt::UserRole + 1) == "__flag") { - qulonglong key = index.data(Qt::UserRole).toULongLong(); - value = index.parent().data(Qt::UserRole); - so = new QStyleOptionButton(); - so->rect = option.rect; - so->palette = option.palette; - so->fontMetrics = option.fontMetrics; - ((QStyleOptionButton*)so)->state = (((value.toULongLong() & key) == key && key != 0) || (value.toULongLong() == 0 && key == 0) ? QStyle::State_On : QStyle::State_Off) | option.state; - ((QStyleOptionButton*)so)->text = "0x" + QString::number(key, 16).toUpper(); - if (option.state.testFlag(QStyle::State_Selected)) - so->palette.setColor(QPalette::WindowText, so->palette.color(QPalette::HighlightedText)); - style->drawControl(QStyle::CE_CheckBox, so, painter); - } else { - if (value.canConvert()) { - PropertyValuePair prop = value.value(); - if (prop.first.isEnumType()) { - QMetaEnum menum = prop.first.enumerator(); - for (int i = 0; i < menum.keyCount(); ++i) { - if (menum.value(i) == prop.second.toInt()) { - text = QString(menum.key(i)) + " (0x" + QString::number(menum.value(i), 16).toUpper() + ")"; - break; - } - } - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - } - } else { - switch (value.type()) { - case QVariant::Int: - text.setNum(value.toInt()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::UInt: - text.setNum(value.toUInt()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::LongLong: - text.setNum(value.toLongLong()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::ULongLong: - text.setNum(value.toULongLong()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::Double: - text.setNum(value.toDouble(), 'f', 3); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::Bool: - so = new QStyleOptionButton(); - so->rect = option.rect; - so->state = option.state; - so->palette = option.palette; - so->fontMetrics = option.fontMetrics; - ((QStyleOptionButton*)so)->state = (value.toBool() ? QStyle::State_On : QStyle::State_Off) | option.state; - style->drawControl(QStyle::CE_CheckBox, so, painter); - break; - case QVariant::Color: - rect = option.rect;//style->subElementRect(QStyle::QStyle::SE_FrameContents, so); - rect.setRect(rect.x() + 3, rect.y() + 3, rect.width() - 6, rect.height() - 6); - painter->fillRect(rect, ab); - painter->fillRect(rect, value.value()); - break; - case QVariant::Point: - text = pointString(value.toPoint()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::PointF: - text = pointString(value.toPointF()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::Rect: - text = rectString(value.toRect()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::RectF: - text = rectString(value.toRectF()); - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, text), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, text, role); - break; - case QVariant::String: default: - style->drawItemText(painter, style->itemTextRect(option.fontMetrics, option.rect, Qt::AlignLeft | Qt::AlignVCenter, true, value.toString()), - Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, value.toString(), role); - break; - } - } - } - /*so = new QStyleOptionFrame(); - so->rect = option.rect; - so->state = option.state; - so->palette = option.palette; - so->fontMetrics = option.fontMetrics; - ((QStyleOptionFrame*)so)->state = (value.toBool() ? QStyle::State_On : QStyle::State_Off); - style->drawPrimitive(QStyle::PE_PanelLineEdit, so, painter); - style->drawPrimitive(QStyle::PE_FrameLineEdit, so, painter); - break;*/ - if (so != 0) delete so; - if (soc != 0) delete soc; - -} - - -void Delegate::changedFlag() { - QAbstractItemModel * model = const_cast(cmi.model()); - model->setData(cmi, qobject_cast(sender())->isChecked(), Qt::UserRole + 3); - QModelIndex p = cmi.parent(), mi; - int row = 0; - qulonglong val = 0; - QList chldr; - mi = p.child(row, 1); - while (mi.isValid()) { - chldr << mi; - model->setData(mi, !mi.data(Qt::UserRole + 4).toBool(), Qt::UserRole + 4); - mi = p.child(++row, 1); - } - bool cc = cmi.data(Qt::UserRole + 3).toBool(); - qulonglong cv = cmi.data(Qt::UserRole).toULongLong(); - //qDebug() << "*****"; - if (cc && cv == 0) { - val = 0; - //qDebug() << "null" << cv; - } else { - if (!cc && cv != 0) { - //qDebug() << "uncheck" << cv; - for (int i = 0; i < chldr.size(); ++i) { - if (chldr[i] == cmi) continue; - //qDebug() << (chldr[i].data(Qt::UserRole).toULongLong() & cv); - if (chldr[i].data(Qt::UserRole).toULongLong() & cv) - model->setData(chldr[i], false, Qt::UserRole + 3); - } - } - for (int i = 0; i < chldr.size(); ++i) { - //qDebug() << chldr[i].data(Qt::UserRole + 3).toBool(); - if (chldr[i].data(Qt::UserRole + 3).toBool()) - val |= chldr[i].data(Qt::UserRole).toULongLong(); - } - } - for (int i = 0; i < chldr.size(); ++i) { - if (chldr[i] == cmi) continue; - cv = chldr[i].data(Qt::UserRole).toULongLong(); - model->setData(chldr[i], ((val & cv) == cv && cv != 0) || (val == 0 && cv == 0), Qt::UserRole + 3); - } - //qDebug() << val; - model->setData(p, val, Qt::UserRole); - model->setData(p.sibling(p.row(), 1), val, Qt::UserRole); -} - - - -PropertyEditor::PropertyEditor(QWidget * parent): QTreeWidget(parent) { - object = 0; - active_ = false; - configTree(); - connect(this, SIGNAL(itemClicked(QTreeWidgetItem * , int)), this, SLOT(itemClicked(QTreeWidgetItem * , int))); - connect(this, SIGNAL(itemChanged(QTreeWidgetItem * , int)), this, SLOT(itemChanged(QTreeWidgetItem * , int))); -} - - -PropertyEditor::~PropertyEditor() { - -} - - -void PropertyEditor::changeEvent(QEvent * e) { - QTreeWidget::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - configTree(); - return; - } -} - - -void PropertyEditor::configTree() { - setColumnCount(2); - setRootIsDecorated(false); - setColumnWidth(0, 170); - setColumnWidth(1, 10); - header()->setStretchLastSection(true); - QStringList lbls; - lbls << tr("Property") << tr("Value"); - setHeaderLabels(lbls); - setAlternatingRowColors(true); - setItemDelegateForColumn(1, new Delegate()); - -} - - -void PropertyEditor::itemClicked(QTreeWidgetItem * item, int column) { - if (column == 0) - item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); - else { - item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable); - editItem(item, 1); - } -} - - -void PropertyEditor::itemChanged(QTreeWidgetItem * item, int column) { - if (!active_) return; - if (column != 1) return; - QVariant value = item->data(1, Qt::UserRole); - if (value.canConvert()) { - value = value.value().second; - } - object->setProperty(item->text(0).toLatin1(), value); -} - - -void PropertyEditor::rebuild() { - clear(); - configTree(); - if (object == 0) return; - active_ = false; - const QMetaObject * mo = object->metaObject(); - QList mol; - while (mo != 0) { - mol.push_front(mo); - mo = mo->superClass(); - } - int ps, pe; - QTreeWidgetItem * ti, * tli, * tfi; - QVariant value; -// QWidget * pw = 0; - int chue = 0; - QColor bc; - font_b = font(); - font_b.setBold(true); - foreach (const QMetaObject * o, mol) { - ps = o->propertyOffset(); - pe = o->propertyCount();// - ps; - //qDebug() << i->className() << ps << pe; - tli = new QTreeWidgetItem(); - tli->setText(0, o->className()); - tli->setFont(0, font_b); - setItemBackColor(tli, Qt::darkGray); - setItemForeColor(tli, Qt::white); - addTopLevelItem(tli); - setFirstItemColumnSpanned(tli, true); - tli->setExpanded(true); - for (int i = ps; i < pe; ++i) { - props << o->property(i); - value = o->property(i).read(object); - ti = new QTreeWidgetItem(); - ti->setSizeHint(1, QSize(20, 20)); - bc.setHsv(chue, 60, 245 + (i % 2) * 20 - 10); - setItemBackColor(ti, bc); - ti->setText(0, o->property(i).name()); - if (props.back().isFlagType()) { - QMetaEnum menum = props.back().enumerator(); - for (int j = 0; j < menum.keyCount(); ++j) { - tfi = new QTreeWidgetItem(); - tfi->setText(0, menum.key(j)); - tfi->setData(1, Qt::UserRole, menum.value(j)); - tfi->setData(1, Qt::UserRole + 1, "__flag"); - tfi->setData(1, Qt::UserRole + 2, value.toULongLong()); - tfi->setData(1, Qt::UserRole + 3, (value.toULongLong() & menum.value(j)) > 0); - tfi->setSizeHint(1, QSize(20, 20)); - bc.setHsv(chue, 60, 245 + ((i + j + 1) % 2) * 20 - 10); - setItemBackColor(tfi, bc); - ti->addChild(tfi); - } - ti->setData(0, Qt::UserRole, value); - ti->setData(1, Qt::UserRole, value); - ti->setData(1, Qt::UserRole + 2, "__flags"); - ti->setData(0, Qt::UserRole + 1, QVariant::fromValue(props.back())); - } - else if (props.back().isEnumType()) - value.setValue(PropertyValuePair(props.back(), value)); - //ti->setText(1, value.toString()); - ti->setData(1, Qt::UserRole, value); - tli->addChild(ti); - //const_cast(indexFromItem(ti, 1)).; - //if (pw != 0) setItemWidget(ti, 1, pw); - } - chue += 60; - chue %= 360; - } - active_ = true; -} - - -void PropertyEditor::refresh() { - -} diff --git a/test/qglview/propertyeditor.h b/test/qglview/propertyeditor.h deleted file mode 100644 index 6b26b2c..0000000 --- a/test/qglview/propertyeditor.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef PROPERTYEDITOR_H -#define PROPERTYEDITOR_H - -#include -#include -#include -#include -#include -#include -#include - - -class Delegate: public QStyledItemDelegate { - Q_OBJECT -public: - Delegate(QObject * parent = 0): QStyledItemDelegate() {ab = QBrush(QImage(":/icons/alpha.png"));} - - QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const {cmi = const_cast(index); return widgetForProperty(parent, index);} - void setEditorData(QWidget * editor, const QModelIndex & index) const {setWidgetProperty(editor, index.data(Qt::UserRole));} - void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const; - void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const {editor->setGeometry(option.rect);} - void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const; - -private: - QWidget * widgetForProperty(QWidget * parent, const QModelIndex & index) const; - void setWidgetProperty(QWidget * w, const QVariant & value) const; - const QVariant widgetProperty(QWidget * w) const; - QString pointString(const QPoint & p) const {return QString::number(p.x()) + " x " + QString::number(p.y());} - QString pointString(const QPointF & p) const {return QString::number(p.x()) + " x " + QString::number(p.y());} - QString rectString(const QRect & r) const {return QString::number(r.x()) + " x " + QString::number(r.y()) + " : " + - QString::number(r.width()) + " x " + QString::number(r.height());} - QString rectString(const QRectF & r) const {return QString::number(r.x()) + " x " + QString::number(r.y()) + " : " + - QString::number(r.width()) + " x " + QString::number(r.height());} - - QBrush ab; - mutable QModelIndex cmi; - -private slots: - void changed() {setModelData((QWidget * )sender(), const_cast(cmi.model()), cmi);} - void changedFlag(); - -}; - -typedef QPair PropertyValuePair; -Q_DECLARE_METATYPE (PropertyValuePair) -Q_DECLARE_METATYPE (QMetaProperty) - -class PropertyEditor: public QTreeWidget { - Q_OBJECT -public: - explicit PropertyEditor(QWidget * parent = 0); - virtual ~PropertyEditor(); - - void assignObject(QObject * o) {object = o; rebuild();} - -protected: - void changeEvent(QEvent * e); - -private: - void configTree(); - void setItemBackColor(QTreeWidgetItem * i, const QColor & c) {i->setBackgroundColor(0, c); i->setBackgroundColor(1, c);} - void setItemForeColor(QTreeWidgetItem * i, const QColor & c) {i->setForeground(0, c); i->setForeground(1, c);} - void rebuild(); - void refresh(); - - QObject * object; - QFont font_b; - QList props; - bool active_; - -private slots: - void itemClicked(QTreeWidgetItem * item, int column); - void itemChanged(QTreeWidgetItem * item, int column); - -}; - -#endif // PROPERTYEDITOR_H diff --git a/test/qglview/qglview.cpp b/test/qglview/qglview.cpp deleted file mode 100644 index ac184a8..0000000 --- a/test/qglview/qglview.cpp +++ /dev/null @@ -1,770 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "qglview.h" - -#include -#include - - -QGLView::QGLView(): OpenGLWindow(), fbo_selection(3) { -// setFrameShape(QFrame::NoFrame); -// setViewportUpdateMode(FullViewportUpdate); -// setCacheMode(CacheNone); -// setMouseTracking(true); -// setFocusPolicy(Qt::WheelFocus); -// setScene(new QGraphicsScene()); -// setInteractive(true); - setIcon(QIcon("://icons/qglview.png")); - timer = 0; - need_init_ = is_first_draw = true; - objects_.is_root = true; - objects_.view_ = this; - backColor_ = Qt::darkGray; - hoverHaloColor_ = QColor(195, 140, 255, 96); - selectionHaloColor_ = QColor(175, 255, 140); - ambientColor_ = QColor(10, 10, 10); - lastPos = QPoint(-1, -1); - lineWidth_ = 1.; - max_anisotropic = 1; - max_texture_chanels = 8; - cameraOrbit_ = lightEnabled_ = true; - shaders_supported = selecting_ = customMouseMove_ = false; - sel_button = Qt::LeftButton; - sel_mod = Qt::NoModifier; - renderer_ = nullptr; - fps_cnt = 0; - fps_tm = fps_ = 0.; - sel_obj = hov_obj = nullptr; - fogDensity_ = fogEnd_ = 1.; - fogStart_ = 0.; - fogMode_ = Exp; - hoverHaloFill_ = 0.333f; - selectionHaloFill_ = 0.5f; - //lmode = Simple; - shader_select = shader_halo = nullptr; - setFeature(qglMSAA, false); - setFeature(qglFXAA, false); - setFeature(qglLinearFiltering, true); - setFeature(qglAnisotropicLevel, 8); - setFeature(qglHDR, false); - setFeature(qglEyeAccomodationEnabled, false); - setFeature(qglEyeAccomodationTime, 16.); - setFeature(qglEyeAccomodationMaxSpeed, 0.2); - setFeature(qglBloomEnabled, false); - setFeature(qglBloomThreshold, 0.9); - setFeature(qglBloomFactor, 1.); - setFeature(qglBloomRadius, 8); - setFeature(qglMotionBlurEnabled, false); - setFeature(qglMotionBlurFactor, 1.); - setFeature(qglMotionBlurSteps, 8); - setFeature(qglShadowsEnabled, false); - setFeature(qglShadowsMapSize, 512); - setFeature(qglShadowsSoftEnabled, true); - setFeature(qglReflectionsEnabled, false); - setFeature(qglReflectionsBlur, true); - setFeature(qglSSAOEnabled, false); - setFeature(qglSSAORadius, 5); - setFeature(qglDepthOfFieldEnabled, false); - setFeature(qglDepthOfFieldAutoFocusEnabled, true); - setFeature(qglDepthOfFieldAutoFocusSpeed, 0.1); - setFeature(qglDepthOfFieldFocus, 1.); - setFeature(qglDepthOfFieldDiaphragm, 8.); - mouse_first = mouseSelect_ = hoverHalo_ = selectionHalo_ = true; - mouseRotate_ = true; - fogEnabled_ = is_init = grabMouse_ = shaders_bind = changed_ = false; - rmode = GLObjectBase::Fill; - sel_mode = QGLView::SingleSelection; -// sel_pen = QPen(Qt::black, 1, Qt::DashLine); -// sel_brush = QBrush(QColor(170, 100, 255, 120)); - camera()->setAim(QVector3D()); - camera()->setPos(QVector3D(2, 2, 2)); - camera()->setName("Camera"); - addObject(camera()); - emit cameraPosChanged(camera()->pos()); - //camera().aim_ = camera().pos_; - ktm_.restart(); -} - - -QGLView::~QGLView() { - stop(); - if (shader_select) delete shader_select; - if (shader_halo) delete shader_halo; -} - - -void QGLView::stop() { - if (timer) killTimer(timer); -} - - -void QGLView::start(float freq) { - timer = startTimer(freq <= 0.f ? 0 : int(1000.f / freq)); -} - - -GLRendererBase * QGLView::renderer() { - return renderer_; -} - - -void QGLView::setRenderer(GLRendererBase * r, GLRendererBase ** prev) { - if (prev != nullptr) *prev = renderer_; - renderer_ = r; -} - - -void QGLView::addObject(GLObjectBase * o) { - objects_.addChild(o); - o->setView(this); - collectLights(); - QList cl = o->children(true); - cl << o; - foreach (GLObjectBase * i, cl) { - emit objectAdded(i); - } - if (is_init) { - o->init(); - } -} - - -int QGLView::objectsCount(bool all) { - if (!all) return objects_.childCount(); - int cnt = 0; - objectsCountInternal(&cnt, &objects_); - return cnt; -} - - -void QGLView::removeObject(GLObjectBase * o, bool inChildren) { - o->setView(nullptr); - if (inChildren) - removeObjectInternal(o, &objects_); - else - objects_.removeChild(o); - objectDeleted(o); -} - - -void QGLView::removeObject(GLObjectBase & o, bool inChildren) { - removeObject(&o, inChildren); -} - - -void QGLView::clearObjects(bool deleteAll) { - removeObject(camera_); - objects_.clearChildren(deleteAll); - addObject(camera()); - selectObject(nullptr); - hov_obj = nullptr; -} - - -QList QGLView::objects(bool all) { - return objects_.children(all); -} - - -int QGLView::lightsCount() const { - return lights_.size(); -} - - -void QGLView::removeLight(int index) { - removeObject(lights_.at(index)); - lights_.removeAt(index); -} - - -void QGLView::removeLight(Light * l) { - foreach (Light * i, lights_) - if (i == l) removeObject(i); - lights_.removeAll(l); -} - - -void QGLView::clearLights(bool deleteAll) { - if (deleteAll) - foreach (Light * i, lights_) delete i; - lights_.clear(); -} - - -void QGLView::addTexture(const QString & path) { - textures_manager->addTexture(path); -} - - -void QGLView::addAnimation(const QString & dir, const QString & name) { - textures_manager->addAnimation(dir, name); -} - - -Light * QGLView::light(int index) { - return lights_[index]; -} - - -Light * QGLView::light(const QString & name) { - foreach (Light * i, lights_) - if (i->name_ == name) return i; - return nullptr; -} - - -void QGLView::selectObject(GLObjectBase * o) { - if (o == sel_obj) return; - GLObjectBase * pso = sel_obj; - sel_obj = o; - emit selectionChanged(sel_obj, pso); -} - - -void QGLView::resizeEvent(QResizeEvent * e) { - renderLater(); -} - -void QGLView::timerEvent(QTimerEvent *) { - renderNow(); - if (ktm_.elapsed() < QApplication::keyboardInputInterval()) return; - Qt::KeyboardModifiers km = QApplication::keyboardModifiers(); - foreach (int i, keys_) - emit keyEvent((Qt::Key)i, km); -} - - -void QGLView::render() { - resizeGL(width(), height()); - QRect g_rect(QPoint(), size()); - emit glBeforePaint(); - //qDebug() << "paintGL"; - //QMutexLocker ml_v(&v_mutex); - glEnable(GL_CULL_FACE); - //glDisable(GL_CULL_FACE); - camera()->apply(aspect); - //objects_.preparePos(camera()); - start_rp.cam_offset_matrix = camera()->offsetMatrix(); - start_rp.proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX); - start_rp.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX); - //objects_.buildTransform(); - - /// Selection detect - //glClearFramebuffer(QColor(100, 0, 0, 0)); - if (mouseSelect_) { - glReleaseTextures(); - glEnableDepth(); - glDisable(GL_TEXTURE_1D); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_CUBE_MAP); - glDisable(GL_MULTISAMPLE); - glDisable(GL_LIGHTING); - glDisable(GL_BLEND); - glDisable(GL_ALPHA_TEST); - glDisable(GL_RESCALE_NORMAL); - glDisableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - fbo_selection.bind(); - fbo_selection.setWriteBuffer(0); - glClearFramebuffer(QColor(0, 0, 0, 0)); - if (shaders_supported && shader_select->isLinked()) shader_select->bind(); - renderSelection(); - if (shaders_supported && shader_select->isLinked()) shader_select->release(); - uchar cgid[4] = {0, 0, 0, 0}; - uint iid = 0; - GLObjectBase * so = nullptr; - if (!g_rect.contains(lastPos)) { - if (hov_obj != nullptr) { - hov_obj = nullptr; - emit hoverChanged(nullptr, hov_obj); - } - } else { - glReadPixels(lastPos.x(), height() - lastPos.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, cgid); - iid = uint(cgid[0] << 24) | uint(cgid[1] << 16) | uint(cgid[2] << 8) | cgid[3]; - so = ids.value(iid, nullptr); - //qDebug() <name() << cgid[3]; - } - if (selectionHalo_ && sel_obj) { - fbo_selection.setWriteBuffer(2); - renderHalo(sel_obj, qHash((quint64)sel_obj), selectionHaloColor_, selectionHaloFill_); - } - if (hoverHalo_ && hov_obj) { - fbo_selection.setWriteBuffer(1); - renderHalo(hov_obj, iid, hoverHaloColor_, hoverHaloFill_); - } - fbo_selection.release(); - glEnableDepth(); - /*glEnableClientState(GL_NORMAL_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY);*/ - } - - camera()->apply(aspect); - start_rp.cam_offset_matrix = camera()->offsetMatrix(); - cur_mvpm = start_rp.proj_matrix * start_rp.view_matrix * start_rp.cam_offset_matrix; - //objects_.preparePos(camera()); - - static GLRendererBase * prev_rend = nullptr; - glShadeModel(GL_SMOOTH); - if (prev_rend != renderer_) { - prev_rend = renderer_; - if (renderer_ != nullptr) { - renderer_->init(width(), height()); - renderer_->resize(width(), height()); - renderer_->reloadShaders(); - } - } - emit glBeginPaint(); - if (renderer_ != nullptr) { - renderer_->rp.prepare(); - renderer_->prepareScene(); - renderer_->renderScene(); - } - emit glPainting(); - if (selectionHalo_ || hoverHalo_) { - glReleaseTextures(); - glUseProgram(0); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glActiveTexture(GL_TEXTURE0); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glDisable(GL_TEXTURE_CUBE_MAP); - glDisable(GL_LIGHTING); - glDisableDepth(); - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - if (selectionHalo_ && sel_obj) { - glBindTexture(GL_TEXTURE_2D, fbo_selection.colorTexture(2)); - //qDebug() << "draw sel"; - glDrawQuad(); - } - if (hoverHalo_ && hov_obj) { - glBindTexture(GL_TEXTURE_2D, fbo_selection.colorTexture(1)); - //qDebug() << "draw hover"; - glDrawQuad(); - } - } - - glUseProgram(0); - glResetAllTransforms(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - - emit glEndPaint(); - - /*releaseShaders(); - glActiveTextureChannel(0); - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4f(0.3, 0.5, 0.8, 0.5); - glResetAllTransforms(); - glBegin(GL_QUADS); - glTexCoord2f(0.f, 0.f); glVertex2f(-1.f, -1.f); - glTexCoord2f(1.f, 0.f); glVertex2f(1.f, -1.); - glTexCoord2f(1.f, 1.f); glVertex2f(1.f, 1.f); - glTexCoord2f(0.f, 1.f); glVertex2f(-1.f, 1.f); - glEnd();*/ - /* - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glDisable(GL_LIGHTING); - glActiveTextureChannel(0); - glBindTexture(GL_TEXTURE_2D, fbo->texture()); - glDisable(GL_DEPTH_TEST); - glBegin(GL_QUADS); - glColor3f(1.f, 1.f, 1.f); - glTexCoord2f(0.f, 0.f); glVertex2f(-1.f, -1.f); - glTexCoord2f(0.f, 1.f); glVertex2f(-1.f, 1.f); - glTexCoord2f(1.f, 1.f); glVertex2f(1.f, 1.f); - glTexCoord2f(1.f, 0.f); glVertex2f(1.f, -1.); - glEnd(); - glEnable(GL_DEPTH_TEST);*/ - fps_tm += time.elapsed(); - time.restart(); - fps_cnt++; - if (fps_tm < 1000.) return; - fps_ = fps_cnt / fps_tm * 1000.; - fps_tm = 0.; - fps_cnt = 0; -} - - -void QGLView::initialize() { - //initializeOpenGLFunctions(); - glEnable(GL_TEXTURE_MAX_ANISOTROPY_EXT); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glEnableDepth(); - glEnable(GL_CULL_FACE); - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glActiveTexture(GL_TEXTURE0 + 3); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glActiveTexture(GL_TEXTURE0); - glShadeModel(GL_SMOOTH); - glCullFace(GL_BACK); - glEnable(GL_COLOR_MATERIAL); - glColorMaterial(GL_FRONT, GL_DIFFUSE); - - textures_manager->loadTextures(); - objects_.initInternal(); - checkCaps(); - - shader_select = new QOpenGLShaderProgram(context()); - shader_halo = new QOpenGLShaderProgram(context()); - reloadThisShaders(); - is_init = true; - //resizeGL(width(), height()); - need_init_ = false; - emit glInitializeDone(); -} - - -void QGLView::renderHalo(const GLObjectBase * obj, const uint iid, const QColor & color, const float & fill) { - if (!shaders_supported) return; - if (!shader_halo) return; - if (!shader_halo->isLinked()) return; - if (obj) { - shader_halo->bind(); - shader_halo->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_selection.colorTexture()); - shader_halo->setUniformValue("t0", 0); - shader_halo->setUniformValue("dt", QVector2D(1.f / width(), 1.f / height())); - shader_halo->setUniformValue("selected", QVector4D(float((iid >> 24) & 0xFF) / 255.f, - float((iid >> 16) & 0xFF) / 255.f, - float((iid >> 8) & 0xFF) / 255.f, - float(iid & 0xFF) / 255.f)); - shader_halo->setUniformValue("color", color); - shader_halo->setUniformValue("fill", GLfloat(fill)); - //qDebug() << "render halo" << iid << shader_halo->log() << shader_halo->programId(); - glDisableDepth(); - glDrawQuad(shader_halo); - glDepthMask(GL_TRUE); - //glFlush(); - shader_halo->release(); - } else { - glClearFramebuffer(Qt::black, false); - } -} - - -void QGLView::renderSelection() { -// cid = 1; - ids.clear(); - if (shaders_supported) { - if (shader_select) { - if (shader_select->isLinked()) { - sh_id_loc = shader_select->uniformLocation("id"); - shader_select->setUniformValue("z_far", GLfloat(depthEnd())); - shader_select->setUniformValue("z_near", GLfloat(depthStart())); - } - } - } - //qDebug() << sh_id_loc; - start_rp.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX); - glPushMatrix(); - renderSingleSelection(objects_); - glPopMatrix(); -} - - -void QGLView::renderSingleSelection(GLObjectBase & o) { - if (!o.isInit()) { - o.init(); - o.loadTextures(); - } - if (!o.visible_ || !o.select_) return; - QMatrix4x4 curview = start_rp.view_matrix * start_rp.cam_offset_matrix * o.itransform_; - uint id = qHash((quint64)&o); - ids.insert(id, &o); - glLineWidth(o.line_width > 0.f ? o.line_width : lineWidth_); - glPointSize(o.line_width > 0.f ? o.line_width : lineWidth_); - if (shaders_supported){ - if (shader_select) { - if (shader_select->isLinked()) { - setUniformMatrices(shader_select, start_rp.proj_matrix, curview); - shader_select->setUniformValue(sh_id_loc, QVector4D(float((id >> 24) & 0xFF) / 255.f, - float((id >> 16) & 0xFF) / 255.f, - float((id >> 8) & 0xFF) / 255.f, - float(id & 0xFF) / 255.f)); - } - } - } else { - setGLMatrix(curview); - glColor4f(float((id >> 24) & 0xFF) / 255.f, - float((id >> 16) & 0xFF) / 255.f, - float((id >> 8) & 0xFF) / 255.f, - float(id & 0xFF) / 255.f); - } - //qDebug() << o.name() << "assign to" << sh_id_loc << cid; - //glColor4f(float((cid >> 24) & 0xFF) / 255.f, float((cid >> 16) & 0xFF) / 255.f, float((cid >> 8) & 0xFF) / 255.f, float(cid & 0xFF) / 255.f); -// ++cid; - o.draw(nullptr, true); - foreach (GLObjectBase * i, o.children_) - renderSingleSelection(*i); -} - - -void QGLView::collectLights() { - lights_.clear(); - collectObjectLights(&objects_); -} - - -void QGLView::objectDeleted(GLObjectBase * o) { - //qDebug() << "del" << o; - if (sel_obj == o) selectObject(nullptr); - if (hov_obj == o) hov_obj = nullptr; -} - - -void QGLView::collectObjectLights(GLObjectBase * o) { - if (o->type_ == GLObjectBase::glLight) { - lights_ << globject_cast(o); - o->view_ = this; - } - foreach (GLObjectBase * i, o->children()) - collectObjectLights(i); -} - - -void QGLView::objectsCountInternal(int * cnt, GLObjectBase * where) { - ++(*cnt); - foreach (GLObjectBase * i, where->children_) - objectsCountInternal(cnt, i); -} - - -void QGLView::removeObjectInternal(GLObjectBase * o, GLObjectBase * where) { - foreach (GLObjectBase * i, where->children_) { - if (o == i) - where->removeChild(i); - else - removeObjectInternal(o, i); - objectDeleted(i); - } -} - - -void QGLView::checkCaps() { - glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropic); - //glGetIntegerv(GL_MAX_TEXTURE_UNITS, &max_texture_chanels); - //qDebug() << max_texture_chanels; - //qDebug() << max_texture_chanels; - shaders_supported = QOpenGLShaderProgram::hasOpenGLShaderPrograms(); -} - - -void QGLView::reloadThisShaders() { - if (!shaders_supported) return; - loadShaders(shader_select, "selection", "://shaders"); - loadShaders(shader_halo, "selection_halo", "://shaders"); - //loadShaders(shader_rope, "rope", "://shaders"); -} - -void QGLView::glReleaseTextures(int channels) { - for (int i = channels - 1; i >= 0; --i) { - glActiveTexture(GL_TEXTURE0 + i); - glBindTexture(GL_TEXTURE_2D, 0); - glBindTexture(GL_TEXTURE_CUBE_MAP, 0); - } -} - - -void QGLView::applyFog() { - GLfloat fog_col[4] = {float(fogColor_.redF()), float(fogColor_.greenF()), float(fogColor_.blueF()), .0f}; - if (fogEnabled_) { - glEnable(GL_FOG); - glFogf(GL_FOG_DENSITY, fogDensity_); - glFogf(GL_FOG_START, fogStart_); - glFogf(GL_FOG_END, fogEnd_); - glFogi(GL_FOG_MODE, fogMode_); - fog_col[0] = fogColor_.redF(); - fog_col[1] = fogColor_.greenF(); - fog_col[2] = fogColor_.blueF(); - glFogfv(GL_FOG_COLOR, fog_col); - } else glDisable(GL_FOG); -} - - -void QGLView::resizeGL(int width, int height) { - if (!is_init) return; - if (width <= 0 || height <= 0) return; - if (prev_size == QSize(width, height)) return; - prev_size = QSize(width, height); - aspect = float(width) / float(height); - if (renderer_) renderer_->resize(width, height); - mouse_first = true; - //qDebug() << "resize" << width << height; - fbo_selection.resize(width, height); - iaspect = (aspect == 0.f) ? 0. : 1 / aspect; - glViewport(0, 0, width, height); - emit glResize(width, height); -} - - -void QGLView::mouseReleaseEvent(QMouseEvent * e) { -// qDebug() << "mouseReleaseEvent" << e << isActive(); -// QGraphicsView::mouseReleaseEvent(e); - //setCursor(QCursor(Qt::ArrowCursor)); - selecting_ = false; - if (mouseSelect_ && e->button() == Qt::LeftButton) { - if ((lastPos - downPos).manhattanLength() < 8) { - if (sel_obj != hov_obj) - selectObject(hov_obj); - } - } - emit glMouseReleaseEvent(e); -} - - -void QGLView::mousePressEvent(QMouseEvent * e) { -// qDebug() << "mousePressEvent" << e << isActive(); -// QGraphicsView::mousePressEvent(e); -// mouseThis_ = (scene()->itemAt(mapToScene(e->pos()) , QTransform() ) == 0); - selecting_ = false; - if (!QRect(QPoint(), size()).contains(e->pos())) return; - /// TODO select by rect - //if (e->button() == sel_button && e->modifiers() == sel_mod) - // selecting_ = true; - lastPos = e->pos(); - downPos = lastPos; - //qDebug() << mouseThis_; - emit glMousePressEvent(e); -} - - -void QGLView::mouseMoveEvent(QMouseEvent * e) { -// qDebug() << "mouseMoveEvent" << e << isActive(); -// QGraphicsView::mouseMoveEvent(e); - //lastPos = e->pos(); - if (selecting_) { - return; - } -// if (!QRect(QPoint(), size()).contains(e->pos())) return; - //if (scene()->itemAt(mapToScene(e->pos())) != 0) return; - ///qDebug() << e->x() << e->y(); - QRect g_rect(QPoint(), size()); - if (mouseRotate_) { - float dx = e->x() - lastPos.x(); - float dy = e->y() - lastPos.y(); - if (e->buttons() & Qt::LeftButton) { - //camera().angle_z += dx / 4.; - //camera().angle_xy += dy / 4.; - if (cameraOrbit_) { - camera()->orbitZ(dx / 4.f); - camera()->orbitXY(dy / 4.f); - } else { - camera()->rotateZ(dx / 4.f); - camera()->rotateXY(dy / 4.f); - } - emit cameraPosChanged(camera()->pos()); - } else if (e->buttons() & Qt::RightButton) { - float ad = camera()->distance(); - camera()->moveLeft(dx / 1000.f * ad); - camera()->moveUp(dy / 1000.f * ad); - //camera().pos.setX(camera().pos.x() + camera().pos.z() * dx / 500.); - //camera().pos.setY(camera().pos.y() - camera().pos.z() * dy / 500.); - emit cameraPosChanged(camera()->pos()); - } - //lights[0]->pos_ = camera().pos(); - } - if (customMouseMove_) emit customMouseMoveEvent(e->pos(), lastPos, e->buttons()); - lastPos = e->pos(); - if (grabMouse_) { - //if (!isrunning) return; - QCursor::setPos(mapToGlobal(QRect(QPoint(), size()).center())); - static bool mouse_sec = false; - if (mouse_sec) { - mouse_sec = false; - return; - } - if (mouse_first) { - mouse_first = false; - mouse_sec = true; - //qDebug() << "first" << e->pos(); - return; - } - lastPos = g_rect.center(); - int dx = e->x() - lastPos.x(); - int dy = e->y() - lastPos.y(); - emit glMouseMoveEvent(new QMouseEvent(QEvent::MouseMove, QPoint(dx, dy), e->button(), e->buttons(), e->modifiers())); - return; - } - emit glMouseMoveEvent(e); -} - - -void QGLView::wheelEvent(QWheelEvent * e) { - if (mouseRotate_) { - if (e->delta() > 0) camera()->flyCloser(0.1f); //camera().pos.setZ(camera().pos.z() - 0.1 * camera().pos.z()); - if (e->delta() < 0) camera()->flyFarer(0.1f); //camera().pos.setZ(camera().pos.z() + 0.1 * camera().pos.z()); - emit cameraPosChanged(camera()->pos()); - } - emit glWheelEvent(e); -} - - -void QGLView::leaveEvent(QEvent * ) { - lastPos = QPoint(-1, -1); - //qDebug() << lastPos; -} - - -void QGLView::keyPressEvent(QKeyEvent * e) { - emit glKeyPressEvent(e); - if (e->key() > 0) keys_.insert(e->key()); - if (e->key() == Qt::Key_F11) { - emit doubleClick(); - } -} - - -void QGLView::keyReleaseEvent(QKeyEvent * e) { - emit glKeyReleaseEvent(e); - keys_.remove(e->key()); -} - - -void QGLView::focusOutEvent(QFocusEvent *) { - keys_.clear(); -} - - -void QGLView::mouseDoubleClickEvent(QMouseEvent * e) { - if (e->buttons().testFlag(Qt::MidButton)) - emit doubleClick(); -} diff --git a/test/qglview/qglview.h b/test/qglview/qglview.h deleted file mode 100644 index 845e776..0000000 --- a/test/qglview/qglview.h +++ /dev/null @@ -1,296 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef QGLVIEW_H -#define QGLVIEW_H - -#include "openglwindow.h" -#include "glframebuffer.h" -#include "glprimitives.h" -#include "glparticles_system.h" -#include "glrendererbase.h" -#include - - -class QGLView: public OpenGLWindow, public QGLViewBase -{ - friend class GLRendererBase; - friend class GLObjectBase; - Q_OBJECT - Q_PROPERTY (QColor backColor READ backColor WRITE setBackColor) - Q_PROPERTY (float lineWidth READ lineWidth WRITE setLineWidth) - Q_PROPERTY (float FOV READ FOV WRITE setFOV) - Q_PROPERTY (float depthStart READ depthStart WRITE setDepthStart) - Q_PROPERTY (float depthEnd READ depthEnd WRITE setDepthEnd) - Q_PROPERTY (QColor ambientColor READ ambientColor WRITE setAmbientColor) - Q_PROPERTY (QColor fogColor READ fogColor WRITE setFogColor) - Q_PROPERTY (float fogDensity READ fogDensity WRITE setFogDensity) - Q_PROPERTY (float fogStart READ fogStart WRITE setFogStart) - Q_PROPERTY (float fogEnd READ fogEnd WRITE setFogEnd) - Q_PROPERTY (FogMode fogMode READ fogMode WRITE setFogMode) - Q_PROPERTY (bool fogEnabled READ isFogEnabled WRITE setFogEnabled) - Q_PROPERTY (int renderMode READ renderMode WRITE setRenderMode) - Q_PROPERTY (bool grabMouse READ isGrabMouseEnabled WRITE setGrabMouseEnabled) - Q_PROPERTY (bool mouseRotate READ isMouseRotateEnabled WRITE setMouseRotateEnabled) - Q_PROPERTY (bool mouseSelection READ isMouseSelectionEnabled WRITE setMouseSelectionEnabled) - Q_PROPERTY (bool cameraOrbit READ isCameraOrbit WRITE setCameraOrbit) - Q_PROPERTY (bool hoverHalo READ isHoverHaloEnabled WRITE setHoverHaloEnabled) - Q_PROPERTY (QColor hoverHaloColor READ hoverHaloColor WRITE setHoverHaloColor) - Q_PROPERTY (float hoverHaloFillAlpha READ hoverHaloFillAlpha WRITE setHoverHaloFillAlpha) - Q_PROPERTY (bool selectionHalo READ isSelectionHaloEnabled WRITE setSelectionHaloEnabled) - Q_PROPERTY (QColor selectionHaloColor READ selectionHaloColor WRITE setSelectionHaloColor) - Q_PROPERTY (float selectionHaloFillAlpha READ selectionHaloFillAlpha WRITE setSelectionHaloFillAlpha) - Q_PROPERTY (Qt::MouseButton selectionButton READ selectionButton WRITE setSelectionButton) - Q_PROPERTY (Qt::KeyboardModifier selectionModifier READ selectionModifier WRITE setSelectionModifier) - Q_PROPERTY (SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) - -public: - QGLView(); - virtual ~QGLView(); - - enum FogMode {Linear = GL_LINEAR, Exp = GL_EXP, Exp2 = GL_EXP2}; - enum SelectionMode {NoSelection, SingleSelection, MultiSelection}; - enum Feature { - qglMSAA, - qglFXAA, - qglLinearFiltering, - qglAnisotropicLevel, - qglHDR, - qglEyeAccomodationEnabled, - qglEyeAccomodationTime, - qglEyeAccomodationMaxSpeed, - qglBloomEnabled, - qglBloomThreshold, - qglBloomFactor, - qglBloomRadius, - qglMotionBlurEnabled, - qglMotionBlurFactor, - qglMotionBlurSteps, - qglShadowsEnabled, - qglShadowsMapSize, - qglShadowsSoftEnabled, - qglReflectionsEnabled, - qglReflectionsBlur, - qglSSAOEnabled, - qglSSAORadius, - qglDepthOfFieldEnabled, - qglDepthOfFieldAutoFocusEnabled, - qglDepthOfFieldAutoFocusSpeed, - qglDepthOfFieldFocus, - qglDepthOfFieldDiaphragm - }; - - Q_ENUMS (FogMode) - Q_ENUMS (SelectionMode) - - void stop(); - void start(float freq = 60.); - - GLRendererBase * renderer(); - void setRenderer(GLRendererBase * r, GLRendererBase ** prev = nullptr); - - QColor backColor() const {return backColor_;} - float lineWidth() const {return lineWidth_;} - float FOV() const {return camera()->fov_;} - float depthStart() const {return camera()->depth_start;} - float depthEnd() const {return camera()->depth_end;} - float currentFPS() const {return fps_;} - int maxAnisotropicLevel() const {return max_anisotropic;} - - QColor ambientColor() const {return ambientColor_;} - QColor fogColor() const {return fogColor_;} - float fogDensity() const {return fogDensity_;} - float fogStart() const {return fogStart_;} - float fogEnd() const {return fogEnd_;} - FogMode fogMode() const {return fogMode_;} - bool isFogEnabled() const {return fogEnabled_;} - bool isLightEnabled() const {return lightEnabled_;} - bool isGrabMouseEnabled() const {return grabMouse_;} - bool isMouseRotateEnabled() const {return mouseRotate_;} - bool isMouseSelectionEnabled() const {return mouseSelect_;} - bool isCameraOrbit() const {return cameraOrbit_;} - bool isHoverHaloEnabled() const {return hoverHalo_;} - QColor hoverHaloColor() const {return hoverHaloColor_;} - float hoverHaloFillAlpha() const {return hoverHaloFill_;} - bool isSelectionHaloEnabled() const {return selectionHalo_;} - QColor selectionHaloColor() const {return selectionHaloColor_;} - float selectionHaloFillAlpha() const {return selectionHaloFill_;} - - QVariant feature(Feature f) const {return features_.value(int(f));} - QVariant setFeature(Feature f, const QVariant & value) {QVariant ret = features_.value(int(f)); features_[int(f)] = value; return ret;} - bool isFeatureEnabled(Feature f) const {return features_[int(f)].toBool();} - - int renderMode() const {return (int)rmode;} - void setRenderMode(int mode) {rmode = (GLObjectBase::RenderMode)mode;} - - void addObject(GLObjectBase * o); -// void addObject(GLObjectBase & o) {addObject(&o);} - int objectsCount(bool all = false); - void removeObject(GLObjectBase * o, bool inChildren = true); - void removeObject(GLObjectBase & o, bool inChildren = true); - void clearObjects(bool deleteAll = false); - QList objects(bool all = false); - - int lightsCount() const; - void removeLight(int index); - void removeLight(Light * l); - void clearLights(bool deleteAll = false); - QList lights() {return lights_;} - - void addTexture(const QString & path); - void addAnimation(const QString & dir, const QString & name); - - const GLObjectBase & rootObject() {return objects_;} - GLObjectBase * object(int index) {return objects_.child(index);} - GLObjectBase * object(const QString & name) {return objects_.child(name);} - Light * light(int index); - Light * light(const QString & name); - - SelectionMode selectionMode() const {return sel_mode;} - Qt::MouseButton selectionButton() const {return sel_button;} - Qt::KeyboardModifier selectionModifier() const {return sel_mod;} - - void setSelectionMode(SelectionMode v) {sel_mode = v;} - void setSelectionButton(Qt::MouseButton v) {sel_button = v;} - void setSelectionModifier(Qt::KeyboardModifier v) {sel_mod = v;} - void selectObject(GLObjectBase * o); - GLObjectBase * selectedObject() const {return sel_obj;} - - void glReleaseTextures(int channels = 8); - - GLfloat aspect, iaspect; - QMatrix4x4 cur_mvpm; - -protected: - void render(); - void resizeEvent(QResizeEvent * e); - - void timerEvent(QTimerEvent * ); - void initialize(); - void resizeGL(int width, int height); - void mousePressEvent(QMouseEvent * e); - void mouseMoveEvent(QMouseEvent * e); - void mouseReleaseEvent(QMouseEvent * e); - void wheelEvent(QWheelEvent * e); - void leaveEvent(QEvent * ); - void mouseDoubleClickEvent(QMouseEvent * e); - - void keyPressEvent(QKeyEvent * e); - void keyReleaseEvent(QKeyEvent * e); - void focusOutEvent(QFocusEvent *); - - void applyFog(); - void renderSelection(); - - void checkCaps(); - void collectLights(); - -private: - void objectDeleted(GLObjectBase * o); - void collectObjectLights(GLObjectBase * o); - void objectsCountInternal(int * cnt, GLObjectBase * where); - void removeObjectInternal(GLObjectBase * o, GLObjectBase * where); - void renderSingleSelection(GLObjectBase & o); - //void renderSingleShadow(GLObjectBase & o); - void renderHalo(const GLObjectBase * obj, const uint iid, const QColor & color, const float & fill); - void reloadThisShaders(); - void processKeys(); - bool setupViewport(); - - QPoint lastPos, downPos; - GLObjectBase objects_; - QList lights_; -// uint cid; - QHash ids; - QSet keys_; - FogMode fogMode_; - QColor backColor_, fogColor_, ambientColor_, hoverHaloColor_, selectionHaloColor_; - QTime time, ktm_; - GLint max_anisotropic, max_texture_chanels; - GLObjectBase::RenderMode rmode; - GLObjectBase * sel_obj, * hov_obj; - GLFramebuffer fbo_selection; - QOpenGLShaderProgram * shader_select, * shader_halo; - GLRendererBase * renderer_; - SelectionMode sel_mode; - Qt::MouseButton sel_button; - Qt::KeyboardModifier sel_mod; - GLRendererBase::RenderingParameters start_rp; - QHash features_; - QSize prev_size; - float lineWidth_; - float fogDensity_, fogStart_, fogEnd_, fps_, fps_tm, hoverHaloFill_, selectionHaloFill_, m_motionBlurFactor; - int timer, fps_cnt, sh_id_loc; - bool is_first_draw, is_init, fogEnabled_, lightEnabled_, grabMouse_, mouse_first, mouseRotate_, mouseSelect_, customMouseMove_; - bool shaders_supported, changed_, cameraOrbit_, need_init_; - bool hoverHalo_, selectionHalo_, shaders_bind, selecting_; - -public slots: - void setBackColor(const QColor & arg) {backColor_ = arg;} - void setLineWidth(const float & arg) {lineWidth_ = arg;} - void setFOV(const float & arg) {camera()->fov_ = arg;} - void setDepthStart(const float & arg) {camera()->depth_start = arg;} - void setDepthEnd(const float & arg) {camera()->depth_end = arg;} - void setAmbientColor(const QColor & arg) {ambientColor_ = arg;} - void setFogColor(const QColor & arg) {fogColor_ = arg;} - void setFogDensity(const float & arg) {fogDensity_ = arg;} - void setFogStart(const float & arg) {fogStart_ = arg;} - void setFogEnd(const float & arg) {fogEnd_ = arg;} - void setFogMode(const FogMode & arg) {fogMode_ = arg;} - void setFogEnabled(const bool & arg) {fogEnabled_ = arg;} - void setLightEnabled(const bool & arg) {lightEnabled_ = arg;} - void setGrabMouseEnabled(const bool & arg) {grabMouse_ = arg; mouse_first = true;} - void setMouseRotateEnabled(const bool & arg) {mouseRotate_ = arg;} - void setMouseSelectionEnabled(const bool & arg) {mouseSelect_ = arg;} - void setCustomMouseMove(const bool & arg) {customMouseMove_ = arg;} - void setCameraOrbit(const bool & arg) {cameraOrbit_ = arg;} - void setHoverHaloEnabled(const bool & arg) {hoverHalo_ = arg;} - void setHoverHaloColor(const QColor & arg) {hoverHaloColor_ = arg;} - void setHoverHaloFillAlpha(const float & arg) {hoverHaloFill_ = arg;} - void setSelectionHaloEnabled(const bool & arg) {selectionHalo_ = arg;} - void setSelectionHaloColor(const QColor & arg) {selectionHaloColor_ = arg;} - void setSelectionHaloFillAlpha(const float & arg) {selectionHaloFill_ = arg;} - - void reloadShaders() {if (renderer_ != nullptr) renderer_->reloadShaders(); reloadThisShaders();} - void deselect() {sel_obj = nullptr;} - -signals: - void glBeforePaint(); - void glBeginPaint(); - void glPainting(); - void glEndPaint(); - void glKeyPressEvent(QKeyEvent * e); - void glKeyReleaseEvent(QKeyEvent * e); - void glMousePressEvent(QMouseEvent * e); - void glMouseMoveEvent(QMouseEvent * e); - void glMouseReleaseEvent(QMouseEvent * e); - void glWheelEvent(QWheelEvent * e); - void glResize(int, int); - void glInitializeDone(); - void cameraPosChanged(QVector3D pos); - void keyEvent(Qt::Key key, Qt::KeyboardModifiers mod); - void customMouseMoveEvent(QPoint curpos, QPoint lastpos, Qt::MouseButtons buttons); - - void hoverChanged(GLObjectBase * cur, GLObjectBase * prev); - void selectionChanged(GLObjectBase * cur, GLObjectBase * prev); - void objectAdded(GLObjectBase * ); - void doubleClick(); - -}; - -#endif // QGLVIEW_H diff --git a/test/qglview/qglview.qrc b/test/qglview/qglview.qrc deleted file mode 100644 index c50a430..0000000 --- a/test/qglview/qglview.qrc +++ /dev/null @@ -1,76 +0,0 @@ - - - icons/document-save-all.png - icons/document-new.png - icons/document-import.png - icons/dialog-close.png - icons/edit-clear.png - icons/edit-guides.png - icons/type-camera.png - icons/type-geo.png - icons/type-light.png - icons/view-grid.png - icons/zoom-fit-best.png - icons/configure.png - icons/document-save.png - icons/edit-clear-locationbar-rtl.png - icons/edit-find.png - icons/list-add.png - icons/edit-delete.png - icons/item.png - icons/node-add.png - icons/application-exit.png - icons/document-open.png - icons/document-save-.png - icons/node.png - icons/edit-copy.png - icons/edit-paste.png - icons/qglview.png - shaders/bloom_0.frag - shaders/bloom_1.frag - shaders/bloom_pass_0.frag - shaders/bloom_pass_0.vert - shaders/bloom_pass_1.frag - shaders/bloom_pass_1.vert - shaders/downscale.frag - shaders/downscale.vert - shaders/dsl_pass_0.frag - shaders/dsl_pass_0.vert - shaders/dsl_pass_1.frag - shaders/dsl_pass_1.vert - shaders/dsl_pass_2.frag - shaders/dsl_pass_2.vert - shaders/fbo_add.frag - shaders/fbo_add.vert - shaders/FXAA.frag - shaders/FXAA.vert - shaders/hdr.frag - shaders/hdr.vert - shaders/hdr_scale_0.frag - shaders/hdr_scale_1.frag - shaders/light_models.frag - shaders/motion_blur.frag - shaders/motion_blur.vert - shaders/post.frag - shaders/ppl.frag - shaders/ppl.vert - shaders/selection.frag - shaders/selection.vert - shaders/selection_halo.frag - shaders/selection_halo.vert - shaders/shadow.frag - shaders/shadow.vert - shaders/ssao_blur.frag - shaders/ssao_blur.vert - shaders/ssao_merge.frag - shaders/ssao_merge.vert - shaders/ssr.frag - shaders/ssr.vert - shaders/ssr_blur.frag - shaders/ssr_blur.vert - shaders/ssr_merge.frag - shaders/ssr_merge.vert - shaders/dof.frag - shaders/dof.vert - - diff --git a/test/qglview/qglview_test/main.cpp b/test/qglview/qglview_test/main.cpp deleted file mode 100644 index 3560ee7..0000000 --- a/test/qglview/qglview_test/main.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - Stanley Designer - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include -#include -#include -#include "qglview_window.h" - -int main(int argc, char ** argv) { - QApplication a(argc, argv); - a.setAttribute(Qt::AA_UseHighDpiPixmaps, true); - QGLViewWindow w; - w.show(); - QStringList al(a.arguments()); - al.pop_front(); - foreach (QString s, al) - w.loadFile(s); - return a.exec(); -} diff --git a/test/qglview/qglview_test/qglview_window.cpp b/test/qglview/qglview_test/qglview_window.cpp deleted file mode 100644 index b871b9b..0000000 --- a/test/qglview/qglview_test/qglview_window.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/* - Stanley Designer - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "qglview_window.h" -#include "loader_qgl.h" -#include "loader_ase.h" -#include "loader_3ds.h" -#include "loader_obj.h" -#include "loader_dae.h" -#include -#include -#include - - -QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLViewWindow() { - setupUi(this); - session.setFile("session_qglview_test.conf"); - session.addEntry(this); - icon_geo = QIcon(":/icons/type-geo.png"); - icon_camera = QIcon(":/icons/type-camera.png"); - icon_light = QIcon(":/icons/type-light.png"); - - sel_obj = nullptr; - view->view()->camera()->setAim(QVector3D()); - view->view()->camera()->setPos(QVector3D(2, 2, 2)); -// view->setFrameShape(QFrame::NoFrame); - view->view()->setRenderer(new RendererSimple(view->view())); - view->view()->setMouseRotateEnabled(true); - view->view()->setMouseSelectionEnabled(true); - view->view()->setSelectionHaloEnabled(true); - view->view()->setHoverHaloEnabled(true); - view->view()->setHoverHaloFillAlpha(0.); - view->view()->setSelectionHaloFillAlpha(0.); - view->view()->setBackColor(Qt::lightGray); - view->view()->setDepthStart(0.001); - view->view()->setDepthEnd(100000.); - - spinFOV->setValue(view->view()->FOV()); - spinDepthStart->setValue(view->view()->depthStart()); - spinDepthEnd->setValue(view->view()->depthEnd()); - groupHoverHalo->setChecked(view->view()->isHoverHaloEnabled()); - groupSelectionHalo->setChecked(view->view()->isSelectionHaloEnabled()); - spinHoverHaloFill->setValue(view->view()->hoverHaloFillAlpha()); - spinSelectionHaloFill->setValue(view->view()->selectionHaloFillAlpha()); - colorHoverHalo->setColor(view->view()->hoverHaloColor()); - colorSelectionHalo->setColor(view->view()->selectionHaloColor()); - checkFXAA->setChecked(view->view()->isFeatureEnabled(QGLView::qglFXAA)); - checkMSAA->setChecked(view->view()->isFeatureEnabled(QGLView::qglMSAA)); - colorBack->setColor(view->view()->backColor()); - colorAmbient->setColor(view->view()->ambientColor()); - checkCameraOrbit->setChecked(view->view()->isCameraOrbit()); - - groupShadows->setChecked(view->view()->isFeatureEnabled(QGLView::qglShadowsEnabled)); - groupEyeAccomodation->setChecked(view->view()->isFeatureEnabled(QGLView::qglEyeAccomodationEnabled)); - groupBloom->setChecked(view->view()->isFeatureEnabled(QGLView::qglBloomEnabled)); - groupMotionBlur->setChecked(view->view()->isFeatureEnabled(QGLView::qglMotionBlurEnabled)); - groupReflections->setChecked(view->view()->isFeatureEnabled(QGLView::qglReflectionsEnabled)); - checkSoftShadows->setChecked(view->view()->isFeatureEnabled(QGLView::qglShadowsSoftEnabled)); - groupSSAO->setChecked(view->view()->isFeatureEnabled(QGLView::qglSSAOEnabled)); - spinAccom->setValue(view->view()->feature(QGLView::qglEyeAccomodationTime).toDouble()); - spinAccomMS->setValue(view->view()->feature(QGLView::qglEyeAccomodationMaxSpeed).toDouble()); - checkReflectionsBlur->setChecked(view->view()->isFeatureEnabled(QGLView::qglReflectionsBlur)); - spinShadowmapSize->setValue(view->view()->feature(QGLView::qglShadowsMapSize).toInt()); - spinMotionBlurFactor->setValue(view->view()->feature(QGLView::qglMotionBlurFactor).toDouble()); - spinMotionBlurSteps->setValue(view->view()->feature(QGLView::qglMotionBlurSteps).toInt()); - spinBloomFactor->setValue(view->view()->feature(QGLView::qglBloomFactor).toDouble()); - spinBloomRadius->setValue(view->view()->feature(QGLView::qglBloomRadius).toInt()); - spinBloomThreshold->setValue(view->view()->feature(QGLView::qglBloomThreshold).toDouble()); - spinSSAORadius->setValue(view->view()->feature(QGLView::qglSSAORadius).toInt()); - groupDOF->setChecked(view->view()->isFeatureEnabled(QGLView::qglDepthOfFieldEnabled)); - checkDOFAutoFocus->setChecked(view->view()->isFeatureEnabled(QGLView::qglDepthOfFieldAutoFocusEnabled)); - spinDOFFocus->setValue(view->view()->feature(QGLView::qglDepthOfFieldFocus).toDouble()); - spinDOFDiaphragm->setValue(view->view()->feature(QGLView::qglDepthOfFieldDiaphragm).toDouble()); - spinDOFSpeed->setValue(view->view()->feature(QGLView::qglDepthOfFieldAutoFocusSpeed).toDouble()); - - axis = new GLObjectBase(); - GLObjectBase * obj; - float al = 1.; - obj = new GLPrimitiveLine(QVector3D(0, 0, -al), QVector3D(0, 0, al)); - obj->material().color_diffuse = Qt::darkBlue; obj->setAcceptLight(false); - axis->addChild(obj); - obj = new GLPrimitiveLine(QVector3D(-al, 0, 0), QVector3D(al, 0, 0)); - obj->material().color_diffuse = Qt::darkRed; obj->setAcceptLight(false); - axis->addChild(obj); - obj = new GLPrimitiveLine(QVector3D(0, -al, 0), QVector3D(0, al, 0)); - obj->material().color_diffuse = Qt::darkGreen; obj->setAcceptLight(false); - axis->addChild(obj); - view->view()->addObject(axis); - - cam_light = new Light(); - cam_light->intensity = 0.5; - cam_light->setName("Camera_Light"); - view->view()->camera()->addChild(cam_light); - view->view()->start(-1); - startTimer(1000/60); - - connect(view->view(), SIGNAL(selectionChanged(GLObjectBase*,GLObjectBase*)), this, SLOT(selectionChanged(GLObjectBase*,GLObjectBase*))); - connect(view->view(), SIGNAL(keyEvent(Qt::Key, Qt::KeyboardModifiers)), this, SLOT(view_keyEvent(Qt::Key, Qt::KeyboardModifiers))); - connect(matEditor, SIGNAL(changed()), this, SLOT(materialChanged())); - - //view->view()->addObject(&partsys); - partsys.material().color_diffuse = Qt::red; - treeProps->assignObject(&partsys); - session.load(); -} - - -QGLViewWindow::~QGLViewWindow() { - session.save(); - //delete ps; -} - - -void QGLViewWindow::changeEvent(QEvent * e) { - QMainWindow::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - retranslateUi(this); - return; - } -} - - -void QGLViewWindow::timerEvent(QTimerEvent * ) { - //static double t = 0.; - //cam_light->intensity = checkCameraLight->isChecked() ? 0.5 : 0.; - cam_light->setVisible(checkCameraLight->isChecked()); - //((RendererSimple*)(view->view()->renderer()))->mpos = view->view()->mapFromGlobal(QCursor::pos()); - statusBar()->showMessage(QString("FPS: %1").arg(QString::number(view->view()->currentFPS(), 'f', 2))); -} - - -void QGLViewWindow::loadFile(const QString & path) { - prev_path = path; - importFile(path); -} - - -void QGLViewWindow::importFile(const QString & path) { - QApplication::setOverrideCursor(Qt::WaitCursor); - QFileInfo fi(path); - GLObjectBase * o = nullptr; - if (fi.suffix().toLower() == "qgl") o = loadFromQGLFile(path); - if (fi.suffix().toLower() == "ase") o = loadFromASEFile(path); - if (fi.suffix().toLower() == "3ds") o = loadFrom3DSFile(path); - if (fi.suffix().toLower() == "obj") o = loadFromOBJFile(path); - if (fi.suffix().toLower() == "dae") o = loadFromDAEFile(path); - QApplication::restoreOverrideCursor(); - if (!o) { - QMessageBox::critical(this, "Import", "Can`t load " + path + "!"); - return; - } - o->setName(fi.baseName()); - view->view()->addObject(o); - objectsTreeChanged(); -} - - -void QGLViewWindow::makeObjetTree(const GLObjectBase * o, QTreeWidgetItem * ti) { - if (o == axis) return; - for (int i = 0; i < o->childCount(); ++i) { - const GLObjectBase * co = o->child(i); - QTreeWidgetItem * ci = new QTreeWidgetItem(ti); - ci->setText(0, co->name()); - ci->setData(0, Qt::UserRole, quintptr(co)); - switch (co->type()) { - case GLObjectBase::glMesh: ci->setIcon(0, icon_geo); break; - case GLObjectBase::glLight: ci->setIcon(0, icon_light); break; - case GLObjectBase::glCamera: ci->setIcon(0, icon_camera); break; - default: break; - } - makeObjetTree(co, ci); - } -} - - -void QGLViewWindow::selectionChanged(GLObjectBase * cur, GLObjectBase *) { - sel_obj = cur; - //qDebug() << "selected" << (cur != 0 ? cur->name() : "0"); - labelName->setText(cur != nullptr ? cur->name() : ""); - /**if (cur == 0) box->hide(); - else { - box->setScale(cur->boundingBox().size()); - box->setPos(cur->boundingBox().pos()); - Box3D b = cur->boundingBox().movedTo(-cur->boundingBox().center()); - b.z = -b.z - b.height; - ps->setEmitterRect(b); - cur->addChild(box); - box->show(); - }*/ - objectEditor->setObject(sel_obj); - if (sel_obj == nullptr) return; - matEditor->setMaterial(sel_obj->material()); - //qDebug() << sel_obj->boundingBox(); -} - - -void QGLViewWindow::materialChanged() { - if (sel_obj == nullptr) return; - sel_obj->setMaterial(matEditor->material()); -} - - -void QGLViewWindow::on_comboRenderer_currentIndexChanged(int val) { - GLRendererBase * pr = nullptr; - switch (val) { - case 0: view->view()->setRenderer(new RendererSimple(view->view()), &pr); break; - case 1: view->view()->setRenderer(new RendererDeferredShading(view->view()), &pr); break; - //case 2: view->view()->setRenderer(new RendererRT(view), &pr); break; - } - if (pr != nullptr) delete pr; -} - - -void QGLViewWindow::on_actionReset_triggered() { - view->view()->removeObject(axis, false); - view->view()->clearObjects(true); - view->view()->addObject(axis); - objectsTreeChanged(); -} - - -void QGLViewWindow::on_actionImport_triggered() { - QStringList fl = QFileDialog::getOpenFileNames(this, "Select files", prev_path, "Supported types(*.qgl *.ase *.3ds *.obj *.dae);;" - "QGLView(*.qgl);;" - "Ascii Scene Export(*.ase);;" - "3D Studio(*.3ds);;" - "Wavefront OBJ(*.obj);;" - "Collada(*.dae)"); - if (fl.isEmpty()) return; - prev_path = fl.back(); - foreach (QString f, fl) - importFile(f); -} - - -void QGLViewWindow::on_actionSave_triggered() { - QString f = QFileDialog::getSaveFileName(this, "Select file", prev_path, "QGLView(*.qgl)"); - if (f.isEmpty()) return; - if (f.right(4).toLower() != ".qgl") - f += ".qgl"; - prev_path = f; - view->view()->removeObject(axis); - QApplication::setOverrideCursor(Qt::WaitCursor); - saveToQGLFile(f, &(view->view()->rootObject())); - QApplication::restoreOverrideCursor(); - view->view()->addObject(axis); -} - - -void QGLViewWindow::on_actionSaveSelected_triggered() { - if (!sel_obj) return; - QString f = QFileDialog::getSaveFileName(this, "Select file", prev_path, "QGLView(*.qgl)"); - if (f.isEmpty()) return; - if (f.right(4).toLower() != ".qgl") - f += ".qgl"; - prev_path = f; - QApplication::setOverrideCursor(Qt::WaitCursor); - saveToQGLFile(f, sel_obj); - QApplication::restoreOverrideCursor(); -} - - -void QGLViewWindow::on_actionOpen_triggered() { - QString f = QFileDialog::getOpenFileName(this, "Select file", prev_path, "Supported types(*.qgl *.ase *.3ds *.obj *.dae);;" - "QGLView(*.qgl);;" - "Ascii Scene Export(*.ase);;" - "3D Studio(*.3ds);;" - "Wavefront OBJ(*.obj);;" - "Collada(*.dae)"); - if (f.isEmpty()) return; - prev_path = f; - importFile(f); -} - - -void QGLViewWindow::view_keyEvent(Qt::Key k, Qt::KeyboardModifiers m) { - //qDebug() << k; - double spd = 0.2; - if (m.testFlag(Qt::ShiftModifier)) - spd = 0.5; - switch (k) { - case Qt::Key_W: view->view()->camera()->moveForward(spd); break; - case Qt::Key_S: view->view()->camera()->moveBackward(spd); break; - case Qt::Key_A: view->view()->camera()->moveLeft(spd); break; - case Qt::Key_D: view->view()->camera()->moveRight(spd); break; - default: break; - } -} - - -void QGLViewWindow::on_treeObjects_itemClicked(QTreeWidgetItem * ti, int) { - ((GLObjectBase*)(ti->data(0, Qt::UserRole).toULongLong()))->select(); - //qDebug() << ((GLObjectBase*)(ti->data(0, Qt::UserRole).toULongLong()))->type(); - if (sel_obj->type() == GLObjectBase::glCamera) - view->view()->setCamera((Camera*)sel_obj); -} - - -void QGLViewWindow::objectsTreeChanged() { - treeObjects->clear(); - makeObjetTree(&(view->view()->rootObject()), treeObjects->invisibleRootItem()); - treeObjects->expandAll(); -} - - -void QGLViewWindow::on_pushButton_clicked() { - //view->view()->removeLight(view->view()->lightsCount() - 1); - //setWindowTitle(QString::number(view->view()->lightsCount())); - QVector3D wp = view->view()->light(0)->worldPos(); - view->view()->camera()->setPos(wp); - view->view()->camera()->setAim(wp + (view->view()->light(0)->worldTransform() * QVector4D(view->view()->light(0)->direction)).toVector3D()*100); -} - - -void QGLViewWindow::on_pushButton_3_clicked() { - QList ol = view->view()->objects(true); - qDebug() << ol.size(); - foreach (GLObjectBase * i, ol) { - i->VBO().rebuffer(); - } -} - - diff --git a/test/qglview/qglview_test/qglview_window.h b/test/qglview/qglview_test/qglview_window.h deleted file mode 100644 index 2486417..0000000 --- a/test/qglview/qglview_test/qglview_window.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - Stanley Designer - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef QGLVIEWWINDOW_H -#define QGLVIEWWINDOW_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ui_qglview_window.h" -#include "loader_3ds.h" -#include "loader_ase.h" -#include "renderer_simple.h" -#include "renderer_deferred_shading.h" -#include "session_manager.h" -//#include "renderer_rt.h" -#include "glparticles_system.h" -#include "qglview.h" -#include "ui_qglview_window.h" - - -class QGLViewWindow: public QMainWindow, public Ui::QGLViewWindow -{ - Q_OBJECT -public: - QGLViewWindow(QWidget * parent = 0); - ~QGLViewWindow(); - - void loadFile(const QString & path); - -private: - // Qt`s overloaded - void changeEvent(QEvent * e); - void timerEvent(QTimerEvent * ); - - void importFile(const QString & path); - void makeObjetTree(const GLObjectBase * o, QTreeWidgetItem * ti); - - QTranslator translator; - QIcon icon_geo, icon_camera, icon_light; - QString prev_path; - GLObjectBase * sel_obj, * axis; - Light * cam_light; - GLPrimitiveCube * box; - Material m; - SessionManager session; - bool isChanged; - - GLParticlesSystem partsys; - -private slots: - void on_spinFOV_valueChanged(double val) {view->view()->setFOV(val);} - void on_spinDepthStart_valueChanged(double val) {view->view()->setDepthStart(val);} - void on_spinDepthEnd_valueChanged(double val) {view->view()->setDepthEnd(val);} - void on_comboRenderer_currentIndexChanged(int val); - void on_comboViewRenderMode_currentIndexChanged(int val) {static int modes[] = {GL_POINT, GL_LINE, GL_FILL}; view->view()->setRenderMode((GLObjectBase::RenderMode)modes[val]);} - void on_groupHoverHalo_clicked(bool val) {view->view()->setHoverHaloEnabled(val);} - void on_groupSelectionHalo_clicked(bool val) {view->view()->setSelectionHaloEnabled(val);} - void on_spinHoverHaloFill_valueChanged(double val) {view->view()->setHoverHaloFillAlpha(val);} - void on_spinSelectionHaloFill_valueChanged(double val) {view->view()->setSelectionHaloFillAlpha(val);} - void on_colorHoverHalo_colorChanged(QColor color) {view->view()->setHoverHaloColor(color);} - void on_colorSelectionHalo_colorChanged(QColor color) {view->view()->setSelectionHaloColor(color);} - void on_checkFXAA_clicked(bool val) {view->view()->setFeature(QGLView::qglFXAA, val);} - void on_checkMSAA_clicked(bool val) {view->view()->setFeature(QGLView::qglMSAA, val);} - void on_colorBack_colorChanged(QColor color) {view->view()->setBackColor(color);} - void on_colorAmbient_colorChanged(QColor color) {view->view()->setAmbientColor(color);} - void on_checkCameraOrbit_clicked(bool val) {view->view()->setCameraOrbit(val);} - void on_spinViewLineWidth_valueChanged(double val) {view->view()->setLineWidth(val);} - - void on_groupShadows_clicked(bool val) {view->view()->setFeature(QGLView::qglShadowsEnabled, val);} - void on_groupEyeAccomodation_clicked(bool val) {view->view()->setFeature(QGLView::qglEyeAccomodationEnabled, val);} - void on_groupBloom_clicked(bool val) {view->view()->setFeature(QGLView::qglBloomEnabled, val);} - void on_groupMotionBlur_clicked(bool val) {view->view()->setFeature(QGLView::qglMotionBlurEnabled, val);} - void on_groupReflections_clicked(bool val) {view->view()->setFeature(QGLView::qglReflectionsEnabled, val);} - void on_checkSoftShadows_clicked(bool val) {view->view()->setFeature(QGLView::qglShadowsSoftEnabled, val);} - void on_groupSSAO_clicked(bool val) {view->view()->setFeature(QGLView::qglSSAOEnabled, val);} - void on_groupDOF_clicked(bool val) {view->view()->setFeature(QGLView::qglDepthOfFieldEnabled, val);} - void on_checkDOFAutoFocus_clicked(bool val) {view->view()->setFeature(QGLView::qglDepthOfFieldAutoFocusEnabled, val);} - void on_spinDOFFocus_valueChanged(double val) {view->view()->setFeature(QGLView::qglDepthOfFieldFocus, val);} - void on_spinDOFDiaphragm_valueChanged(double val) {view->view()->setFeature(QGLView::qglDepthOfFieldDiaphragm, val);} - void on_spinDOFSpeed_valueChanged(double val) {view->view()->setFeature(QGLView::qglDepthOfFieldAutoFocusSpeed, val);} - void on_spinAccom_valueChanged(double val) {view->view()->setFeature(QGLView::qglEyeAccomodationTime, val);} - void on_spinAccomMS_valueChanged(double val) {view->view()->setFeature(QGLView::qglEyeAccomodationMaxSpeed, val);} - void on_checkReflectionsBlur_clicked(bool val) {view->view()->setFeature(QGLView::qglReflectionsBlur, val);} - void on_spinShadowmapSize_valueChanged(double val) {view->view()->setFeature(QGLView::qglShadowsMapSize, val);} - void on_spinMotionBlurFactor_valueChanged(double val) {view->view()->setFeature(QGLView::qglMotionBlurFactor, val);} - void on_spinMotionBlurSteps_valueChanged(int val) {view->view()->setFeature(QGLView::qglMotionBlurSteps, val);} - void on_spinBloomFactor_valueChanged(double val) {view->view()->setFeature(QGLView::qglBloomFactor, val);} - void on_spinBloomRadius_valueChanged(int val) {view->view()->setFeature(QGLView::qglBloomRadius, val);} - void on_spinBloomThreshold_valueChanged(double val) {view->view()->setFeature(QGLView::qglBloomThreshold, val);} - void on_spinSSAORadius_valueChanged(int val) {view->view()->setFeature(QGLView::qglSSAORadius, val);} - - void on_actionExit_triggered() {close();} - void on_actionReset_triggered(); - void on_actionImport_triggered(); - void on_actionSave_triggered(); - void on_actionSaveSelected_triggered(); - void on_actionOpen_triggered(); - - void view_keyEvent(Qt::Key k, Qt::KeyboardModifiers m); - - void on_treeObjects_itemClicked(QTreeWidgetItem * ti, int); - - void objectsTreeChanged(); - void materialChanged(); - void selectionChanged(GLObjectBase * cur, GLObjectBase *); - - void on_pushButton_clicked(); - void on_pushButton_2_clicked() {view->view()->reloadShaders();} - void on_pushButton_3_clicked(); - -public slots: - -signals: - -private: - QMatrix4x4 cam_mat; - -}; - -#endif // QGLVIEWWINDOW_H diff --git a/test/qglview/qglview_test/qglview_window.ui b/test/qglview/qglview_test/qglview_window.ui deleted file mode 100644 index ba6799b..0000000 --- a/test/qglview/qglview_test/qglview_window.ui +++ /dev/null @@ -1,1234 +0,0 @@ - - - QGLViewWindow - - - - 0 - 0 - 1125 - 1056 - - - - QGLView converter - - - - - - - - 2 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 10 - 75 - true - - - - - - - Qt::AlignCenter - - - - - - - 0 - - - - View - - - - - - 0 - - - - Common - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - FOV - - - - - - - 0.100000000000000 - - - 179.900000000000006 - - - 60.000000000000000 - - - - - - - Depth - - - - - - - 0 - - - - - 3 - - - 999999999.000000000000000 - - - 1.000000000000000 - - - - - - - - 0 - 0 - - - - - - - - - - - - 3 - - - 999999999.000000000000000 - - - - - - - - - Renderer - - - - - - - 0 - - - - Simple - - - - - Deferred shading - - - - - RT - - - - - - - - Draw mode - - - - - - - 2 - - - - Point - - - - - Wireframe - - - - - Solid - - - - - - - - Back color - - - - - - - - 10 - 10 - 10 - - - - - - - - Ambient - - - - - - - - 10 - 10 - 10 - - - - - - - - MSAA - - - - - - - FXAA - - - - - - - Hover halo - - - true - - - - - - - 10 - 10 - 10 - - - - true - - - - - - - Fill - - - - - - - 0.000000000000000 - - - 1.000000000000000 - - - 0.300000000000000 - - - 2 - - - 0.050000000000000 - - - 0.100000000000000 - - - - - - - - - - Selection halo - - - true - - - - - - - 10 - 10 - 10 - - - - true - - - - - - - Fill - - - - - - - 0.000000000000000 - - - 1.000000000000000 - - - 0.300000000000000 - - - 2 - - - 0.050000000000000 - - - 0.100000000000000 - - - - - - - - - - Camera - - - - - - Orbit - - - true - - - - - - - Camera Light - - - - - - - - - - 0.000000000000000 - - - 99999.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - Line width - - - - - - - - Features - - - - - - Shadows - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Shadowmap size - - - - - - - 16.000000000000000 - - - 2048.000000000000000 - - - 512.000000000000000 - - - 0 - - - 16.000000000000000 - - - 512.000000000000000 - - - true - - - - - - - Soft - - - true - - - - - - - - - - Bloom - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Factror - - - - - - - 0.000000000000000 - - - 100.000000000000000 - - - 1.000000000000000 - - - 1 - - - 0.100000000000000 - - - 1.000000000000000 - - - false - - - - - - - 1.000000000000000 - - - 128.000000000000000 - - - 8.000000000000000 - - - 0 - - - 1.000000000000000 - - - 4.000000000000000 - - - false - - - - - - - Radius - - - - - - - Threshold - - - - - - - 0.000000000000000 - - - 1.000000000000000 - - - 0.900000000000000 - - - 2 - - - 0.050000000000000 - - - 0.100000000000000 - - - false - - - - - - - - - - Motion blur - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Factror - - - - - - - Steps - - - - - - - 0.000000000000000 - - - 10000.000000000000000 - - - 1.000000000000000 - - - 1 - - - 0.100000000000000 - - - 1.000000000000000 - - - false - - - - - - - 1.000000000000000 - - - 128.000000000000000 - - - 8.000000000000000 - - - 0 - - - 1.000000000000000 - - - 4.000000000000000 - - - false - - - - - - - - - - Eye accomodation - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Time - - - - - - - Max speed - - - - - - - 0.000000000000000 - - - 256.000000000000000 - - - 32.000000000000000 - - - true - - - - - - - 0.010000000000000 - - - 1.000000000000000 - - - 0.100000000000000 - - - 3 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - - - - Depth of field - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Diaphragm - - - - - - - Max speed - - - - - - - 0.100000000000000 - - - 1024.000000000000000 - - - 8.000000000000000 - - - true - - - - - - - 0.010000000000000 - - - 10.000000000000000 - - - 0.100000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - Focus - - - - - - - 0.100000000000000 - - - 1000.000000000000000 - - - 1.000000000000000 - - - true - - - 999999.000000000000000 - - - - - - - Auto focus - - - - - - - - - - Reflections - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Blur - - - - - - - - - - SSAO - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Time - - - - - - - 0.000000000000000 - - - 16.000000000000000 - - - 5.000000000000000 - - - 0 - - - 1.000000000000000 - - - 4.000000000000000 - - - false - - - - - - - - - - - - - - remove light - - - - - - - reload shaders - - - - - - - rebuff all - - - - - - - Qt::Vertical - - - - 20 - 107 - - - - - - - - - Object - - - - - - - - - Qt::Vertical - - - - 20 - 1 - - - - - - - - - Material - - - - - - - - - Qt::Vertical - - - - 20 - 1 - - - - - - - - - Страница - - - - - - - 1 - - - - - - - - - - - - - - - - 0 - 0 - - - - - - - - Objects - - - - - - QAbstractItemView::NoEditTriggers - - - QAbstractItemView::ScrollPerPixel - - - true - - - - Name - - - - - - - - - - - - toolBar - - - TopToolBarArea - - - false - - - - - - - - - - - 0 - 0 - 1125 - 21 - - - - - File - - - - - - - - - - - - - - - - - :/icons/application-exit.png:/icons/application-exit.png - - - Exit - - - - - - :/icons/document-import.png:/icons/document-import.png - - - Import ... - - - Ctrl+I - - - - - - :/icons/document-open.png:/icons/document-open.png - - - Open ... - - - Ctrl+O - - - - - - :/icons/document-save-all.png:/icons/document-save-all.png - - - Save ... - - - Ctrl+S - - - - - - :/icons/document-new.png:/icons/document-new.png - - - Reset - - - Ctrl+N - - - - - - :/icons/document-save-.png:/icons/document-save-.png - - - Save selected ... - - - Save selected - - - Ctrl+Shift+S - - - - - - SpinSlider - QWidget -
    spinslider.h
    -
    - - ColorButton - QPushButton -
    colorbutton.h
    -
    - - GLWidget - QWidget -
    glwidget.h
    - 1 -
    - - MaterialEditor - QWidget -
    material_editor.h
    - 1 -
    - - GLObjectEditor - QWidget -
    globject_editor.h
    - 1 -
    - - PropertyEditor - QTreeWidget -
    propertyeditor.h
    -
    -
    - - - - - - -
    diff --git a/test/qglview/renderer_deferred_shading.cpp b/test/qglview/renderer_deferred_shading.cpp deleted file mode 100644 index bb094fd..0000000 --- a/test/qglview/renderer_deferred_shading.cpp +++ /dev/null @@ -1,597 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "renderer_deferred_shading.h" -#include - - -RendererDeferredShading::RendererDeferredShading(QGLView * view_): GLRendererBase(view_), -fbo_g(5, true, GL_RGBA16F), fbo_out(3, false, GL_RGBA16F), fbo_hsmall(1, false, GL_RGB16F) { - shaders << ShaderPair("FXAA", &shader_fxaa) - << ShaderPair("dsl_pass_0", &shader_ds_0) - << ShaderPair("dsl_pass_1", &shader_ds_1) - << ShaderPair("hdr", &shader_hdr) - << ShaderPair("downscale", &shader_small) - << ShaderPair("bloom_pass_0", &shader_bloom_0) - << ShaderPair("bloom_pass_1", &shader_bloom_1) - << ShaderPair("fbo_add", &shader_fbo_add) - << ShaderPair("motion_blur", &shader_motion_blur) - << ShaderPair("shadow", &shader_shadow) - << ShaderPair("ssr", &shader_ssr) - << ShaderPair("ssr_blur", &shader_ssr_blur) - << ShaderPair("ssr_merge", &shader_ssr_merge) - << ShaderPair("ssao_blur", &shader_ssao_blur) - << ShaderPair("ssao_merge", &shader_ssao_merge) - << ShaderPair("dof", &shader_dof); - for (int i = 0; i < shaders.size(); ++i) - *(shaders[i].second) = nullptr; - lights_per_pass = 8; - tnoise = 0; - exposure_ = 1.; - df = new QWidget(); - df->setLayout(new QBoxLayout(QBoxLayout::TopToBottom)); - label_exp = new QLabel(); - label_exp_step = new QLabel(); - df->layout()->addWidget(label_exp); - df->layout()->addWidget(label_exp_step); - QPalette pal(df->palette()); - pal.setBrush(QPalette::Window, QColor(255, 255, 255, 192)); - df->setPalette(pal); - if (view_) - ;//view_->addObject(df); -} - - -RendererDeferredShading::~RendererDeferredShading() { - for (int i = 0; i < shaders.size(); ++i) { - QOpenGLShaderProgram * p(*(shaders[i].second)); - if (p) delete p; - } - delete df; -} - - -void RendererDeferredShading::renderScene() { - //qDebug() << lights_per_pass; - QMatrix4x4 mproj = rp.proj_matrix; - QMatrix4x4 mproji = rp.proj_matrix_i; - QMatrix4x4 mview = rp.view_matrix; - QMatrix4x4 mviewi = rp.view_matrix_i; - QMatrix4x4 mviewproji = (mproj * mview).inverted(); - QMatrix4x4 moffset = view.camera()->offsetMatrix(); - QMatrix4x4 moffseti = moffset.inverted(); - rp.prev_proj_matrix = prev_proj; - rp.prev_view_matrix = prev_view; - QMatrix4x4 vc_proji; - vc_proji.perspective(90., 1., view.camera()->depthStart(), view.camera()->depthEnd()); - vc_proji = vc_proji.inverted(); - corner_dirs[0] = (mproji * QVector4D( 1, 1, 0, 1)); - corner_dirs[1] = (mproji * QVector4D(-1, 1, 0, 1)); - corner_dirs[2] = (mproji * QVector4D(-1, -1, 0, 1)); - corner_dirs[3] = (mproji * QVector4D( 1, -1, 0, 1)); - //qDebug() << corner_dirs[0] << corner_dirs[1] << corner_dirs[2] << corner_dirs[3]; - fbo_g.bind(); - int buffs[] = {0, 1, 2, 3, 4}; - fbo_g.setWriteBuffers(buffs, 5); - if (white_image_id == 0) { - glActiveTexture(GL_TEXTURE0 + 6); - white_image_id = view.textureManager()->loadTexture(white_image, false); - glBindTexture(GL_TEXTURE_2D, white_image_id); - glActiveTexture(GL_TEXTURE0); - } - if (violent_image_id == 0) { - glActiveTexture(GL_TEXTURE0 + 7); - violent_image_id = view.textureManager()->loadTexture(violent_image, false); - glBindTexture(GL_TEXTURE_2D, violent_image_id); - glActiveTexture(GL_TEXTURE0); - } - glEnableDepth(); - glClearFramebuffer(QColor(0, 0, 0, 0)); - glDisable(GL_RESCALE_NORMAL); - shader_ds_0->bind(); - rp.setUniform(shader_ds_0); - shader_ds_0->setUniformValue("z_far", view.depthEnd()); - shader_ds_0->setUniformValue("z_near", view.depthStart()); - shader_ds_0->setUniformValue("t0", 0); - shader_ds_0->setUniformValue("t1", 1); - shader_ds_0->setUniformValue("t2", 2); - shader_ds_0->setUniformValue("t3", 3); - shader_ds_0->setUniformValue("t4", 4); - shader_ds_0->setUniformValue("dt", QVector2D(1.f / view.width(), 1.f / view.height())); - //qDebug() << rp.view_matrix << prev_view; - //shader_ds_0->setUniformValue("qgl_ModelViewMatrix", rp.view_matrix); - renderObjects(GLObjectBase::Solid, 0, shader_ds_0, true, false, false); - //glReleaseShaders(); - fbo_g.release(); - - if (view.isFeatureEnabled(QGLView::qglShadowsEnabled)) { - shader_shadow->bind(); - int sms = view.feature(QGLView::qglShadowsMapSize).toInt(); - glDisable(GL_TEXTURE_1D); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_CUBE_MAP); - glDisable(GL_MULTISAMPLE); - glDisable(GL_LIGHTING); - glDisable(GL_BLEND); - glDisable(GL_ALPHA_TEST); - glDisable(GL_RESCALE_NORMAL); - glDisableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - //qDebug() << "render shadows"; - for (int i = 0; i < view.lightsCount(); ++i) { - Light * l = view.light(i); - if (l->light_type == Light::Omni) continue; - l->shadow_map.resize(sms, sms); - l->shadow_map.bind(); - l->shadow_map.setWriteBuffer(0); - glClearFramebuffer(); - //glClear(GL_DEPTH_BUFFER_BIT); - renderShadow(l, shader_shadow, moffseti*mviewi); - l->shadow_map.release(); - } - } -// glUseProgram(0); -//// fbo_g.bindColorTextures(); -// glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(0)); -// glActiveTexture(GL_TEXTURE0); -// glDrawQuad(); -// return; - - glResetAllTransforms(); - glSetLightEnabled(false); - glEnable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - //glBlendFunc(GL_ONE, GL_ONE); - glDisableDepth(); - rp.prepare(); - //qDebug() << rp.view_matrix; - shader_ds_1->bind(); - shader_ds_1->setUniformValue("z_far", view.depthEnd()); - shader_ds_1->setUniformValue("z_near", view.depthStart()); - shader_ds_1->setUniformValue("t0", 0); - shader_ds_1->setUniformValue("t1", 1); - shader_ds_1->setUniformValue("t2", 2); - shader_ds_1->setUniformValue("t3", 3); - shader_ds_1->setUniformValue("t4", 4); - shader_ds_1->setUniformValue("td", 5); - shader_ds_1->setUniformValue("back_color", view.backColor()); - shader_ds_1->setUniformValue("mat_proji", mproji); - shader_ds_1->setUniformValue("mat_view", mview); - shader_ds_1->setUniformValue("mat_viewi", mviewi); - shader_ds_1->setUniformValue("mat_viewproji", mviewproji); - shader_ds_1->setUniformValue("shadow_on", view.isFeatureEnabled(QGLView::qglShadowsEnabled) ? 1 : 0); - shader_ds_1->setUniformValue("dt", QVector2D(1.f / view.width(), 1.f / view.height())); - rp.setUniform(shader_ds_1); - fbo_g.bindColorTextures(); - fbo_g.bindDepthTexture(5); - fbo_out.bind(); - fbo_out.setWriteBuffer(0); - glClearFramebuffer(Qt::black, false); - //QVector lpos; - //qDebug() << view_matrix; - shader_ds_1->setUniformValue("t_pp", 6); - int passes = (view.lightsCount() - 1) / lights_per_pass + 1; - if (passes < 1) passes = 1; - //qDebug() << "render in" << passes << "passes (" << lights_per_pass << ")"; - int wi, ri; - for (int l = 0; l < passes; ++l) { - wi = 1 - l % 2; - ri = l % 2; - //qDebug() << " pass" << l << "read from" << ri << "write to" << wi; - glActiveTexture(GL_TEXTURE0 + 6); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - fbo_out.setWriteBuffer(wi); - setupDSLights(l, mview * moffset); - glDrawQuad(shader_ds_1, corner_dirs); - //break; - } - //fbo_out.release(); - wi = 1 - passes % 2; - ri = passes % 2; - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - - if (view.isFeatureEnabled(QGLView::qglSSAOEnabled)) { - fbo_out.setWriteBuffer(2); - fbo_out.setReadBuffer(ri); - glBlitFramebuffer(0, 0, fbo_out.width(), fbo_out.height(), 0, 0, fbo_out.width(), fbo_out.height(), GL_COLOR_BUFFER_BIT, GL_NEAREST); - glActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(2)); - glActiveTexture(GL_TEXTURE0 + 2); - glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(1)); - glActiveTexture(GL_TEXTURE0); - //glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - //glActiveTextureChannel(1); - //glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(0)); - int lri = ri, lwi = wi;//, lms = ri; - shader_ssao_blur->bind(); - shader_ssao_blur->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_ssao_blur->setUniformValue("dt", QVector2D(1.f / fbo_out.width(), 1.f / fbo_out.height())); - shader_ssao_blur->setUniformValue("t0", 0); - shader_ssao_blur->setUniformValue("ts", 1); - shader_ssao_blur->setUniformValue("tg1", 2); - int passes = view.feature(QGLView::qglSSAORadius).toInt(); - int crad = 1; - for (int p = 0; p < passes; ++p) { - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(lri)); - fbo_out.setWriteBuffer(lwi); - shader_ssao_blur->setUniformValue("radius", GLfloat(crad)); - glDrawQuad(shader_ssao_blur); - piSwap(lwi, lri); - crad *= 2; - } - //qDebug() << wi << ri << lms; - /*wi = lri; - ri = 1 - lms;*/ - glEnable(GL_TEXTURE_1D); - if (tnoise == 0) { - glGenTextures(1, &tnoise); - glBindTexture(GL_TEXTURE_1D, tnoise); - QByteArray ba; - for (int i = 0; i < 32*3; ++i) - ba.push_back(char(random() % 256)); - //qDebug() << ba; - glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB8, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, ba.constData()); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - } - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(lri)); - glActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(2)); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glActiveTexture(GL_TEXTURE0 + 2); - glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(1)); - glActiveTexture(GL_TEXTURE0 + 3); - glBindTexture(GL_TEXTURE_1D, tnoise); - shader_ssao_merge->bind(); - shader_ssao_merge->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_ssao_merge->setUniformValue("z_far", view.depthEnd()); - shader_ssao_merge->setUniformValue("z_near", view.depthStart()); - shader_ssao_merge->setUniformValue("mat_proj", mproj); - shader_ssao_merge->setUniformValue("n0", 3); - shader_ssao_merge->setUniformValue("t0", 0); - shader_ssao_merge->setUniformValue("ts", 1); - shader_ssao_merge->setUniformValue("tg1", 2); - fbo_out.setWriteBuffer(lwi); - glDrawQuad(shader_ssao_merge, corner_dirs); - glDisable(GL_TEXTURE_1D); - wi = lri; - ri = lwi; - //piSwap(wi, ri); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - //piSwap(wi, ri); - } - - if (view.isFeatureEnabled(QGLView::qglReflectionsEnabled)) { - fbo_out.setWriteBuffer(2); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//_MIPMAP_LINEAR); - //glGenerateMipmap(GL_TEXTURE_2D); - glActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(0)); - glActiveTexture(GL_TEXTURE0 + 2); - glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(1)); - fbo_g.bindDepthTexture(7); - shader_ssr->bind(); - shader_ssr->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_ssr->setUniformValue("z_far", view.depthEnd()); - shader_ssr->setUniformValue("z_near", view.depthStart()); - shader_ssr->setUniformValue("mat_proj", mproj); - shader_ssr->setUniformValue("t0", 1); - shader_ssr->setUniformValue("t1", 2); - shader_ssr->setUniformValue("ts", 0); - shader_ssr->setUniformValue("td", 7); - glDrawQuad(shader_ssr, corner_dirs); - - glActiveTexture(GL_TEXTURE0); - int lri = 2, lwi = wi, lms = ri; - if (view.isFeatureEnabled(QGLView::qglReflectionsBlur)) { - shader_ssr_blur->bind(); - shader_ssr_blur->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_ssr_blur->setUniformValue("dt", QVector2D(1.f / fbo_out.width(), 1.f / fbo_out.height())); - shader_ssr_blur->setUniformValue("t0", 0); - int passes = 5; - int crad = 1; - for (int p = 0; p < passes; ++p) { - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(lri)); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//_MIPMAP_LINEAR); - fbo_out.setWriteBuffer(lwi); - shader_ssr_blur->setUniformValue("radius", GLfloat(crad)); - glDrawQuad(shader_ssr_blur); - piSwap(lwi, lri); - crad *= 2; - } - } - //qDebug() << wi << ri << lms; - wi = lri; - ri = 1 - lms; - - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi)); - glActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(1)); - glActiveTexture(GL_TEXTURE0 + 2); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(lms)); - shader_ssr_merge->bind(); - shader_ssr_merge->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_ssr_merge->setUniformValue("t0", 0); - shader_ssr_merge->setUniformValue("tg1", 1); - shader_ssr_merge->setUniformValue("ts", 2); - fbo_out.setWriteBuffer(ri); - glDrawQuad(shader_ssr_blur); - wi = ri; - ri = 1 - ri; - //piSwap(wi, ri); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi)); - piSwap(wi, ri); - } - - if (view.isFeatureEnabled(QGLView::qglDepthOfFieldEnabled)) { - if (view.isFeatureEnabled(QGLView::qglDepthOfFieldAutoFocusEnabled)) { - GLfloat cw; - //glReadBuffer(); - fbo_g.bind(); - glReadPixels(fbo_out.width() / 2, fbo_out.height() / 2, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &cw); - fbo_out.bind(); - const float _pe = 2.4e-7f; - float cz = cw + cw - 1; - cz = ((_pe - 2.f) * view.depthStart()) / (cz + _pe - 1.f); // infinite depth - float z = view.feature(QGLView::qglDepthOfFieldFocus).toFloat(), - s = view.feature(QGLView::qglDepthOfFieldAutoFocusSpeed).toFloat(); - z = z * (1.f - s) + cz * s; - view.setFeature(QGLView::qglDepthOfFieldFocus, z); - } - shader_dof->bind(); - shader_dof->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_dof->setUniformValue("z_far", view.depthEnd()); - shader_dof->setUniformValue("z_near", view.depthStart()); - shader_dof->setUniformValue("focus", view.feature(QGLView::qglDepthOfFieldFocus).toFloat()); - shader_dof->setUniformValue("diaphragm", view.feature(QGLView::qglDepthOfFieldDiaphragm).toFloat()); - shader_dof->setUniformValue("t0", 0); - shader_dof->setUniformValue("td", 7); - fbo_g.bindDepthTexture(7); - glActiveTexture(GL_TEXTURE0); - - int passes = 3; - float crad = 1.; - for (int p = 0; p < passes; ++p) { - shader_dof->setUniformValue("radius", crad); - fbo_out.setWriteBuffer(wi); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - shader_dof->setUniformValue("dt", QVector2D(1.f / fbo_out.width(), 0.f)); - glDrawQuad(shader_dof); - piSwap(wi, ri); - fbo_out.setWriteBuffer(wi); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - shader_dof->setUniformValue("dt", QVector2D(0.f, 1.f / fbo_out.height())); - glDrawQuad(shader_dof); - piSwap(wi, ri); - crad *= 2.f; - } - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - } - - if (view.isFeatureEnabled(QGLView::qglEyeAccomodationEnabled)) { - fbo_hsmall.bind(); - fbo_hsmall.setWriteBuffer(0); - shader_small->bind(); - shader_small->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_small->setUniformValue("t0", 0); - glDrawQuad(shader_small); - hcontent.resize(fbo_hsmall.width() * fbo_hsmall.height()); - glReadPixels(0, 0, fbo_hsmall.width(), fbo_hsmall.height(), GL_RGB, GL_FLOAT, hcontent.data()); - GLfloat max[3] = {0.,0.,0.};//min[3] = {10000.,10000.,10000.},; - for (int i = 0; i < hcontent.size(); ++i) { - //if (min[0] > hcontent[i].x) min[0] = hcontent[i].x; - if (max[0] < hcontent[i].x) max[0] = hcontent[i].x; - //if (min[1] > hcontent[i].y) min[1] = hcontent[i].y; - if (max[1] < hcontent[i].y) max[1] = hcontent[i].y; - //if (min[2] > hcontent[i].z) min[2] = hcontent[i].z; - if (max[2] < hcontent[i].z) max[2] = hcontent[i].z; - } - GLfloat mluma = (0.299f * max[0]) + (0.587f * max[1]) + (0.114f * max[2]); - float nexp = mluma / 16.f, dexp = nexp - exposure_, mestep = exposure_ * view.feature(QGLView::qglEyeAccomodationMaxSpeed).toFloat(); - dexp /= view.feature(QGLView::qglEyeAccomodationTime).toFloat(); - if (dexp > 0.f && dexp > mestep/4) dexp = mestep/4; - if (dexp < 0.f && dexp < -mestep) dexp = -mestep; - exposure_ += dexp; - label_exp->setText(QString("exposure: %1").arg(exposure_)); - label_exp_step->setText(QString("d_exposure: %1").arg(dexp)); - //qDebug() << min[0] << max[0] << min[1] << max[1] << min[2] << max[2]; - fbo_hsmall.release(); - - //glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - fbo_out.bind(); - fbo_out.setWriteBuffer(wi); - shader_hdr->bind(); - shader_hdr->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_hdr->setUniformValue("t0", 0); - shader_hdr->setUniformValue("exposure", GLfloat(1.f/exposure_)); - glDrawQuad(shader_hdr); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi)); - piSwap(wi, ri); - } - - if (view.isFeatureEnabled(QGLView::qglMotionBlurEnabled)) { - fbo_out.setWriteBuffer(wi); - glActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(4)); - shader_motion_blur->bind(); - shader_motion_blur->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_motion_blur->setUniformValue("dt", QVector2D(1.f / fbo_out.width(), 1.f / fbo_out.height())); - shader_motion_blur->setUniformValue("t0", 0); - shader_motion_blur->setUniformValue("ts", 1); - shader_motion_blur->setUniformValue("factor", view.feature(QGLView::qglMotionBlurFactor).toFloat()); - shader_motion_blur->setUniformValue("steps", view.feature(QGLView::qglMotionBlurSteps).toInt()); - glDrawQuad(shader_motion_blur); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi)); - piSwap(wi, ri); - } - - if (view.isFeatureEnabled(QGLView::qglBloomEnabled)) { - fbo_out.setWriteBuffer(2); - fbo_out.setReadBuffer(ri); - glBlitFramebuffer(0, 0, fbo_out.width(), fbo_out.height(), 0, 0, fbo_out.width(), fbo_out.height(), GL_COLOR_BUFFER_BIT, GL_NEAREST); - //QTime tm; - //tm.restart(); - fbo_out.setWriteBuffer(wi); - shader_bloom_0->bind(); - shader_bloom_0->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_bloom_0->setUniformValue("factor", view.feature(QGLView::qglBloomFactor).toFloat()); - shader_bloom_0->setUniformValue("threshold", view.feature(QGLView::qglBloomThreshold).toFloat()); - shader_bloom_0->setUniformValue("t0", 0); - glDrawQuad(shader_bloom_0); - glActiveTexture(GL_TEXTURE0); - piSwap(wi, ri); - - shader_bloom_1->bind(); - shader_bloom_1->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_bloom_1->setUniformValue("dt", QVector2D(1.f / fbo_out.width(), 1.f / fbo_out.height())); - shader_bloom_1->setUniformValue("t0", 0); - int radius = view.feature(QGLView::qglBloomRadius).toInt(); - int passes = qMax(int(ceil(log2(radius))), 1); - int crad = 1; - for (int p = 0; p < passes; ++p) { - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - fbo_out.setWriteBuffer(wi); - if (p == passes - 1) - crad = piMax(1, radius - crad); - shader_bloom_1->setUniformValue("radius", crad); - glDrawQuad(shader_bloom_1); - piSwap(wi, ri); - crad *= 2; - } - //qDebug() << tm.elapsed(); - fbo_out.setWriteBuffer(wi); -// glActiveTextureChannel(0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri)); - glActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(2)); - shader_fbo_add->bind(); - shader_fbo_add->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); - shader_fbo_add->setUniformValue("t0", 0); - shader_fbo_add->setUniformValue("t1", 1); - glDrawQuad(shader_fbo_add); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi)); - piSwap(wi, ri); - } - - glUseProgram(0); - fbo_out.release(); - - if (view.isFeatureEnabled(QGLView::qglFXAA)) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - shader_fxaa->bind(); - shader_fxaa->setUniformValue("dt", QVector2D(1.f / view.width(), 1.f / view.height())); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - } - glDrawQuad(); - if (view.isFeatureEnabled(QGLView::qglFXAA)) - shader_fxaa->release(); - prev_proj = mproj; - prev_view = mview; -} - - -void RendererDeferredShading::init(int width, int height) { - initializeOpenGLFunctions(); - resize(width, height); -} - - -void RendererDeferredShading::resize(int width, int height) { - fbo_g.resize(width, height); - fbo_out.resize(width, height); - fbo_hsmall.resize(width / 16, height / 16); -// view.setSceneRect(QRect(0, 0, width, height)); - //df->move(-width / 2, -height / 2); -} - - -void RendererDeferredShading::reloadShaders() { - for (int i = 0; i < shaders.size(); ++i) { - QOpenGLShaderProgram * p(*(shaders[i].second)); - if (!p) p = new QOpenGLShaderProgram(view.context()); - loadShaders(p, shaders[i].first, "://shaders"); - *(shaders[i].second) = p; - } -} - - -void RendererDeferredShading::setupShadersTextures(GLObjectBase & object, GLRendererBase::RenderingParameters & rp) { - glActiveTexture(GL_TEXTURE0 + 6); - glBindTexture(GL_TEXTURE_2D, white_image_id); - glActiveTexture(GL_TEXTURE0 + 7); - glBindTexture(GL_TEXTURE_2D, violent_image_id); -} - - -void RendererDeferredShading::setupDSLights(int pass, const QMatrix4x4 & view_matrix) { - int light_start, light_end, lmax, shadow_start = 7; - light_start = pass * lights_per_pass; - light_end = qMin((pass + 1) * lights_per_pass, view.lights().size()); - lmax = light_start + lights_per_pass; - amb_light.intensity = (pass == 0 ? 1. : 0.); - amb_light.setColor(pass == 0 ? view.ambientColor() : Qt::black); - amb_light.setName("ambient"); - setUniformLight(shader_ds_1, &amb_light, "qgl_AmbientLight"); - amb_light.intensity = 0.; - QVector lv; - for (int i = light_start; i < light_end; ++i) { - lv << view.lights()[i]; - glActiveTexture(GL_TEXTURE0 + shadow_start + i - light_start); - glBindTexture(GL_TEXTURE_2D, lv.back()->shadow_map.depthTexture()); - if (view.isFeatureEnabled(QGLView::qglShadowsSoftEnabled)) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); - } - amb_light.setName("null"); - for (int i = light_end; i < lmax; ++i) - lv << &amb_light; - //QStringList lnl; foreach (Light * l, lv) lnl << l->name(); - //qDebug() << " lights" << light_start << "->" << light_end << ", inactive" << (lmax - light_end) << lnl; - setUniformLights(shader_ds_1, lv, view_matrix, shadow_start); -} - - -void RendererDeferredShading::setupAmbientLight(const QColor & a, bool first_pass) { - -} diff --git a/test/qglview/renderer_deferred_shading.h b/test/qglview/renderer_deferred_shading.h deleted file mode 100644 index 19c567d..0000000 --- a/test/qglview/renderer_deferred_shading.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef RENDERER_DEFERRED_SHADING_H -#define RENDERER_DEFERRED_SHADING_H - -#include "qglview.h" -#include - - -class RendererDeferredShading: public GLRendererBase -{ -public: - RendererDeferredShading(QGLView * view); - virtual ~RendererDeferredShading(); - - virtual void renderScene(); - void init(int width, int height); - void resize(int width, int height); - void reloadShaders(); - -protected: - void setupShadersTextures(GLObjectBase & object, RenderingParameters & rp); - void setupShadersLights(int lights_count) {cplc = lights_count;} - void setupDSLights(int pass, const QMatrix4x4 & view_matrix); - void setupAmbientLight(const QColor & a, bool first_pass); - -private: - typedef QPair ShaderPair; - - int cplc, lights_per_pass; - float exposure_; - GLFramebuffer fbo_g, fbo_out, fbo_hsmall; - QOpenGLShaderProgram * shader_fxaa, * shader_ds_0, * shader_ds_1, * shader_hdr, * shader_small; - QOpenGLShaderProgram * shader_bloom_0, * shader_bloom_1, * shader_motion_blur, * shader_fbo_add; - QOpenGLShaderProgram * shader_shadow, * shader_ssr, * shader_ssr_blur, * shader_ssr_merge; - QOpenGLShaderProgram * shader_ssao_blur, * shader_ssao_merge, * shader_dof; - GLuint tnoise; - QVector shaders; - - QMatrix4x4 prev_view, prev_proj; - QMatrix3x3 nm; - QVector4D corner_dirs[4]; - QVector hcontent; - Light amb_light; - - QWidget * df; - QLabel * label_exp, * label_exp_step; - -}; - -#endif // RENDERER_DEFERRED_SHADING_H diff --git a/test/qglview/renderer_simple.cpp b/test/qglview/renderer_simple.cpp deleted file mode 100644 index 164af78..0000000 --- a/test/qglview/renderer_simple.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "renderer_simple.h" - - -RendererSimple::RendererSimple(QGLView * view_): GLRendererBase(view_), fbo(2) -, fbo_c(1, true, GL_RGBA32F) /// WARNING -{ - shader_fxaa = 0; - shader = 0; /// WARNING -} - - -void RendererSimple::reloadShaders() { - if (shader_fxaa == 0) { - shader_fxaa = new QOpenGLShaderProgram(view.context()); - loadShaders(shader_fxaa, "FXAA", "://shaders"); - } - /*if (shader == 0) { - shader = new QOpenGLShaderProgram(view.context()); /// WARNING - loadShaders(shader, "test", "shaders"); /// WARNING - }*/ -} - - -void RendererSimple::resizeFBO(int w, int h) { - initializeOpenGLFunctions(); - fbo.resize(w, h); - fbo_c.resize(w, h); /// WARNING -} - - -void RendererSimple::renderScene() { - int passes = (view.lightsCount() - 1) / 8 + 1; - //QMatrix4x4 pm = getGLMatrix(GL_PROJECTION_MATRIX), mvm = getGLMatrix(GL_MODELVIEW_MATRIX), pmvm = pm * mvm, lpm, lmvm, lpmvm; - glSetCapEnabled(GL_MULTISAMPLE, view.isFeatureEnabled(QGLView::qglMSAA)); - if (passes < 1) passes = 1; - //glEnable(GL_FOG); - if (view.isFeatureEnabled(QGLView::qglFXAA)) fbo.bind(); - //glEnable(GL_TEXTURE_2D); - if (passes > 1) { - fbo.bind(); - fbo.setWriteBuffer(0); - glClearFramebuffer(); - } - glEnable(GL_RESCALE_NORMAL); - for (int l = 0; l < passes; ++l) { - if (passes > 1) fbo.setWriteBuffer(1); - if (l == 0) { - glClearFramebuffer(view.backColor()); - glEnableDepth(); - } else { - glClearFramebuffer(Qt::black, false); - glEnable(GL_DEPTH_TEST); - glDepthMask(GL_FALSE); - glDepthFunc(GL_EQUAL); - } - //view.camera().apply(view.aspect); - rp.cam_offset_matrix = view.camera()->offsetMatrix(); - rp.prepare(); - setupLights(l, 8); - - - /*fbo_c.bind(); - glClearFramebuffer(); - //shader->bind(); /// WARNING - renderObjects(GLObjectBase::Solid, l, 0, true, view.isLightEnabled(), view.isFogEnabled()); - //shader->release(); /// WARNING - if (QRect(QPoint(), fbo_c.size()).contains(mpos)) { - //qDebug() << mpos; - GLfloat data[4] = {0, 0, 0, 0}; - glReadPixels(mpos.x(), fbo_c.height() - mpos.y(), 1, 1, GL_RGBA, GL_FLOAT, data); - //qDebug() << QVector3D(data[0], data[1], data[2]); - } - fbo_c.release();*/ - //qDebug() << rp.viewproj_matrix << (getGLMatrix(GL_PROJECTION_MATRIX)*getGLMatrix(GL_MODELVIEW_MATRIX)); - renderObjects(GLObjectBase::Solid, l, nullptr, true, view.isLightEnabled(), view.isFogEnabled()); - - - //renderObjects(GLObjectBase::Solid, l, 0, true, true, view.isFogEnabled()); - renderObjects(GLObjectBase::Transparent, l, nullptr, true, true, view.isFogEnabled()); - if (passes > 1) { - glSetLightEnabled(false); - glSetCapEnabled(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - view.glReleaseTextures(); - glBindTexture(GL_TEXTURE_2D, fbo.colorTexture(1)); - glDisableDepth(); - fbo.setWriteBuffer(0); - glDrawQuad(); - } - } - if (view.isFeatureEnabled(QGLView::qglFXAA) || passes > 1) { - fbo.release(); - //glClearFramebuffer(); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo.colorTexture()); - glSetLightEnabled(false); - glSetCapEnabled(GL_BLEND, false); - glDisableDepth(); - if (view.isFeatureEnabled(QGLView::qglFXAA)) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - shader_fxaa->bind(); - shader_fxaa->setUniformValue("dt", QVector2D(1.f / view.width(), 1.f / view.height())); - glDrawQuad(); - shader_fxaa->release(); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glDrawQuad(); - } - } -} diff --git a/test/qglview/renderer_simple.h b/test/qglview/renderer_simple.h deleted file mode 100644 index c55cd4f..0000000 --- a/test/qglview/renderer_simple.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef RENDERER_SIMPLE_H -#define RENDERER_SIMPLE_H - -#include "qglview.h" - -class RendererSimple: public GLRendererBase -{ -public: - RendererSimple(QGLView * view); - virtual ~RendererSimple() {if (shader_fxaa != 0) delete shader_fxaa;} - - virtual void renderScene(); - virtual void reloadShaders(); - virtual void init(int width, int height) {resizeFBO(width, height);} - virtual void resize(int width, int height) {resizeFBO(width, height);} - - QPoint mpos; - -protected: - -private: - void resizeFBO(int w, int h); - - GLFramebuffer fbo, fbo_c; - QOpenGLShaderProgram * shader_fxaa, * shader; - -}; - -#endif // RENDERER_SIMPLE_H diff --git a/test/qglview/shaders/FXAA.frag b/test/qglview/shaders/FXAA.frag deleted file mode 100644 index 25082d4..0000000 --- a/test/qglview/shaders/FXAA.frag +++ /dev/null @@ -1,230 +0,0 @@ -#version 130 - -in vec4 posPos; - -uniform sampler2D tex0; // 0 -//uniform float vx_offset; -uniform vec2 dt; -uniform float FXAA_SPAN_MAX = 8.; -uniform float FXAA_REDUCE_MUL = 1. / 8.; - -#define FxaaInt2 ivec2 -//#define vec2 vec2 - -vec3 FxaaPixelShader(vec4 posPos, // Output of FxaaVertexShader interpolated across screen. - sampler2D tex, // Input texture. - vec2 rcpFrame) { // Constant {1.0/frameWidth, 1.0/frameHeight}. -/*---------------------------------------------------------*/ -// #define FXAA_REDUCE_MIN (1. / 128.) - #define FXAA_REDUCE_MIN (1. / 128.) - //#define FXAA_REDUCE_MUL (1.0/8.0) - //#define FXAA_SPAN_MAX 8.0 -/*---------------------------------------------------------*/ - vec3 rgbNW = texture2D(tex, posPos.zw).xyz; - vec3 rgbNE = textureOffset(tex, posPos.zw, ivec2(1, 0)).xyz; - vec3 rgbSW = textureOffset(tex, posPos.zw, ivec2(0, 1)).xyz; - vec3 rgbSE = textureOffset(tex, posPos.zw, ivec2(1, 1)).xyz; - vec3 rgbM = texture2D(tex, posPos.xy).xyz; -/*---------------------------------------------------------*/ - vec3 luma = vec3(0.299, 0.587, 0.114); - float lumaNW = dot(rgbNW, luma); - float lumaNE = dot(rgbNE, luma); - float lumaSW = dot(rgbSW, luma); - float lumaSE = dot(rgbSE, luma); - float lumaM = dot(rgbM, luma); -/*---------------------------------------------------------*/ - float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE))); - float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE))); -/*---------------------------------------------------------*/ - vec2 dir; - dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE)); - dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE)); -/*---------------------------------------------------------*/ - float dirReduce = max( - (lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), - FXAA_REDUCE_MIN); - float rcpDirMin = 1. / (min(abs(dir.x), abs(dir.y)) + dirReduce); - dir = min(vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX), - max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), - dir * rcpDirMin)) * rcpFrame.xy; -/*--------------------------------------------------------*/ - vec3 rgbA = (1. / 2.) * ( - texture2D(tex, posPos.xy + dir * (1. / 3. - 0.5)).xyz + - texture2D(tex, posPos.xy + dir * (2. / 3. - 0.5)).xyz); - vec3 rgbB = rgbA * (1. / 2.) + (1. / 4.) * ( - texture2D(tex, posPos.xy + dir * (0. / 3. - 0.5)).xyz + - texture2D(tex, posPos.xy + dir * (3. / 3. - 0.5)).xyz); - float lumaB = dot(rgbB, luma); - if ((lumaB < lumaMin) || (lumaB > lumaMax)) return rgbA; - return rgbB; -} - - -vec3 Fxaa3PixelShader ( - // {xy} = center of pixel - vec4 pos, - // {xyzw} = not used on FXAA3 Quality - //vec4 posPos, - // {rgb_} = color in linear or perceptual color space - // {__a} = luma in perceptual color space (not linear) - sampler2D tex, - // This must be from a constant/uniform. - // {x_} = 1.0/screenWidthInPixels - // {_y} = 1.0/screenHeightInPixels - vec2 rcpFrame - // {xyzw} = not used on FXAA3 Quality - //vec4 rcpFrameOpt -) { -/*--------------------------------------------------------------------------*/ - //#if (FXAA_GATHER4_ALPHA == 1) - /*vec4 luma4A = FxaaTexOffAlpha4(tex, pos.xy, FxaaInt2(-1, -1), rcpFrame.xy); - #if (FXAA_DISCARD == 0) - vec4 rgbyM = texture2D(tex, pos.xy); - #endif - vec4 luma4B = FxaaTexAlpha4(tex, pos.xy, rcpFrame.xy); - float lumaNE = textureOffset(tex, pos.xy, ivec(1, -1)).w; - float lumaSW = textureOffset(tex, pos.xy, ivec(-1, 1)).w; - float lumaNW = luma4A.w; - float lumaN = luma4A.z; - float lumaW = luma4A.x; - float lumaM = luma4A.y; - float lumaE = luma4B.z; - float lumaS = luma4B.x; - float lumaSE = luma4B.y;*/ - //#else - vec3 luma = vec3(0.299, 0.587, 0.114); - float lumaN = dot(textureLodOffset(tex, pos.xy, 0., ivec2(0, -1)).rgb, luma); - float lumaW = dot(textureLodOffset(tex, pos.xy, 0., ivec2(-1, 0)).rgb, luma); - vec4 rgbyM = texture2D(tex, pos.xy); - float lumaE = dot(textureLodOffset(tex, pos.xy, 0., ivec2( 1, 0)).rgb, luma); - float lumaS = dot(textureLodOffset(tex, pos.xy, 0., ivec2( 0, 1)).rgb, luma); - float lumaM = dot(rgbyM.rgb, luma); - //#endif -/*--------------------------------------------------------------------------*/ - float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE))); - float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE))); - float range = rangeMax - rangeMin; - //return vec4(range); -/*--------------------------------------------------------------------------*/ - #define FXAA_QUALITY_EDGE_THRESHOLD_MIN (1.0/12.0) - #define FXAA_QUALITY_EDGE_THRESHOLD (1.0/6.0) - if(range < max(FXAA_QUALITY_EDGE_THRESHOLD_MIN, rangeMax * FXAA_QUALITY_EDGE_THRESHOLD)) - /*#if (FXAA_DISCARD == 1) - FxaaDiscard; - #else*/ - return rgbyM.rgb; - //return vec3(0); - //#endif -/*--------------------------------------------------------------------------*/ - //#if (FXAA_GATHER4_ALPHA == 0) - float lumaNW = dot(textureLodOffset(tex, pos.xy, 0., ivec2(-1,-1)).rgb, luma); - float lumaNE = dot(textureLodOffset(tex, pos.xy, 0., ivec2( 1,-1)).rgb, luma); - float lumaSW = dot(textureLodOffset(tex, pos.xy, 0., ivec2(-1, 1)).rgb, luma); - float lumaSE = dot(textureLodOffset(tex, pos.xy, 0., ivec2( 1, 1)).rgb, luma); - //#endif -/*--------------------------------------------------------------------------*/ - #define FXAA_QUALITY_SUBPIX_CAP (3.0/4.0) - //#define FXAA_QUALITY_SUBPIX_CAP 0 - #define FXAA_QUALITY_SUBPIX_TRIM (1.0/4.0) - #define FXAA_QUALITY_SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_QUALITY_SUBPIX_TRIM)) -/*--------------------------------------------------------------------------*/ - float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25; - float rangeL = abs(lumaL - lumaM); - float blendL = clamp((rangeL / range) - FXAA_QUALITY_SUBPIX_TRIM, 0., 1.) * FXAA_QUALITY_SUBPIX_TRIM_SCALE; - blendL = min(FXAA_QUALITY_SUBPIX_CAP, blendL); -/*--------------------------------------------------------------------------*/ - float edgeVert = - abs(lumaNW + (-2.0 * lumaN) + lumaNE) + - 10.0 * abs(lumaW + (-2.0 * lumaM) + lumaE ) + - abs(lumaSW + (-2.0 * lumaS) + lumaSE); - float edgeHorz = - abs(lumaNW + (-2.0 * lumaW) + lumaSW) + - 10.0 * abs(lumaN + (-2.0 * lumaM) + lumaS ) + - abs(lumaNE + (-2.0 * lumaE) + lumaSE); - //return vec3(edgeHorz); - //float edgeVert = abs(lumaS - lumaN); - //float edgeHorz = abs(lumaE - lumaW); - bool horzSpan = edgeHorz >= edgeVert; -/*--------------------------------------------------------------------------*/ - float lengthSign = horzSpan ? -rcpFrame.y : -rcpFrame.x; - //if (edgeHorz == edgeVert) ;//lengthSign = 0.; - if(!horzSpan) { - lumaN = lumaW; - lumaS = lumaE; - } - float gradientN = abs(lumaN - lumaM); - float gradientS = abs(lumaS - lumaM); - lumaN = (lumaN + lumaM) * 0.5; - lumaS = (lumaS + lumaM) * 0.5; -/*--------------------------------------------------------------------------*/ - bool pairN = gradientN >= gradientS; - if(!pairN) { - lumaN = lumaS; - gradientN = gradientS; - lengthSign = -lengthSign; - } - vec2 posN; - posN = pos.xy + (horzSpan ? vec2(0.0, lengthSign * 0.5) : vec2(lengthSign * 0.5, 0.0)); - //posN.x = pos.x + (horzSpan ? 0.0 : lengthSign * 0.5); - //posN.y = pos.y + (horzSpan ? lengthSign * 0.5 : 0.0); -/*--------------------------------------------------------------------------*/ - #define FXAA_SEARCH_STEPS 8 - #define FXAA_SEARCH_THRESHOLD (1.0/8.0) -/*--------------------------------------------------------------------------*/ - gradientN *= FXAA_SEARCH_THRESHOLD; -/*--------------------------------------------------------------------------*/ - vec2 posP = posN; - vec2 offNP = horzSpan ? vec2(rcpFrame.x, 0.0) : vec2(0.0, rcpFrame.y); - float lumaEndN = 0.; - float lumaEndP = 0.; - bool doneN = false; - bool doneP = false; - posN += offNP * (-1.5); - posP += offNP * ( 1.5); - for(int i = 0; i < FXAA_SEARCH_STEPS; i++) { - lumaEndN = dot(texture2DLod(tex, posN.xy, 0.).rgb, luma); - lumaEndP = dot(texture2DLod(tex, posP.xy, 0.).rgb, luma); - bool doneN2 = abs(lumaEndN - lumaN) >= gradientN; - bool doneP2 = abs(lumaEndP - lumaN) >= gradientN; - if(doneN2 && !doneN) posN += offNP; - if(doneP2 && !doneP) posP -= offNP; - if(doneN2 && doneP2) break; - doneN = doneN2; - doneP = doneP2; - if(!doneN) posN -= offNP * 2.0; - if(!doneP) posP += offNP * 2.0; - } -/*--------------------------------------------------------------------------*/ - float dstN = horzSpan ? pos.x - posN.x : pos.y - posN.y; - float dstP = horzSpan ? posP.x - pos.x : posP.y - pos.y; -/*--------------------------------------------------------------------------*/ - bool directionN = dstN < dstP; - lumaEndN = directionN ? lumaEndN : lumaEndP; -/*--------------------------------------------------------------------------*/ - if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0)) - lengthSign = 0.0; -/*--------------------------------------------------------------------------*/ - float spanLength = (dstP + dstN); - dstN = directionN ? dstN : dstP; - float subPixelOffset = 0.5 + (dstN * (-1.0/spanLength)); - subPixelOffset += blendL * (1.0/8.0); - subPixelOffset *= lengthSign; - vec3 rgbF = texture2DLod(tex, pos.xy + (horzSpan ? vec2(0., subPixelOffset) : vec2(subPixelOffset, 0.)), 0.).xyz; -/*--------------------------------------------------------------------------*/ - /*#if (FXAA_LINEAR == 1) - lumaL *= lumaL; - #endif*/ - float lumaF = dot(rgbF, vec3(0.299, 0.587, 0.114)) + (1.0/(65536.0*256.0)); - float lumaB = mix(lumaF, lumaL, blendL); - float scale = min(4.0, lumaB/lumaF); - rgbF *= scale; - return vec3(rgbF);//, lumaM.rgb); - //, lumaM.rgb); -} - - -void main() { - gl_FragColor.rgb = Fxaa3PixelShader(posPos, tex0, dt); -} - - diff --git a/test/qglview/shaders/FXAA.vert b/test/qglview/shaders/FXAA.vert deleted file mode 100644 index d02e1b6..0000000 --- a/test/qglview/shaders/FXAA.vert +++ /dev/null @@ -1,13 +0,0 @@ -#version 130 - -out vec4 posPos; - -uniform float FXAA_SUBPIX_SHIFT = 1. / 4.; -uniform vec2 dt; - -void main(void) { - posPos.xy = gl_MultiTexCoord0.xy; - posPos.zw = gl_MultiTexCoord0.xy - (dt * (0.5 + FXAA_SUBPIX_SHIFT)); - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = ftransform(); -} diff --git a/test/qglview/shaders/bloom_0.frag b/test/qglview/shaders/bloom_0.frag deleted file mode 100644 index 15714e1..0000000 --- a/test/qglview/shaders/bloom_0.frag +++ /dev/null @@ -1,8 +0,0 @@ -#version 120 - -uniform sampler2D t0; -uniform float clum; - -void main(void) { - gl_FragColor = max((texture2D(t0, gl_TexCoord[0].xy) / clum - 0.8) * 5., vec4(0.)); -} diff --git a/test/qglview/shaders/bloom_1.frag b/test/qglview/shaders/bloom_1.frag deleted file mode 100644 index 17fa461..0000000 --- a/test/qglview/shaders/bloom_1.frag +++ /dev/null @@ -1,30 +0,0 @@ -#version 130 - -uniform sampler2D t0; -uniform vec2 vsize; - -void main(void) { - vec2 tc = gl_TexCoord[0].xy, dt = 2. / vsize, dt2 = dt + dt; - gl_FragColor = (texture2D(t0, tc) * 3. + - textureOffset(t0, tc, ivec2(1, 0)) * 2. + - textureOffset(t0, tc, ivec2(0, 1)) * 2. + - textureOffset(t0, tc, ivec2(-1, 0)) * 2. + - textureOffset(t0, tc, ivec2(0, -1)) * 2. + - textureOffset(t0, tc, ivec2(1, 1)) * 1.5 + - textureOffset(t0, tc, ivec2(1, -1)) * 1.5 + - textureOffset(t0, tc, ivec2(-1, -1)) * 1.5 + - textureOffset(t0, tc, ivec2(-1, 1)) * 1.5 + - textureOffset(t0, tc, ivec2(2, 0)) + - textureOffset(t0, tc, ivec2(0, 2)) + - textureOffset(t0, tc, ivec2(-2, 0)) + - textureOffset(t0, tc, ivec2(0, -2)) + - textureOffset(t0, tc, ivec2(2, 1)) + - textureOffset(t0, tc, ivec2(2, -1)) + - textureOffset(t0, tc, ivec2(-2, -1)) + - textureOffset(t0, tc, ivec2(-2, 1)) + - textureOffset(t0, tc, ivec2(1, 2)) + - textureOffset(t0, tc, ivec2(1, -2)) + - textureOffset(t0, tc, ivec2(-1, -2)) + - textureOffset(t0, tc, ivec2(-1, 2))) / 29.; - //gl_FragColor = texture2D(t0, tc); -} diff --git a/test/qglview/shaders/bloom_pass_0.frag b/test/qglview/shaders/bloom_pass_0.frag deleted file mode 100644 index abd5404..0000000 --- a/test/qglview/shaders/bloom_pass_0.frag +++ /dev/null @@ -1,8 +0,0 @@ -#version 150 - -uniform sampler2D t0; -uniform float factor = 1., threshold = 0.8; - -void main(void) { - qgl_FragData[0].rgb = max(texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb - vec3(threshold), vec3(0.)) * factor; -} diff --git a/test/qglview/shaders/bloom_pass_0.vert b/test/qglview/shaders/bloom_pass_0.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/bloom_pass_0.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/bloom_pass_1.frag b/test/qglview/shaders/bloom_pass_1.frag deleted file mode 100644 index 12ad08b..0000000 --- a/test/qglview/shaders/bloom_pass_1.frag +++ /dev/null @@ -1,55 +0,0 @@ -#version 150 - -uniform sampler2D t0; -uniform int radius = 2; -uniform vec2 dt; - -void main(void) { - vec2 tc = qgl_FragTexture.xy; - float r = float(radius); - int o = radius, o2 = radius * 2; - vec3 scol = (texture(t0, tc).rgb * 3. + - texture(t0, tc + dt * vec2( o, 0 )).rgb * 2. + - texture(t0, tc + dt * vec2( 0, o )).rgb * 2. + - texture(t0, tc + dt * vec2( -o, 0 )).rgb * 2. + - texture(t0, tc + dt * vec2( 0, -o)).rgb * 2. + - texture(t0, tc + dt * vec2( o, o )).rgb * 1.5 + - texture(t0, tc + dt * vec2( o, -o)).rgb * 1.5 + - texture(t0, tc + dt * vec2( -o, -o )).rgb * 1.5 + - texture(t0, tc + dt * vec2( -o, o )).rgb * 1.5 + - texture(t0, tc + dt * vec2( o2, 0 )).rgb + - texture(t0, tc + dt * vec2( 0, o2)).rgb + - texture(t0, tc + dt * vec2(-o2, 0 )).rgb + - texture(t0, tc + dt * vec2( 0, -o2)).rgb + - texture(t0, tc + dt * vec2( o2, o )).rgb + - texture(t0, tc + dt * vec2( o2, -o)).rgb + - texture(t0, tc + dt * vec2(-o2, -o )).rgb + - texture(t0, tc + dt * vec2(-o2, o )).rgb + - texture(t0, tc + dt * vec2( o, o2)).rgb + - texture(t0, tc + dt * vec2( o, -o2)).rgb + - texture(t0, tc + dt * vec2( -o, -o2)).rgb + - texture(t0, tc + dt * vec2( -o, o2)).rgb) / 29.; - /*vec3 scol = (texelFetch(t0, tc, 0).rgb * 3. + - texelFetch(t0, tc + ivec2( o, 0 ), 0).rgb * 2. + - texelFetch(t0, tc + ivec2( 0, o ), 0).rgb * 2. + - texelFetch(t0, tc + ivec2( -o, 0 ), 0).rgb * 2. + - texelFetch(t0, tc + ivec2( 0, -o), 0).rgb * 2. + - texelFetch(t0, tc + ivec2( o, o ), 0).rgb * 1.5 + - texelFetch(t0, tc + ivec2( o, -o), 0).rgb * 1.5 + - texelFetch(t0, tc + ivec2( -o, -o ), 0).rgb * 1.5 + - texelFetch(t0, tc + ivec2( -o, o ), 0).rgb * 1.5 + - texelFetch(t0, tc + ivec2( o2, 0 ), 0).rgb + - texelFetch(t0, tc + ivec2( 0, o2), 0).rgb + - texelFetch(t0, tc + ivec2(-o2, 0 ), 0).rgb + - texelFetch(t0, tc + ivec2( 0, -o2), 0).rgb + - texelFetch(t0, tc + ivec2( o2, o ), 0).rgb + - texelFetch(t0, tc + ivec2( o2, -o), 0).rgb + - texelFetch(t0, tc + ivec2(-o2, -o ), 0).rgb + - texelFetch(t0, tc + ivec2(-o2, o ), 0).rgb + - texelFetch(t0, tc + ivec2( o, o2), 0).rgb + - texelFetch(t0, tc + ivec2( o, -o2), 0).rgb + - texelFetch(t0, tc + ivec2( -o, -o2), 0).rgb + - texelFetch(t0, tc + ivec2( -o, o2), 0).rgb) / 29.;*/ - qgl_FragData[0].rgb = scol; - //qgl_FragData[0].rgb = vec3(r/10.); -} diff --git a/test/qglview/shaders/bloom_pass_1.vert b/test/qglview/shaders/bloom_pass_1.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/bloom_pass_1.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/dof.frag b/test/qglview/shaders/dof.frag deleted file mode 100644 index 4d1d81e..0000000 --- a/test/qglview/shaders/dof.frag +++ /dev/null @@ -1,47 +0,0 @@ -#version 150 - -uniform float z_near, z_far; -uniform sampler2D t0, td; -uniform vec2 dt; -uniform float radius, focus, diaphragm; - -float w, sum; -const float _pe = 2.4e-7; - -vec4 getTexel(vec2 c, float coeff) { - vec4 ret = texture(t0, c); - float cw = texture(td, c).r; - cw = clamp(1. - abs(cw - w) * 1000, 0., 1.) * coeff; - sum += cw; - return ret * cw; -} - -void main(void) { - vec2 tc = qgl_FragTexture.xy; - vec4 scol = texture(t0, tc); - w = texture(td, tc).r; - float z = w + w - 1; - z = ((_pe - 2.) * z_near) / (z + _pe - 1.); // infinite depth - z = 1./(z + 1); - float cf = 1./(focus + 1); - float factor = clamp(abs(z - cf) * diaphragm, 0, 100); - factor = 1. - 1. / (factor + 1.); - factor *= factor; - factor *= factor; - //factor *= factor; - factor *= radius; - vec2 cdt = factor * dt; - sum = 1.; - scol += getTexel(tc + (cdt * 1), 2.5); - scol += getTexel(tc + (cdt * 2), 2.0); - scol += getTexel(tc + (cdt * 3), 1.5); - scol += getTexel(tc + (cdt * 4), 1.0); - scol += getTexel(tc + (cdt * 5), 0.5); - scol += getTexel(tc + (cdt * -1), 2.5); - scol += getTexel(tc + (cdt * -2), 2.0); - scol += getTexel(tc + (cdt * -3), 1.5); - scol += getTexel(tc + (cdt * -4), 1.0); - scol += getTexel(tc + (cdt * -5), 0.5); - scol /= sum; - qgl_FragData[0].rgba = scol; -} diff --git a/test/qglview/shaders/dof.vert b/test/qglview/shaders/dof.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/dof.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/downscale.frag b/test/qglview/shaders/downscale.frag deleted file mode 100644 index 0cef038..0000000 --- a/test/qglview/shaders/downscale.frag +++ /dev/null @@ -1,7 +0,0 @@ -#version 150 - -uniform sampler2D t0; - -void main(void) { - qgl_FragData[0].rgb = textureLod(t0, qgl_FragTexture.xy, 3).rgb; -} diff --git a/test/qglview/shaders/downscale.vert b/test/qglview/shaders/downscale.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/downscale.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/dsl_pass_0.frag b/test/qglview/shaders/dsl_pass_0.frag deleted file mode 100644 index e1e6782..0000000 --- a/test/qglview/shaders/dsl_pass_0.frag +++ /dev/null @@ -1,67 +0,0 @@ -#version 150 - -//#extension GL_ARB_conservative_depth: enable -//layout(depth_less) out float gl_FragDepth; - -in vec3 src_normal, normal, binormal;//, et; -in vec4 pos, ppos; -in float fogCoord, FC, C; -in mat3 TBN; - -uniform bool acc_fog; -uniform vec2 dt; -uniform float z_far, z_near; - -const vec3 luma = vec3(0.299, 0.587, 0.114); - -void main(void) { - //float z = pos.w;//((z_near / (z_near-z_far)) * z_far) / (pos.w - (z_far / (z_far-z_near))); - //float logz = log(pos.w * C + 1.) * FC; - vec4 dc = qgl_FragColor; - vec2 tc = qgl_FragTexture.xy; - float hei = dot(texture(qgl_Material.map_relief.map, tc).rgb, luma) * qgl_Material.map_relief.amount + qgl_Material.map_relief.offset; - - vec3 n, dn, bn; - dn = texture(qgl_Material.map_normal.map, tc).rgb - vec3(0.5, 0.5, 1.); - dn = dn * qgl_Material.map_normal.amount + qgl_Material.map_normal.offset; - dn.y = -dn.y; - dn = TBN * dn; - //dn.z = 0; - n = normalize(qgl_NormalMatrix * (normal + dn)); - bn = normalize(qgl_NormalMatrix * binormal); - //n = dn; - - dc *= texture(qgl_Material.map_diffuse.map, tc) * qgl_Material.map_diffuse.amount + qgl_Material.map_diffuse.offset; - - vec4 spec = texture(qgl_Material.map_specular.map, tc) * qgl_Material.map_specular.amount + qgl_Material.map_specular.offset; - spec *= qgl_Material.color_specular; - float specularity = dot(texture(qgl_Material.map_specularity.map, tc).rgb, luma) * qgl_Material.map_specularity.amount + qgl_Material.map_specularity.offset; - specularity = clamp(specularity, 0.05, 0.99); - float reflectivity = qgl_Material.reflectivity;//dot(texture(qgl_Material.map_specularity.map, tc).rgb, luma) * qgl_Material.map_specularity.amount + qgl_Material.map_specularity.offset; - reflectivity = clamp(reflectivity, 0., 1.); - vec4 self = texture(qgl_Material.map_self_illumination.map, tc) * qgl_Material.map_self_illumination.amount + qgl_Material.map_self_illumination.offset; - self *= qgl_Material.color_self_illumination; - - vec3 speed = pos.xyz/pos.w - ppos.xyz/ppos.w; - //speed /= abs(pos.z); - - //gl_FragDepth = logz; - qgl_FragData[0] = vec4(dc.rgb, 0.); - qgl_FragData[1] = vec4(n.xyz, specularity + round(reflectivity * 100)); - qgl_FragData[2] = vec4(spec.rgb, hei); - qgl_FragData[3] = vec4(self.rgb, bn.x); - qgl_FragData[4] = vec4(speed.xy, bn.yz); - - //gl_FragData[0] = vec4(et.xyz, pos.w); - //gl_FragDepth = gl_FragCoord.z - clamp(hei / pos.z / pos.z / (abs(n.z) + 1), -0.01, 0.01); - /*vec4 dp = pos; - dp.x = floor(dp.w / 255.) / 255.; - dp.w -= dp.x * 65025; - dp.y = floor(dp.w) / 255.; - dp.w -= dp.y * 255.; - dp.z = fract(dp.w);*/ - //dp.x = dp.w; - //dp.w = (gl_FrontMaterial.specular.r + gl_FrontMaterial.specular.g + gl_FrontMaterial.specular.b) / 3. / 25.5; - //gl_FragData[2] = dp; - //gl_FragData[3] = vec4(light_model / 255., 0, 0, 0); -} diff --git a/test/qglview/shaders/dsl_pass_0.vert b/test/qglview/shaders/dsl_pass_0.vert deleted file mode 100644 index ab3f806..0000000 --- a/test/qglview/shaders/dsl_pass_0.vert +++ /dev/null @@ -1,46 +0,0 @@ -#version 150 - -out vec3 src_normal, normal, binormal;//, et; -out vec4 pos, ppos; -out float fogCoord, FC, C; -out mat3 TBN; - -uniform bool acc_fog; -uniform vec2 dt; -uniform vec3 eye; -uniform mat4 prev_ModelViewProjectioMatrix; -uniform float z_near, z_far; - -void main(void) { - normal = qgl_Normal;//(qgl_NormalMatrix * qgl_Normal); - binormal = qgl_Bitangent;//(qgl_NormalMatrix * qgl_Normal); - pos = qgl_ftransform(); - TBN = mat3(qgl_Tangent, qgl_Bitangent, qgl_Normal); - /*if (acc_fog) { - fogCoord = (gl_Fog.end - length(pos.xyz) * 0.85) / (gl_Fog.end - gl_Fog.start); - fogCoord = 1. - clamp(fogCoord, 0., 1.); - }*/ - //gl_TexCoord[0] = gl_MultiTexCoord0; - //gl_TexCoord[1] = gl_MultiTexCoord1; - - src_normal = normalize(vec3(pos.xy * dt * 2., 0)); - - qgl_FragTexture = qgl_Texture; - qgl_FragColor = qgl_Color; - //tp /= tp.w; - ppos = prev_ModelViewProjectioMatrix * qgl_Vertex; - //pos.w = pos.w; - //speed = tp - ppos; - //speed /= (abs(speed) + 1.); - //speed.xyz *= speed.w; - //pos *= pos.w; - - //logz = gl_Position.w*C + 1; //version with fragment code - C = 0.01; - FC = 1. / log(z_far * C + 1.); - - //pos.z = (logz + logz - 1) * pos.w; - - gl_Position = pos; - -} diff --git a/test/qglview/shaders/dsl_pass_1.frag b/test/qglview/shaders/dsl_pass_1.frag deleted file mode 100644 index e2aaf74..0000000 --- a/test/qglview/shaders/dsl_pass_1.frag +++ /dev/null @@ -1,166 +0,0 @@ -#version 150 -//#extension GL_EXT_gpu_shader4 : enable - -in vec3 view_dir; -in vec4 view_pos; - -uniform vec3 ambient; -uniform sampler2D t0, t1, t2, t3, t4, t_pp; -uniform sampler2D td; -uniform int gid, lightsCount, shadow_on; -uniform float z_near, z_far; -uniform bool firstPass; -uniform vec2 dt; -uniform vec4 back_color; -uniform mat4 mat_proji, mat_view, mat_viewi, mat_viewproji; - -float light_diffuse(int model, vec3 l, vec3 n) {return max(0., dot(l, n));} -float light_specular(int model, vec3 l, vec3 n, vec3 h, vec3 v, float shininess) {return max(0., pow(dot(n, h), shininess));} - -vec4 pos, lpos, shp; -vec3 li, si, ldir, halfV, bn, bn2, lwdir; -vec3 vds, vds2; -float sh_pow, sh_mul, dist, NdotL, NdotH, spot, ldist, diff, sdist, shadow; - -float getShadow(int light, vec3 view_pos, vec3 dpos) { - shp = qgl_Light[light].shadowMatrix * vec4(view_pos + dpos, 1); - shp.z -= z_near / 20.; - return textureProj(qgl_Light[light].shadow, shp); -} - -void calcLight(in int index, in vec3 n, in vec3 v, in vec4 v2) { - lpos = qgl_Light[index].position; - ldir = lpos.xyz - (pos.xyz * lpos.w); - ldist = length(ldir); - ldir = normalize(ldir); - halfV = normalize(ldir + v); - NdotL = max(dot(n, ldir), 0.0001); - NdotH = max(dot(n, halfV), 0.0001); - spot = step(0., NdotL) * qgl_Light[index].intensity; - if (qgl_Light[index].endAngle <= 90.) { - float scos = max(dot(-ldir, qgl_Light[index].direction.xyz), 0.); - spot *= scos * step(qgl_Light[index].endAngleCos, scos); - spot *= smoothstep(qgl_Light[index].endAngleCos, qgl_Light[index].startAngleCos, scos); - lwdir = mat3(mat_viewi) * qgl_Light[index].direction.xyz; - //bn = normalize(cross(lwdir, vec3(1, 0, 0))); - //bn2 = normalize(cross(lwdir, bn)); - float ds = ldist/200.;//max(abs(sdist) / 5000, 0.02); - //spot *= clamp(1. - sdist, 0, 1); - vds = ds * bn.xyz; - vds2 = ds * bn2.xyz; - float shadow = getShadow(index, pos.xyz, vec3(0)) * 3. + - getShadow(index, pos.xyz, vds ) * 2. + - getShadow(index, pos.xyz, - vds ) * 2. + - getShadow(index, pos.xyz, - vds2 ) * 2. + - getShadow(index, pos.xyz, + vds2 ) * 2. + - getShadow(index, pos.xyz, vds - vds2 ) * 1.5 + - getShadow(index, pos.xyz, vds + vds2 ) * 1.5 + - getShadow(index, pos.xyz, - vds - vds2 ) * 1.5 + - getShadow(index, pos.xyz, - vds + vds2 ) * 1.5 + - getShadow(index, pos.xyz, vds + vds ) + - getShadow(index, pos.xyz, - vds - vds ) + - getShadow(index, pos.xyz, - vds2 - vds2) + - getShadow(index, pos.xyz, + vds2 + vds2) + - getShadow(index, pos.xyz, vds + vds - vds2 ) + - getShadow(index, pos.xyz, - vds - vds - vds2 ) + - getShadow(index, pos.xyz, vds + vds + vds2 ) + - getShadow(index, pos.xyz, - vds - vds + vds2 ) + - getShadow(index, pos.xyz, vds - vds2 - vds2) + - getShadow(index, pos.xyz, vds + vds2 + vds2) + - getShadow(index, pos.xyz, - vds - vds2 - vds2) + - getShadow(index, pos.xyz, - vds + vds2 + vds2); - spot *= mix(1., shadow / 29., shadow_on); - } - spot /= (qgl_Light[index].constantAttenuation + ldist * (qgl_Light[index].linearAttenuation + ldist * qgl_Light[index].quadraticAttenuation)); - ///li += spot * gl_LightSource[index].diffuse.rgb * light_diffuse(0, ldir, n); - //si += spot * qgl_Light[index].color.rgb * sh_mul * light_specular(0, ldir, n, halfV, v, sh_pow); - float NdotLs = NdotL*NdotL; - float NdotHs = NdotH*NdotH; - float ndlc = (1. - NdotLs) / NdotLs; - float der = NdotLs * (sh_mul + ndlc); - diff = 2. / (1. + sqrt(1. + (1. - sh_mul) * ndlc)); - li += spot * qgl_Light[index].color.rgb * diff;// * light_diffuse(0, ldir, n); - ndlc = (1. - NdotHs) / NdotHs; - der = NdotHs * (sh_mul + ndlc); - si += spot * qgl_Light[index].color.rgb * (sh_mul / (der*der) / 3.1416); -} - - -const float _pe = 2.4e-7; - -void main(void) { - //if (d == 1.) discard; - ivec2 tc = ivec2(gl_FragCoord.xy); - float z = texelFetch(td, tc, 0).r; - if (z == 1.) { - qgl_FragData[0] = back_color; - return; - } - vec4 v0 = texelFetch(t0, tc, 0), - v1 = texelFetch(t1, tc, 0), - v2 = texelFetch(t2, tc, 0), - v3 = texelFetch(t3, tc, 0), - v4 = texelFetch(t4, tc, 0); - - z = z + z - 1; - z = ((_pe - 2.) * z_near) / (z + _pe - 1.); // infinite depth - - vec2 sp = gl_FragCoord.xy * dt * 2 - vec2(1, 1); - vec3 dc = v0.rgb, n = v1.xyz; - bn = normalize(vec3(v3.w, v4.zw)); - bn2 = normalize(cross(n, bn)); - float height = v2.w; - li = qgl_AmbientLight.color.rgb * qgl_AmbientLight.intensity; - si = vec3(0.); - - /*float posz = z_near * z_far / (texelFetch(td, tc, 0).r * (z_far - z_near) - z_far); - pos = vec4(sp, 0., 1) * mat_proji; - pos.xy *= v0.z; - pos.z = posz;*/ - - pos.w = 1; - pos.xyz = view_dir * z; - pos.z = -pos.z; - - //pos.z = posz; - //pos.xyz += n * height; - //pos.xyz = v3.xyz; - //pos = v3; - //pos = vec4(sp, 0, 1.) * mat_proji; - //pos *= v0.w; - //pos.z += 1; - //pos.xy *= 10.; - //pos.z = v0.w; - vec3 v = normalize(-pos.xyz); - - float reflectivity = 0.; - float specularity = modf(v1.w, reflectivity); - sh_pow = 1. / max((1. - specularity), 0.0001); - sh_mul = max(1. - specularity, 0.0001); - for (int i = 0; i < 8; ++i) - calcLight(i, n, v, v2); - // calcLight(0, n, v, v2); - - qgl_FragData[0] = vec4(max(vec3(0), li * dc + si * v2.rgb + v3.rgb + texelFetch(t_pp, tc, 0).rgb), v0.w); - //qgl_FragData[0].rgb = vec3(-z); - //qgl_FragData[0].rgb = li + vec3(texelFetch(t_pp, tc, 0).xyz); - //shd = shd - shp.w; - - /*vec3 fp = pos.xyz;// * lpos.w; - vec3 _dlp = fp - qgl_Light[0].position.xyz; - vec3 _ld = qgl_Light[0].direction.xyz; - float lz = dot(_ld, _dlp); - vec3 _lt = normalize(cross(_ld, _dlp)); - vec3 _lt2 = normalize(cross(_lt, _dlp)); - float ly = dot(qgl_Light[0].shadowDir0.xyz, normalize(_dlp)); - float lx = dot(qgl_Light[0].shadowDir1.xyz, normalize(_dlp)); - vec3 dd = mat3(mat_viewi)*(normalize(_dlp) - _ld); - //qgl_FragData[0].rgb = vec3(abs(shp.xy/shp.w)/1,0); - float Y = dot(_dlp, qgl_Light[0].shadowDir0.xyz) / length(qgl_Light[0].shadowDir0.xyz); - float X = dot(_dlp, qgl_Light[0].shadowDir1.xyz) / length(qgl_Light[0].shadowDir1.xyz); - qgl_FragData[0].rgb = vec3(abs((mat3(mat_viewi)*_dlp).x)/100);*/ - - //qgl_FragData[0].rgb = vec3(abs(mat3(mat_viewi)* qgl_Light[0].direction.xyz)); - //qgl_FragData[0].rgb = vec3(texture(qgl_Light[0].shadow,shp.xyz/shp.w)/2); - //qgl_FragData[0].a = 0.; -} diff --git a/test/qglview/shaders/dsl_pass_1.vert b/test/qglview/shaders/dsl_pass_1.vert deleted file mode 100644 index 30d914a..0000000 --- a/test/qglview/shaders/dsl_pass_1.vert +++ /dev/null @@ -1,14 +0,0 @@ -#version 150 - -in vec3 view_corner; -out vec3 view_dir; -out vec4 view_pos; - -void main(void) { - view_dir = view_corner / view_corner.z; - view_pos = vec4(qgl_ModelViewMatrix * vec4(qgl_Vertex.xy, 1, 1)); - view_pos /= view_pos.w; - qgl_FragTexture = qgl_Texture; - qgl_FragColor = qgl_Color; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/dsl_pass_2.frag b/test/qglview/shaders/dsl_pass_2.frag deleted file mode 100644 index 05bd70c..0000000 --- a/test/qglview/shaders/dsl_pass_2.frag +++ /dev/null @@ -1,13 +0,0 @@ -#version 120 - -uniform sampler2D t0, depth; -uniform vec3 backColor; - -void main(void) { - //gl_FragColor.rgb=vec3(1,1,1); - if (texture2D(depth, gl_TexCoord[0].xy).x == 1.) { - gl_FragColor.rgb = backColor; - return; - } - gl_FragColor.rgb = texture2D(t0, gl_TexCoord[0].xy).rgb; -} diff --git a/test/qglview/shaders/dsl_pass_2.vert b/test/qglview/shaders/dsl_pass_2.vert deleted file mode 100644 index a48fac9..0000000 --- a/test/qglview/shaders/dsl_pass_2.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 120 - -void main(void) { - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = ftransform(); -} diff --git a/test/qglview/shaders/fbo_add.frag b/test/qglview/shaders/fbo_add.frag deleted file mode 100644 index 764fc65..0000000 --- a/test/qglview/shaders/fbo_add.frag +++ /dev/null @@ -1,7 +0,0 @@ -#version 150 - -uniform sampler2D t0, t1; - -void main(void) { - qgl_FragData[0].rgb = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb + texelFetch(t1, ivec2(gl_FragCoord.xy), 0).rgb; -} diff --git a/test/qglview/shaders/fbo_add.vert b/test/qglview/shaders/fbo_add.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/fbo_add.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/hdr.frag b/test/qglview/shaders/hdr.frag deleted file mode 100644 index b3e50a3..0000000 --- a/test/qglview/shaders/hdr.frag +++ /dev/null @@ -1,29 +0,0 @@ -#version 150 - -uniform sampler2D t0; -uniform float exposure; - -float tA = 0.15; -float tB = 0.50; -float tC = 0.10; -float tD = 0.20; -float tE = 0.02; -float tF = 0.30; -float tW = 11.2; - -vec3 Uncharted2Tonemap(vec3 x) { - return ((x*(tA*x+tC*tB)+tD*tE)/(x*(tA*x+tB)+tD*tF))-tE/tF; -} - -void main(void) { - //qgl_FragData[0].rgb = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb; - //return; - vec3 inColor = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb; - inColor *= exposure / 1.45; - float ExposureBias = 1.; - vec3 curr = Uncharted2Tonemap(ExposureBias*inColor); - vec3 whiteScale = 1. / Uncharted2Tonemap(vec3(tW)); - vec3 color = curr * whiteScale; - vec3 retColor = color;//pow(color, vec3(1 / 1)); - qgl_FragData[0].rgb = retColor; -} diff --git a/test/qglview/shaders/hdr.vert b/test/qglview/shaders/hdr.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/hdr.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/hdr_scale_0.frag b/test/qglview/shaders/hdr_scale_0.frag deleted file mode 100644 index 9518aed..0000000 --- a/test/qglview/shaders/hdr_scale_0.frag +++ /dev/null @@ -1,13 +0,0 @@ -#version 130 - -uniform sampler2D t0; -uniform vec2 vsize; - -const vec3 luma = vec3(0.299, 0.587, 0.114); - -void main(void) { - vec2 tc = gl_TexCoord[0].xy;//, dt = 1. / vsize; - vec3 dc0 = texture2D(t0, tc).rgb, dc1 = textureOffset(t0, tc, ivec2(1, 0)).rgb, dc2 = textureOffset(t0, tc, ivec2(0, 1)).rgb, dc3 = textureOffset(t0, tc, ivec2(1, 1)).rgb; - float l0 = dot(dc0, luma), l1 = dot(dc1, luma), l2 = dot(dc2, luma), l3 = dot(dc3, luma); - gl_FragColor.rgb = vec3(max(max(max(l0, l1), l2), l3), min(min(min(l0, l1), l2), l3), (l0 + l1 + l2 + l3) / 4.); -} diff --git a/test/qglview/shaders/hdr_scale_1.frag b/test/qglview/shaders/hdr_scale_1.frag deleted file mode 100644 index 833ee6d..0000000 --- a/test/qglview/shaders/hdr_scale_1.frag +++ /dev/null @@ -1,10 +0,0 @@ -#version 130 - -uniform sampler2D t0; -uniform vec2 vsize; - -void main(void) { - vec2 tc = gl_TexCoord[0].xy;//, dt = 1. / vsize; - vec3 dc0 = texture2D(t0, tc).rgb, dc1 = textureOffset(t0, tc, ivec2(1, 0)).rgb, dc2 = textureOffset(t0, tc, ivec2(0, 1)).rgb, dc3 = textureOffset(t0, tc, ivec2(1, 1)).rgb; - gl_FragColor.rgb = vec3(max(max(max(dc0.r, dc1.r), dc2.r), dc3.r), min(min(min(dc0.g, dc1.g), dc2.g), dc3.g), (dc0.b + dc1.b + dc2.b + dc3.b) / 4.); -} diff --git a/test/qglview/shaders/light_models.frag b/test/qglview/shaders/light_models.frag deleted file mode 100644 index 57d787f..0000000 --- a/test/qglview/shaders/light_models.frag +++ /dev/null @@ -1,161 +0,0 @@ -#version 130 - -const float e = 2.7182818284; -const float pi = 3.1415926; - - -float Phong_diffuse(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - return max(dot(n, l), 0.); -} - -float Phong_specular(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - return pow(max(dot(n, h), 0.), shininess); -} - - -float Cook_Torrance_diffuse(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - return max(dot(n, l), 0.); -} - -float Cook_Torrance_specular(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - float NdotL = max( dot( n, l ), 0. ); - float NdotV = max( dot( n, v ), 0. ); - float NdotH = max( dot( n, h ), 1.e-7 ); - float VdotH = max( dot( v, h ), 0. ); - float geometric = 2. * NdotH / VdotH; - geometric = min(1., geometric * min(NdotV, NdotL)); - float r_sq = 1. / (shininess * shininess); - float NdotH_sq = NdotH * NdotH; - float NdotH_sq_r = 1. / (NdotH_sq * r_sq); - float roughness_exp = (NdotH_sq - 1.) * (NdotH_sq_r); - float roughness = exp(roughness_exp) * NdotH_sq_r / (4. * NdotH_sq); - float fresnel = 1. / (1. + NdotV); - return min(1., (fresnel * geometric * roughness) / (NdotV * NdotL + 1.e-7)); -} - - -float Minnaert_diffuse(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - return max(dot(n, l), 0.); -} - -float Minnaert_specular(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - float k = shininess / 128.; - float d1 = pow(max(dot(n, l), 0.), 1. + k); - float d2 = pow(1. - dot(n, v), 1. - k); - return d1*d2; -} - - -float fresnel(float x, float kf) { - float dx = x - kf; - float d1 = 1.0 - kf; - float kf2 = kf * kf; - - return (1.0 / (dx * dx) - 1.0 / kf2) / (1.0 / (d1 * d1) - 1.0 / kf2 ); - //return 1.0; -} - -float shadow(float x, float ks) { - float dx = x - ks; - float d1 = 1.0 - ks; - float ks2 = ks * ks; - - //return (1.0 / (dx * dx) - 1.0 / ks2) / (1.0 / (d1 * d1) - 1.0 / ks2 ); - return 1.0; -} - -const float smooth_ = 0.5; -const float transp = 0; -const float k = 0.1; -const float kf = 1.12; -const float ks = 1.01; - -float Strauss_diffuse(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - vec3 h2 = reflect(l, n); - float metal = shininess / 20.; - float nl = dot( n, l); - float nv = dot( n, v); - float hv = dot( h2, v); - float f = fresnel( nl, kf ); - float s3 = smooth_ * smooth_ * smooth_; - - // diffuse term - float d = ( 1.0 - metal * smooth_ ); - float Rd = ( 1.0 - s3 ) * ( 1.0 - transp ); - float diff = nl * d * Rd; - - // inputs into the specular term - - // composite the final result, ensuring - - return max(diff, 0.); -} - - -float Strauss_specular(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - vec3 h2 = reflect(l, n); - float metal = shininess / 20.; - float nl = dot( n, l); - float nv = dot( n, v); - float hv = dot( h2, v); - float f = fresnel( nl, kf ); - float s3 = smooth_ * smooth_ * smooth_; - - // diffuse term - float d = ( 1.0 - metal * smooth_ ); - float Rd = ( 1.0 - s3 ) * ( 1.0 - transp ); - float diff = nl * d * Rd; - - // inputs into the specular term - float r = (1.0 - transp) - Rd; - float j = f * shadow ( nl, ks ) * shadow ( nv, ks ); - float refl = min ( 1.0, r + j * ( r + k ) ); - float Cs = 1. + metal * (1.0 - f); - float spec = Cs * refl; - - spec *= pow ( -hv, 3.0 / (1.0 - smooth_) ); - - // composite the final result, ensuring - - return max(spec, 0.); -} - -uniform float a, b; - -float Oren_Nayar_diffuse(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - float nl = dot ( n, l ); - float nv = dot ( n, v ); - vec3 lProj = normalize ( l - n * nl ); - vec3 vProj = normalize ( v - n * nv ); - float cx = max ( dot ( lProj, vProj ), 0.0 ); - - float cosAlpha = nl > nv ? nl : nv; - float cosBeta = nl > nv ? nv : nl; - float dx = sqrt ( ( 1.0 - cosAlpha * cosAlpha ) * ( 1.0 - cosBeta * cosBeta ) ) / cosBeta; - - return max(0. , nl) * (a + b * cx * dx); - //return max(dot(n, l), 0.); -} - -float Oren_Nayar_specular(vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - return pow(max(dot(n, h), 0.), shininess); -} - -/* -float light_diffuse(int model, vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - if (model == 0) return Phong_diffuse(l, n, h, v, shininess); - if (model == 1) return Cook_Torrance_diffuse(l, n, h, v, shininess); - if (model == 2) return Minnaert_diffuse(l, n, h, v, shininess); - if (model == 3) return Strauss_diffuse(l, n, h, v, shininess); - if (model == 4) return Oren_Nayar_diffuse(l, n, h, v, shininess); - return 0.; -} - -float light_specular(int model, vec3 l, vec3 n, vec3 h, vec3 v, float shininess) { - if (model == 0) return Phong_specular(l, n, h, v, shininess); - if (model == 1) return Cook_Torrance_specular(l, n, h, v, shininess); - if (model == 2) return Minnaert_specular(l, n, h, v, shininess); - if (model == 3) return Strauss_specular(l, n, h, v, shininess); - if (model == 4) return Oren_Nayar_specular(l, n, h, v, shininess); - return 0.; -}*/ diff --git a/test/qglview/shaders/motion_blur.frag b/test/qglview/shaders/motion_blur.frag deleted file mode 100644 index 3a758c4..0000000 --- a/test/qglview/shaders/motion_blur.frag +++ /dev/null @@ -1,24 +0,0 @@ -#version 150 - -uniform sampler2D t0, ts; -uniform vec2 dt; -uniform float factor = 1.; -uniform int steps = 8; - -void main(void) { - vec2 cdt = dt / steps; - vec2 ct = qgl_FragTexture.xy; - vec3 speed = texelFetch(ts, ivec2(gl_FragCoord.xy), 0).rgb * 256 * factor; - int hsteps = steps / 2; - ct -= speed.xy * cdt * hsteps; - vec3 scol = vec3(0);//texture(t0, ct).rgb; - float sum = 0.; - for (int i = 0; i < steps; ++i) { - ct += speed.xy * cdt; - float mul = 1. - abs(i - hsteps) * 2. / steps; - scol += texture(t0, ct).rgb * mul; - sum += mul; - } - scol /= sum; - qgl_FragData[0].rgb = scol; -} diff --git a/test/qglview/shaders/motion_blur.vert b/test/qglview/shaders/motion_blur.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/motion_blur.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/post.frag b/test/qglview/shaders/post.frag deleted file mode 100644 index 22e297e..0000000 --- a/test/qglview/shaders/post.frag +++ /dev/null @@ -1,42 +0,0 @@ -#version 130 - -uniform sampler2D t0, t1;//, t2; -uniform vec2 vsize; -uniform float clum; -uniform bool has_bloom; - -float unpackDepth(vec4 dv) { - return dot(dv.rgb, vec3(65025., 255., 1.)); -} - -void main(void) { - vec2 tc = gl_TexCoord[0].xy;//, dt = 2. / vsize, dt2 = dt + dt; - vec4 bloom; - float tone = 1. / clum; - if (has_bloom) { - bloom = (texture2D(t1, tc) * 3. + - textureOffset(t1, tc, ivec2(2, 0)) * 2. + - textureOffset(t1, tc, ivec2(0, 2)) * 2. + - textureOffset(t1, tc, ivec2(-2, 0)) * 2. + - textureOffset(t1, tc, ivec2(0, -2)) * 2. + - textureOffset(t1, tc, ivec2(2, 2)) * 1.5 + - textureOffset(t1, tc, ivec2(2, -2)) * 1.5 + - textureOffset(t1, tc, ivec2(-2, -2)) * 1.5 + - textureOffset(t1, tc, ivec2(-2, 2)) * 1.5 + - textureOffset(t1, tc, ivec2(4, 0)) + - textureOffset(t1, tc, ivec2(0, 4)) + - textureOffset(t1, tc, ivec2(-4, 0)) + - textureOffset(t1, tc, ivec2(0, -4)) + - textureOffset(t1, tc, ivec2(4, 2)) + - textureOffset(t1, tc, ivec2(4, -2)) + - textureOffset(t1, tc, ivec2(-4, -2)) + - textureOffset(t1, tc, ivec2(-4, 2)) + - textureOffset(t1, tc, ivec2(2, 4)) + - textureOffset(t1, tc, ivec2(2, -4)) + - textureOffset(t1, tc, ivec2(-2, -4)) + - textureOffset(t1, tc, ivec2(-2, 4))) / 29.; - vec4 diff = texture2D(t0, tc); - gl_FragColor = max(diff * tone, bloom);// + vec4(0.01/(clum+0.1)); - } else - gl_FragColor = texture2D(t0, tc) * tone;// + vec4(0.01/(clum+0.1)); -} diff --git a/test/qglview/shaders/ppl.frag b/test/qglview/shaders/ppl.frag deleted file mode 100644 index c5aee6c..0000000 --- a/test/qglview/shaders/ppl.frag +++ /dev/null @@ -1,179 +0,0 @@ -#version 130 - -#define lc 4 -varying vec4 diffuse[lc], pos, spos;//, ambient;//, col; -varying vec3 lightDir[lc]/*halfVector[lc], */; -//varying vec3 lightDir[lc]/*halfVector[lc], */; -varying vec3 normal, srcn; -varying float fogCoord, alpha; - -uniform int lightsCount; -uniform bool acc_light, acc_fog, has_diffuse, has_bump, is_glass, shadows, soft_shadows; -uniform float bump_scale, reflectivity, iof, cdis; -uniform vec2 vsize; -uniform sampler2D t0, t1, t2; -uniform sampler2D s0; -uniform samplerCube tc, tc0; -uniform mat4 mat; - -float light_diffuse(vec3 l, vec3 n, vec3 h, vec3 v, float shininess); -float light_specular(vec3 l, vec3 n, vec3 h, vec3 v, float shininess); - -const float bias = 1.; -vec2 sp; -vec4 sc, dc;//ambient; - -void calcLight(in int index, in vec3 n, in vec3 v) { - vec2 scoord, sdt, sdt2; - vec3 halfV, ldir; - vec4 lpos = gl_LightSource[index].position; - float spot, ldist = length(lpos.xyz - pos.xyz), shadow = 1., sdep, ddep; - ldir = normalize(lpos.xyz - (pos.xyz * lpos.w)); - halfV = normalize(ldir + v); - //if (dot(ldir, n) > 0) { - spot = step(0., dot(ldir, n)); - if (gl_LightSource[index].spotCutoff < 180.) { - spot = max(dot(-ldir, gl_LightSource[index].spotDirection.xyz), 0.); - spot *= step(gl_LightSource[index].spotExponent, spot); - spot = pow(spot, (gl_LightSource[index].spotCosCutoff + 0.001)); - if (spot > 0. && shadows) { - scoord = (spos.xyz / spos.w).xy / 2 + vec2(0.5); - sdep = texture(s0, scoord.xy).r + bias; - ddep = pow((spos.z - sdep) / 4., 0.5) * 2.; - shadow = clamp(sdep - spos.z, 0., 1.); - if (soft_shadows) { - sdt = ddep / vsize; - sdt2 = sdt + sdt; - shadow += (clamp(texture(s0, scoord.xy + vec2(sdt.x, 0.)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(0, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, 0.)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(0, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt.x, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt.x, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt.x, 0)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(0, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, 0)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(0, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt.x, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt.x, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt2.x, 0)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(0, sdt2.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt2.x, 0)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(0, -sdt2.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt2.x, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt2.x, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt2.x, -sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt2.x, sdt.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt.x, sdt2.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(sdt.x, -sdt2.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, -sdt2.y)).r + bias - spos.z, 0., 1.) + - clamp(texture(s0, scoord.xy + vec2(-sdt.x, sdt2.y)).r + bias - spos.z, 0., 1.)) / 29.; - shadow = clamp(pow(shadow, 0.5), 0., 1); - } - spot *= shadow; - } - } - spot /= (gl_LightSource[index].constantAttenuation + ldist * (gl_LightSource[index].linearAttenuation + ldist * gl_LightSource[index].quadraticAttenuation)); - dc += spot * diffuse[index] * light_diffuse(ldir, n, halfV, v, gl_FrontMaterial.shininess); - sc += spot * gl_FrontMaterial.specular * gl_LightSource[index].specular * light_specular(ldir, n, halfV, v, gl_FrontMaterial.shininess); - //} -} - -void main(void) { - /*vec3 scoord = spos.xyz / spos.w; - float sdep = texture(s0, scoord.xy / 2 + vec2(0.5)).r + 1; - //gl_FragColor.rgb = vec3(step(spos.z, sdep)); - gl_FragColor.rgb = vec3(spos.z - sdep)/10; - //gl_FragColor.rgb = vec3(texture(s0, scoord.xy+vec2(0.5)).r/100); - //gl_FragColor.rgb = vec3(texture(s0,).r/100); - return;*/ - //bias = (vsize.x - vsize.y) / max(vsize.x, vsize.y)*5 - 1.; - - if (!acc_light) { - if (has_diffuse) gl_FragColor = texture2D(t0, gl_TexCoord[0].xy); - //else gl_FragColor = gl_Color; - if (acc_fog) - gl_FragColor.xyz = mix(gl_FragColor.xyz, gl_Fog.color.xyz, fogCoord); - return; - } - - sp = gl_FragCoord.xy / vsize; - vec3 n, v = normalize(-pos.xyz); - //v.xy = vec2(1,1)-gl_FragCoord.xy / vsize*2 ;//- vec2(1,1); - if (has_bump) n = normalize(normal + (texture2D(t1, gl_TexCoord[0].xy).xyz - vec3(0.5, 0.5, 1.)) * bump_scale); - else n = normalize(normal); - vec4 color; - sc = vec4(0.); - dc = gl_LightModel.ambient * gl_FrontMaterial.ambient;//ambient; - if (lightsCount > 0) { - calcLight(0, n, v); - if (lightsCount > 1) { - calcLight(1, n, v); - if (lightsCount > 2) { - calcLight(2, n, v); - if (lightsCount > 3) { - calcLight(3, n, v); - /*if (lightsCount > 4) { - calcLight(4, n, v); - if (lightsCount > 5) { - calcLight(5, n, v); - if (lightsCount > 6) { - calcLight(6, n, v); - if (lightsCount > 7) { - calcLight(7, n, v); - } - } - } - }*/ - } - } - } - } - sc = max(sc, vec4(0.)); - vec2 spr = sp, spg = sp, spb = sp, spc = sp, spm = sp, spy = sp, dsp; - vec3 bgf; - float fresnel = pow(1. - max(dot(v, n), 0.), 1); - dsp = fresnel * n.xy * (1. - iof); - spg += dsp; - if (cdis > 0.) { - spr += dsp * (1. - cdis - cdis); - spy += dsp * (1. - cdis); - spc += dsp * (1. + cdis); - spb += dsp * (1. + cdis + cdis); - vec3 bg0 = texture2D(t2, spr).rgb, bg1 = texture2D(t2, spy).rgb, bg2 = texture2D(t2, spg).rgb, bg3 = texture2D(t2, spc).rgb, bg4 = texture2D(t2, spb).rgb; - //bgf = vec3(bg0.r, bg2.g, bg4.b); - bgf = vec3((bg0.r + bg1.r) / 2., (bg1.g + bg2.g + bg3.g) / 3., (bg3.b + bg4.b) / 2.); - } else bgf = texture2D(t2, spg).rgb; - if (has_diffuse) { - vec4 tex = texture2D(t0, gl_TexCoord[0].xy); - dc *= tex; - color.a = tex.a * alpha; - } else color.a = alpha; - color.rgb = dc.rgb; - vec3 ln = vec3(0); - if (is_glass) { - ln = reflect(v, n); - ln = ln * mat3(gl_ModelViewMatrix); - ln.y = -ln.y; - color.rgb = (mix(bgf, textureCube(tc, ln).rgb, 0.2 + fresnel * 0.8) * gl_FrontMaterial.diffuse.rgb + gl_FrontMaterial.emission.rgb) + sc.rgb * color.a; - color.a = 1.; - } else { - if (reflectivity > 0.) { - ln = reflect(v, n); - ln = ln * mat3(gl_ModelViewMatrix); - ln.y = -ln.y; - color.rgb = mix(color.rgb, textureCube(tc, ln).rgb, reflectivity); - } - color.rgb = mix(color.rgb * gl_FrontMaterial.diffuse.rgb + gl_FrontMaterial.emission.rgb, bgf, 1. - alpha) + sc.rgb * color.a; - color.a = 1; - } - if (acc_fog) - color.rgb = mix(color.rgb, gl_Fog.color.rgb, fogCoord); - color.r = 250; - gl_FragColor = color; - //gl_FragColor.rgb = mix(ldir, texture2D(t2, sp).rgb, 1. - alpha); -} diff --git a/test/qglview/shaders/ppl.vert b/test/qglview/shaders/ppl.vert deleted file mode 100644 index a09a053..0000000 --- a/test/qglview/shaders/ppl.vert +++ /dev/null @@ -1,66 +0,0 @@ -#version 130 - -#define lc 4 -varying vec4 diffuse[lc], pos, spos;//, ambient;//, col; -varying vec3 lightDir[lc]/*halfVector[lc], */; -//varying vec3 lightDir[lc]/*halfVector[lc], */; -varying vec3 normal, srcn; -varying float fogCoord, alpha; - -uniform int lightsCount; -uniform bool acc_fog, shadows; -uniform mat4 mat; - -void prepareLight(in int index, in vec3 p) { - vec4 lpos = gl_LightSource[index].position; - lightDir[index] = normalize(lpos.xyz - (p * lpos.w)); - //halfVector[index] = normalize(lightDir[index] - normalize(p)); - diffuse[index] = gl_FrontMaterial.diffuse * gl_LightSource[index].diffuse; -} - -void main(void) { - float NdotL; - //col = gl_Color; - alpha = gl_Color.a; - normal = normalize(gl_NormalMatrix * gl_Normal); - srcn = gl_Normal; - pos = gl_ModelViewMatrix * gl_Vertex; - //v = normalize(-pos); - if (acc_fog) { - fogCoord = (gl_Fog.end - length(pos) * 0.85) / (gl_Fog.end - gl_Fog.start); - fogCoord = 1. - clamp(fogCoord, 0., 1.); - } - vec3 ldir; - if (lightsCount > 0) { - prepareLight(0, pos.xyz); - if (lightsCount > 1) { - prepareLight(1, pos.xyz); - if (lightsCount > 2) { - prepareLight(2, pos.xyz); - if (lightsCount > 3) { - prepareLight(3, pos.xyz); - diffuse[3] = gl_FrontMaterial.diffuse * gl_LightSource[3].diffuse; - /*if (lightsCount > 4) { - diffuse[4] = gl_FrontMaterial.diffuse * gl_LightSource[4].diffuse; - if (lightsCount > 5) { - diffuse[5] = gl_FrontMaterial.diffuse * gl_LightSource[5].diffuse; - if (lightsCount > 6) { - diffuse[6] = gl_FrontMaterial.diffuse * gl_LightSource[6].diffuse; - if (lightsCount > 6) { - diffuse[7] = gl_FrontMaterial.diffuse * gl_LightSource[7].diffuse; - } - } - } - }*/ - } - } - } - } - //ambient = gl_LightModel.ambient * gl_FrontMaterial.ambient; - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_TexCoord[1] = gl_MultiTexCoord1; - gl_TexCoord[2] = gl_MultiTexCoord2; - gl_TexCoord[3] = gl_MultiTexCoord3; - gl_Position = ftransform(); - spos = pos * mat; -} diff --git a/test/qglview/shaders/selection.frag b/test/qglview/shaders/selection.frag deleted file mode 100644 index 43ccb95..0000000 --- a/test/qglview/shaders/selection.frag +++ /dev/null @@ -1,7 +0,0 @@ -#version 150 - -uniform vec4 id; - -void main(void) { - qgl_FragData[0] = id; -} diff --git a/test/qglview/shaders/selection.vert b/test/qglview/shaders/selection.vert deleted file mode 100644 index 6f25e2b..0000000 --- a/test/qglview/shaders/selection.vert +++ /dev/null @@ -1,8 +0,0 @@ -#version 150 - -uniform float z_near, z_far; - -void main(void) { - vec4 pos = qgl_ftransform(); - gl_Position = pos; -} diff --git a/test/qglview/shaders/selection_halo.frag b/test/qglview/shaders/selection_halo.frag deleted file mode 100644 index d95f2e3..0000000 --- a/test/qglview/shaders/selection_halo.frag +++ /dev/null @@ -1,20 +0,0 @@ -#version 150 - -uniform vec2 dt; -uniform vec4 selected, color; -uniform sampler2D t0; -uniform float fill; - -void main(void) { - ivec2 tc = ivec2(gl_FragCoord.xy); - vec4 ds0 = abs(texelFetchOffset(t0, tc, 0, ivec2(-1, 0)) - selected); - vec4 ds1 = abs(texelFetchOffset(t0, tc, 0, ivec2( 1, 0)) - selected); - vec4 ds2 = abs(texelFetchOffset(t0, tc, 0, ivec2(0, -1)) - selected); - vec4 ds3 = abs(texelFetchOffset(t0, tc, 0, ivec2(0, 1)) - selected); - float d0 = dot(ds0, vec4(1., 1., 1., 1.)), d1 = dot(ds1, vec4(1., 1., 1., 1.)), d2 = dot(ds2, vec4(1., 1., 1., 1.)), d3 = dot(ds3, vec4(1., 1., 1., 1.)); - float vs = step(1e-6, d0 + d1 + d2 + d3); - float vm = step(1e-3, (d0 * 25.) * (d1 * 25.) * (d2 * 255.) * (d3 * 255.)); - float v = mix(vs - vm, vs - vm - vm + 1, fill); - //qgl_FragData[0] = vec4(1,0,0,0.5);//vec4(color.rgb, v * color.a); - qgl_FragData[0] = vec4(color.bgr, v * color.a); -} diff --git a/test/qglview/shaders/selection_halo.vert b/test/qglview/shaders/selection_halo.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/selection_halo.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/shadow.frag b/test/qglview/shaders/shadow.frag deleted file mode 100644 index 145b87e..0000000 --- a/test/qglview/shaders/shadow.frag +++ /dev/null @@ -1,7 +0,0 @@ -#version 150 - -in float w; - -void main(void) { - //;qgl_FragData[0].r = w; -} diff --git a/test/qglview/shaders/shadow.vert b/test/qglview/shaders/shadow.vert deleted file mode 100644 index 3b1faca..0000000 --- a/test/qglview/shaders/shadow.vert +++ /dev/null @@ -1,10 +0,0 @@ -#version 150 - -out float w; - -void main(void) { - qgl_FragTexture = qgl_Texture; - vec4 pos = qgl_ftransform(); - w = pos.w; - gl_Position = pos; -} diff --git a/test/qglview/shaders/ssao_blur.frag b/test/qglview/shaders/ssao_blur.frag deleted file mode 100644 index 9a42ca9..0000000 --- a/test/qglview/shaders/ssao_blur.frag +++ /dev/null @@ -1,55 +0,0 @@ -#version 150 - -uniform sampler2D t0, ts, tg1; -uniform float radius = 2; -uniform vec2 dt; - -vec4 st; - -vec4 getTexel(vec2 tc, vec4 ptc, float mul) { - vec4 tv = texture(t0, tc), ts = texture(ts, tc); - if (radius == 1) { - tv = vec4(tv.w); - ts = tv; - } - return vec4(min(ptc.r, ts.r), max(ptc.g, ts.g), ptc.b + /*mix(tv.b, st.b, clamp(abs(st.w - tv.w), 0, 1))*/tv.b * mul, 0); -} - -void main(void) { - ivec2 itc = ivec2(gl_FragCoord.xy); - vec4 vg1 = texelFetch(tg1, itc, 0); - vec2 tc = qgl_FragTexture.xy; - float o = radius, o2 = radius * 2; - vec4 scol = texture(t0, tc); - if (radius == 1) - scol = vec4(scol.w); - st = scol; - scol.b *= 3.; - scol = getTexel(tc + dt * vec2( o, 0 ), scol, 2); - scol = getTexel(tc + dt * vec2( 0, o ), scol, 2); - scol = getTexel(tc + dt * vec2( -o, 0 ), scol, 2); - scol = getTexel(tc + dt * vec2( 0, -o), scol, 2); - scol = getTexel(tc + dt * vec2( o, o ), scol, 1.5); - scol = getTexel(tc + dt * vec2( o, -o), scol, 1.5); - scol = getTexel(tc + dt * vec2( -o, -o ), scol, 1.5); - scol = getTexel(tc + dt * vec2( -o, o ), scol, 1.5); - scol = getTexel(tc + dt * vec2( o2, 0 ), scol, 1); - scol = getTexel(tc + dt * vec2( 0, o2), scol, 1); - scol = getTexel(tc + dt * vec2(-o2, 0 ), scol, 1); - scol = getTexel(tc + dt * vec2( 0, -o2), scol, 1); - scol.b /= 21.; - /*vec4 scol = fp; - scol = min(scol, getTexel(tc + dt * vec2( o, 0 ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( 0, o ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( -o, 0 ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( 0, -o), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( o, o ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( o, -o), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( -o, -o ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( -o, o ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( o2, 0 ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( 0, o2), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2(-o2, 0 ), fp, fps)); - scol = min(scol, getTexel(tc + dt * vec2( 0, -o2), fp, fps));*/ - qgl_FragData[0].rgba = vec4(scol.rgb, texture(t0, tc).w); -} diff --git a/test/qglview/shaders/ssao_blur.vert b/test/qglview/shaders/ssao_blur.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/ssao_blur.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/ssao_merge.frag b/test/qglview/shaders/ssao_merge.frag deleted file mode 100644 index ae49372..0000000 --- a/test/qglview/shaders/ssao_merge.frag +++ /dev/null @@ -1,53 +0,0 @@ -#version 150 - -uniform sampler2D t0, ts, tg1; -uniform sampler1D n0; -uniform float z_near, z_far; -uniform mat4 mat_proj; - -in vec3 view_dir; - -void main(void) { - ivec2 tc = ivec2(gl_FragCoord.xy); - vec4 v0 = texelFetch(t0, tc, 0), vs = texelFetch(ts, tc, 0), vg1 = texelFetch(tg1, tc, 0); - vec3 n = vec3(vg1.xyz); - vec3 bn = cross(n, vec3(0, 0, 1)); - vec3 bn2 = cross(n, bn); - vec4 pos; - pos.w = 1; - pos.xyz = view_dir * vs.w; - vec4 spos = pos, tpos, tv0; - vec2 tsp; - float sclz = dot(vec3(0,0,1), n); - /*float l = 20 * 0.5; - pos.xyz += bn2 * l; - for (int i = 0; i < 16; ++i) { - tpos = mat_proj * pos; - tsp = -(tpos.xy / tpos.w) / 2. + 0.5; - tv0 = texture(ts, tsp); - l *= 0.5; - pos.xyz += bn2 * (step(pos.z, tv0.w) * 2. - 1.) * l; - }*/ - /*vec3 rn; - float ss = 0.; - for (int i = 0; i < 32; ++i) { - rn = texelFetch(n0, i, 0).rgb * 2 - 1; - rn *= step(0., dot(n, rn)) * 2 - 1.; - //rn /= 10; - rn /= vs.w; - spos = pos + vec4(rn, 0); - tpos = mat_proj * spos; - tsp = -(tpos.xy / tpos.w) / 2. + 0.5; - tv0 = texture(ts, tsp); - //spos.z = tv0.w; - ss += step(-0.1, tv0.w-vs.w); - //ss += step(vs.w, tv0.w); - } - ss /= 32;*/ - float minz = v0.r, maxz = v0.g, blurz = v0.b, curz = v0.w, avgz = (minz+maxz)/2; - float dz = maxz - minz; - //qgl_FragData[0].rgb = vec3(max(-(blurz - curz) / maxz,0.)* (curz-minz) / dz * 10); - qgl_FragData[0].rgb = vec3(blurz/10); - //qgl_FragData[0].rgb = vec3(length(pos.z - spos.z)/15); - //qgl_FragData[0].rgb = vec3(abs(v0.w/1)); -} diff --git a/test/qglview/shaders/ssao_merge.vert b/test/qglview/shaders/ssao_merge.vert deleted file mode 100644 index 0e2d5fe..0000000 --- a/test/qglview/shaders/ssao_merge.vert +++ /dev/null @@ -1,10 +0,0 @@ -#version 150 - -in vec3 view_corner; -out vec3 view_dir; - -void main(void) { - view_dir = view_corner / view_corner.z; - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/ssr.frag b/test/qglview/shaders/ssr.frag deleted file mode 100644 index 04f1786..0000000 --- a/test/qglview/shaders/ssr.frag +++ /dev/null @@ -1,67 +0,0 @@ -#version 150 - -uniform sampler2D t0, t1, ts, td, tbs; -uniform float z_near, z_far; -uniform mat4 mat_proj; -uniform vec3 cam_aim, cam_pos; - -in vec3 view_dir; - -const float _pe = 2.4e-7; - -void main(void) { - ivec2 tc = ivec2(gl_FragCoord.xy); - vec4 v0 = texelFetch(t0, tc, 0), v1 = texelFetch(t1, tc, 0), vs = texelFetch(ts, tc, 0); - vec3 sp = vec3(qgl_FragTexture.xy, v0.w); - vec2 tsp; - vec4 pos; - float z = texelFetch(td, tc, 0).r; - z = z + z - 1; - z = ((_pe - 2.) * z_near) / (z + _pe - 1.); // infinite depth - pos.w = 1; - pos.xyz = view_dir * z; - //pos.z = -pos.z; - vec4 spos = pos; - vec4 tpos; - - vec3 dc = v0.rgb, n = v1.xyz; - vec3 vd = -normalize(vec3(-view_dir.xy, view_dir.z)); - vec3 rn = reflect(vd, n); - //rn.z += 1.; - float coeff = clamp(1. - (dot(vec3(0,0,1), n)), 0, 1); - coeff = coeff*coeff; - /*coeff = coeff*coeff; - coeff = coeff*coeff; - coeff = coeff*coeff;*/ - float reflectivity = 0.; - float specularity = modf(v1.w, reflectivity); - - rn.z = -rn.z; - int i = 0; - vec4 tv0; - float l = z_far * 0.5; - pos.xyz += rn * l; - float cz; - for (i = 0; i < 24; ++i) { - tpos = mat_proj * pos; - tsp = -(tpos.xy / tpos.w) / 2. + 0.5; - cz = texture(td, tsp).r; - cz = cz + cz - 1; - cz = ((_pe - 2.) * z_near) / (cz + _pe - 1.); // infinite depth - l *= 0.5; - pos.xyz += rn * (step(pos.z, cz) * 2. - 1.) * l; - } - - vec2 ess = abs(tsp - vec2(0.5, 0.5)) - vec2(0.3, 0.3); - ess = clamp(ess, vec2(0, 0), vec2(0.2, 0.2)); - ess = smoothstep(vec2(0.2, 0.2), vec2(0, 0), ess); - coeff *= min(ess.x, ess.y); - vec4 pr_pos = mat_proj * pos, pr_spos = mat_proj * spos; - pr_pos.xyz /= pr_pos.w; - pr_spos.xyz /= pr_spos.w; - float blur = step(0., coeff) * length(pr_pos.xyz - pr_spos.xyz) * (1. - specularity); - vec3 rvs = texture(ts, tsp).rgb; - - qgl_FragData[0] = vec4(rvs.rgb, coeff / 1.1 + clamp(round(blur * 10), 0, 1000)); - //qgl_FragData[0] = vec4(rvs.rgb, cz/5); -} diff --git a/test/qglview/shaders/ssr.vert b/test/qglview/shaders/ssr.vert deleted file mode 100644 index 0e2d5fe..0000000 --- a/test/qglview/shaders/ssr.vert +++ /dev/null @@ -1,10 +0,0 @@ -#version 150 - -in vec3 view_corner; -out vec3 view_dir; - -void main(void) { - view_dir = view_corner / view_corner.z; - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/ssr_blur.frag b/test/qglview/shaders/ssr_blur.frag deleted file mode 100644 index 8fbefd3..0000000 --- a/test/qglview/shaders/ssr_blur.frag +++ /dev/null @@ -1,38 +0,0 @@ -#version 150 - -uniform sampler2D t0; -uniform float radius = 2; -uniform vec2 dt; - -void main(void) { - vec2 tc = qgl_FragTexture.xy; - float r = float(radius); - vec4 v0 = texture(t0, tc); - float rad; - float coeff = modf(v0.w, rad) * 1.1; - rad /= 10.; - rad *= 2; - float o = radius * rad, o2 = radius * rad * 2; - vec3 scol = (v0.rgb * 3. + - texture(t0, tc + dt * vec2( o, 0 )).rgb * 2. + - texture(t0, tc + dt * vec2( 0, o )).rgb * 2. + - texture(t0, tc + dt * vec2( -o, 0 )).rgb * 2. + - texture(t0, tc + dt * vec2( 0, -o)).rgb * 2. + - texture(t0, tc + dt * vec2( o, o )).rgb * 1.5 + - texture(t0, tc + dt * vec2( o, -o)).rgb * 1.5 + - texture(t0, tc + dt * vec2( -o, -o )).rgb * 1.5 + - texture(t0, tc + dt * vec2( -o, o )).rgb * 1.5 + - texture(t0, tc + dt * vec2( o2, 0 )).rgb + - texture(t0, tc + dt * vec2( 0, o2)).rgb + - texture(t0, tc + dt * vec2(-o2, 0 )).rgb + - texture(t0, tc + dt * vec2( 0, -o2)).rgb/* + - texture(t0, tc + dt * vec2( o2, o )).rgb + - texture(t0, tc + dt * vec2( o2, -o)).rgb + - texture(t0, tc + dt * vec2(-o2, -o )).rgb + - texture(t0, tc + dt * vec2(-o2, o )).rgb + - texture(t0, tc + dt * vec2( o, o2)).rgb + - texture(t0, tc + dt * vec2( o, -o2)).rgb + - texture(t0, tc + dt * vec2( -o, -o2)).rgb + - texture(t0, tc + dt * vec2( -o, o2)).rgb*/) / 21.; - qgl_FragData[0] = vec4(scol, v0.w); -} diff --git a/test/qglview/shaders/ssr_blur.vert b/test/qglview/shaders/ssr_blur.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/ssr_blur.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -} diff --git a/test/qglview/shaders/ssr_merge.frag b/test/qglview/shaders/ssr_merge.frag deleted file mode 100644 index 9f0f81b..0000000 --- a/test/qglview/shaders/ssr_merge.frag +++ /dev/null @@ -1,15 +0,0 @@ -#version 150 - -uniform sampler2D t0, tg1, ts; - -void main(void) { - ivec2 tc = ivec2(gl_FragCoord.xy); - vec4 v0 = texelFetch(t0, tc, 0), vg1 = texelFetch(tg1, tc, 0), vs = texelFetch(ts, tc, 0); - float rad; - float coeff = clamp(modf(v0.w, rad) * 1.1, 0., 1.); - float reflectivity = 0.; - float specularity = modf(vg1.w, reflectivity); - reflectivity = clamp(reflectivity / 100., 0., 1.); - qgl_FragData[0].rgb = mix(vs.rgb, v0.rgb, coeff * reflectivity); - //qgl_FragData[0].rgb = vec3(v0.w); -} diff --git a/test/qglview/shaders/ssr_merge.vert b/test/qglview/shaders/ssr_merge.vert deleted file mode 100644 index 6bc001e..0000000 --- a/test/qglview/shaders/ssr_merge.vert +++ /dev/null @@ -1,6 +0,0 @@ -#version 150 - -void main(void) { - qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); -}

    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 Ag8%>k diff --git a/test/qglview/icons/type-camera.png b/test/qglview/icons/type-camera.png deleted file mode 100644 index c28aa2d2fd22d865b75d18f32234e1676630e01d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmV-`1b_R9P)Nklo)1;#q5~4_CK42Jmt%H#*`;y@#5|gDUOV%-EN+J#)hA@f`qO94n z^V+lTg@fT(!kjTPXZ~|tchjWvzT~N^=jplc`*&aW|N7sT0)PjjqM|}ME-o%AH8pjJ z;`f-Cn9IPxz`@|)V0RvWEFK(4PEP)*q@)C+qobIbn!?=N9OmcevAn#DrKKh0<>me5 z<>eLlWN>F^=L=f2)!f{S_V#vkcXy+=w-+NLBO=Df$Hhjov$N>x>OxjlR{N8{O-)Tb z1Q&q*{(kiJ^@;cJ@UV!9i3!Zi%wThK6UWELSYKa9dU|@{qu{o-Ht*`{YK)DIVQXtk zEWEtD#KFOV0IjX9iSO&{Yuw)6;^N{0M@L62*B?GUK86p13HrXZwH1qti`d`a$H~cw z(9_=D9=f`^Ff=qocz8I=AfPulH#j{##qRDdii(P)a>0#_joOKciRkI+!RqQN&d$!b zSOREkYYQtYD_B}u!ok4-78VwmoSekf)fJyeBth%X6%-U+$$(2sOQUF43=9llV`GD} z5I~7U0aegd)YsSZF@+2U1_p3+ zbOap{IyyRHgIBH|@bmWv6-#(~Z*LD$sT5UJRq*xoeIo-V?|#pa^73*F4GoE+MMp=& z&(BX}$zv>ug}nqG9v-NytYnw4WMY1Caq*psii)fh@$vE6CMG5*C@A2I!C=lr={oSd8;I+=l7yP2DtpHpu@Lqmfo)XK^V-!{&UvlYO) zx;ic}0~stXQcX<_5)u*`3H*gzFl8jMv9bA^WI;TshJU2NiLY4XDKNuzqq@*gPIVMl9G^?mWJ%?Y-D6)ATu))xw*M47i)^z+FH?! zs1D(@_VY)31wAjFot>xI0d{tFpbo}1LPSIa*fk*`A@CPWi{v)AK#uKqs2}nio6?92pt;l8X26d6r5_O5Z6fE9Y?GnfWh(5TLt| SB%v4p0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000BPNklP8s?9!7K?N^9J8Q6SPd&?$Kc6apPg zg^&Y+z07R~)5Q|)BD1VIwQIYR69c&*{N{SmO;lX33>iP*ec}QA+6IRV6GK_r}M|mbbq_6ZT_cW+ZJn=dV*Bk{`<@ia^4Mekif<=^RE=1OKSv_b6>YR)H8m(07NFYp zGS1%FH&-5IIcLsEjI^o68l5Wbo-9v|5LJT*&ilL_+@kZY))Y4*xxO67Mzc{jz1vmo zbcP$g^<0vx>!w10&bJeg{cbKI3s2AEYl|-+;C&r79IioO`B7Aiq(L(! zqc^$ZUvQp4>-Zo6)2am6-r5Z7OJVa_Qp0d%$5SZWBZov;hRWi6On;q)+4?tea$Jn# zCK0^}ksF@c%hTF(`Iy6RmnPx2BVtTu@L-H%!z5k<`@wkJtxCi1TDh}oIZ6hF_;5r( zZ#d2kTVDy+PQ4zDTleu}Nw`~?iaQl4m^m)ROnEY`!@WH0?~kT;ZKE4DiC1Z@JJ-Pj zCqMbjr&2i7&oA0L9pQMbdo8V9El(;bmccM?VQWpIP`L1%7&r7T=0pKjX^x}7}I%r30vXqwM?^~CGLs| zYBDB<-ZO1qh0!Q~T!~^4`p72^WpN(=|NnQ?yo#a%Hnl&)F01AE?%wR{?fycRGzQ}z Xk>@O>$42T900000NkvXXu0mjfLrDYd diff --git a/test/qglview/icons/type-light.png b/test/qglview/icons/type-light.png deleted file mode 100644 index 687c8fed894f412ca857f91ee6fb9e36f53766c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmV;+12p`JP)YI%1Ig6Wo{&?>tP0;ftadueS$m3t9d zq-((5@_tQVU~HHWt{q(wR$V!vbS?XzJpZ1c=*ofFp@N`qu-_FJ+IPOqQcaQa@;N`3 z`-9=~e=>Ywd{g;xhE1RM^SXv*VX9?hYv2>D_W|w0={06}wiG&SV^g2Ix%8-;yZPn+ zV$-9u>yab2_264hI8k>S-4NGR1w+@9`+1u<#$_%9NbIw;z4qt{GoktwK0@;NOWIZV^ebT|F zkJ;Jfkr^)Wt{txE3&1M+t~%Jf<70NNZ=Oqi>SQAdeI{_oF2wuv5%+*C={soUlY>-# zvERfc4w|^-_iU)-t8~eZ>R{w}LL``*>2gSF;Fh{|Y5xH$NUF%p^}b6{kJ1EFYBD)L zXcZE@q>y~m0wdpM(A8ZXTk8r#y}uml)bp`!l8Y&I^i22UYE-Syg!8)$kOypO}he7^#Nf?LV$Ru)?rfFg0nrQ z)o>RH;vEDsHZa)N`cO?^Y-#)n`k%9cM90ODTW-wWkm+vGQW6ATG$QH|qUP;}UArGg z)+U+{zhq#X^68jYcBSB#n9!A-3)t2ys~ud?`48J~(!Ys|!C%|i=Q)XWQFypNxEffBE@GJT^9lX?hWB zG=0TwgP#|-r9V1;4C{yqTr3u`*XzM*wQBp0MWW`%_U_%|92^)x5{abZRufh#l`n4x tyjj2>PS^ka*ZB8-zyB;ksBtSf{{X>kY}}^wfTjQd002ovPDHLkV1iEO=8OOU diff --git a/test/qglview/icons/view-grid.png b/test/qglview/icons/view-grid.png deleted file mode 100644 index 0f1d70c0011a6a5be4931cc6a60684779fe04121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmZ8fZAepL6uxsdb0%sbX{caP>5oavqOAF`G1HOS{3y~Q)>I;>C20TpF$?lLs3;?- z2m;MynFR`EV1FVF(^N{CsdMh$ZTIfp-LKu~EQdcYOOq?nITHLN!8`?=p5W^0+A7AZt-IFOoa=th)A$ z-9%_J04aD-)B}|aqZo#gB1(za<^~p&ypVLnhq--B#K%Pan8y#5m2uRC`#d-VD-(W< zAcz2g1xS(%;51D$l$W7!h9VdMScYLCIF1E?qXQgE^FcpPlRN`S@hru2Ojr;^o)iUM z1VG{_Nnj;Wlq4w<=AsfGjfk?y%Mvd~Lb4nM0s}-I$RdC>5C90nB>*A-Kq~_Pw4ok& zbVS`&Q&o#3BqklsFDxo9(H6!YgI$I7beYk%H>r9zG~Y}{eO=moqs7wH+^#%#N~KcW z`=ooJOYuvYva?%PtG_USq?~zszIxF9rlG~$tv6Wj#xLyHpOu-SwC&R7=MARY8nQ3F zJ`kL%e{9y+zC8b9+Bv6PdSGrpwDNnrf*Hm$PIlTmRAcwY)B7L2%KYAIiBhvirdjvJ u#=&`}$)5F4Wz8KypA;;;wDrx;G2l7IA&y5dTpJOVmGCB;F+kXKm7Lqgo diff --git a/test/qglview/icons/zoom-fit-best.png b/test/qglview/icons/zoom-fit-best.png deleted file mode 100644 index 07cfc9847cb6821043d1da127b99273a637b07a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmV+$0_6RPP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iOG+ z3Mv{e5wxxV00EmxL_t(|+Le(#OT$nUhToeAqSPt~7F=}E#m&jxk6AiZaa0lNq(4P} zfH)N?Iu^vKpin^+#eYycXiYUqwMmnEJh|qgUb6VW!%Z%{Cnx6!d^5(*;eR}`Z%A3D zf0AUt3?L=Bt5&OcX}2K&OcV-OT3iH#fJjXcY%Z76kFfBIHit{464ut&@$&o(%d%kG zHf%mwez&n(k>~~l%>WEIr1U}yH&26j?*UCmqS;}c7-zQH5XsWG;o0^C8zPoE9-x+R<0fk-=e?aDu)R;z_Zqk()ruN)c~ z1ruc!Na%Fw_nitCi$x^xkg>PFe*xgi+=80=&ap@Na)&mLe2Qbq##F1-NJ>eb=TUjL zd=Fp}8nb}og|vF$(W@6FA+@%8y-u#{>hKISMuAMiD5mSX2in@+I?wvD-pM#SuimqX d*h@Bm!56}ZCMId;HE{p{002ovPDHLkV1lrt=VJf> diff --git a/test/qglview/loader_3ds.cpp b/test/qglview/loader_3ds.cpp deleted file mode 100644 index 39811fb..0000000 --- a/test/qglview/loader_3ds.cpp +++ /dev/null @@ -1,348 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "loader_3ds.h" - - -void Loader3DS::init3DSMesh(GLObjectBase * o, const QVector & smooth) { - QVector & vertices(o->VBO().vertices()), & normals(o->VBO().normals()), & uvs(o->VBO().texcoords()); - QVector & points(o->points), & puvws(o->puvws), fnormals; - QVector & faces(o->faces); - Vector3d pos = Vector3d(o->pos()); - bool has_uv = !puvws.isEmpty(); - Vector3i cf; - Vector3d v0, v1, v2, cn0, cn1, cn2; - fnormals.resize(faces.size()); - for (int i = 0; i < points.size(); ++i) - points[i] -= pos; - for (int i = 0; i < fnormals.size(); ++i) { - cf = faces[i]; - v0 = points[cf.p0]; - v1 = points[cf.p1]; - v2 = points[cf.p2]; - fnormals[i] = ((v1 - v0) * (v2 - v0)).normalized(); - } - int fcnt = faces.size() * 3; - vertices.resize(fcnt * 3); - normals.resize(vertices.size()); - if (has_uv) uvs.resize(fcnt * 2); - int ind = 0, induv = 0, ncnt0, ncnt1, ncnt2, csg; - //qDebug() << faces.size(); - if (smooth.isEmpty()) { - for (int i = 0; i < faces.size(); ++i) { - cf = faces[i]; - cn0 = fnormals[i]; - v0 = points[cf.p0]; - v1 = points[cf.p1]; - v2 = points[cf.p2]; - vertices[ind] = v0.x; normals[ind] = cn0.x; ++ind; - vertices[ind] = v0.y; normals[ind] = cn0.y; ++ind; - vertices[ind] = v0.z; normals[ind] = cn0.z; ++ind; - vertices[ind] = v1.x; normals[ind] = cn0.x; ++ind; - vertices[ind] = v1.y; normals[ind] = cn0.y; ++ind; - vertices[ind] = v1.z; normals[ind] = cn0.z; ++ind; - vertices[ind] = v2.x; normals[ind] = cn0.x; ++ind; - vertices[ind] = v2.y; normals[ind] = cn0.y; ++ind; - vertices[ind] = v2.z; normals[ind] = cn0.z; ++ind; - if (has_uv) { - uvs[induv] = puvws[cf.p0].x; ++induv; - uvs[induv] = puvws[cf.p0].y; ++induv; - uvs[induv] = puvws[cf.p1].x; ++induv; - uvs[induv] = puvws[cf.p1].y; ++induv; - uvs[induv] = puvws[cf.p2].x; ++induv; - uvs[induv] = puvws[cf.p2].y; ++induv; - } - } - } else { - for (int i = 0; i < faces.size(); ++i) { - cf = faces[i]; - csg = smooth[i]; - v0 = points[cf.p0]; - v1 = points[cf.p1]; - v2 = points[cf.p2]; - - cn0 = cn1 = cn2 = fnormals[i]; - ncnt0 = ncnt1 = ncnt2 = 1; - for (int j = 0; j < faces.size(); ++j) { - if (csg != smooth[j] || j == i) continue; - if (faces[j].p0 == cf.p0 || faces[j].p1 == cf.p0 || faces[j].p2 == cf.p0 || - points[faces[j].p0] == v0 || points[faces[j].p1] == v0 || points[faces[j].p2] == v0) { - cn0 += fnormals[j]; - ++ncnt0; - } - if (faces[j].p0 == cf.p1 || faces[j].p1 == cf.p1 || faces[j].p2 == cf.p1 || - points[faces[j].p0] == v1 || points[faces[j].p1] == v1 || points[faces[j].p2] == v1) { - cn1 += fnormals[j]; - ++ncnt1; - } - if (faces[j].p0 == cf.p2 || faces[j].p1 == cf.p2 || faces[j].p2 == cf.p2 || - points[faces[j].p0] == v2 || points[faces[j].p1] == v2 || points[faces[j].p2] == v2) { - cn2 += fnormals[j]; - ++ncnt2; - } - } - cn0 /= ncnt0; - cn1 /= ncnt1; - cn2 /= ncnt2; - vertices[ind] = v0.x; normals[ind] = cn0.x; ++ind; - vertices[ind] = v0.y; normals[ind] = cn0.y; ++ind; - vertices[ind] = v0.z; normals[ind] = cn0.z; ++ind; - vertices[ind] = v1.x; normals[ind] = cn1.x; ++ind; - vertices[ind] = v1.y; normals[ind] = cn1.y; ++ind; - vertices[ind] = v1.z; normals[ind] = cn1.z; ++ind; - vertices[ind] = v2.x; normals[ind] = cn2.x; ++ind; - vertices[ind] = v2.y; normals[ind] = cn2.y; ++ind; - vertices[ind] = v2.z; normals[ind] = cn2.z; ++ind; - if (has_uv) { - uvs[induv] = puvws[cf.p0].x; ++induv; - uvs[induv] = puvws[cf.p0].y; ++induv; - uvs[induv] = puvws[cf.p1].x; ++induv; - uvs[induv] = puvws[cf.p1].y; ++induv; - uvs[induv] = puvws[cf.p2].x; ++induv; - uvs[induv] = puvws[cf.p2].y; ++induv; - } - } - } -} - - -Material Loader3DS::materialByName(const QVector & materials, const QString & name) { - foreach (const Material & m, materials) - if (m.name == name) - return m; - return Material(); -} - - -GLObjectBase * loadFrom3DSFile(const QString & filepath, float scale) { - QFile f(filepath); - if (!f.exists()) { - qDebug() << "[Loader 3DS] Error: can`t open \"" + filepath + "\""; - return nullptr; - } - f.open(QIODevice::ReadOnly); - QDataStream stream(&f); - QVector materials; - QVector smooth; - QVector face_mats; - GLObjectBase * root = new GLObjectBase(), * co = nullptr; - Material mat; - Loader3DS::Chunk cc; - Loader3DS::Face face; - Vector3d pos; - QString str; - ushort cnt; - QString name; - QByteArray ba; - int cur_map = 0; - float fl, fl1, matrix[3][3]; - uint col; - root->setName(QFileInfo(f).baseName()); - while (!stream.atEnd()) { - stream.readRawData((char * )&cc, sizeof(cc)); - switch (cc.id) { - case LOADER_3DS_CHUNK_MAIN: /*qDebug() << "main" << cc.size;*/ break; - case LOADER_3DS_CHUNK_OBJECTS: /*qDebug() << " objects" << cc.size;*/ break; - case LOADER_3DS_CHUNK_OBJECT: - if (co != nullptr) { - Loader3DS::init3DSMesh(co, smooth); - root->addChild(co); - } - co = new GLObjectBase(); - co->setName(readCharsUntilNull(stream)); - smooth.clear(); - //qDebug() << " object" << co->name(); - break; - case LOADER_3DS_CHUNK_MESH: /*qDebug() << " mesh" << cc.size;*/ break; - case LOADER_3DS_CHUNK_VERTLIST: - stream.readRawData((char * )&cnt, sizeof(ushort)); - co->points.resize(cnt); - //qDebug() << " vertices" << cnt; - for (int i = 0; i < cnt; ++i) { - stream.readRawData((char * )&co->points[i].x, sizeof(float)); - stream.readRawData((char * )&co->points[i].y, sizeof(float)); - stream.readRawData((char * )&co->points[i].z, sizeof(float)); - co->points[i] *= scale; - } - break; - case LOADER_3DS_CHUNK_FACELIST: - stream.readRawData((char * )&cnt, sizeof(ushort)); - co->faces.resize(cnt); - //qDebug() << " faces" << cnt; - for (int i = 0; i < cnt; ++i) { - stream.readRawData((char * )&face, sizeof(Loader3DS::Face)); - co->faces[i].p0 = face.v0; - co->faces[i].p1 = face.v1; - co->faces[i].p2 = face.v2; - } - break; - case LOADER_3DS_CHUNK_FACEMAT: - name = readCharsUntilNull(stream); - stream.readRawData((char * )&cnt, sizeof(ushort)); - face_mats.resize(cnt); - for (int i = 0; i < cnt; ++i) - stream.readRawData((char * )&(face_mats[i]), sizeof(ushort)); - //qDebug() << " facemat name" << name << cnt; - co->material().name = name; - break; - case LOADER_3DS_CHUNK_MAPLIST: - stream.readRawData((char * )&cnt, sizeof(ushort)); - co->puvws.resize(cnt); - //qDebug() << " texcoords" << cnt; - for (int i = 0; i < cnt; ++i) { - stream.readRawData((char * )&co->puvws[i].x, sizeof(float)); - stream.readRawData((char * )&co->puvws[i].y, sizeof(float)); - } - break; - case LOADER_3DS_CHUNK_SMOOTH: - cnt = co->faces.size(); - smooth.resize(cnt); - //qDebug() << " smooth" << cnt; - for (int i = 0; i < cnt; ++i) - stream.readRawData((char * )&smooth[i], sizeof(uint)); - break; - case LOADER_3DS_CHUNK_TRMATRIX: - //qDebug() << co->name(); - for (int i = 0; i < 3; ++i) { - for (int j = 0; j < 3; ++j) - stream.readRawData((char * )&(matrix[i][j]), sizeof(float)); - //qDebug() << matrix[i][0] << matrix[i][1] << matrix[i][2]; - } - stream.readRawData((char * )&pos, sizeof(Vector3d)); - pos *= scale; - //qDebug() << "pos =" << pos; - co->setPos(pos.toQVector3D()); - break; - case LOADER_3DS_CHUNK_LIGHT: - //qDebug() << " light" << cc.size; - str = co->name(); - delete co; - co = new Light(); - co->setName(str); - stream.readRawData((char * )&pos, sizeof(Vector3d)); - pos *= scale; - co->setPos(pos.toQVector3D()); - break; - case LOADER_3DS_CHUNK_SPOTLIGHT: - stream.readRawData((char * )&pos, sizeof(Vector3d)); - pos *= scale; - globject_cast(co)->light_type = Light::Cone; - globject_cast(co)->direction = (pos.toQVector3D() - co->pos()).normalized(); - stream.readRawData((char * )&fl1, sizeof(float)); - stream.readRawData((char * )&fl, sizeof(float)); - globject_cast(co)->angle_start = fl1; - globject_cast(co)->angle_end = fl; - //qDebug() << "spotlight" << globject_cast(co)->direction << globject_cast(co)->angle_spread; - break; - case LOADER_3DS_CHUNK_LIGHT_OFF: - stream.skipRawData(cc.size - 6); - co->hide(); - break; - case LOADER_3DS_CHUNK_ATTENUATION_ON: - stream.skipRawData(cc.size - 6); - fl = globject_cast(co)->decay_end; - //fl1 = globject_cast(co)->decay_start; - globject_cast(co)->decay_quadratic = 4.f / fl; - //qDebug() << "decay" << globject_cast(co)->decay_quadratic; - break; - case LOADER_3DS_CHUNK_COLOR_F: - stream.readRawData((char * )&pos, sizeof(Vector3d)); - co->setColor(QColor::fromRgbF(pos.x, pos.y, pos.z)); - //qDebug() << " color_f" << co->color(); - break; - case LOADER_3DS_CHUNK_COLOR_B: - stream.readRawData((char * )&col, 3); - co->setColor(QColor::fromRgb(((uchar * )&col)[0], ((uchar * )&col)[1], ((uchar * )&col)[2])); - //qDebug() << " color_b" << co->color(); - break; - case LOADER_3DS_CHUNK_MULTIPLIER: - stream.readRawData((char * )&fl, sizeof(float)); - globject_cast(co)->intensity = fl; - //qDebug() << " multiplier" << fl; - break; - case LOADER_3DS_CHUNK_RANGE_START: - stream.readRawData((char * )&fl, sizeof(float)); - globject_cast(co)->decay_start = fl; - //qDebug() << " range start" << fl; - break; - case LOADER_3DS_CHUNK_RANGE_END: - stream.readRawData((char * )&fl, sizeof(float)); - globject_cast(co)->decay_end = fl; - //qDebug() << " range end" << fl; - break; - case LOADER_3DS_CHUNK_MATERIAL: - //stream.skipRawData(cc.size - 6); - if (!mat.name.isEmpty()) - materials << mat; - mat = Material(); - break; - case LOADER_3DS_CHUNK_MATERIAL_NAME: - mat.name = readCharsUntilNull(stream); - //qDebug() << "matname" << mat.name; - break; - case LOADER_3DS_CHUNK_AMBIENT_COLOR: - stream.skipRawData(cc.size - 9); - stream.readRawData((char * )&col, 3); - mat.color_self_illumination = QColor::fromRgb(((uchar * )&col)[0], ((uchar * )&col)[1], ((uchar * )&col)[2]); - //qDebug() << "mat diffuse" << mat.color_diffuse; - break; - case LOADER_3DS_CHUNK_DIFFUSE_COLOR: - stream.skipRawData(cc.size - 9); - stream.readRawData((char * )&col, 3); - mat.color_diffuse = QColor::fromRgb(((uchar * )&col)[0], ((uchar * )&col)[1], ((uchar * )&col)[2]); - //qDebug() << "mat diffuse" << mat.color_diffuse; - break; - case LOADER_3DS_CHUNK_SPECULAR_COLOR: - stream.skipRawData(cc.size - 9); - stream.readRawData((char * )&col, 3); - mat.color_specular = QColor::fromRgb(((uchar * )&col)[0], ((uchar * )&col)[1], ((uchar * )&col)[2]); - //qDebug() << "mat diffuse" << mat.color_diffuse; - break; - case LOADER_3DS_CHUNK_TEXTURE_MAP: - cur_map = LOADER_3DS_CHUNK_TEXTURE_MAP; - break; - case LOADER_3DS_CHUNK_BUMP_MAP: - cur_map = LOADER_3DS_CHUNK_BUMP_MAP; - break; - case LOADER_3DS_CHUNK_REFLECTION_MAP: - cur_map = LOADER_3DS_CHUNK_REFLECTION_MAP; - break; - case LOADER_3DS_CHUNK_MAP_FILENAME: - name = readCharsUntilNull(stream); - //qDebug() << " mat map" << QString::number(cur_map, 16) << name; - switch (cur_map) { - case LOADER_3DS_CHUNK_TEXTURE_MAP: mat.map_diffuse.bitmap_path = name; break; - case LOADER_3DS_CHUNK_BUMP_MAP: mat.map_normal.bitmap_path = name; break; - } - break; - default: /*qDebug() << "???" << QString::number(cc.id, 16).rightJustified(4, '0') << cc.size;*/ stream.skipRawData(cc.size - 6); - } - } - if (!mat.name.isEmpty()) - materials << mat; - foreach (const Material & m, materials) - qDebug() << m.name; - if (co != nullptr) { - Loader3DS::init3DSMesh(co, smooth); - root->addChild(co); - } - for (int i = 0; i < root->childCount(); ++i) - root->child(i)->material() = Loader3DS::materialByName(materials, root->child(i)->material().name); - qDebug() << "[Loader 3DS] Loaded" << root->childCount() << "objects from" << filepath; - return root; -} diff --git a/test/qglview/loader_3ds.h b/test/qglview/loader_3ds.h deleted file mode 100644 index 2eeeb3d..0000000 --- a/test/qglview/loader_3ds.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef LOADER_3DS_H -#define LOADER_3DS_H - -#include "gltexture_manager.h" -#include "globject.h" -#include -#include - -#define LOADER_3DS_CHUNK_MAIN 0x4D4D // [-] сцена -#define LOADER_3DS_CHUNK_COLOR_F 0x0010 // [+] цвет во float -#define LOADER_3DS_CHUNK_COLOR_B 0x0011 // [+] цвет в byte -#define LOADER_3DS_CHUNK_OBJECTS 0x3D3D // [-] всяческие объекты -#define LOADER_3DS_CHUNK_OBJECT 0x4000 // [+] объект -#define LOADER_3DS_CHUNK_MESH 0x4100 // [-] mesh-объект -#define LOADER_3DS_CHUNK_VERTLIST 0x4110 // [+] список вершин -#define LOADER_3DS_CHUNK_FACELIST 0x4120 // [+] список граней -#define LOADER_3DS_CHUNK_FACEMAT 0x4130 // [+] материалы граней -#define LOADER_3DS_CHUNK_MAPLIST 0x4140 // [+] текстурные координаты -#define LOADER_3DS_CHUNK_SMOOTH 0x4150 // [+] группы сглаживания -#define LOADER_3DS_CHUNK_TRMATRIX 0x4160 // [+] матрица перевода -#define LOADER_3DS_CHUNK_LIGHT 0x4600 // [+] источник света -#define LOADER_3DS_CHUNK_SPOTLIGHT 0x4610 // [+] -#define LOADER_3DS_CHUNK_LIGHT_OFF 0x4620 // [+] -#define LOADER_3DS_CHUNK_ATTENUATION_ON 0x4625 // [+] -#define LOADER_3DS_CHUNK_RANGE_START 0x4659 // [+] -#define LOADER_3DS_CHUNK_RANGE_END 0x465A // [+] -#define LOADER_3DS_CHUNK_MULTIPLIER 0x465B // [+] -#define LOADER_3DS_CHUNK_CAMERA 0x4700 // [+] объект-камера -#define LOADER_3DS_CHUNK_MATERIAL 0xAFFF // [-] материал -#define LOADER_3DS_CHUNK_MATERIAL_NAME 0xA000 -#define LOADER_3DS_CHUNK_AMBIENT_COLOR 0xA010 -#define LOADER_3DS_CHUNK_DIFFUSE_COLOR 0xA020 -#define LOADER_3DS_CHUNK_SPECULAR_COLOR 0xA030 -#define LOADER_3DS_CHUNK_TEXTURE_MAP 0xA200 -#define LOADER_3DS_CHUNK_BUMP_MAP 0xA230 -#define LOADER_3DS_CHUNK_REFLECTION_MAP 0xA220 -#define LOADER_3DS_CHUNK_MAP_FILENAME 0xA300 -#define LOADER_3DS_CHUNK_MAP_PARAMETERS 0xA351 - -namespace Loader3DS { -#pragma pack(push, 1) - struct Chunk { - ushort id; - uint size; - }; - struct Face { - ushort v0; - ushort v1; - ushort v2; - ushort flags; - }; -#pragma pack(pop) - void init3DSMesh(GLObjectBase * o, const QVector & smooth); - Material materialByName(const QVector & materials, const QString & name); -} - -GLObjectBase * loadFrom3DSFile(const QString & filepath, float scale = 1.0); - -#endif // LOADER_3DS_H diff --git a/test/qglview/loader_ase.cpp b/test/qglview/loader_ase.cpp deleted file mode 100644 index c5244f9..0000000 --- a/test/qglview/loader_ase.cpp +++ /dev/null @@ -1,386 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "loader_ase.h" - - -void LoaderASE::initASEMesh(GLObjectBase * o) { - QVector & vertices(o->VBO().vertices()), & normals(o->VBO().normals()), & uvs(o->VBO().texcoords()); - QVector & points(o->points), & puvws(o->puvws), & fnormals(o->normals); - QVector & faces(o->faces); - Vector3d pos = Vector3d(o->pos()); - bool has_uv = !puvws.isEmpty(), has_norms = !fnormals.isEmpty(); - Vector3i cf; - Vector3d v0, v1, v2, cn0, cn1, cn2; - int ni = 0; - for (int i = 0; i < points.size(); ++i) - points[i] -= pos; - if (!has_norms) { - fnormals.resize(faces.size() * 3); - for (int i = 0; i < faces.size(); ++i) { - cf = faces[i]; - v0 = points[cf.p0]; - v1 = points[cf.p1]; - v2 = points[cf.p2]; - cn0 = ((v1 - v0) * (v2 - v0)).normalized(); - fnormals[ni] = cn0; ++ni; - fnormals[ni] = cn0; ++ni; - fnormals[ni] = cn0; ++ni; - } - } - int fcnt = faces.size() * 3; - vertices.resize(fcnt * 3); - normals.resize(vertices.size()); - if (has_uv) uvs.resize(fcnt * 2); - int ind = 0, induv = 0; - qDebug() << "init ase" << faces.size() << "faces"; - ni = 0; - for (int i = 0; i < faces.size(); ++i) { - cf = faces[i]; - v0 = points[cf.p0]; - v1 = points[cf.p1]; - v2 = points[cf.p2]; - cn0 = fnormals[ni]; ++ni; - cn1 = fnormals[ni]; ++ni; - cn2 = fnormals[ni]; ++ni; - vertices[ind] = v0.x; normals[ind] = cn0.x; ++ind; - vertices[ind] = v0.y; normals[ind] = cn0.y; ++ind; - vertices[ind] = v0.z; normals[ind] = cn0.z; ++ind; - vertices[ind] = v1.x; normals[ind] = cn1.x; ++ind; - vertices[ind] = v1.y; normals[ind] = cn1.y; ++ind; - vertices[ind] = v1.z; normals[ind] = cn1.z; ++ind; - vertices[ind] = v2.x; normals[ind] = cn2.x; ++ind; - vertices[ind] = v2.y; normals[ind] = cn2.y; ++ind; - vertices[ind] = v2.z; normals[ind] = cn2.z; ++ind; - if (has_uv) { - uvs[induv] = puvws[cf.p0].x; ++induv; - uvs[induv] = puvws[cf.p0].y; ++induv; - uvs[induv] = puvws[cf.p1].x; ++induv; - uvs[induv] = puvws[cf.p1].y; ++induv; - uvs[induv] = puvws[cf.p2].x; ++induv; - uvs[induv] = puvws[cf.p2].y; ++induv; - } - } -} - - -GLObjectBase * loadFromASEFile(const QString & filepath, float scale) { - QFile f(filepath); - if (!f.exists()) { - qDebug() << "[Loader ASE] Error: can`t open" << filepath; - return nullptr; - } - f.open(QIODevice::ReadOnly); - //QVector materials; - GLObjectBase * root = new GLObjectBase(), * co = nullptr; - root->setName(QFileInfo(f).baseName()); - QTextStream stream(&f); - QVector materials; - QVector points, puvws; - QVector faces, uvws; - QVector normals; - Vector3d cv; - int mst = -1;//, mat_ind; - qint64 pst; - QString line, cname; - - - /// Parse materials - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MATERIAL_LIST {"); - } - line = stream.readLine().trimmed(); - mst = line.indexOf("MATERIAL_COUNT"); - materials.resize(line.right(line.length() - mst - 14).toInt()); - //qDebug() << materials.size() << "materials"; - for (int i = 0; i < materials.size(); ++i) { - materials[i].map_diffuse.bitmap_id = 0; - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MATERIAL " + QString::number(i) + " {"); - } - /// Parse material i - while (line != "}" && !stream.atEnd()) { - line = stream.readLine().trimmed(); - if (line.left(17) == "*MATERIAL_DIFFUSE") {materials[i].color_diffuse = colorFromString(line.right(line.length() - 18)); continue;} //qDebug() << "diffuse " << i << " = " << colorFromString(line.right(line.length() - 18)); - if (line.left(18) == "*MATERIAL_SPECULAR") {materials[i].color_specular = colorFromString(line.right(line.length() - 19)); continue;} //qDebug() << "specular " << i << " = " << colorFromString(line.right(line.length() - 19)); - if (line.left(23) == "*MATERIAL_SHINESTRENGTH") {materials[i].map_specular.color_amount = line.right(line.length() - 24).toFloat(); continue;} - if (line.left(15) == "*MATERIAL_SHINE") {materials[i].map_specularity.color_amount = 2.f / expf(line.right(line.length() - 16).toFloat()); continue;} - if (line.left(22) == "*MATERIAL_TRANSPARENCY") {materials[i].transparency = line.right(line.length() - 23).toFloat(); continue;} - if (line.left(12) == "*MAP_DIFFUSE") { - line = stream.readLine().trimmed(); - while (line.left(11) != "*MAP_AMOUNT" && !stream.atEnd()) line = stream.readLine().trimmed(); - materials[i].map_normal.color_amount = line.right(line.length() - 12).toFloat(); - while (line.left(7) != "*BITMAP" && !stream.atEnd()) line = stream.readLine().trimmed(); - materials[i].map_diffuse.bitmap_path = line.mid(9, line.length() - 10); - /*if (!materials[i].diffuse.bitmap_path.isEmpty()) { - materials[i].diffuse.bitmap_id = currentQGLView->bindTexture(QImage(materials[i].diffuse.bitmap_path)); - parent->textures << materials[i].diffuse.bitmap_id; - } - qDebug() << materials[i].diffuse.bitmap_path << ", bind to" << materials[i].diffuse.bitmap_id;*/ - while (line != "}" && !stream.atEnd()) line = stream.readLine().trimmed(); - line = ""; - continue; - } - if (line.left(9) == "*MAP_BUMP") { - line = stream.readLine().trimmed(); - while (line.left(11) != "*MAP_AMOUNT" && !stream.atEnd()) line = stream.readLine().trimmed(); - materials[i].map_normal.color_amount = line.right(line.length() - 12).toFloat(); - //qDebug() << "bump amount" << materials[i].bump.color_amount; - while (line.left(7) != "*BITMAP" && !stream.atEnd()) line = stream.readLine().trimmed(); - materials[i].map_normal.bitmap_path = line.mid(9, line.length() - 10); - /*if (!materials[i].bump.bitmap_path.isEmpty()) { - materials[i].bump.bitmap_id = currentQGLView->bindTexture(QImage(materials[i].bump.bitmap_path)); - parent->textures << materials[i].bump.bitmap_id; - } - qDebug() << materials[i].bump.bitmap_path << ", bind to" << materials[i].bump.bitmap_id;*/ - while (line != "}" && !stream.atEnd()) line = stream.readLine().trimmed(); - line = ""; - continue; - } - } - - } - //bs << materials; - /// Geometry objects - int cotype = 0; - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - if (line.indexOf("GEOMOBJECT {") >= 0 || line.indexOf("LIGHTOBJECT {") >= 0) { - if (line.indexOf("GEOMOBJECT {") >= 0) cotype = 0; - if (line.indexOf("LIGHTOBJECT {") >= 0) cotype = 1; - mst = -1; - if (co != nullptr) { - co->points = points; - co->faces = faces; - co->normals = normals; - co->uvws = uvws; - LoaderASE::initASEMesh(co); - root->addChild(co); - } - co = new GLObjectBase(); - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("NODE_NAME"); - } - cname = line.right(line.length() - mst - 10); - co->setName(cname.mid(1, cname.length() - 2)); - qDebug() << co->name(); - } - mst = -1; - switch (cotype) { - case 0: - //qDebug() << "object"; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH {"); - } - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_NUMVERTEX "); - } - points.resize(line.right(line.length() - mst - 15).toInt()); - //qDebug() << points.size() << "vertices"; - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_NUMFACES "); - } - faces.resize(line.right(line.length() - mst - 14).toInt()); - normals.resize(faces.size() * 3); - //qDebug() << faces.size() << "faces"; - //uvws.resize(faces.size()); - /// Points - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_VERTEX_LIST {"); - } - for (int i = 0; i < points.size(); ++i) { - line = stream.readLine().trimmed(); - mst = line.indexOf("MESH_VERTEX"); - points[i] = Vector3d(line.right(line.length() - mst - 17)) * scale; - //qDebug() << points[i]; - } - /// Faces - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_FACE_LIST {"); - } - for (int i = 0; i < faces.size(); ++i) { - line = stream.readLine().trimmed(); - mst = line.indexOf("MESH_FACE"); - line = line.right(line.length() - mst - 15); - mst = line.indexOf("A:"); line = line.right(line.length() - mst - 2); - mst = line.indexOf("B:"); - faces[i].p0 = line.left(mst).toInt(); line = line.right(line.length() - mst - 2); - mst = line.indexOf("C:"); - faces[i].p1 = line.left(mst).toInt(); line = line.right(line.length() - mst - 2); - mst = line.indexOf("AB"); - faces[i].p2 = line.left(mst).toInt(); - //qDebug() << faces[i]; - } - /// Texture coordinates - mst = -1; - pst = stream.pos(); - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_NUMTVERTEX "); - } - if (mst >= 0) { - puvws.resize(line.right(line.length() - mst - 16).toInt()); - //qDebug() << puvws.size() << "tvertices"; - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_TVERTLIST {"); - } - for (int i = 0; i < puvws.size(); ++i) { - line = stream.readLine().trimmed(); - mst = line.indexOf("MESH_TVERT"); line = line.right(line.length() - mst - 10); - mst = line.indexOf("\t"); line = line.right(line.length() - mst - 1); - puvws[i] = Vector3d(line); - } - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_NUMTVFACES "); - } - uvws.resize(line.right(line.length() - mst - 16).toInt()); - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_TFACELIST {"); - } - for (int i = 0; i < uvws.size(); ++i) { - line = stream.readLine().trimmed(); - mst = line.indexOf("MESH_TFACE"); line = line.right(line.length() - mst - 10); - mst = line.indexOf("\t"); line = line.right(line.length() - mst - 1); - uvws[i] = Vector3i(line); - } - } else { - uvws.clear(); - uvws.resize(faces.size()); - stream.seek(pst); - } - if (puvws.size() <= 0) puvws.resize(1); - /// Normals - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_NORMALS {"); - } - for (int i = 0; i < faces.size(); ++i) { - line = stream.readLine(); - line = stream.readLine().trimmed(); mst = line.indexOf(" "); - line = line.right(line.length() - mst - 1); normals[i * 3] = Vector3d(line); - line = stream.readLine().trimmed(); mst = line.indexOf(" "); - line = line.right(line.length() - mst - 1); normals[i * 3 + 1] = Vector3d(line); - line = stream.readLine().trimmed(); mst = line.indexOf(" "); - line = line.right(line.length() - mst - 1); normals[i * 3 + 2] = Vector3d(line); - //qDebug() << normals[i][0] << normals[i][1] << normals[i][2]; - } - /// Material index - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MATERIAL_REF "); - } - //mat_ind = line.right(line.length() - mst - 13).toInt(); - //qDebug() << mat_ind.back(); - if (points.size() == 0 || faces.size() == 0) { - mst = -1; - continue; - } - - /// Compiling into GLList - /*glNewList(model, GL_COMPILE); - if (mat_ind < 0 || mat_ind >= materials.size()) { - mat_diffuse[0] = cfr; - mat_diffuse[1] = cfg; - mat_diffuse[2] = cfb; - glColor3f(cfr, cfg, cfb); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_none); - glMaterialf(GL_FRONT, GL_SHININESS, 0.); - } else { - materials[mat_ind].apply(); - //parent->material_ = materials[mat_ind]; - } - glBegin(GL_TRIANGLES); - if (normals_) { - for (int i = 0; i < faces.size(); ++i) { - glNormal3d(normals[i][0].x, normals[i][0].y, normals[i][0].z); - glTexCoord3d(puvws[uvws[i].p0].x, puvws[uvws[i].p0].y, puvws[uvws[i].p0].z); - cv = points[faces[i].p0] * scale; glVertex3d(cv.x, cv.y, cv.z); - glNormal3d(normals[i][1].x, normals[i][1].y, normals[i][1].z); - glTexCoord3d(puvws[uvws[i].p1].x, puvws[uvws[i].p1].y, puvws[uvws[i].p1].z); - cv = points[faces[i].p1] * scale; glVertex3d(cv.x, cv.y, cv.z); - glNormal3d(normals[i][2].x, normals[i][2].y, normals[i][2].z); - glTexCoord3d(puvws[uvws[i].p2].x, puvws[uvws[i].p2].y, puvws[uvws[i].p2].z); - cv = points[faces[i].p2] * scale; glVertex3d(cv.x, cv.y, cv.z); - } - } else { - for (int i = 0; i < faces.size(); ++i) { - glTexCoord3d(puvws[uvws[i].p0].x, puvws[uvws[i].p0].y, puvws[uvws[i].p0].z); - cv = points[faces[i].p0] * scale; glVertex3d(cv.x, cv.y, cv.z); - glTexCoord3d(puvws[uvws[i].p1].x, puvws[uvws[i].p1].y, puvws[uvws[i].p1].z); - cv = points[faces[i].p1] * scale; glVertex3d(cv.x, cv.y, cv.z); - glTexCoord3d(puvws[uvws[i].p2].x, puvws[uvws[i].p2].y, puvws[uvws[i].p2].z); - cv = points[faces[i].p2] * scale; glVertex3d(cv.x, cv.y, cv.z); - } - } - glEnd();*/ - - ///// Save binary - //bs << mat_ind << points << faces << puvws << uvws << normals; - break; - case 1: - qDebug() << "light"; - mst = -1; - while (mst < 0 && !stream.atEnd()) { - line = stream.readLine(); - mst = line.indexOf("MESH_NORMALS {"); - } - break; - } - /// Continue - mst = -1; - } - f.close(); - if (co != nullptr) { - co->points = points; - co->faces = faces; - co->normals = normals; - co->uvws = uvws; - LoaderASE::initASEMesh(co); - root->addChild(co); - } - /*parent->points = points; - parent->puvws = puvws; - parent->faces = faces; - parent->uvws = uvws; - parent->normals = normals; - return model;*/ - return root; -} diff --git a/test/qglview/loader_ase.h b/test/qglview/loader_ase.h deleted file mode 100644 index 050e77e..0000000 --- a/test/qglview/loader_ase.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef LOADER_ASE_H -#define LOADER_ASE_H - -#include "globject.h" -#include -#include -#include - -namespace LoaderASE { - void initASEMesh(GLObjectBase * o); -} - -GLObjectBase * loadFromASEFile(const QString & filepath, float scale = 1.0); - -#endif // LOADER_ASE_H diff --git a/test/qglview/loader_dae.cpp b/test/qglview/loader_dae.cpp deleted file mode 100644 index 7c4a1f1..0000000 --- a/test/qglview/loader_dae.cpp +++ /dev/null @@ -1,426 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "loader_dae.h" -#include -#include - - -Material LoaderDAE::materialByName(const QVector & materials, const QString & name) { - foreach (const Material & m, materials) { - //qDebug() << m.name << " ??? " << name; - if (m.name == name) - return m; - } - return Material(); -} - - -QColor readXMLColor(QDomElement n) { - QStringList sl(n.firstChildElement("color").firstChild().nodeValue().trimmed().split(" ")); - sl.removeAll(""); - sl.removeAll(" "); - if (sl.size() >= 3) - return QColor::fromRgbF(sl[0].toDouble(), sl[1].toDouble(), sl[2].toDouble(), sl.size() >= 4 ? sl[3].toDouble() : 1.); - return QColor(); -} - - -QVector4D readXMLVector(QDomElement n) { - QStringList sl(n.firstChild().nodeValue().trimmed().split(" ")); - sl.removeAll(""); - sl.removeAll(" "); - if (sl.size() == 3) return QVector4D(sl[0].toFloat(), sl[1].toFloat(), sl[2].toFloat(), 0.); - if (sl.size() == 4) return QVector4D(sl[0].toFloat(), sl[1].toFloat(), sl[2].toFloat(), sl[3].toFloat()); - return QVector4D(); -} - - -QMatrix4x4 readXMLMatrix(QDomElement n) { - QStringList sl(n.firstChild().nodeValue().trimmed().split(" ")); - sl.removeAll(""); - sl.removeAll(" "); - if (sl.size() != 16) return QMatrix4x4(); - QMatrix4x4 m; - int ind = -1; - for (int r = 0; r < 4; ++r) - for (int c = 0; c < 4; ++c) - m(r, c) = sl[++ind].toFloat(); - return m; -} - - -float readXMLFloat(QDomElement n) { - return n.firstChildElement("float").firstChild().nodeValue().toFloat(); -} - - -QString readXMLTexture(QDomElement n, QDomElement prof, QDomElement li) { - QString tex = n.firstChildElement("texture").attribute("texture"); - if (tex.isEmpty()) return QString(); - QString tag; - QDomNodeList elist = prof.elementsByTagName("newparam"); - if (elist.isEmpty()) { - tag = tex; - } else { - bool found = false; - int cnt = 0; - while (!tex.isEmpty() && !found && cnt < 10) { - found = false; - cnt++; - for (int i = 0; i < elist.count(); ++i) { - QDomNode dn = elist.at(i); - if (dn.attributes().namedItem("sid").nodeValue() == tex) { - //qDebug() << "found!"; - if (dn.firstChild().nodeName() == "sampler2D") { - tex = dn.firstChildElement("sampler2D").firstChildElement("source").firstChild().nodeValue(); - break; - } - if (dn.firstChild().nodeName() == "surface") { - tag = dn.firstChildElement("surface").firstChildElement("init_from").firstChild().nodeValue(); - //qDebug() << tex << "->" << tag; - tex.clear(); - found = true; - break; - } - } - } - } - if (cnt == 10) return QString(); - } - //qDebug() << tag; - if (tag.isEmpty()) return QString(); - elist = li.elementsByTagName("image"); - for (int i = 0; i < elist.count(); ++i) { - QDomElement dn = elist.at(i).toElement(); - if (dn.attribute("id") == tag) { - tex = dn.firstChildElement("init_from").firstChild().nodeValue(); - tex.replace("\\", "/"); - if (tex.startsWith("file:") && tex.mid(5, 3) != "///") tex.insert(6, "/"); - //qDebug() << "found" << tex << QUrl(tex).toLocalFile(); - tex = QUrl(tex).toLocalFile(); - if (tex == "/") tex.clear(); - return tex; - } - } - return QString(); -} - - -QVector LoaderDAE::readMaterials(QDomElement le, QDomElement li, bool fbx) { - QVector ret; - QDomNodeList elist = le.elementsByTagName("effect"); - for (int i = 0; i < elist.count(); ++i) { - QDomNode dn = elist.at(i); - Material mat; - mat.name = dn.attributes().namedItem("id").nodeValue(); - QDomElement prof = dn.firstChildElement("profile_COMMON"); - QDomNode pn = prof.firstChildElement("technique").firstChild(); - QColor col; - QString text; - - col = readXMLColor(pn.firstChildElement("emission")); - if (col.isValid()) mat.color_self_illumination = col; - col = readXMLColor(pn.firstChildElement("diffuse")); - if (col.isValid()) mat.color_diffuse = col; - col = readXMLColor(pn.firstChildElement("specular")); - if (col.isValid()) mat.color_specular = col; - mat.map_specularity.color_amount = 2.f / expf(readXMLFloat(pn.firstChildElement("shininess"))); - mat.transparency = readXMLFloat(pn.firstChildElement("transparency")); - if (!fbx) mat.transparency = 1.f - mat.transparency; - text = readXMLTexture(pn.firstChildElement("diffuse"), prof, li); - if (!text.isEmpty()) mat.map_diffuse.bitmap_path = text; - text = readXMLTexture(pn.firstChildElement("diffuse"), prof, li); - if (!text.isEmpty()) mat.map_diffuse.bitmap_path = text; - - pn = prof.firstChildElement("technique").firstChildElement("extra").firstChild(); - text = readXMLTexture(pn.firstChildElement("bump"), prof, li); - if (!text.isEmpty()) mat.map_normal.bitmap_path = text; - - ret << mat; - qDebug() << "** Material" << mat.name; - qDebug() << " emission" << mat.color_self_illumination; - qDebug() << " diffuse" << mat.color_diffuse; - qDebug() << " specular" << mat.color_specular; - qDebug() << " transparency" << mat.transparency; - } - return ret; -} - - -QMatrix4x4 readXMLTransformations(QDomElement n) { - QMatrix4x4 tm; - QDomNodeList trl = n.childNodes(); - for (int i = 0; i < trl.count(); ++i) { - QDomElement dt = trl.at(i).toElement(); - } - return tm; -} - - -void readScene(QDomElement n, QMatrix4x4 cm, QVector, QMatrix4x4> > & ret, QString last_name = QString()) { - QDomNodeList evsl = n.childNodes(); - if (n.hasAttribute("name")) last_name = n.attribute("name"); - for (int i = 0; i < evsl.count(); ++i) { - QDomElement dt = evsl.at(i).toElement(); - QVector4D v; -//qDebug() << dt.nodeName(); - if (dt.nodeName() == "translate") { - v = readXMLVector(dt); - cm.translate(v.toVector3D()); - continue; - } - if (dt.nodeName() == "rotate") { - v = readXMLVector(dt); - cm.rotate(v.w(), v.toVector3D()); - continue; - } - if (dt.nodeName() == "scale") { - v = readXMLVector(dt); - cm.scale(v.toVector3D()); - continue; - } - if (dt.nodeName() == "matrix") { - QMatrix4x4 m = readXMLMatrix(dt); - cm *= m; - continue; - } - if (dt.nodeName() == "node") { - readScene(dt, cm, ret, last_name); - continue; - } - if (dt.nodeName() == "instance_geometry" || dt.nodeName() == "instance_light") { - QString gid = dt.attribute("url"); - if (gid.startsWith("#")) gid.remove(0, 1); -//qDebug() << "matrix" << gid << cm; - ret << QPair, QMatrix4x4>(QPair(gid, last_name), cm); - continue; - } - //qDebug() << name << m; - } - ret << QPair, QMatrix4x4>(QPair("", last_name), cm); -} - - -GLObjectBase * loadFromDAEFile(const QString & filepath, float scale) { - QFile f(filepath); - if (!f.exists()) { - qDebug() << "[Loader DAE] Error: can`t open \"" + filepath + "\""; - return nullptr; - } - QTime tm; - tm.restart(); - QDomDocument dom(filepath); - if (!dom.setContent(&f)) { - qDebug() << "[Loader DAE] Error: can`t parse \"" + filepath + "\""; - return nullptr; - } - //qDebug() << "parse" << tm.elapsed(); - tm.restart(); - QDomElement maine = dom.firstChildElement("COLLADA"); - bool fbx = maine.firstChildElement("asset").firstChildElement("contributor").firstChildElement("authoring_tool").firstChild().nodeValue().startsWith("FBX"); - QVector materials = LoaderDAE::readMaterials(maine.firstChildElement("library_effects"), - maine.firstChildElement("library_images"), fbx); - GLObjectBase * root = new GLObjectBase(), * co = nullptr; - QMap > objects; - - QMap mat_names; - QDomElement mvse = maine.firstChildElement("library_visual_scenes").firstChildElement("visual_scene"); - QDomNodeList evsl = mvse.elementsByTagName("instance_material"); - QDomNodeList matl = maine.firstChildElement("library_materials").elementsByTagName("material"); - for (int i = 0; i < evsl.count(); ++i) { - QDomElement dn = evsl.at(i).toElement(); - QString tn = dn.attribute("target"); - if (tn.startsWith("#")) tn.remove(0, 1); - for (int j = 0; j < matl.count(); ++j) { - QDomElement dm = matl.at(j).toElement(); - if (dm.attribute("id") == tn) { - QString en = dm.firstChildElement("instance_effect").attribute("url"); - if (en.startsWith("#")) en.remove(0, 1); - mat_names[dn.attribute("symbol")] = en; - //qDebug() << dn.attribute("symbol") << "->" << en; - } - } - } - - QDomNodeList elist = maine.firstChildElement("library_geometries").elementsByTagName("geometry"); - for (int i = 0; i < elist.count(); ++i) { - QDomNode dn = elist.at(i); - QString name = dn.attributes().namedItem("name").nodeValue(); - QString gid = dn.attributes().namedItem("id").nodeValue(); - if (name.isEmpty()) continue; - dn = dn.firstChildElement("mesh"); - QMap source_names; - QMap > source_data; - QDomNodeList esrc = dn.toElement().elementsByTagName("source"); - for (int j = 0; j < esrc.count(); ++j) { - QDomNode ds = esrc.at(j); - QString id = ds.attributes().namedItem("id").nodeValue(); - QDomNodeList evert = dn.toElement().elementsByTagName("vertices"); - for (int k = 0; k < evert.count(); ++k) { - QDomNode dv = evert.at(k); - QString vid = dv.attributes().namedItem("id").nodeValue(); - if (dv.firstChildElement("input").attribute("source") == ("#" + id)) - source_names[vid] = id; -//qDebug() << " found source sin" << vid; - } - QVector & sd(source_data[id]); - int stride = ds.firstChildElement("technique_common").firstChildElement("accessor").attribute("stride").toInt(); - QString astr = ds.firstChildElement("float_array").firstChild().nodeValue().trimmed(); - astr.replace("\n", " "); - astr.remove("\r"); - QStringList sl = astr.split(" "); - sl.removeAll(""); - sl.removeAll(" "); - for (int c = 0; c < sl.size(); c += stride) { - Vector3d v; - if (stride >= 1) v.x = sl[c].toFloat(); - if (stride >= 2) v.y = sl[c + 1].toFloat(); - if (stride >= 3) v.z = sl[c + 2].toFloat(); - sd << v; - } -//qDebug() << " found source" << id << "stride =" << stride << ":" << sd; -//qDebug() << " readed" << sd.size(); - } - QDomNodeList etr = dn.toElement().elementsByTagName("triangles"); - //QMatrix4x4 m = matrices.value(gid); -//qDebug() << "found geom" << name; - QVector ol; - for (int j = 0; j < etr.count(); ++j) { - QDomElement ds = etr.at(j).toElement(); - QString matname = mat_names[ds.attribute("material")]; - QVector p; - QStringList psl = ds.firstChildElement("p").firstChild().nodeValue().trimmed().split(" "); - foreach (const QString & s, psl) - p << s.toInt(); - QDomNodeList einp = ds.elementsByTagName("input"); - int pbv = einp.count();//, tc = qMin(ds.attribute("count").toInt(), p.size() / pbv); - co = new GLObjectBase(); - co->setName(name + "_" + QString::number(j)); - //co->setTransform(m); - co->material() = LoaderDAE::materialByName(materials, matname); - qDebug() << " tri" << co->material().name << matname; - QVector & vertices(co->VBO().vertices()), & normals(co->VBO().normals()), & uvs(co->VBO().texcoords()); - for (int k = 0; k < einp.count(); ++k) { - QDomElement di = einp.at(k).toElement(); - QString src = di.attribute("source"), sem = di.attribute("semantic").toLower(); - int offset = di.attribute("offset").toInt(); - QVector * curv = nullptr; - int pccnt = 0; - if (sem == "vertex") {curv = &vertices; pccnt = 3;} - if (sem == "normal") {curv = &normals; pccnt = 3;} - if (sem == "texcoord") {curv = &uvs; pccnt = 2;} - if (curv == nullptr) continue; - if (src.startsWith("#")) src.remove(0, 1); - QVector & data(source_data[source_names.value(src, src)]); - for (int ii = offset; ii < p.size(); ii += pbv) { - if ((p[ii] >= 0) && (p[ii] < data.size())) { - Vector3d v = data[p[ii]]; - (*curv) << v.x << v.y; - if (pccnt == 3) (*curv) << v.z; - } - } - //qDebug() << " input" << sem << "from" << data.size() << "->" << (*curv) << pbv; - } - //qDebug() << "geom" << gid << co; - ol << co; - } - objects[gid] = ol; - } - - elist = maine.firstChildElement("library_lights").elementsByTagName("light"); - for (int i = 0; i < elist.count(); ++i) { - QDomElement dn = elist.at(i).toElement(); - QString name = dn.attributes().namedItem("name").nodeValue(); - QString gid = dn.attributes().namedItem("id").nodeValue(); - if (name.isEmpty() || name == "EnvironmentAmbientLight") continue; - QDomElement dl = dn.firstChildElement("technique_common").firstChild().toElement(); - Light * lo = new Light(); - if (dl.nodeName() == "point") lo->light_type = Light::Omni; - else if (dl.nodeName() == "spot") lo->light_type = Light::Cone; - else { - delete lo; - continue; - } - lo->setColor(readXMLColor(dl)); - QDomNodeList ml = dn.elementsByTagName("multiplier"); - if (!ml.isEmpty()) lo->intensity = ml.at(0).firstChild().nodeValue().toFloat(); - ml = dn.elementsByTagName("intensity"); - if (!ml.isEmpty()) lo->intensity = ml.at(0).firstChild().nodeValue().toFloat(); - lo->setColor(lo->color() / lo->intensity); - QString sv; - sv = dl.firstChildElement("constant_attenuation").firstChild().nodeValue(); if (!sv.isEmpty()) lo->decay_const = sv.toFloat(); - sv = dl.firstChildElement("linear_attenuation").firstChild().nodeValue(); if (!sv.isEmpty()) lo->decay_linear = sv.toFloat(); - sv = dl.firstChildElement("quadratic_attenuation").firstChild().nodeValue(); if (!sv.isEmpty()) lo->decay_quadratic = sv.toFloat(); - ///lo->setTransform(matrices.value(name)); - if (lo->light_type == Light::Cone) { - ml = dn.elementsByTagName("decay_falloff"); if (!ml.isEmpty()) lo->angle_end = ml.at(0).firstChild().nodeValue().toFloat(); - ml = dn.elementsByTagName("hotspot_beam"); if (!ml.isEmpty()) lo->angle_start = ml.at(0).firstChild().nodeValue().toFloat(); - } - QVector ol; - ol << lo; - objects[gid] = ol; - //qDebug() << "light" << name; - } - //qDebug() << "readed" << objects.size(); - - QVector, QMatrix4x4> > scene; - readScene(mvse, QMatrix4x4(), scene); - for (int i = 0; i < scene.size(); ++i) { - QPair, QMatrix4x4> so = scene[i]; - if (so.first.first.isEmpty()) continue; - QVector ol = objects.value(so.first.first); - foreach (GLObjectBase * o, ol) { - o = o->clone(); - o->setName(so.first.second); - o->setTransform(so.second); - root->addChild(o); - //qDebug() << " add" << so.first.second << o->name(); - } - //qDebug() << "add" << so.first << ol.size(); - } - - for (int i = 0; i < root->childCount(); ++i) { - GLObjectBase * o = root->child(i); - if (o->type() == GLObjectBase::glLight) { - Light * l = (Light*)o; - if (l->light_type == Light::Directional || l->light_type == Light::Cone) { - QString tn = l->name() + ".Target"; - //qDebug() << "search target" << tn; - for (int s = 0; s < scene.size(); ++s) { - QPair, QMatrix4x4> so = scene[s]; - if (so.first.second == tn) { - //qDebug() << "found target" << tn; - QVector3D tp = so.second.column(3).toVector3D(); - l->direction = (tp - l->pos()).normalized(); - //qDebug() << "dir" << l->direction; - } - } - } - } - } - - QList > dol = objects.values(); - for (int i = 0; i < dol.size(); ++i) - for (int j = 0; j < dol[i].size(); ++j) - delete dol[i][j]; - - root->setScale(0.001f); - qDebug() << "[Loader DAE] Loaded" << root->childCount() << "objects from" << filepath; - return root; -} diff --git a/test/qglview/loader_dae.h b/test/qglview/loader_dae.h deleted file mode 100644 index 42da2e6..0000000 --- a/test/qglview/loader_dae.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef LOADER_DAE_H -#define LOADER_DAE_H - -#include "gltexture_manager.h" -#include "globject.h" -#include -#include -#include - -namespace LoaderDAE { - Material materialByName(const QVector & materials, const QString & name); - QVector readMaterials(QDomElement le, QDomElement li, bool fbx); -} - -GLObjectBase * loadFromDAEFile(const QString & filepath, float scale = 1.0); - -#endif // LOADER_DAE_H diff --git a/test/qglview/loader_obj.cpp b/test/qglview/loader_obj.cpp deleted file mode 100644 index c4bce7f..0000000 --- a/test/qglview/loader_obj.cpp +++ /dev/null @@ -1,270 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "loader_obj.h" - - -void LoaderOBJ::initOBJMesh(GLObjectBase * o, const QVector & src_vertices, const QVector & src_normals, const QVector & src_texcoords) { - QVector & vertices(o->VBO().vertices()), & normals(o->VBO().normals()), & uvs(o->VBO().texcoords()); - QVector & faces(o->faces), & uvws(o->uvws), & norms(o->norms); - //Vector3d pos = Vector3d(o->pos()); - bool has_uv = !uvws.isEmpty(); - Vector3i cf, ct, cn; - Vector3d v[3], t[3], n[3]; - //for (int i = 0; i < points.size(); ++i) - // points[i] -= pos; - int fcnt = faces.size() * 3; - vertices.resize(fcnt * 3); - normals.resize(vertices.size()); - if (has_uv) uvs.resize(fcnt * 2); - int ind = 0, induv = 0; - //qDebug() << "initOBJMesh" << faces.size(); - for (int i = 0; i < faces.size(); ++i) { - cf = faces[i]; - ct = uvws[i]; - cn = norms[i]; - v[0] = src_vertices[cf.p0]; - v[1] = src_vertices[cf.p1]; - v[2] = src_vertices[cf.p2]; - n[0] = src_normals[cn.p0]; - n[1] = src_normals[cn.p1]; - n[2] = src_normals[cn.p2]; - vertices[ind] = v[0].x; normals[ind] = n[0].x; ++ind; - vertices[ind] = v[0].y; normals[ind] = n[0].y; ++ind; - vertices[ind] = v[0].z; normals[ind] = n[0].z; ++ind; - vertices[ind] = v[1].x; normals[ind] = n[1].x; ++ind; - vertices[ind] = v[1].y; normals[ind] = n[1].y; ++ind; - vertices[ind] = v[1].z; normals[ind] = n[1].z; ++ind; - vertices[ind] = v[2].x; normals[ind] = n[2].x; ++ind; - vertices[ind] = v[2].y; normals[ind] = n[2].y; ++ind; - vertices[ind] = v[2].z; normals[ind] = n[2].z; ++ind; - if (has_uv) { - if ((ct.p0 >= 0) && (ct.p1 >= 0) && (ct.p2 >= 0)) { - t[0] = src_texcoords[ct.p0]; - t[1] = src_texcoords[ct.p1]; - t[2] = src_texcoords[ct.p2]; - uvs[induv] = t[0].x; ++induv; - uvs[induv] = t[0].y; ++induv; - uvs[induv] = t[1].x; ++induv; - uvs[induv] = t[1].y; ++induv; - uvs[induv] = t[2].x; ++induv; - uvs[induv] = t[2].y; ++induv; - } - } - } -} - - -Vector3d readVector3d(QString s) { - Vector3d ret; - QStringList sl(s.trimmed().split(" ")); - sl.removeAll(""); sl.removeAll(" "); - if (sl.size() > 0) ret.x = sl[0].toFloat(); - if (sl.size() > 1) ret.y = sl[1].toFloat(); - if (sl.size() > 2) ret.z = sl[2].toFloat(); - return ret; -} - - -Vector2d readVector2d(QString s) { - Vector2d ret; - QStringList sl(s.trimmed().split(" ")); - sl.removeAll(""); sl.removeAll(" "); - if (sl.size() > 0) ret.x = sl[0].toFloat(); - if (sl.size() > 1) ret.y = sl[1].toFloat(); - return ret; -} - - -QColor readColor(QString s) { - Vector3d c = readVector3d(s); - return QColor::fromRgbF(c.x, c.y, c.z); -} - - -void readFaces(QString s, GLObjectBase * co) { - QStringList sl(s.trimmed().split(" ")); - sl.removeAll(""); sl.removeAll(" "); - static Vector3i inds[4]; - for (int i = 0; i < sl.size(); ++i) { - inds[i].p0 = inds[i].p1 = inds[i].p2 = 0; - QStringList sl2(sl[i].split("/")); - if (sl2.size() > 4) continue; - inds[i].p0 = sl2[0].toInt(); - inds[i].p1 = sl2[1].toInt(); - inds[i].p2 = sl2[2].toInt(); - } - if (sl.size() == 3) { - co->faces << Vector3i(inds[0].p0 - 1, inds[1].p0 - 1, inds[2].p0 - 1); - co->uvws << Vector3i(inds[0].p1 - 1, inds[1].p1 - 1, inds[2].p1 - 1); - co->norms << Vector3i(inds[0].p2 - 1, inds[1].p2 - 1, inds[2].p2 - 1); - } - if (sl.size() == 4) { - co->faces << Vector3i(inds[0].p0 - 1, inds[1].p0 - 1, inds[2].p0 - 1); - co->uvws << Vector3i(inds[0].p1 - 1, inds[1].p1 - 1, inds[2].p1 - 1); - co->norms << Vector3i(inds[0].p2 - 1, inds[1].p2 - 1, inds[2].p2 - 1); - co->faces << Vector3i(inds[0].p0 - 1, inds[2].p0 - 1, inds[3].p0 - 1); - co->uvws << Vector3i(inds[0].p1 - 1, inds[2].p1 - 1, inds[3].p1 - 1); - co->norms << Vector3i(inds[0].p2 - 1, inds[2].p2 - 1, inds[3].p2 - 1); - } -} - - -QVector readMTL(QString obj_path, QString path) { - QVector ret; - QStringList sp = GLTextureManagerBase::searchPathes(); - sp.prepend(QFileInfo(obj_path).absoluteDir().path()); - QFile f(findFile(path, sp)); - if (!f.open(QIODevice::ReadOnly)) { - qDebug() << "[Loader OBJ] Warning: can`t open \"" + path + "\""; - return ret; - } - QTextStream stream(&f); - QString name; - Material mat; - while (!stream.atEnd()) { - QString line = stream.readLine().trimmed(); - if (line.startsWith("newmtl")) { - if (!mat.name.isEmpty()) - ret << mat; - mat = Material(); - mat.name = line.mid(6).trimmed(); - continue; - } - if (line.startsWith("Kd")) { - mat.color_diffuse = readColor(line.mid(2).trimmed()); - continue; - } - if (line.startsWith("Ke")) { - mat.color_self_illumination = readColor(line.mid(2).trimmed()); - continue; - } - if (line.startsWith("Ks")) { - Vector3d v = readVector3d(line.mid(2).trimmed()); - mat.map_specular.color_amount = v.length(); - float mc = qMax(v.x, qMax(v.y, v.z)); - if (mc > 0.f) v /= mc; - mat.color_specular = QColor::fromRgbF(v.x, v.y, v.z); - //qDebug() << mat.shine_strength << mat.color_specular; - continue; - } - if (line.startsWith("Ns")) { - mat.map_specularity.color_amount = 2.f / expf(line.mid(2).trimmed().toFloat()); - continue; - } - if (line.startsWith("d")) { - mat.transparency = 1.f - line.mid(1).trimmed().toFloat(); - continue; - } - if (line.startsWith("map_Kd")) { - mat.map_diffuse.bitmap_path = findFile(line.mid(6).trimmed(), sp); - continue; - } - if (line.startsWith("map_bump")) { - line = line.mid(8).trimmed(); - if (line.startsWith("-bm")) { - line = line.mid(3).trimmed(); - QString sv = line.left(line.indexOf(" ")); - line = line.mid(sv.size()).trimmed(); - mat.map_normal.color_amount = sv.toFloat(); - } - mat.map_normal.bitmap_path = findFile(line, sp); - //qDebug() << "BUMP" << mat.name << mat.bump_scale << mat.bump.bitmap_path; - continue; - } - } - if (!mat.name.isEmpty()) - ret << mat; - qDebug() << "load from MTL" << f.fileName() << ret.size() << "materials"; - return ret; -} - - -Material LoaderOBJ::materialByName(const QVector & materials, const QString & name) { - foreach (const Material & m, materials) - if (m.name == name) - return m; - return Material(); -} - - -GLObjectBase * loadFromOBJFile(const QString & filepath, float scale) { - QFile f(filepath); - if (!f.exists()) { - qDebug() << "[Loader OBJ] Error: can`t open \"" + filepath + "\""; - return nullptr; - } - f.open(QIODevice::ReadOnly); - QTextStream stream(&f); - QVector vertices, normals, texcoords; - QVector materials; - GLObjectBase * root = new GLObjectBase(), * co = nullptr; - QString name; - root->setName(QFileInfo(f).baseName()); - int cnt = 0; - while (!stream.atEnd()) { - QString line = stream.readLine().trimmed(); - if (line.startsWith("mtllib")) { - materials = readMTL(filepath, line.mid(6).trimmed()); - continue; - } - if (line.startsWith("v ")) { - vertices << readVector3d(line.mid(1)); - continue; - } - if (line.startsWith("vt ")) { - texcoords << readVector3d(line.mid(2)); - continue; - } - if (line.startsWith("vn ")) { - normals << readVector3d(line.mid(2)); - continue; - } - if (line.startsWith("g ")) { - name = line.mid(1).trimmed(); - if (co != nullptr) { - LoaderOBJ::initOBJMesh(co, vertices, normals, texcoords); - root->addChild(co); - } - co = new GLObjectBase(); - co->setName(name); - //qDebug() << "new object" << co->name(); - continue; - } - if (line.startsWith("f ")) { - readFaces(line.mid(2), co); - continue; - } - if (line.startsWith("usemtl")) { - if (!co->faces.isEmpty()) { - LoaderOBJ::initOBJMesh(co, vertices, normals, texcoords); - root->addChild(co); - co = new GLObjectBase(); - co->setName(name + "_" + QString::number(cnt++)); - } - co->material() = LoaderOBJ::materialByName(materials, line.mid(6).trimmed()); - continue; - } - } - if (co != nullptr) { - LoaderOBJ::initOBJMesh(co, vertices, normals, texcoords); - root->addChild(co); - } - qDebug() << "[Loader OBJ] Loaded" << root->childCount() << "objects from" << filepath; - return root; -} diff --git a/test/qglview/loader_obj.h b/test/qglview/loader_obj.h deleted file mode 100644 index c73362b..0000000 --- a/test/qglview/loader_obj.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef LOADER_OBJ_H -#define LOADER_OBJ_H - -#include "gltexture_manager.h" -#include "globject.h" -#include -#include - -namespace LoaderOBJ { -#pragma pack(push, 1) - struct Face { - ushort v0; - ushort v1; - ushort v2; - ushort flags; - }; -#pragma pack(pop) - void initOBJMesh(GLObjectBase * o, const QVector & vertices, const QVector & normals, const QVector & texcoords); - Material materialByName(const QVector & materials, const QString & name); -} - -GLObjectBase * loadFromOBJFile(const QString & filepath, float scale = 1.0); - -#endif // LOADER_3DS_H diff --git a/test/qglview/loader_qgl.cpp b/test/qglview/loader_qgl.cpp deleted file mode 100644 index 2f94f09..0000000 --- a/test/qglview/loader_qgl.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "loader_qgl.h" -#include "chunkstream.h" - - -GLObjectBase * loadFromQGLFile(const QString & filepath) { - QFile f(filepath); - if (!f.exists()) { - qDebug() << "[Loader QGL] Error: can`t open \"" + filepath + "\""; - return 0; - } - f.open(QIODevice::ReadOnly); - QDataStream s(&f); - s.setVersion(QDataStream::Qt_4_8); - char sign[4]; - s.readRawData(sign, 4); - if ((sign[0] != 'Q') || (sign[1] != 'G') || (sign[2] != 'L') || (sign[3] != 'F')) { - qDebug() << "[Loader QGL] Error: \"" + filepath + "\" is not valid QGL file!"; - return 0; - } - GLObjectBase * root = 0; - ushort version = 0xFFFF; - f.peek((char*)&version, 2); - if (version == 1) { - s.skipRawData(2); - s >> root; - } else { - qDebug() << "[Loader QGL] Error: \"" + filepath + "\" unsupported version!"; - return 0; - } - root->buildTransform(); - if (root->name().isEmpty()) - root->setName(QFileInfo(f).baseName()); - qDebug() << "[Loader QGL] Loaded" << root->childCount() << "objects from" << filepath; - return root; -} - - -bool saveToQGLFile(const QString & filepath, const GLObjectBase * o) { - QFile f(filepath); - if (!f.open(QIODevice::ReadWrite)) - return false; - f.resize(0); - QDataStream s(&f); - s.setVersion(QDataStream::Qt_4_8); - char sign[4] = {'Q', 'G', 'L', 'F'}; - ushort version = 1; - s.writeRawData(sign, 4); - s.writeRawData((char*)&version, 2); - s << o; - return true; -} diff --git a/test/qglview/loader_qgl.h b/test/qglview/loader_qgl.h deleted file mode 100644 index 08a1e35..0000000 --- a/test/qglview/loader_qgl.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef LOADER_QGL_H -#define LOADER_QGL_H - -#include "globject.h" -#include - -namespace LoaderQGL { -} - -GLObjectBase * loadFromQGLFile(const QString & filepath); -bool saveToQGLFile(const QString & filepath, const GLObjectBase * o); - -#endif // LOADER_QGL_H diff --git a/test/qglview/material_editor.cpp b/test/qglview/material_editor.cpp deleted file mode 100644 index af0cc78..0000000 --- a/test/qglview/material_editor.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#include "material_editor.h" -#include "ui_material_editor.h" - - -MaterialEditor::MaterialEditor(QWidget * parent): QWidget(parent) { - ui = new Ui::MaterialEditor(); - ui->setupUi(this); - ui->frameReflection->hide(); - active = true; -} - - -void MaterialEditor::changeEvent(QEvent * e) { - return; - QWidget::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - - -void MaterialEditor::setMaterial(const Material & m) { - active = false; - ui->colorDiffuse->setColor(m.color_diffuse); - ui->colorSpecular->setColor(m.color_specular); - ui->colorSelfIllum->setColor(m.color_self_illumination); - ui->checkGlass->setChecked(m.glass); - ui->spinTransparent->setValue(m.transparency); - ui->spinReflect->setValue(m.reflectivity); - ui->spinIOF->setValue(m.iof); - ui->spinDispersion->setValue(m.dispersion); - ui->mapDiffuse->setMap(m.map_diffuse); - ui->mapSpecular->setMap(m.map_specular); - ui->mapSelfIllum->setMap(m.map_self_illumination); - ui->mapSpecularity->setMap(m.map_specularity); - ui->mapBump->setMap(m.map_normal); - ui->mapRelief->setMap(m.map_relief); - ui->lineReflFront->setProperty("GLpath", m.map_reflection.path(0)); ui->lineReflFront->setText(QFileInfo(m.map_reflection.path(0)).fileName()); - ui->lineReflBack->setProperty("GLpath", m.map_reflection.path(1)); ui->lineReflBack->setText(QFileInfo(m.map_reflection.path(1)).fileName()); - ui->lineReflLeft->setProperty("GLpath", m.map_reflection.path(2)); ui->lineReflLeft->setText(QFileInfo(m.map_reflection.path(2)).fileName()); - ui->lineReflRight->setProperty("GLpath", m.map_reflection.path(3)); ui->lineReflRight->setText(QFileInfo(m.map_reflection.path(3)).fileName()); - ui->lineReflTop->setProperty("GLpath", m.map_reflection.path(4)); ui->lineReflTop->setText(QFileInfo(m.map_reflection.path(4)).fileName()); - ui->lineReflBottom->setProperty("GLpath", m.map_reflection.path(5)); ui->lineReflBottom->setText(QFileInfo(m.map_reflection.path(5)).fileName()); - active = true; -} - - -Material MaterialEditor::material() { - Material m; - m.color_diffuse = ui->colorDiffuse->color(); - m.color_specular = ui->colorSpecular->color(); - m.color_self_illumination = ui->colorSelfIllum->color(); - m.glass = ui->checkGlass->isChecked(); - m.transparency = ui->spinTransparent->value(); - m.reflectivity = ui->spinReflect->value(); - m.iof = ui->spinIOF->value(); - m.dispersion = ui->spinDispersion->value(); - m.map_diffuse = ui->mapDiffuse->map(); - m.map_specular = ui->mapSpecular->map(); - m.map_self_illumination = ui->mapSelfIllum->map(); - m.map_specularity = ui->mapSpecularity->map(); - m.map_normal = ui->mapBump->map(); - m.map_relief = ui->mapRelief->map(); - m.map_reflection.setPath(0, ui->lineReflFront->property("GLpath").toString()); - m.map_reflection.setPath(1, ui->lineReflBack->property("GLpath").toString()); - m.map_reflection.setPath(2, ui->lineReflLeft->property("GLpath").toString()); - m.map_reflection.setPath(3, ui->lineReflRight->property("GLpath").toString()); - m.map_reflection.setPath(4, ui->lineReflTop->property("GLpath").toString()); - m.map_reflection.setPath(5, ui->lineReflBottom->property("GLpath").toString()); - return m; -} - - -void MaterialEditor::on_buttonReflFrontSelect_clicked() { - QString str = QFileDialog::getOpenFileName(this, "Select image", ui->lineReflFront->property("GLpath").toString(), "Images(*.bmp *.jpg *.jpeg *.png *.tif *.tiff *.tga);;All files(*)"); - if (str.isEmpty()) return; - ui->lineReflFront->setProperty("GLpath", str); - ui->lineReflFront->setText(QFileInfo(str).fileName()); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflBackSelect_clicked() { - QString str = QFileDialog::getOpenFileName(this, "Select image", ui->lineReflBack->property("GLpath").toString(), "Images(*.bmp *.jpg *.jpeg *.png *.tif *.tiff *.tga);;All files(*)"); - if (str.isEmpty()) return; - ui->lineReflBack->setProperty("GLpath", str); - ui->lineReflBack->setText(QFileInfo(str).fileName()); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflLeftSelect_clicked() { - QString str = QFileDialog::getOpenFileName(this, "Select image", ui->lineReflLeft->property("GLpath").toString(), "Images(*.bmp *.jpg *.jpeg *.png *.tif *.tiff *.tga);;All files(*)"); - if (str.isEmpty()) return; - ui->lineReflLeft->setProperty("GLpath", str); - ui->lineReflLeft->setText(QFileInfo(str).fileName()); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflRightSelect_clicked() { - QString str = QFileDialog::getOpenFileName(this, "Select image", ui->lineReflRight->property("GLpath").toString(), "Images(*.bmp *.jpg *.jpeg *.png *.tif *.tiff *.tga);;All files(*)"); - if (str.isEmpty()) return; - ui->lineReflRight->setProperty("GLpath", str); - ui->lineReflRight->setText(QFileInfo(str).fileName()); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflTopSelect_clicked() { - QString str = QFileDialog::getOpenFileName(this, "Select image", ui->lineReflTop->property("GLpath").toString(), "Images(*.bmp *.jpg *.jpeg *.png *.tif *.tiff *.tga);;All files(*)"); - if (str.isEmpty()) return; - ui->lineReflTop->setProperty("GLpath", str); - ui->lineReflTop->setText(QFileInfo(str).fileName()); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflBottomSelect_clicked() { - QString str = QFileDialog::getOpenFileName(this, "Select image", ui->lineReflBottom->property("GLpath").toString(), "Images(*.bmp *.jpg *.jpeg *.png *.tif *.tiff *.tga);;All files(*)"); - if (str.isEmpty()) return; - ui->lineReflBottom->setProperty("GLpath", str); - ui->lineReflBottom->setText(QFileInfo(str).fileName()); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflFrontClear_clicked() { - ui->lineReflFront->setText(""); - ui->lineReflFront->setProperty("GLpath", ""); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflBackClear_clicked() { - ui->lineReflBack->setText(""); - ui->lineReflBack->setProperty("GLpath", ""); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflLeftClear_clicked() { - ui->lineReflLeft->setText(""); - ui->lineReflLeft->setProperty("GLpath", ""); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflRightClear_clicked() { - ui->lineReflRight->setText(""); - ui->lineReflRight->setProperty("GLpath", ""); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflTopClear_clicked() { - ui->lineReflTop->setText(""); - ui->lineReflTop->setProperty("GLpath", ""); - materialChanged(); -} - - -void MaterialEditor::on_buttonReflBottomClear_clicked() { - ui->lineReflBottom->setText(""); - ui->lineReflBottom->setProperty("GLpath", ""); - materialChanged(); -} - - -void MaterialEditor::on_buttonLoadCubeDir_clicked() { - QString dir = QFileDialog::getExistingDirectory(this, "Select directory", ui->lineReflFront->property("GLpath").toString()); - if (dir.isEmpty()) return; - GLCubeTexture cb(0); - cb.loadPathesFromDirectory(dir); - active = false; - ui->lineReflFront->setProperty("GLpath", cb.path(0)); ui->lineReflFront->setText(QFileInfo(cb.path(0)).fileName()); - ui->lineReflBack->setProperty("GLpath", cb.path(1)); ui->lineReflBack->setText(QFileInfo(cb.path(1)).fileName()); - ui->lineReflLeft->setProperty("GLpath", cb.path(2)); ui->lineReflLeft->setText(QFileInfo(cb.path(2)).fileName()); - ui->lineReflRight->setProperty("GLpath", cb.path(3)); ui->lineReflRight->setText(QFileInfo(cb.path(3)).fileName()); - ui->lineReflTop->setProperty("GLpath", cb.path(4)); ui->lineReflTop->setText(QFileInfo(cb.path(4)).fileName()); - ui->lineReflBottom->setProperty("GLpath", cb.path(5)); ui->lineReflBottom->setText(QFileInfo(cb.path(5)).fileName()); - active = true; - materialChanged(); -} diff --git a/test/qglview/material_editor.h b/test/qglview/material_editor.h deleted file mode 100644 index fb23302..0000000 --- a/test/qglview/material_editor.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - QGLView - Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru - - This program 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. - - This program 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 this program. If not, see . -*/ - -#ifndef MATERIAL_EDITOR_H -#define MATERIAL_EDITOR_H - -#include -#include "glmaterial.h" - -namespace Ui { - class MaterialEditor; -}; - -class MaterialEditor: public QWidget -{ - Q_OBJECT -public: - explicit MaterialEditor(QWidget * parent = 0); - - void setMaterial(const Material & m); - Material material(); - -protected: - void changeEvent(QEvent * e); - - bool active; - Ui::MaterialEditor * ui; - -private slots: - void materialChanged() {if (active) emit changed();} - void on_buttonReflFrontSelect_clicked(); - void on_buttonReflFrontClear_clicked(); - void on_buttonReflBackSelect_clicked(); - void on_buttonReflBackClear_clicked(); - void on_buttonReflLeftSelect_clicked(); - void on_buttonReflLeftClear_clicked(); - void on_buttonReflRightSelect_clicked(); - void on_buttonReflRightClear_clicked(); - void on_buttonReflTopSelect_clicked(); - void on_buttonReflTopClear_clicked(); - void on_buttonReflBottomSelect_clicked(); - void on_buttonReflBottomClear_clicked(); - void on_buttonLoadCubeDir_clicked(); - -signals: - void changed(); - -}; - -#endif // MATERIAL_EDITOR_H diff --git a/test/qglview/material_editor.ui b/test/qglview/material_editor.ui deleted file mode 100644 index 4ac23ce..0000000 --- a/test/qglview/material_editor.ui +++ /dev/null @@ -1,779 +0,0 @@ - - - MaterialEditor - - - - 0 - 0 - 470 - 791 - - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 2 - - - 2 - - - - - font:bold; - - - Diffuse - - - - - - font:normal; - - - Color: - - - - - - - Qt::NoFocus - - - font:normal; - - - true - - - - - - - font:normal; - - - - - - - - - - font:bold; - - - Specular - - - - - - font:normal; - - - Color: - - - - - - - Qt::NoFocus - - - font:normal; - - - true - - - - - - - font:normal; - - - - - - - - - - font:bold; - - - Self illumination - - - - - - font:normal; - - - Color: - - - - - - - Qt::NoFocus - - - font:normal; - - - true - - - - - - - font:normal; - - - - - - - - - - font:bold; - - - Specularity - - - - - - font:normal; - - - - - - - - - - font:bold; - - - Normal - - - - - - font:normal; - - - - - - - - - - font:bold; - - - Relief - - - - - - font:normal; - - - - - - - - - - Glass - - - - - - - Transparency - - - - - - - 1.000000000000000 - - - 2 - - - 0.010000000000000 - - - 0.100000000000000 - - - - - - - Reflectivity - - - - - - - 1.000000000000000 - - - 2 - - - 0.010000000000000 - - - 0.100000000000000 - - - - - - - IOF - - - - - - - 2.000000000000000 - - - 1.000000000000000 - - - 2 - - - 0.010000000000000 - - - 0.100000000000000 - - - - - - - Dispersion - - - - - - - 1.000000000000000 - - - 0.100000000000000 - - - 2 - - - 0.010000000000000 - - - 0.100000000000000 - - - - - - - Reflection map - - - - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - - - - Front: - - - - - - - Back: - - - - - - - Left: - - - - - - - Right: - - - - - - - Top: - - - - - - - Bottom: - - - - - - - 2 - - - - - - - - X - - - - - - - ^ - - - - - - - - - 2 - - - - - - - - X - - - - - - - ^ - - - - - - - - - 2 - - - - - - - - X - - - - - - - ^ - - - - - - - - - 2 - - - - - - - - X - - - - - - - ^ - - - - - - - - - 2 - - - - - - - - X - - - - - - - ^ - - - - - - - - - 2 - - - - - - - - X - - - - - - - ^ - - - - - - - - - load from directory - - - - - - - - - - - SpinSlider - QWidget -

    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 diff --git a/test/qcd_utils/pult/icons/dialog-information.png b/test/qcd_utils/pult/icons/dialog-information.png deleted file mode 100644 index dfe70b992a47ab17ca33f5851f59edce5f083177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36295 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 IM6N<$fD^^^BI|Ygtm*N^U5R%L1 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 f`~SZ^M5OX$g5V64 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 MWi6#Dm{rLC0A@5kjsO4v diff --git a/test/qcd_utils/pult/icons/timer.png b/test/qcd_utils/pult/icons/timer.png deleted file mode 100644 index c0b83610eef1a50d1ebe08ecffea91dc3ac6bb99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45230 zcmX7PbyU;e|Nm>FLqR|~CL*FVNDCVRZ(6#grKP1|j1mw81ZfEYY3WdENJ@9dkd$sl zjPcv&`}=G6oSn0?`@GM`^Z9r_?&C&lzE-?P%18UwY5u2Ck)+XAC-Rx)y5 zt;*y9i1KzSji!|vM@07jCm$?DMmBd_=Z1H4Rw?}E*)_I984f3hSg+gjnRu@9 z0DcgH>iM@fD4A0PHj6lt(sby7gjGDV%|heHEDPyt-u zsQMoTVUBwr>Q|acx9OGX^X^QRSeNSma4glWuu4oyQuk1)Nj`9JaNraXnaZ|wLqL|~ zVeMc9r7;LXNylavlB;X=Os7fBfeg$f`cA-eYgnBQ;_I{09+FBkS^MSxLUaFLH=X&O z$G>lp*uYuK$R{5s;|1CTZkMG4_Kl|eE!$0;~ulz$qGJv!6fGLf=SdxKsAM@T5SLXxLK^>jy0wdMxexR+VnmU7ajF_ z$0@a;3=#GH`Fi#I|30ZDajNfmX=^8b9!c}C8AvBpemFRP?liR89Wzvk#5Q?!MLkge zFP^nk3YlGk52zG}*T{wu-eU~zAbDC>Y0_9x;;kuCE9O_3d}2kKCgL=mTaoE^x|uHF zxe0*#PBe~o;^{>09)Dg&5g;q!x7S(nO#dFG_V&BKDbfD!_`+#=(2dz|{qyEgCxsZ1 zfz<35Zu4Q?3f;MkdoigzqSTyfvr_J>U81fn$32Hv$8Vkhny;RGA&|aWPwH&)Ib23! zzn!ap?@umoLOPy5uXUVyK5!;%H~a#(E1~}#KRa8nF+KM9EB3!u|8vIv?FSOCsj2fF zabFFNDY7|dh`G8rP8M61>X$f*ggxXoNZXz$DvD>3y098k`mlaJrvl`Lt8h{KU;d4B zrQKxX5JlFbeGcXwQus_A^)L<-g$$PRr&~F}F4W4wnF83|tK&>C;Y^hGQEVE%axYtO z3y56aTEOdmiM0R=cK$3iUBoHnfzC>IQMUiibqhwH1o)y!(w$4h>bvsuVt+y7igYkUJ%57vAEh{ zx+R@}ojGQrP(v7syazEL$1hM z+qRp7=CdzfzNG#Sn@>r;KD1? zLaY~p-Z4ZXQ8_5XhahF%UhY_`kt znvNKXv$vhDGp6vwUA-Jwfmjlh^@1F)=LtaVDFCNC<rf+Wf8kf5EGdw&zpNg6~^UoEf zL}`D(_YJSFZx(*#j}J=svY(7EIZ6CcQ4Lx5k7r(3_lW+gERfFCs|5O}ryxxmq3(kU zLMOAEnmaF-|2n_6zPZER9BwZ8pq~7;n{4vhZF+bvjSCM_#lz#IH0iZu3Fg;Uwo`_v zv!mm5u|vqt06%ikW5(1+Z|J}$8Gt=V6z~s{FlATl6|(7nLCIOcxAoEEb@;bFlC42m zqi24r>#<3cuVf@7){VV)QgRYqMW;>%io5Q()H4Sc8j}VBWzH{ zo5O_N`hbf)Bd)D9|g#Ta^d-pEohoP-C7MIic43h8d z{c*tNb69S<`eI<_XY*PMWrvHcRG%b09&on5FvF~ULn-In@y}c_(`VUlD+P@ThMIWc z;X)e4L5?zeO-F2#-cYdB;O6grTs1P2lfFs`>J> z2CrXojx1Iwyymu>{AsQ-m?OC!i#3ugDK@n>_^$pBZN?XlXF6~EuOrTPrWSN{(ZnfnnNB((Vum6mh7kCm`UPyMdlPG!J z=eYb9$@)>JH{mU~c5U!)P-;jzrT^5>g(_-J%af3h{FRVlFNo!>V@wK>}hPNbaLQ z=lEBb!eGMu7=M=>gyQml2km8^9ed-Za+&4FWl`aN`;qpW0#=0ENy z8BCjVxExRA%vfk&ZVf=0%%XXW+ZB0@>%_NkfNb0)<3%KFR9SZFOJA;pdDUK{p8yGp zRE7N9MJ5sH{0~34@`(B~drMNa;yT)gaV=ecv&SM|`XqM0sj(0MCu|#qO_$>16XVXQ z48xeM;9=|6jH)mUOQ_bq)0N4jPp=|23v2tzszCT27VkDtAC~)xZxIc`|7eZHoN8nW zZk;37W*^N!{|LW?SZJPp(sq*6I%)sWZ~Lc8ZVQJeC&v8kWH^z_D{fIDSTiR2VL8&kiiW!G%yE#+)bC7 zf-HJ_5w8kB=s46y+Ls|}!4U$te+8tqSxflH{*=Z{`aOPTA+%3I*ME7!_Wk>gZ*7*f zuF$|D?|ImQ^OzBERP4(E0g83&A z9pz%@E&5F-jXlAaK5h0Gjo)}-pF9GeLrLgqIP>2s-(Alj+g|Qfb^4$0PK;o-zTb^T z;fbK;XP##J=HZH6#r<;WAGG^KpYE%>G^WW_wql#6;MW)XH;D4jiln=3Ha~c!&L?#! zS}*3E_8H5KS_{*~{qp?w>t|SLgjc=|Vx38Vb;Mh3ernq`g|xO`%*V5Pk3kz2LovSt{1n+u8j4vy&l77qt;OmY)@B_#jTv2VWUWEBak~ypS^s z9P?oPxfUl?e)P?V4>!xbueu{_B^z8Dt@_;mEPLRprfy~tnv?{%5=J3r82QofCq7mXY{%9Mv=Ild)OvkgJ+auZ($C-1*IehutGTUTA(WC?QEIYyCma*8LBYx>{CeY9e5OlHo0(%@cboET770Dn_Ti@ zQYZ*L&?;<(;X_6+bkF{4-AxZG$REpBG!X_t60Bo@-#TD?4VuYCHlIaz)C>F3m9w`D z1{}d+pE34+pCzJf;geVbkK%P`u_MQ>=uu#!?7aKvxmkg~v4q zd4pgj!zXreNJIHAzq=HXPmDu@X!(U72*_s{@Uowbtmc8(`7q_1p+VUI{Skw@!-p4> zB?y=cXrod7!Ar>O6WEdY)xRt-;WG)p!Sa83F?`p$d$;iDlfl{Bu8GH|RKpmhTTUe` za4I*svGE(t7$WK?Zm0_mJ52w<~UpRHw^ri;*H-% zvM7ceh-DR?4?Ox!WFB}nrWhn_1is7Uh(#IF-<+1}m9Y}!=O2V%#nFao{bxLZdUjq< z>C*DmwuPpr^&Ad`T2-zL$t&Bd0%lyQ>Fyd>-Dy9vAt?lW)9?g}pS_IfYT#2+wtw#|syw1kOc_>mZ^Q&QZHAFp}EBieH@ z#$*)I7qcQP^YsD0ss)@KKwdA(7X_fvn(MNo&whH&R1`K8uVMlQL4flGTX35DT5l2C zbe+T9{|2a9OjEE@8ukIG@&_|>~zwL|}f|6gyIEWkKm#&&9=g=Q}l=Tm$kJS!-r5!%|y(dYFZP;IU!Fu4z^qppa zZUxC_L3#~-wI8hEWI=9WT*pZ-_S{;F0X5)BjE84pvJwKUy&LHZ*#AKPkX!F;3l;)2 zGff~?nOn}l_}mIf|DM7GB%s+rV~I}!6qugXJMZd~ysaAr#34yNKUOgj(&A+ zcqW(W32)m=y^_LT0fi{*6sA>!!HR6|@(WLiD6$jHJ)f%Gu^IKwn0ig=$pEn|V$&^0 z9c0kk%eDBTuI$shM^u|gRo&ajw__=mj|rIr)VPiVdHZFh>$RV`o7<6cIU{jK<1*kprE{oA?t5(4>9uIbi0CEtRjIg8qn=uR^e;@o3 zMhUTaM?>kozigwj_ZfP z;c|U9#xN)KMnCZ!V}>Kf!@WcZ5}j6KFX6y0x6@hc_3T| zHbY!#vP|P+#r)-TTWY6JYwuD2S&ROHjLLkk1)R2QY47vsblm>8O@QX@a&gP;*=(>+ zl26?*R4NWOBbgBHj zyQeQCfoDq*AKxP@=qbw7f4|8~N;UO)a=UB73ZC`ISHZ_ln{@jY-<5pQ*!s*LAU~X@ zXXM$qys7PplNhOYJGMIQHZbq2{r40XrZC%*p6O{L)Ok9EBCMOO@e+pJ_22tfhG zCfrju!{Q3_9m6h)WfXwKniENx(~h`@JElSQ0w>`%F0|BYT_R-q4CYUedZ!aD1+-%C z={hiKe9zY!ek`atHq9U&r|?5osNJGxb|`febDfwxo%eOEg#cL|52g>Z>sei0#RX5$ z#XBbJnyx^=X#hwuV{$7_RExykV$Vdq??5S(D2NO@&<2}Tjfir zF;IV9JZ)xLkUvEec3?j>3gZj1KaG!=o;cN+94 zkZMJKs_oS#hRrrk2n)5Sh_tdf4}QZEHI^uj>fE<6z;pYK%nnnltel#xwv^&8k{z+k zkkz-tvMf0KmJbY8qjY-_CID%->`(V&7gX)6UZ;pK*t5NzAxO_bYEg_%p5E)Sg2Sw87iUOJo6`LALQZ5Lu$H%X5W{V ze={wMS;D}YDF`3RE0K*35e-mVlXs!xrn;5*uIcnm03?Tt^CTwYWz-pOwMioPPX0KCh<7rYKGWT?D%85 zl^{|DYpcj?nIYnOU?;bVC;ke{vf0jOM9~>ZA%+S(RlioCGY`D%dz#Y%DcZ%B*A8ba z{B&RIRL0{pNmf^QX2UA^{@=Wyben>7=JBm_#t%GVO8~GT1kVuw zX|v~eTx&!_psC#Q!>(q1x2fGh80-lY3)0o!SD>UOZbAG0hd{KD(Bb=j@(!7f)bH73 z5qLBs*?0=b6O9!+U6*~-xrql^6uO2(^xhM zk99>H>ZSQ>gOMmaAWlYWDL5%&5@5@F&~kGC^%nk?Vnp%?D;i2U6|!bbKbylsSb zPyYJ;-sga5PnG1Q;IeV3aNi*~Z1Z)os73EI9{9e2aFh-DY0uM)9g)(7ul@w30uVP) z2s;NEn3W#DH@g>d%bI3D-(K2*K+rw=X$V{CTw!dw+RTKCSDQ4R7K4sBC+BaJJL+uK z85%y4R<6ltv>jI7V;UUmXkkb*KX6Vix^SIqngYw8+77AtUA@s|BbG?vGqIIjjh)bF zJQNh;Z@XkSvYWMT0FgP7!2*=;mRcjk+?M8-QXjmZ$ zaTSsKZJv1wiH7`+_3m1^R*$TRu7fMxV~8dndwQPk?U@@BswZ4wb?uGE6ehRMCw-~a z+uT#*K*IixNCd=5SRz~cE-^L8AkNO6!!=wsZ^{|{b#sf`mq2{ktF%b(=-CPC?t&`m zrvZj>A^h|EYFk2}qK-lcnW<6^Yc~oatkBP`OwTc{cOtRYBX$m>B_!UPb^^8If$BgV zl`r{s1WLMenf)^W*iqkXwe`rf$ot(NjrVuQ>z(enHqmf8gbjv4*ooA4Fpe|_68u55f4SGr zLl%jX4i>c9{dr2EjQoShpk43N<(tFL_;r4ZKi!FJ&RK4r0K{vLIpGOJG9)57YBHog zhVKO^23J*rhHd&4YA%IluO2x zvrkI%Xj3o76PCaQhS8E*vRw&EVGE2rOE+qim^Zv~vQY#d-_Adet$kgPO)Eq2q>T(* zvF;-Ra<;BOP)_|72k?l!LkMGv(?PwIbUhN&f-{N(h_7HCxs$4MuE^@sI6$afOcFxzSAeIAf+8B~q`@#;qR2ce1>?G4P`VVeJ-T zPf&b2iz&WsK=khuKIvV3qFVmnst|O9aP3ZV)4=oHuC;pqGR=)Ku=Ay7i1CibX;?#Q zzfSLe!f^qv2sI$?Is0IK9*5r!b}3UgeoWDMB890l2O$K4rPHI*JJ$88Pc_8<;y0&R z@D0xf$(*L1av%j#xX<%zF2Un$(Z9jR6J9KZv%B39Kh~7#i~#&Iw|a2$8Bc{AL9rv5 zw!uTDhaYCn)&xF`@DabAo)g=X44bpQu%SJ9F70eS(r$r7LLdpK;WWz4(2`JF1TDpO z03YxVwW$6&6xJ?L@+#4EWzwo^Cv7hjjNWp@^NtU5Hu-Tq@^!WqD{t%xaUPLCzj2ZT z1B}zS`#C`|0BCzqIg>XPwJy~!et+P5oibfXTc79UqbomJ8>~15K&&yGB{l*lntx7& zE`M0a96WqG@uGO9-HhM-SD;_&f$2`<&@ZLC<9oP^PL07Fe2yO1{`F@KpRT@?=-9V< z&xI0@E%)Eo*cZdKtKhE!mzC^-1BpGVR`H^Xb+>2TE_Dx`vgcjNbZZ`;w<@S}+t9`g za3y#*=xNjn1s%;3fNkIh@y|PP{lnx&&F3&0o$1iEU%R%3XY)&oM69|m`HJBMVB@Hf zx4UKSb$!nfe}^OD4Q16#wg%|w8sA~MWz7^gS3qBr%q<<&YJ1#+4|XLlCIj$+%knxv z+8fjA+NRXInf=l(cW8lVZ^|5TZ>dD*DRQVWLxKdZ(L+pqm~bBQWy@2XabSfjd4!*` zFD}38Q(7KQ$`fGEElEV#z`4&i81F?4DKU!JzYVzNHLS@!kfV@ZcO98V2H%CfH65ZF zYP`=H%)GqFHl#aUY3gcwD-&~|qN;H2nr7NI&kw-TkU0WaO@=f4QAS|&xwJ04*{$Dq z!TQnFz?Xs168-N;)U%mp+XtFmf5qC)z6P{$92Y2Q?lf1LvH`Ill(i!Z$@4a!&ILTD z+h2-%BOWs+9}#?Z(PPyd`z)4_ zzN)G-5U?D~c}SVCtkRe{c%gBWnH}Y*4u0^N>AAodahf9R}@71}Wcpx>(SQcYI0$mQ3k@EQs)=`*r1E8v#MT{PVo$P4%`p$nFV} zAB*mG^1Hy%y0sU6hn{1Bs*f?Fke@!He7`m7E&hUq$b9Z_4J>(MZLWfs>*9auk|}UE zfxChJxc2)qJ~>1*z7(_mwe#}Ln)opmlkqb#u1!(7mN8D=VvE55T_t+cuabYS>#=7fD?PUg*C%bu>o$os_lFF4ZP^yys`2voujQtVpnHAi>SfL{@UN62xL}f7K6Jps@Ze+V!pj?<# zoO^~OvxWz;Y-^?2COOd8-eZ@hi*6cZE`3Jn4ICUusGOq*+nT)C<0=PV00se?fTlpZ z1Tmm_Fc8qh#@_bbb6949C*$e0nO>?xW2O zOVfJ-EqE=HdKFE2w16O%W=X9ybWsP!EJR7y*wo-;56fSaS?<{~bauS*avpV?o_=+hhc6}y-^qFV#AR9iI090|@BtYOlZ#i&zc-Y=sKwzHx$NKx)hxgxk z!;|pt@S`33F;3GJf{OJo`}He~5y>NtG+|y*ay0F*sOWyA$-%EIV77em#JCy{ai2vJ z!|8Z;tOQS>cI7TE1rS{ZQz(rsy&m+%;6yDONGWEvqHL!8f{xP`F(1rFjIRz5fH-TC zXQLwj;Cu4#{L|{Ih-G6-{pG2WZX7R$f-jWQMElR|H{MXahOT7`=MSC$9WQTx&+v8b zdil4{^#;t=y{NH&k{e5s%lS%kwb^1NJIoj~hR6NM22&F6BLb!$u?e)n3OMI_eDBxS z?(w)!2>Ly98GZ$T=t+UJC!3$ZKyc*m5$G1PPInnc{ry*mRgjepmvW=}d9`fG?qwZ3 z5C}kIg>%0CYA;!LXz{&KsIC5RYq<6^G5f=pY-{<0s5ZHP<_4pH9r5LQ&s1}o|LRD2 zEv`;BtSkpzU6fdd@g8ym_6rUBTSC4;nq`)7-Iq3joTyX`>!}k(pjZW4A;D-#@*Au` zNo5ktTQ~t>%jNz;gUG#?MX4$nt`8IfaJNSD)@g#>(BH-8@M_+?;iQP^jt`OVZ9TGy zC}|1)kmH9wf(G#~`He_Z++EoT51kt2rt~CYu)hOX*CIn;AD777bN;Jxx%FT8&qOD; z77Q|AS`l7MQeTN4U?iTz)fE6|(&)h5{TBE1O2R~-=7TKzkN>jKsQZb~2wcSNOASss z=#&qQ1mz}AmYIyW_>b>J*%soA7#CvB!M`KOZar-AX@>2m?M@$O-h5JIzoHGeJ<#@k zYHJBM8feC^Vl{8^JcIQF~AZo(K*!hs5$0Q3o8yz&?PD%oIfcG36t9PXi38j3&2{MI)(=l5h# z8zSM8Y+b2)rWn!NK`rI2P#FDb^E~ie#wj1?cXDprG{nuZlq-$To^HAY!KT+41llWY zG=UYVs@;8=c#oqi=;p0u4#D3DS`&0aljtg9!ei~jr)ifWL`mS>NeZrd^be3YpSEOJ zRpfSs0Mvyj&fb0YEAs)3Hf~zLZPC3~n%(g(D7R1rUXRXCLk&RDK0m#rb_iE*n)>i} zvPv=Jg+fxI$pc6J0++sTOh|~`*?3;qc>AO-Lpl{52taJG_dUkpA=EE}0kz{pBG#(& zEgzJh-DE+R-}h#BLC)vTN&cv6eIfw2y!Kkd_JATOOW1Vp#7LrK?p9+&jgR9!NA4Ni zm!Zb`Lwp8Ul7U$zfQt?x0`%gv1~aHh#~hVo)fF3 z3w5(D6Bg3qADy7LCwhh2aIq72OI-B%(Bh|5WfjbR_=K4uXmu=+xWk}qx9h}&b~yol&< zG95V&j!+4JS|Qmcvn(m#tV%1U>d0J;8a9Maf!{$7^(}n$;K+_UiPEIqVodDD` zWpH7Ok&P;5Ey>w^ND(=>5T6KsTFiRD9(`<)gI5(@?Tya(!Nur zdXGuN?mp7sU_MT7`R6 zn7;oTk@D;0F-1Fm+PuxR#dHn@IUkp}1Q5H{eAsH&Iz40VlXWkNAbs)Et)1qbTpbw2 z25UZ~hXJ0S<-?N_)I~1eq|vrJdC{C^A84zoL9Lp)d+|X*_kKazjmONwj5$BOm)ZPh zU7j0yrPDgfIiw6iY;dQ#(wN+G2};cDylBChr|=3j(y{%C-&IR3ROY9*q1>EQ zT%T>{e@rBbAqVU&d8pB~vzTM!-b$9YB9lcD>)|pOU(Z;=OnSZHK@j!3LpJ7kf@w}5j$$Lc(%0w_0KpJ{uS z7T-jRV~GD+?Cx?W<+W;C%L=~F%D&#)wh(>J5zl>Li;cQU&Gji(@ zIXx-Z*8IDFI3hc`2U)4Oh8WKROd zKZ)5TGFLMt8UC&9U<`41-FYIS6P+vbd;DIPdZ<*bO-PPk|@0)Bv zc8P)3%D3LP z1vw6y%d-C??s|FUaOvhbMnIP~{lj=a39IBRc59HnC`e=_c}oL;VU)4t1%zr~sYs86 zRw6F^^ko9P8Ts}HbkQqagrFdl7z+sCC)t`Y53YygE;NC_X~mh1@0KCn!Kw^R^}jO8 z*$ZD0A#g_2VVXWvV)?U={JNiNqxQS6oY7N4-*4ZWa=qzSpnZ0q@uOqa*q6Uyb_9Tm zxW?|>MB#~5k^{2@De(2V0Jp@~P|DkKv(uZ5=S@bm%86-I8|#|X9rrz=2q_C5JXXwT zj3lpC!_B-2G*Twx(Zu4sU93SE_iA^8jF5Po8@(5O*&Gck?I)s_k>-_T%q9O(sNjzq zegP$t&=4OBD#~OCUi`;S$OKUcu%9UGew91VHX!)tu*Ms}>5(eYbD0UluMlD08i^7I zoa0EP{mT~3Z(tbC0h~>RSJ#ia4vUPaD4{&lCZk){xn%-U<2^>UeV)4H~Ef2Cf4Jm0yjta zeteDyESjCU1XVO&%y)cEDL%gU0hoiVSy~2WPt4z0&cW}~Uyi>dB)-&^DF%fDFh}Ck z-4OhqbvdRqiGT){U^*bwZZq>-zgd5ue2|q4zr3f~E9Q`{y|F80!yd0(g9^UxnrVY| zT1TgBL?}cM0(sXyiOQFHoR9AJX(Wb^U|dpiim^)Y^UKJ&TgSgO#7Z@qiaA0pX3a#; zGK#W2J`Rnt7yMK8D`@nIqeug3wE+}7t8avV_FBvT zj8RB7eQF`AkxfR7U`}_1CtHv&phigF?_Ey9?jy>^Bh$fc6cB1)l=VZyNX{VtFZ4Vc zJ2~)=rLTTT>~LkLS{8D|Y8Eg}L-gvy39hhDXJ1fJT3kBdWXhuTpf0i;QUXB!Bo(Jr z$)+J++I$YTqe*r)a+TPJXRh-iXrMXfeaYC2Jvk!|ZCHACHzgrp&$QI!Epi@ywe;Vo z?-q`kl8kiUcW%a^qjOKvNd5^u->Nr0oVFIZEB7$}g0Slk`7ZegO3C3pRWG$TBz&va z=A#pMUY-ln5aX1c3aUrzk!f1|3+x~%lv`+M5byM^@bdqA(|Rliw9gPS7i#>G|6#Yg zHEz~Dn?oV})-k3;>$`ep-q!{2_sLvN%Bb_3N3bG7h)PFf0k}CQ-p?0hEei&Y%v?{V z0SK_R!|2IiUMW%BkWb1#$wnC%?`;u$coYPl7tC1Y62btGF|f8gwKE5#DzA8p^QrC% zFp9Gi7RjHWLUy_=7pR05^BDFJY?T~T&m zjl^|vzM82wUSWFJg&!X9Y+plm-bD+Ds^4SfYv$fDx! zQ#if_`r-*;W}ycXkld=kvwvgfoI9^?$+kD<3!4t^34?fA&Ul+IygRE`32ru8%L%?NO)b0F6?txwBRui~C;QgkM+%vd*tN`T=rOzjL1yoU z?oDlk+k1c8Z!I!&k8p4sQz$gv8jcXpRB(F#^B2fPi9c+g4UAt>^4A-QHGKmAa($Ri z#7F<`G$VL8LwX^@Mt1u!6fj13k$zCZ2p|zm3;?b}4r;HJP3M-?Y@^I+HcB>D5@Jb0(;`U3 zOZ&WXMRxphSqkFU4=K44R&FsTnsyypHR z!81+s{ee9ntb7nk0J?4AKF&fmGr~sMay#S$D7Du{Y&l7R3c_}$S78NtiXsd{_`uK2 z=BY!_j994lHq5b&`+R~~z5SM%k^PbF0Y%cgR)O_NhlzL7 zxz{-W&`OB^??PT0-nGqiACMKWXm!Ro<@18Iiy-4Uy6>k85FK^Z*1fa={B9ut4ChP~ z8-N&C9=_KOvJ50#EWKp~EYQ@4k(P_)GGb>%8?D8r?;W*17{o(oO0Op-SX`lxSa)^L zMExMG7q$Ft0zS+BWg;Y`ACFB}+un)hW3V_QiHPE2KxK*N#hl;WDzm1$hGde3U;rV~cT@9vgqC+DDUbDZkP9`VT&DjcI~COW`(pI81>3fB7;*Ei z1uBhuu+;h#Z|z3pHckSD6y4ujD@5{%Dyt0-p#PV+6=uk9xaKRwj{{RSZbSY(aosg|h-66xY;>cC(Y zyMI1EuB}%z|E#VGho=h!-uoO_<}_XI;BzGV&^p(7;={+}yjSqq+lG=?hSn6l2X-*i zDby5LT-YJ}hB0d1+=x>P-RL8`vg?Yh-*0puUV1v7mT?!#O0zfe@h$VgqQietw4)g8 zjry%BU*8?WApdjrr#2rJ@6-x{YIcu(+E?g4Uo)3if^KgX&NnlN0(;Gc*y^@fq3(HJ zugVBlSj!DAa&nJjD?wdHM3C_EPOU+54}1Wap;;N6Pd>F61H16;Y=2U?lHBcx)rq(= zp*HU>^k~KEpH~|GmNc;l)K=9y(V?KTK?hjEI{eP;CMaWsTFu0$Pr=Q|Zvs#zmy;#F z)2HIYts_Xxc;NM%-Sojtqdi!p1_)_MbYTq*Pxrdnx4j*KW>P;@6Chy^@sLp^Y8$2; zz-ru+yn9)TvkiPw!PzfUx3U5%hC1CI<6Q*2yaz663EWU|qAk^#7a=mF4v%BJjG3PR4!S}We2eq*7ZDjH=%cuv;u^tqqB zFvW5H6`R)0j~R1&bj8y2F%dx-<~`bMxESk;4T~KS8BgA1Sid~Y?8i9XM0OuTZ!w;y zztZr4i6Hc1QZR(_#6*dUR+hjITW2#c_|IiYO?XU((bUHjJG=st&rqXzL6-L_oK@KK zcHakOw5hmi9{4vR&qn_&T}A~@Q-Jcw(5ZR1q9IP!;JVBR(b?p@&~S4tC$7x~X}2S& zRXq8xm@PVfPh@3ZFqb88ie{z7W1}C{6UP$pN-N%#euD{k|8LZ?jQs5r4k!sNydqdz zVc^mpn10M3TRCq2RJsW+ov79Usqy?+im8~7{}eQoY%p&K{VSsjo#|w|4IhgaS5ph& zS75RjKPD0QOQ66*(=tLd;HplwUFUW2ZbH2dA#YUmq%OWVoa5_swH(pS{Er7w$+zed z;EKNkQ(is5-#TeTwJ<}~Hc z@JkX_z}IQ`BJC_As`y#%CO{$wCNxzbqc@$jW+?~+0iUsz{q3g8c5KYSE+m|ZY*RTh zSnoUOk&DPs>7A(qMK9YK9bGQ3vtNubluVFXQ5?&UGrLv2r4g5lxsd2g90Do#{p(uMAJQ(#aWu*g^%uaGYr=KT!M!WXkR(o(I8$=v9C2& z137c#^*P!D;#H~q=55|Mrr@`GrVV_t!%e7_yi~pfaZuhghD{_qna0|q4k!FWfld82hFvKg<_bL8Tu14`<0Sbl&30N5T^QSbHR1L;Lc>v^FRto;z_gu#utm;6f|is z{QJ-#ZIc4}^$?lN^1R|eKCK3AWS6d-^fc3{qN)Go$*3F__0F2=>c*)O=>mUPqE54w z!sPlw`Ti+4?D91dmZw>>Nh3Z(oQiuvmjT@x{v-s_rG`XC@V3^M{3}F?M%X5T@%^1A z!W$KK2n?IeINJ3q`EbusD-ou8ppYyD>17o^V~P$8QA|@q+;Ceji_h1?OFXTl{wG%r z$jxIsz%tSNDT6ZNte5q@9Nc)x=N5YBAbjgMRpHF=9Qv;_UZ!T4d{AsI z1!jwJ-LNDtG@FZ4)@Ur{#OoDl7%7AuBxm+W?QV$znr3E~?O^7&{bYC0E4r210)8Uy zg4`FCx+}39XC;h3h94#B8o+BcP(3^K{GK%Y*G1B4k50<|0QGfc^i+e44 zdwn6o-+J__Sh;tZgxLq>m70}_n~akMx@Z@dQ5GkIFyP*&{W^-np&i&_61{@VRF<5o2>N9(;M9&bA$G>f5J4H@BZseQQ;6>t}TR zzLlWeg?76}?Va4gudQcAX(914I}7>0o;1sD_bAbeE7LCWvq;TjLrfJ;IQoQdE2+r6 z#=fV{e<-$#xxUNU${Bf~o+%+KT&4E`bO<;6Gop8+!%Y3iS5p{v50ru6zLgM0a}YgX zK=f(tM}r}^pRe24+9jSAao8OZ*vlhC+N`=i(%}OxJUhpcCtyHM!BjG{fMlu1@55T8>K?C8fuvv*2FDhw0uW}PTtqh|wVuh6K?3lo>>hbFV|CVmq*^&fa(D&OX~ zDqnT>M)g{6=7I}yNhJ}D3YuYFsefoLF zpx#~B1JE$s#2p0w_<;r(_1GH8K{{O?{oRQ1zn}Z&f3B50o^{jExM*LjLmdP8&DA(m z0&<&mA3DE4@xfrh{CnFq(B!jgJG_lT&07Wr%Z~jqhYQ}dVEs=c5ecQa;iQ#6uN}D` z!XG>o4&jU%a@-!pj@Kc3+rqc!2O-wMR z)8zw|YMIG1a?d1UfE{|~M;t2eXt)|L)Ux&eC^`#=Cc7w%zuV|WI;5pbIs^ttsHC7s zcS=Y~Z=@n1rF1EXgmmXdNq090(kWfrx9>058+*^a_nhbXJ=ZH4#AHayc0KfzNHVaz7<1@dA2th<*muAetgPR z@gfaovMd%sV369kbOMKrUl5~Dj+eZ{jQRD|)9w%E1CvdgT_RaDa<*#|NS&}y64v@0 zu5XUQfVomIm_h9`qv1P4hq-(c5Okr=dqqw!+nFEv z<;z{9@L@X04Hv~F8kkd%rZ=6}!g~Y|rSfi<&VCmA@$pH|foG+QWD>01Z!0ZHTXtwL zO>V(;Ju77eT2eV<-IGpdW^{aF9_(0L=VF{YVlbJ{0hGB;j1YM4>O{wWeICi$-NZ02@AWg3CBU-(h*2)M za3mUVz$1G#T6qj4TE;cePs98gqPv`;(|?jw8h^c3StHr9DN zSyObaO8crdZ1KTJuN9xbOY8Y(Txq7??-@A~OV?@4Df>n3RQ>vjdPzXw`|f3~3sm>d z9E?gcQ)TWv&kFWr#YKoIfg*&nzpj_|O z@M+UuhRinDRoQt>n%!JicA#|7XXuh1atbUgxjC3t?TguHU{^>E=kSIf&3Lxp9UEvt$Sb3vI>utbsYq1*Vo}UJdCZ zM4r{ol}2h>UKqik4g=Ct;3s6q{#aMKpbJUL)A~{eP*Sv$yhly3QJu4&AI8jU*2Aji z@RWh)>Tg>IW7Llar9mT5wzY$Nmh;wm7&fHk4-uX_3`dzE0F1@uedIdKAdF<(5O?E$ zZq(#e)OeiuV$hJy&$aEb&ju$K(WmrhiZ3$Z?O)1FU95EeQVVEot#w{DO9i{CE9R!8 zn#|mv=AdqW#d>!zJ`L#jog_Y0<^6U~(ukMkVYHY=>L1}cHxeu;i}a&M`V?;}oxToH zPA!ArfCYS2_RmN5KmmBIR&aDERR2@OPke_W;R3i5aMk)mz@i@`LyZ$vc`9w>@*Opj z5aK|+xP&W~U(M@?kSLvb`aJlOS#hTrnyE5rA3{lFH`{RAE z6v~57F71~qSB|q_>y?$~fZApLdsbxAT;@GDpxW)g$R>2C?2u{(=cyGd&3ZD71Lt?IQ2erL!=ey{k$0* zQDmbp5VD_ceT`pr*eM1K2Xk3stWPY(P?k-*Cg7>d82FRT+Y{$K$sX#{4VF zHBZ~=AFFdE;yvo&*UO`VyW+E+Yc<8l$h%QswvlGXTob3&<1u%Jt>Q*K{`Xd}^XJ=7 zRCY2NLNiodzxQwU$~gs@n<1~v&!w@vOio$mu7AlmuLRz@Fx=?r!A0kVHorN62*5_%`Q3^(*d92HVxsY)qL}Erz#-$UbNMIH8G&}(0ekk;|$Z#VqO|IUI_4f{S~hnS6q{;eQC{rFxc03_g?z# zAJU|gjrF(%#ovU?FrcJ!pSfayA+K9<$wmV8FS=EJvvJEg{TNL!L{5A>C?CY{X<-ey z38rCkE5`w7aZO|^5oq^izqZ^yl1BLu8-s%xbtshLT~XD5nq=f(K{`>oapG3`=~yg9D8ynk-nG%h9XJI+$Y8MNycK zMyA82iTBr5L4%*41!z7C+4R_F^Uzpm4rVUlQgWZI)O$ISKp_+#2E`)A#0G#FjrZ3LcmN)Sg?JMg9A6=gTMk?##GgGt$wQL z!}7mPAr7Dcf}r`TQ&wFxDRqE->ytpnUBtypy%B{X#D>a3F+$A8Zf=dVrMWuJwG`{- z8)_Xhkc=BrQKgO1&Wj6mT{30-*p2j5hMgU`p^_hmeD*)nomlA0tN#Lnw(ru_5^mg>F;pCyyqi_f ztDU%c^CG23dTmO6E7SH!o%f58IlEY0V|kWjN-WD|#TS7}KeaZiqJ`?l(W{UK!^jsg zxB#A~>)pO+^;J9W!L6;$$@`oqa~vBY*F{ncT2D@4<^e-y6QiBj{xu*dfTK*&d*r<; zLG2y{7R2KSaOn)pjThxv3^Vs_KcefsA4>w;O99ARr#f!DD}1F?940*AVqVGQk^}&x zIJL9yQc^+K6JI$g`lpS^z3r=ogQ#524~o&@&wgoc{u?m|&AVt7R^7_e_LA2?t8jy)(eDBb7b9ew7;sv&Qj!R~-i0N`F4yC^>$ z?+cfex+PR|VXV9y1(bq?J93ribe+s`qN!GZl66S52V1gRy>^J$u^e#tp`P|C+l&8^ zggxmP_&JpYNZ)dt4HV?OqxxN9<=v8ZTDq@I4D92w4SyLb7~{VM)VFRFRHwo>+BMtKF2|%W1`M zYBJq#b|mogS@!OuMIYPMS;xoBt-$UqgB6aRpxuZugc!#2t96xtutp0VMzg}f*)z4M z;=uLu85*IL&rzR=8hBx!QaJK0a>qc~JKxlpDqWVRXrTH;Y8I)Y!n`7@EkB2pfM9V5 z02+j2h*5!@z`NI$v5Ezve7oq0@Bdal7w0wKS%C{rM|N}r(A4M45kgg;pC;ydm@!U&j8M;KvOV9@=LB)jcyHZ!n7OBLFl2^Zena@K1{f4V|Um&T=b zi{YOP@B9n)8w2~${I0fdlEK(eXO}SeE`H?(VOi8M zP7I}kyGoT}YS-Knf7N+OEz{Q}Oqc(6{-7Tuz{|x(((E(9ageNc9#H^N zHsWOQ@l04D`kYt4u!8YC@}XYB_>;_oYqfP!5a@npr|3KCXwfwqRm0NkCO-QGEgbevH@y0qpBQb(oxAgx~Bixi?O3P z`t!IqWRDa4(YuWrw%GhGztb1DYMA6SifJCMMm7@c5v?)!c$L&9H=<=vyJg0uIc*a=pTuGs4^w&FDf!-C*bQVl@hDx?7i&myoC_IscY+{5+m z-g_o3S-@yEWFRgWHaA7nkm63knM%>@Q#(RlB(qRYEOyZJHphqFJ8KQWN>RjO;mO!i zK@uGnt1~+t6GT*{S4OXDqhh6?`~tJ){<>dXpT&`9HmtE;Xu57fLSvEU_8{_${HsZpM@yU@kj=eb$O+I57ZEN<|A%E54wre z2iDhZxA4`DlTIE~}X<#n907`H9cZZV4a z)klF!y@TL)8T%Vn?`vI``oBEbVdk;^44rXJ3m+1-OEr=Uz)|IOU9s?+51lTHyYdSM ztg(%8OzVePC9Db^oWZ9n9E0Yw z2Mhl)O!Qdrup}tAK^-)h1Ahq}2*{TY2E-wE1nvA9pys`)O--N6TrveD9T-@lK0A#B z!)MXwD&s525Mr*Tm=!5)|DTkQ>Hk9;PU-Y+{Msx8BC zB19_F-3{uTrEeKU?S_RX{<7e!j zVm2Q(>s_{To-C4G4UP&Ce&4m+F8r~fxR~y*^xA?+S#)4x_Sq>61GM2+h7QT~ArPX7 zL}sdYyWl%KP^_yX;|+#pHuQeEGL*be+ep|RA%QFcz0(9;%FU3%Z${P}0TY_%M(?&i zkrgoW@1kN0w>D(n?g<^-DHlSK9_n zpWb+EV0oraxU&5@CzzFROic5fv(;sG5wcU%1Z8$`{{G-H1-M(e)29%Bul_n*auo_&r;8wa?Bv z9M+r;5-(^^xraP){yJZm&zu{SpntLR3rtZAnYNuHhXknL6GV_ZD_aE;)hz{9cb`=C|<0S1aC;e z{LSW`WAwI?^^0D5b!mvJAN&zXnzvc9GlS{k1Duh%z2Th5n}&@)(VCuqt{Nd~%&ym%DI_jl!1XkiVki!Kt18j5^3W7%vRO1rDEu89cWdJ0dYTNp>u|TyL zfz-g2q&lrp#K^xod;_a^0a`oTGT!}YiVRY<2(m26l1mHkHf%&zj)j4}j z?6H?lIqs391Y_(e zGx-_-<4lfNfB`H%gVHlaq$uPtWyLoi`hnvr@`-PY`j-Bax!i0{fVI*cH8;J&RLy>H zxj%0$sRm!vgnmRfFR&%C^@kQ5nG02xJO0#{i{_OSi!@}S9Zh`p$_j^642SIFOR@g0 zJ$bEEtkEKvLlEC}pP7E&5tFWlU{b9zHR_1XdjYr8HDqKi>J@OD7{Yct@#BpR*ILvw zxx-oOAWyF5jSGS|tQrk3Nm7i6>1}q+-zkO&d>*s@{l=boB+n}x&X%Z9pRTFF`_wa1 zHOH;xJQ+=oqgrT@Sa+Pc{G5l?50p+>6Wod8i6OMQL~vL_G4ECYIfC2!lrUEiS}fXM*wA{@h3h??M_}5CYvG$o@R}dVbfpu@dYtQsX+Wa zqM8i0Guh|5Xt=z<+RNorHU>JQRWKq{7cJs(wA&ANpC%s{yGX8Nq6f`;!>e6pf9Bk9+SzG3{7Po%#eJ6t zMn7N;nV{J@+5}%|DtT<<5p6&QY32OANrd z#s+#0!um04(r6&Rz;6Ky;A0Q_U*Nupo1brlOHPqVW4}s5SB;Q65BRp&6NzLBRg?So z(J}C#wh@J5u^hhN`kPYfv_Brwao5P&T;w3k)7$(TD^((>$=08ZZ5Ma63BE4{7H1!g zP4)|hpJR&aFT?l|YCCXDBEwO!F^u)z1v_^J=(6*3EF9qh`6z~jxL+#c0v`b=ggIc) ziNf&f;wH^Ekp4vry2;Uz5^z9+W$6=82kDzFF4O#{3vf`un&?QX-4)oxqZU)aG2a{v{JJ)s<@=Xp7?;MOYqF`&@soW;0ieWm#=nAY6A z@~JaTGedJl-K>rG(^nfuxTH+ZpXK)Wg|M2A%pK&RqeK93;eU|hv;o4bf5XkKLDcAm zvzHkRt1nNRk0dnR5OUfG#WV@qmiaXGsCWA=^~+BE`&)xK2BgaT0&s35A7+A_W;zi1 z3evlZNA!%qgAZc;6#Rfd8Kbt-(9@Cnzlb?Opg+&kVX5i7ZqA`-{Kt0?rYXM|m3(>9TlO^|`}Q|O!T#;h z!livyaFZd|ybhH#^nEr+&FX$M{m1n#@rgM z&oefvl^F3xCMBcjPQ<^4j%{Q|<~Fy(2K6VK9Z8R0Li~oa-~hoKIGR2Hz)L`*e*~*z zkb`U>t>^DteMnV_yWPL8GVVVKH?5bSaCe(1&`f{w)MWC)JR2uhMYexGz~|_3^X1{N z4yZ6As6i9cJi*{nC_Ve1aT#j=Q@mb0l%}=>>yuLeoSGU$V}J>6?!$y2N03NF&7DZ&%4%)7bv#K8xl@-yXjzvI^pi2SbN4ePl>jg9k2*;{!0QX-B(y z{s$@Pc-)LT2Ym6Sf99fWNlB${SyHZ}Wj&2}!?{Bl$VZm}hh_s)&)B~d-r%NdU@i(P z{(&>YhU?t^2Ouj3nSljlkF1qetxliZr|tvI2K6Gk%Wll#&WD7SH}f4EB?->?KncEu zG5l4bL&=hfqgw`?^C+%3M z$pf-%bTs3$W~~~n)guxg`tQ}`GnvGFv0cDWV1)XBiUnRHHp(Ten0;h32JW98%pUpJ zSUudPfa*P#v|4$;=wpm}hO(NiCx!X)p$Pn{rNioX1xA8}OJ z$7+xK+Xb0Lx_;403^Jmp4CwY@0VFb@33dtgwAh$A)(;!nj*{^H?9d`M?*gAayO*t1 zmOmm>%$(8{E>bm}LB3HNlX!i#7FyYUhtjfKivQ9SNV_#~MH-EO+`;Si56lvKHZ6S+ zoz1xC_`__h-29Z=si1Xiz(XH3hY=alchv7S;CfhGX-TZN*FRbn4%i<3CU9P@2s9X` z29Ygm?9-$op8v(e@WIu3e)L?A2luSVvKhl=4dLNfOIHf>0AcK@9t78@Py3~Yy7sMg^#MuJ}#xtDK~L@p(J=51IQuD0tfa7qN#o~G}Jg}RUm^XxyznRX=*IrO%q4C z;hh7$!LxwdTA`zs)q<=(^?* z@sWAuh0Yo{v+T#?`wJOzO>*WMVHc`E<*R!g7e2e_YC>y< zs^(Em#8RZ)h~^`6bQMV>_1r!vp81n?ep_%}?GQyb6CpA7Z*a)3L!t0%b`qo*A;2P- zYskv1VS9&rTt8|3yzEUpOvly_Oc;ruS28+BhpYd8|l-B1zT_(HeeTt*8jl z^3Jbes9p}YP%ID&FD30U#72~crNN%1o2StGWH@29txPvhm1+$2o4tnI_n0GHcxA5M z%^bPfh9O~GJ#OR21KjW?%p-SuV>|B{>qwz0W55IU#+6{Yt%LbI#{voV}#it=l%KiJ!0s>LQ zW&N{)j9j~Xf$A+z`=A@y zGL5K3HwF~`%aD8$P>s47{rX9k1`xwVmX6GDu)HUHhbQ}r4s#zi)+}W$cOK2S7G_3v zf0G@sRn>947pbxR7Q`NhTr`3owOa~fFlO1UVeu?zk_^7sEA+BW^Cg4)m%Fl5$WZh7 z_L}5ci}~kYs-h}Tw@3$XJ_xbaM^lA6B&0k2`ZQ5NH-5v1ApNm*q+j4FlKb2o#F9!x zIY7P*hBM&j;HarU+{-bH;{95Gc(`&H#Z#A~xyf`2-j~<1;(ZgF_mgy*?M>Gz+>uf~4S4(3 zVO38%Eks*>2O)2+Kggst=Vd4MViZ=H64H0~E`~{3M4P9r`>P^h`Xn8mHM#dUZf*_8 zyM?g791LWeYPR-2H=-ywZxGRv=uFR%xyvItsBXs^E@JJB@Bw_}=n01NyqO(vXgQt~ zrVGFJ=+qR$S7!)$!wmlkav(-7e`&S5EZdd`-r+>A41sinbJ-4^b&dP@%JrT$1K)5! zI#hhGMWV5v&Gg?teikm5#{t8`dkTUFe6C(#o;!RT_}rx}jI=EI=$qEO?t3YeZ}V}k z(RcSnu8}X4f5u4j^wSW!rp@WL-`idekZ>=1&X{hxN2T;Le+PFff?%b2$iWm-MxH5j`Qcv@P&ucX(cMLk!^ z#^a&H*G1&(zxNt(E+w(%mZwJ3Kg;Z3lNAC6yq-7xDK1eGhwtY@K6vA)LQY5N)7Gdou=rU6rt-S?|gdxoLdY6U-YV4UH|)L9s=(V1`GTn3vcI{A~Vt)!@-cl z11cCo9Ox@j2nOSJgPVhX~VZ#5EnH0}mJKCAp%DH5n?xJR2QVgUQJ88AD&S znttA1X4ndY20qQr2&zj6aCt^&E{WH^gL@jiiw)=(>yKT;^L=#cVQ_63lh}q=Eab!o zl(UT_QgkR@Jw2GWi^63rM3-#bz-q^Zg!1ixxA)96X0#Jn+@{4|1-l4i(p&&oPwMRO z54t^{IXF6?8ghvkoI={?3?c90SCX|436Jr>K%1P{)ZtPy1dzi3EV0Dl2Obkty$+v5 zK#7SLAhUtJv{_AFl?UUwGT%`OyES+N_{8MTgvT94 zZuSawCEiwqdua77-(Bv^2z|O<8iqE4;27@dgvev?+1l+9jpeK53s#eApHjN3vk5w9 zSns*z*b^>1;LDXZ#wX1vWVeCQML6=^d*T4`8D+V~ArN2}>nUM{Q`Hc*gxyTGsXWl2 z@QWTwhNX2l7DlNOK%qZLg{u^?(Bz#VmxsUlNRtdFTi!a-k)1Qz{%Y^ozhJ~Hy5p&+ z4H?lG=zF&D$Q+Qjob4NHH-$^3MP9u0`jyS$MomLD$>at34PZ4cT z{frwq^B*PzDj?^Jjh+H%6VLOh>2EPOQ1=CE?I#H!z(jx%EENijmYK>jC>6vmPZsIP z_8L=Q8gnYn$^8U?y4VW-n{S~xwOG2yRWKYS1+0o7(!r)O@9TC7U0UQJ-BA|2hq4dm zW5h&NOh0M7wD~xm`7o4AgVya4CspLv19?b9HNKs)rOA>~OY&e3g;w5h<|xcoSBsKL zZ>QG4>@j3maCF*pO@ELbZ>~|6xH2I{5sMok1}A4%eWS+0iNrwiofkxaRiQNW2PS`R zv6jruw7g&I70%k&Kw<|bm4o!bCp$H{JYm#t8She65q`MeM{h1~( zgrm;_y~*LI!~F_36o&}#{*msIsDk99NN~oNAOKa49N_;^Rd1G6IDc^49CmJwfCj6w zPzdwQo7Vkm)XW|_2$faIkJTLZC`uLm+1mZR4HO5!^|WM%WbQ)kpsoO1(+i_EbM*VD zlpSnk#sa^7m>HohcdlP{m?VKtrFz=BA^8zkD2l$bKr^GPOn{OI;v~tE!sg@l9ETYr zr>UDL%EQO_U4nOu>hRg0DRzIYs#Ye)Go~~)UqK@wcE^N5vu~+qBfzR31k5t?j#32@ zH|EZ7{gs5v`MUG_+=TfA2MuY%NB15cgEqSHxpy0Dr`A|&;AX7>3nL)lcm`%3ENyW4 zEK=y%3t;LK72h^p1*=nbx|m~?#uZwJ!-A^3GU6QMD+}i8;<}=PaWKXcVKvGF#e-i? zOaYd~Ndu<*i28+5kR~>VoWk{)p64}{!K{x{jJ@GlM^kh@_up&ms_$}ERg21<)LW-L z(RLR>u9x)utS{7eP6ZoSMl7Mmq!l|teD`yKRBda`Yl^W)>z)J>&O?HJ#R_yK0azy7 znwo@8z^RIyTgRVqpVc~Qq$mgg>W`S`T<6&s!Hkr^m+L89C|CzwJzSL`K&ir+t9@JP zG%$OyyC7MdWn@}O6Gs)5@Q|K0eJB7_;j5D0=eLz@JQ>$wPJwS^U>@Mo#sMxhtDX-; z-(M!5)F!@0O&f`cIkhCI5OUXIB6JL;Th+v#=)>SDH8*Js^==Bk+m3?O<%RV|zda%m zJ_lU^I*I_xFa)@E+gg#m_gOuZ2LWMVcnN+5p)g^rk44%vc)y3pX!I!w^v!Kq`rfo5 zS?_a-+?>%YkL{mY2XhmFcWWP1&ctv@#t2vIWDoJC0FQZEufvu`JB-{dSf)I4Vskia zZ$9ITvzDX;HI0A1zkRyvRo_DldQ7e(Iw~saC|bg@Q(lq6B2+j?ww_i!2@b$9`e(Lg zv=m^m2W0wKq~Ztyg*foZ?~iD?zqGG?iPOJZW8dm(XuJ5$;A4C!tR$By>i*r4e|=Gl zv#FTz**~}ba2qj_1nYdpr&gS?%sD#+v}nCAxb3GIg98`|IDPkBWgXr?G5x#6D|ZRQ z9tk|E11q0rNAwCERzeWfH^0)jDWYfBK4;j(1xI4{%* z7y>Mkj_EHn^F=GP4>0T8vRR%4mcxhXd$e66dF?e0 zu_ZMoLjx+95h;hOg{;Tqc?q`T{m}bT1tcaZQ-}@FV%!@! z*k34Qym@!8`7XliFL&&7YP%UMpPGj)L?jq|OjkFU|I4bP*kv?pB+;8qWy6}uUz~er z<&~>z**R8%X$t)h4$=XTll`tQDtPpMrecznu4BC(gEm%B;+RaVMamK6wr-uolNRfq z&&C`78b>Q-?v6Vhg-;zSc(@OcwY7ET=QP_m`I?G4&l1$(P#ubf%j^Jtz~Md!KTT%` zzv1Pjwwy05c~&FEPrX)u)RyB5m6#MUJ8E+H3pX^Zw_)Z@t4!znnj{tDdKmh<-v-mWzcGewc%CpN29==>!@sb;f)teu$Bd@7NSv2!u zjKeb23`TGld{uL#$FpGCc$fCCp~Fxmdfxl<+@tHApILT#A&)^`mzga~_aU_=prIbj z%=99alwGE26v-|dgp&ptul=?n)I8`MG6(Ux!(~pL7vXyJMRM2gW@p-D`U*h^I1Cx8 zfC@|6PZiw9pPIk>Ly9C?Y<_>VWd%MPxHXN`!y$1R&wutDliEP>ajJUN1V9q$*v)VQ zl+FZ7)%f*H(Dq!@g*r@Ic#{R!O2Wcy6)z*M%>(AwEw5P2x3034z5n`Uu_(2b=$Ijm z>6bOpSGG(|arCbyJ6~7mBbC7Io5|o0ufRCU!R=*8=L*s1n<2rlKxTTRl~8v8=5TYV zmHp)U%;4q@LkA(}kOm{b2>X?N zI7nrJdo-$Vx|5os!?|PqHYdfb>Tk9pTNFX90?&tA!iv;*w$WdwBa#bBA~>?Ji?pJ# zQsXhXyWp~J%`AzbMOIG=JG6Z-n8+Om4Bne5m1I|qt(b!yN67%JX^77hTw09gI+x5i zz>BU!w_E_uj4Z{A@fxLC@Yo_zz?Le+uh=%BfVQuq7i39+#$6{g+V1^?IxBI022=W~ zc@Zz3JfS+dVt;^G(RY?7pb*@TFevCp@9ElY7|YA23B`D%L4|ORaD64bM1Yl*%t=Xo zgfn9aeVy63b(q%t{=L23PnSfBNMk#n&E=K*tfL}?=T-KEmYldVUzqak35k#mgf+9E zaL+kKz?=!Sg3-R#?6XDCyCJU430OTuoUf17MxIdEeJV}Q{}yoc@FL*ukIOGX(wjZuXPwK*lm9(B+eUoPMoc8nxkH}B6DW_ zw%#2g&;hq46sHzCzs;Ko2sLS5dHX#V)d4KF?FpO|>J!+SP886hcjs=f7enBEZd{}! zHXVBZO8E3gTK`!g+H-SIca!EE;f{gF+Lq2`;{cNV;j$mTm?nlCL!4zSCVo-qK;gyG z8b&XJS#ACKGPgQHmoH|1e@KuxZuK121(2+7hW{D9`U%eeiLru1Cnw@6A4&!XN@1+> zO;1$khfRJn8=ZAgto^MXb~;Uqi^8vnQ?DWp*)OWtWMZ9}vR(QGO67YXTT1p(0_T7O ztB`f^XU?Qm&J!*rH~_7YUo}lY{n+7O==1I3sJk|>Iki^`S%m+EY$vYD8wvmg^`Q@> zu@%`^ER-mQMF5MpEbov8ZQoyoY?Cd1ed1M2TFw6e>&N)BwfAPmy8_mcJn)N2J!tZC zD95uYq#N%0uP~ng6AEuR5&@H@#XTOcsmsns&V1{{d3tm4j#lq?+PSF zQ1J{=@oYu&kBUOugLpS`5{v?-qmK%A4QGs>Bt_BMcAVtk97Auq3a>$7&c2qL(Lzq_ zpZ(lgz9Hhm_J5Y?s=nupE~DJt--~IXK1SuBD9xnNcM>^s&*5vLmx~i?my^^s)Y|HE zxXk|CEyC8S!}J9DK1lcs*MgP}iNxun)~?jaN+V%L_dov+tj)qMXj(V?^3!%XIQw7>One->PEEYy%j`HnVNCftz=lf`%c zP5n-B5i1y|^F5Z_NgBdk{gcq^zLJRryeStU1qwhF=%55BWaIY#47`RCd`ZpS5|Ng| z3;n026s2ys?;`QPztnWFxAgt=Y0^WXxdpc=wChxfJ#0B>HRO2rQA#+@W6{Vgch%Xy zi=N6sf; zD7zc@O%>ULmDJ@xV4qplQJ7AH4fLAzO4dH>M{yc?3C=Z<#>k(18_kX?(hh(1N@|vJ zNkc-+dD}8KMl?7pb~4!l^AYKVXvl3I)?*7J$o^_F25x`rr+5Zfm_LN$$02YboJ%n~ zq8?m# zw~dLAIeS3!UXlf%j9lnvPE z&3k2+Lqnp3Oyzzd>kp;F^zi%xH+rZMLB$A& zY`IWo?%ng{=8RnpLtxEt%Wl`xri42{iGWalspJ}6yn{-98kVGH;odu-P67$Q5en;P z6P?M%&fiR*H$C*WE?|8@;ayk8u%aw5+KNC2HLMTIdeS0Vd7+Md3h=&|w7Gr-2Ot%4 z)u@B^Q|%B%WMG2+5MOWQ=d-Xelnog05#j)X zw*fg0`oI|Y?x$@7VRK$AMF2aMR>W{RVHXPaigsEQ)^?%rL@B!7&uvgImWUWWtMCju z=lbf!@m!$epROpFz;V^{_bZqYZ02%_LAhxo4*;j-AyK^8`Dwr8729&-))Q~ zq;PAG;xP6xgOE-CL+RNJJsyIPw&&;PDPay*AYb>SbmH0Sl(Mb3w6-j95cN!*mjx*} zaD|5}i&CD`4%zlF93uJhK+n*tjDC6pbuuWr_K&Yj-8T3w*0>#Z?gX%jc&soOY+Lsa zVgZ+iYJn2y|DeGD=GIpV9$bzea>p^rH6do%Uz~t)$KTXZIJOhZ(Tj1=))ROJ!}F=h z9*NaN;qfQ0dv+1AtjE4%;rY!_^hE!~xMxuA3&B?X&Z+Ecmkbl&%Op^7VxD@Uj$FY3*k_)6$zlaRsG3Idv@RCkZ$}GI}K& z=eYfrIb6DY1V5Tu@a1`q7IbnKQyLwIUz?d@(rBCSNxh}e;XL+|Vq!6s9V~XIs}O+9 z|Kh=`pO2D^$vBKCv5Gu(IP<%ulRiV+;{LYlH(V=;&*am{LREq+ZS(E*ChN0}LMFrN zBaHSZr=|w@7Ph~1QShPb5@dcV$p8D83}}nA{Xnx(E)b$mh%9{a6%v`5EXc`r6~-07 z@K1ASoe$OSgQ<^aqWV3UVw@rr8=f7|FP6jVtSc^2_D1t(9Bv~-tDAEQrwc12VK)CB z297FXbLD#(Z1QuppXmxnpHB=1x)(^;J&F}iV%@8Hr>;U?emYI@pZ+-C`h6)`I#lD1}&X*|JRFU zwr8&itnDm<%{aCTMc*a0`8!{aNq-G_@G3O*okqVHfC;pb>j=I*ERmkck{~i9rL8f+ z>J=#ymiD6#5+na%)>$j(FZOiMZSuieEKSY5Gtt@X*w_-Pa9wLjPQ2PjRcCGPle+!e zj=*U4jax0+ek8q=S0N_uM*ABoBp8X*YclwCAC}kxv%vrHZ8;B!SFb-U8QU|H0S&Ju zwmNgw13AINNSC^0PBT_o8Z3O5iI7-l_jnLI4v*3EY|OIjcrBf(;h@fTB-o^Ud(J** z${n>)W+*N%dm>^8;FS(8M?PVxu>s|((3%c34T!G!om0Qdk#bC&epmR)qHM$a;rqK2 z%dhH~XcIXANpawZrrVh-A0}ZIyb<2}Yo6#Gx_+-F8hOIbwVHUc-jkAR;saWrnZxZO z+UB|Vvx`Y@vHt`9hKbPoJc@IS&2jKMGZ3JmuVG_dtce8YeFVbZ-&OV$3t3oC#NRna z#c&N&(e&BuGDth@?d^Fa))6}PUve!c!-6jy%_f^T5PYkkZ`=#8s|=NiQK0w$C+ zAjKPY+LJXg2?^InyJ%U=r3QjlJ<@bi(wLETo$~Vhg0$%x#E~B3VaB0#6q0~?Iyey`0#8H^8Z9?{8U{Vsa({+Eh`*>BAwSyIliB zahTD7zUI_)G2TRdrBwTNO43dI3k}Y*GOHlyhN90V|v8hU)$=H z0E=KuE_?ksKt@BjgD8?9i}0An;o!rGuy~vGs>v7gI}d?CK>zJhz)@?nkM&;EK^lj% zS3a&TZDuh2$_z>MkV_hZ;&vtO6$xG{L>CooNtJWaH@jcgjHQt|wCxAUj8>0IfNNXgvk;80z4^A8YjFT#|GE?`pXt_2FzXb`)lZSw;;)+E_U%JrOn~0|xkv;L0jP+g5YNF{;OjR zrpH!Y#v&(m7o2cVdr$qXFXMx7BQEP+o`;7)pl4(j%^GC?FnM}2?VLofN`G`1ptjZ4 z=J(1b-d@)fws;-cj*U}cGM>A2g-D>OQsH0UJxRMiN>gyWg&5hCohR8t1kkHt!YY&d z-*WD3X0J0n&#D~_60>GYSuEb-B==YUA${KJacpB5e7OGE94#Z?vsh?1xmGiwP3nd? z)#5*w!{hj&aGK7KAf*YWO*cwc^3?O8;@>(s&Li)NhRfe@zea-y8jmVRmqi0-x&_tp+Ntdn9K3LDKk&tTjb+cx#vxV(+<+R$<1LjQU5LQfgf(ZBp<*m~Ho(94ahO@^cykc|dp zyB9Y#tu47(Mt%Kze*4?-(#)9}2Bz624EVPvp3s)^m8M7j^r!H%8*kJ_KS|Z!O5+*x z6CFXl*K+HL$cst;7iYex%+LJB^fhf)=Kst|lO}zl;y381C{ZL5d5K7$0X``R0N^!z z*l-1gS8zF&KmWlqU$=j02k^Y4JwDh;kX`UZji~Y;<+H0av z*>9=?Dr&BZjef3N{Por`*h~NhZSbJMVViBY(ZnFN`&%+OEyT?iU=aapifPi{m_M?Q z!gs#?ZPfw}KKS60NZovInClrMlkpC*{|`Li0DWNCsjt2IYM4A}Qbit4l5i$5i5O!{ z0Fr=OQcQq0uDu8}Ka^{KP9*EDx7-r89y3Nii{w%e)-~$cuoUCH>A-;s?gM4ad&_Y% zjz9qbmJF98RU2*a(MKQE82fQ2oDgPApB{$-Pd)84?GkmDJd3=kNI`M+)mMkVKl!9G zy4L^z0RVt8VOcPaSSFLT_>O;8Ro^V|zW45X8unYZd|530EdfsE_B`SJ;Uyo)0;yl;`L3SL7fB${=X>0Rp5KOXg;UdkwXut>1knRIW4Fbv}B?2(-_rDLHzTt-G zf#iPDn*eD(03rb_74EVL&;fIzWsMb$?|&Y9Otro%uDmil_~3(K!n4noeT~Sh*|WoG z0yfOGB=fUR_!9=s-a@7|0SG@pB>goK5SkUNXS_Hg)@W_f584j%OvdyOQU4z;>kZ}e zD2n|417j5!HtHo8UmPyIE|;mX`LrjG%ju2lmND9}MfyPY?8UYI*?u1bGnezW~W>w15}gbAg! zql%<1nXAI&O@fN`9so=WVBlcdI3kczEW{7Kr3f1ccr5@`@HA1sd&q=99WUnud_~mc zL%;SlZC^&~GHU8kw&~iR{#2ck)ug2&fuDNnX|2zQUu3h*H){o0%K}XC0~pP|@y0M@ z&ppG?lr-yD`X`csGz>`9ATbrlLBOMpDb`V;(NYlpfOkdXqWiNE^$T&rmBJyMocQ-Y z@Id&*fB$!m&Cgth=^1ZA(!RQnfq?b-gZWLUEnS|i`;UXrd|UFB5vD|qOY2QxaOww}65kV6xWmIU+>#u9n0bqmiVRjfFdmll@ zF~4UqfBhH5{&gE#8-5Z3eCeMrg?Hb7H#Tj3s=F}%5|REDE&5UDSm#Z`l>OGMS+hj6 zfI5o=m=*v4^y}YGa|7bO>dyA}j=(t7Br3QuzX5?&6lVWx0swg7=_Iu8zWWw&x9PV_ zS?sH>zFMUm>L!z{R*5m9kOXExPq9g}#Xdt0^S22{McZlTofkfJ{q?y+k~2JsRNzSc z*9ZVL>((@eElV5$$d}L%c}8^WrGDhaVwROc2q2M9_~tkD{>=90zR7h!6JQ%J_s!JB zj=y--pGyS75AfET*_i)|l`GsGX{V>VC?H1(Pl-^K_f^w-BKfO(10y&ot`Gj{);q9WHi zkx|C5F);yvI?)7zm;S!qpZ$>l$4l2-6Lw1RVfZD%9su;uBK4mz;-;GpsOkbOK;Xv$ z(Bxy33Iu*|*=1qEbI-*Ye_Gp5q&@e^a%ffkP4Xwyf6mp*zf655E`R^hOD`$o0{~|8 zGp9Kxb9lvb&plUDYpP44%MBksd}TvJLmwEQsDNn#_ySlU#5w`aXCoxJ=0HwlAR=2W zXmL}o5fEKC@x&7~frTQXT?q|}9j2LnFwFU)9&7#lS|9Atx+IutKwAA55U8)yf*?%d zUe>nF)dN_$U_tm`{P?ilQAg!oi(ds8y)cJ%+Ii>D9HjtT{2w5%HX#IlESi8eGx_8v z!$lWeR5S?u@sEED*NH~Nn3>~`Eypmw%`I~JiGHkIvsTC6OMlyE4FCy0RQ#dv2bx91 z^l=3&k^ZMooH+5;YLB6(lFUi5laCcC@f)PR_XluH=!7<6c#mmBVZZ9L1R<*)Y>q6G z{2l}h2nY{-VgLPAJ)?L?Y+@8Z2y=sj?;Tl!F+Hl`B_iE&m2# zfR(FOhUes-SVcK<#E9J50P^{TBIO#W>MSNy4)fdA)dPUJUZ3;2hF>u`7Hi$cA^Ft? ztU#g`{s=SyoU=T)3op2!U=Tn}$LkN1o72y<06-w8(vMg3qudF`rM|9S+vJh?O0GYd zm&;cykHdX1Jy8W-GLPp>nl!2AY|D~8Ezttr5Jue2hXTzZ$i!iv1w%;(Qd&o0$kK#8 z^VRsxoF#we~HpluBRkY+1I>Z8sA+;o7lypCESK;TC|`cZgEv=zd`7hZT_ ztAOc*kj^KH-OoHSiEoT=TW#{;7(d>+(4T1l_+%I>LVkQFwf`~G00Ewn%-I&1&)Zis z=f6EF832qKGiJD`XLG0?oZ}GOq^|-1rofQFLo|fvYXm^4WyC_(AK;nZM+o@L@y8t} z-#J(#1o>7F`o};1p{<>e7#ClBu~s3f87e}0QeW<+nJ-eYL8bMmGr5O7%}26viY+0 z3y6IIQCJY?3aXVkl6C<_8GkfAho>^*3m5wQDDm{K+Su)D?YP z2MIkp?YLtBBUO7003msX3>m7Kd#w8FY4z!%@>E6(Wx@|}AlXI}qa=7smibA$CF_r4 zo*j%<>iqvw5z_q1E3XVM&zcqX*nRi#eKF@c0s+Ficinw=s^sTIxYt&+b_4*NXRM}A zpRO&xQ2i~>->d(k#jcXMJwT*?Q?YNhYcIHM$of|UnQu?L6IqdKLDp-kDjiG zXmlmMtFVO$0RnTT_yraA!nsJMAm5D^fHsgu|NF!f;g*|k*6X7VUX=f;#fG726BZD-{E90ym3PlQ z_6XlU|NNYmbq011Jn%rc@#jC!VR|%Dul8f=#OwSsnRWqy3!#GY+Y8>-gdYHaXW*qj zKp^0Gib((4t37UojAxf<FWrl`c@k3Sx6yX`hz)N8uQD1eN`m?n6BSl z`KT<lngRep&t3`+47_Df`2-;!8nl5Y`~v`3IVA%F0|6f3;a~r{ zf&it&Y~cv@;iba#NX5%8yDaM@ThGbH3GHdd3p2uQJMSF&M4f-*NJ~pL!H2~+tAzQt z*?OyZX?J&}m4JXSInHAex&}mHJR&}<=P-}Im-@ElTxWK_okzm6%vXhxQ~kaAzi81S zQK*{7Oqw+5wQ7$`M^qL75GLD27C)ddbAowd)r(&i(}$)W9DC{S)qakdm-*QJi$7c(UVW{#qpw%} zz4|ZLanF<~Q;w_rpceQD%Js!!3S2Mhd=zh{|(UJEcF zzyr%c{Q8S1gYc)(H7|4M67QQn`#lqW(8``DV&YWqrycMvQn>9>gdg6)-Kp0DvuO z=b#~j+GGjB{3KbJX<&{*&-exerU~#shzNXU@4eL=pv_pV6q+n4bz=rCCt)gTF^>1% zQ|1Q@%-$!h*MNX+8;^g|=6Bivb8FTsv$Czcm#>J!eqQ?X5=~STt>)b-+2Xq^RMuHE zX3Uu0YuBz_Dva2}0Ki^m3g8c5i;AYHmr=Sf4-w=hTHu|8*##=i`anDoB+Y?QBS-35 zauEEpC0aL-|EO+c&Po$=#F(Glhzl;fP#v1a>}*W~u*SAHJJa&}lK{}Tx=~FD!l9Pz z!!{}XqjcZP#O}Yc+T)Qgm3^iP;~gw0{0Ip`Npk?kCnk>;fCC1bU7b*w)_{`n9eJb{6QR7=9%Wwevym!GNO_!o zObZ;IH{5umYLmwFsQumq!0C*j!M~)^UKn2YQ<$FxK(lAf&d#yO=4Z_XUVn4;*-Pf! zGMVE;MfG1(?J+5YDkcgA1U`^~9hwAyq$$9|7&LfLPB@BObnQOe0SK5sz=MEk0z6pq z1jqv*5(RH&?N z(kwqM-_^J}$LpWs^y71vis|v=vfp$WsG`R3$dMz@7H0iVq`m<_(kY0fN9E^1^zGkQ zE8jposNQ{g$C5iv8Eyvzcya8t1Au`10HOkb4Uqzhm(~hB|NQgePmewt4*S~I!Y;e) z5}z-J^elu3r(J!`HQ{rjIngDln$#SnEAzb30Lbnm`wqJv;5Wuc&1c`Q?f1;@CBHWZ zaQMOeYn!qyz0Ko~^tXf`Ti=fZP=50{0iUk*vacdl+#5E0`0yv?A@1j;Kg@4VL3IrF z=&4(nyieagx{6RyTBJ`J2pCzOfY$=Kyo!xym6=RT*k09ZSKU!a(p0;L|nU*39a z_@Bog*Ge~g?6F6sA5FW&xE&{qkNI@%wbxedI$(I7Ezf!W{Q0^FXmG^j6i9*bt$?T3 z0My~pr`<23;^t}(9SlEv0ngffU;spHo%5@fYoY5`o3Jt>8GEr z^$Cz{wMO^cbB~tJzDR&zue~Z4>9RtxO;KyIYs3_pJ$rW8Z@>MN!O;YmBQU)IfW6`d zo?hDfHT{v~r-KjW&b6sWWMaVhERHh9XKOKknMW;a)~q>V(xgcbSNpkim8u2+qeqYK zEe~~(Jb+EKfM|+8K%IgP1V{=31dQ>~1bE*Zf;r2Hj7#pA_)W?cEp0la_w#DY}5!FR#!}tl0KUI9SvQkuoV%5r38tMZ8EUC=ed0BO8 z(J;>tyZ@GIKa)~WRWo9U42WI#MuSk&G3Y^n2!WXcqz7XT7${&Ku=F(t1hh_e_U^D7 zy-C2nfkD)yL6M!mqu&7L04c;c;da<@N0~g82^U`Tlb-~!CBx5dxB=~`nvW%w7{_Ce zJ5EDsH~rUtmG6h5@SatH=DGapSHIF2ziDX94@@OK=NaD|f8M$089&w-BQx%ed2fWp zA1zkNkJ@hnf+|0jR&D@b9jj!%Tqew4dn#J7!(HtQ5D@r3@*t-O)72T{8xWW|kkkaQ z+XxX_7!UKHU*CRhK_DVa7BNl00|Lip9^gnCJ7$db9AL5_WpKt(Ew-G*^&KA-HMw0T zdo7mVf`0hJABGoZ%+RVjr79NU?-U7~Eq1z6fq;cK^l1dkc@Eh5j1e{XwB@;615D3( zq(1Y(uiMvcecM<+-u=0+&(+^i=9lqD-B)vQRW@Q|oqP-gIF|Qsnlfd|cdPvzN=Y>_ z(?*RNb(o<2Lo6Tm8bC)Nz?D;7h)JNU273s@_8$;;Zt)>PBQpt13rHTbH75_tipPu| zt>3ZDw%dl?ciXLOYvpInnx*U2S(1Cs*=HC3MP&dE|BVkk_@Fug&pGFuk}n^&N>4ER z5@9-|{-nv1b#*7}IG6`$W`HyxfTTCaA9KJK^?3U}mi$f=fRSl2Mxu|E^-5#@Bml_# zctC9aBTGKORi>H%07z83e{X7P`WXzK1cCN^0$e?knr^v##-z4B`~(P?R)AW`%S(Uu zIcFvTFD41!b)eY1gCnzmTKV+kE4mp)I}A#_g8S~fFMRKN-_r!8T77tg$mpM-KqVkh z3d&Y7S{&9=YFl0pKJ<`w1EzK)UVf`i#Ir;4!|0rY`H}wYdwah) zH8+LTD_6%3KWpOY8+k^O|7lVC_p9)5SA=Q?0H6^gM*Lhr;JYw;8VGnz0KY)CrA<(K zf8ZdQ6a%thyuSVV#+_W_8_i^L>fm{EfGq%E$GosF(FCZNgFgVXfQiQMZ!aK#R;V7w_HdcBWEWZ)szPYoxN+e+Vf=3# zd1N^5*kh|b^qtaUk3AM{6^8xRx4xz3Q9fkOJ?v>DFV6tK$HRa4gU0mHu*k@?3Q<}p zMxL{p1~TqA_mKD|_0z(6ruN%={3ba9FtY!QX?*GgUcD-(eYZ8D;de#tpD%N0tT6xT zYL9t2sU`sc8aZ<0X);-E5hlxcGa$_;fV5{RF=R-O^taYd)D>jkYE=zj%^B%)~OaO~Ky&p!LafJ33p zkBe478}rV>Wv85as!Ya};qJTdE_yveNvMDb!pSF}tYg6v+$7Lh=AKn&GJE@pC!SF4 z0U%(!07@_I?O7(JzIB_-+#Z3!#BS14ZU__dSfOVQ%t76|NZa!B2JIg|~ykihB6zA-)^;FEXK zq(3v5^NSYBGkEXatkjRR0<-tmG_J`30AqgNhMwz|=kc>?)25wU?eVQ7)y}NyfJToV zy@fE^9C`4YcvHYnAYDo6CXQ7YHfcbffJ$lECx<|nh(;kpUu48WhPLE12?Dld zve|pK9GMQWOnjPZ(z$lTh!HWs;F}=41v6L&n(j)3?6eZIFc59TY|LQd@#DvbiIXO2 zwjR>%9Ij?t-@$gf*+zv}x#ps!s$!*Mh8R z%vlz0OdmP>$n8Hzn7@oEjAhA?-nvXhTfwrXBZT??ScYj^^VDqsz(^+7T$u#JEE?dQf_6^L0l*-N z5||^%-!1D0u+K3I01BiI`2)uMYC9&f360rJGe|p50s#{cNr+Z}jf#Vie0H)7efApH zYs*-<7GsEN_yxFb%o8iO&Vrn#HEXnff@w&2*lEZ~5fgw8jfWTa7yD(Lk0y@X$O}M) z5&0gwPj&Dmmh84^%LPCRbHDTMJMsFBWD9SAK|TE<`BejmRQ~v0BK1F7?z>vP=zKGHZ6cj7c-K(V_J9`GVT|s#_Triu z2N;m==RWw3c#&6R>&KEl^6YyMz*Jz|_#U(UeMCnkzNq>zKU+&SvJ&#f_?(mHvqXM& zCt>~t)t=AQq;3fSkVw&glZknkOuTwiGi}{~fdKnv7BJCZ@VFPD9|X#eZPGVur}oN% zMgM;N6%5Rm5Nif?ttHBhk&=?%Gko%#MH*~t4n!s;_h2RgTcqh`QO~-Z$VFnGYi!{D zV8ZCNF6#Dc4A1W;ORJ}SCk%?l^6q=@X_N!T2e8nV@Lh0SXexy6_+0~6V|oLE*dG(6 zZQGiDfJ}?OI_F+8b=QaWxMsqLm{d6PlAU`vR!u8ndQI#S$#1nGjp_Zq0K*iyw$DzP zGNs#A@+lQ{TL6GWY7Ul%|B_7bExhzMK#1+nNE?U~hobC2--;Y!pNUP(Su@RKk^uth zEOcea)Xua4jHFLe6YvagAYl8(kOmB%L7BL=^wd1n{KgPrz@ZTXn)KWR?T1WBS5Lv) z%@E(cCW>0DiE+0E}d6>4LU=uO99UHTI=7;gQAFiMK zG;lTtUflRK)N`c*3kSrZLr2N*P8BU1mpufjKwk!`bl*F|Es zRIjdCjZwD-0HfiP_~t8-|HNqzy7-_I#}+S}yjI))+gvpO)ch z%m&nqYh$(F05S;x(Q@zmUwGk#qpCeeYmwF)0Dz)igtLWFwo3v)j!9rPYD1*D zMjAnE>qjdL&9foTr@*v>&o5MXOI zvS)bzp8a-`napos@5dE%64JjtAh7XcU(0Aknu%RQ8^$$r7*;3u6?)%D4p7D+O<^4t(o1>>spT0qc`0}Ck3IL46B)C-==M+qWGyw2PC^!Z! zT40fYpcJ%iCOTtY`!9sJLAoOjQH3NZq~!wGF^p>=Gbrf?@aNk59waReIc2ETjj?0X$KB)K zbJ8BN`1|Tr*)8qey-J_+J=zx?fL`MXPBeDTHWt39{6D{W8! zU^HUHh|^`F{ahHQm*uQ`An;m&dArRXRzLs*B2dUt!&4lGx}V9k(Gma{t8zp%K{F4@ zlIz_oM@#64`JpxvJtP=CQoB{1j=bl@+KtKVI@>V4J4SssH9Rh_zNRtG#rHlDJ&vrJ zSo(*M^IprkmaMe5#Z+=lXaK7AM=8olruWD4BBAF&8K+~OfByOPwp>>wXoCa*BQXp9 zAQR~jVdy%)c*QSfiB}j#K7uy!@cPJ6R^KXxjgl&U>l=Qzl}R;OM?giR3!C)S&PQfO zXp&AtHUx(TqRv46HD|Z{hsy24f_|l9>?rgA;nHg3l;#K+01UsLAlIpDoigK|5EKavp&%V4*;ITG`Lxq;+ug4z{ILH4+ws-i`N8{`9u?lwE`G3QI$AH z0y`DoGnsBPnREd0?uo?C9?Ssky?F|D++TW z1r7*&dTbm+uWtnb?Ow!tPJ+hd88IRK(=-G7o3yZDk}1=Gqs@C>qNe~*&fj^)k3I{d z$C-`nuWN2q_oH-Z^C6hC&(~Wt=6CzF-u{~$pYZCduP%yiEw}x1E46gt+y+nUD*$Bj z*zfds`0(M!$>utlz=J*0drcs@w!i~{nFd;)E|E@afRN^$_e`7P1Z+w1<|n`-{`=&6 z2~U2^=suqzsX^4`0)iFTG=^6R-?XlEpS2AfN9U3HRxl-5U$N1xOf*dZufDu~Gk^a4 zb6B~Tcs3m|a7&(_%?B7dI$rNUq&omWXUtp(Qy21Hd~VpVVV{?Yf0Ho5Fp=nWUizo) zTfTg}UcN3HHHiDv)hD)5FFSA3r!jY$^iMSn?Bd&z=sBu<2yIknrMbU$7AR!x7fRx!ot0U2*JnzH&zA}=%jPa8-6us(iFZn)V_><&y`RlL0 zp0w|~JEIr#9aRB}asog{3|@#-uM|)e^j`n|{d*4?GUO-1&jaF^ZQp|c6faJSP9$p+B&!}JK_IP0VzgZ& zujfVmzk2T6xf7yGE!KuF7bAD{*{*^?F+fmOfG7n3SRP#RI}1HmDxfIEXVb=}-Q%G{ zhi=`kU%#ISLw#15thZk|=a|ZZT|77wK(k`oj_dEN1B^b87{jM;0A^TkdhC%_LGiJ}{ zy>bCVO=uEZZn@>oy?XUJM;P-{ayUd@bykTdDfN@b$-*4A6xV>jujuoOdORT5vESOh zUv+55$)(4B>+O0E0!b~vgFy6ooO!Rw>n36PKS!5PE}Oa%61oruZ|^gOd|y}pE^koi z3;+sc_^tv#slXy%ZJ^v*2Q~b5?$f8ww}gp5EljtWFjiff7GV3v@JTHoZ6%-A0`y1Q zVSFRc_;&0W-WMV9Rf&?4-!p$pmX^u!96A2qci(;Y?iDLmSVPTn+t=$O!*=y|3j%~p z2j>di+J09Uycp&#r$$mLO(Q-YGGxf;zJ2?iCJelXFyl};)sUw0x3@&sD)}U<`q;TN zikC4bG=OB$5ij-ae6os>oM*lLVv+X$l-EP^=g&vNSCWzaeyuWWxtX|RU{DOR7R#8W z_^on$SGj(-vvcvjXbGPdE#V8o$UDhvYk3Wn)6~;e&h7{V(n5dszONqu<=Fcny~xp_WKPXo(nmotzgwZ(b*dO|qq? z*FxFO6BT~?(xpqES+Zn_Ewrg76BY9})jC%T*HF}TRhk*A2?W&ygi?P;d+#fWHqm$0 zs#PmO^(F55$W-0wT08xlN=m_Unj4k=uC9KjvvVEoryUnUm2%8g5_~%QY^^eP)xWzv zCt$Vh^1@BNNGpLX2dxz65i37u0*5$8$?9Qk~{R>7w`YfgDhsA8D1 zkk1w?F-s|NOU2-6W10{1ryUo2z7T3D;=Rr^h~&9qHI96~BcJo7*spbMrjWnMp+Y86 zSC~BCb6x$rLjJZCpG_OXLZo`Bqrqw`&P zuhyto-$60&l?oUtrBPIcx$~j!G{K6wr&6o#rLgHs&G40chQ&S%cYE6;%{MbDE9tcDZtwPN@3VE1MrBpz_j_gDj2OsEUh=Zr3X|&#$V*=G zk~_&0Kwk2)8%v%5b|XOurTxAchC#W$-n5KTi}px8w<6Cz2#U zXA;b{WhOzH>GU>pYgw}L_{sC6u+vDM0EV$70K65@WX`I~tYI5#*_TaFu8C}zBg5Rf zY`1Ql0BndMPYT0R@&qu9#0Kz*z^=_Xb#7edEX$_tQHb)Zwyi4M*uJr_sk6x+Lou$z zS<*AAa#UbW^_)PNrz{Ezz$L?6Tb3OdBM49!F?d2KL?(RRATI00#{`@XXKkscbp711b5~!!=<;p&3^A}L z1>g(HM`8iK74$|;&egWmI`4S*j!7FkHqPh`^-hV((Fw97kHs(=iJ@HN z;2eyDcL1J)zzL>_XL)7L;W?|UlVyAyB>*yEz|%>TL`noPDMpuLvN|X0vNDf}F^Ec0 zeZt!bQPeXmvkjkjv)kd`Q0^`N;lw>p{O;sEPVR!l)`I3r#2-SQ42E3t1Te&61AMDV z&z<(vX%p6LUvqeGw0AMq$TL`pt-;_DG*ADT-QR*sv|E}eC zeX`exy&_wA5X~=&qD}&dz^^TnNdrG!j>QRpZWrTLf=UPw zL$O|LDXio;?mwm8(s$mx=FKlEp;Cl65$F~{o(P6U@&qtMVgNro_nx^W+ncr@E=8n6 zu$J7HmD%waoQx5`eSmM!>UP^TvJm(<;I(oJe2oZr#VQ~cfQbNPB?h3G`5N#wcR&NO zkqk7T8%cozpGawocrI^+HSJo2{gnn*yBE&;24yXY-UmXE~l ziM^jEfWenM0Su;`4K65xlNgyf3mdryV6R(XSr#EEa$f=vHgMWEDte($Go5jw}rO8v~A*hDb{UAO>w?1m<~6 zP7lF7urAlHa#xi+0St!x6qaBk_Izy29)%}A14^`=Xk6lZ8zb@*lxzZkvx2=(&&I)= zk`VB*dLU3W|H)e?L_`GpRSM;5dk3%JHY$Bekd(0g{tBzs4T360#^aJ1Q)n?mnlFtMN2bnDC$x6ALQ_W*w05;ZTTdH=qv1HH4X%Q5-Re$Q$v|sypsoN?2!OaHlmIj@ zKxrh6ViI@{Pme>q% z0LD0=eV3>@l4PWV0i0qS#IHHJ$5z3Jclf42Q+0j?|aIhLD=t-V$F-F^DwIY0ik z)LEK-Z_Zrb$WA58u+FK0b8y|f22Yb{nO)yGFfZ#afRzAvUN`T@l#YR=GnT@_$qQjt z^(-iHmzaKk9Z} z{U`9*y3e2|)}s)BWFY{Qzy*l^aNjut5&U+Z#_qxI;cnQRlLs;c^1#Xm*pGI6bhJnC zJUG@rwxY^g1%9WWKCi}LBW&;5{?5pPk*8iU|BAMB&X*^EbmT%1pa3prqHq-k{uo-8 zLhBpnMgky_cLMqfe+3*r{{+~7+G3bJat>5@D@;Eb6ob$Z!X|ZZ9i0=f>`X%LvC>ru zHJ%!%c2`50tIQO8AVA;Px)I)4^A0@s`LnR0X@edFB-)=603>w*63t`ShSnsD(OQy~oS3Dl7z12|SDgm$HrO&M++yOg!cEE=gbp8GPwfW_zC@ti7`LJ^{|GPB?5jDBG3rHDLCPb{my{X7M=$4M$S_r@~VWz zFw}?Y6~Om4P|dz82_b}PPc@8ikDzmGrs}nifPG`zMtF6_tMHEx{sDEJb+jpvY)_j2 zwB>lYj4gs!kbrK4Kf=mf-~T|R`o8MX<(~2t^DE|;Oe~oQm7Yopexm(Jus0M7K}Vzm zT0^bS(A@xAyS6^|_z{nvo9euI0S#G=cvMX)v3_uU`i@8S=0^RCyi=4Thy>&4Dd2vwUX3)eEjpYC7f#z#_s`u(u>K4`BTJ(0UYz z1gHf-2%sa>0d+lf*lp}S@%f`)d@0%a^8}#DHBih&**{^$d=`+7I<}xk<}%B663Hi^ zKYiipFr|Eo9w8?$WqsFr*wnQNdd1#c-|4Ux^2|nhM^Z8v?HjFUD>et4;khrLgS+1N zBeVxqYbjwIfQhg7?R&X_W#r4myW#Cz-)k!2?__Vs-s3gox=Gy{Q#b|=9djtms@Q|N z0Mz{F91v8^e+vF^2PS}aXzXpoQ`4hwo%q&y$$leG09e?o*oznuYX%ugX+b*RH_S=W z%~e181)R6&eA+Hggaq+61~yV{zq^_D*%IO=5Q|{4e==0MD`^=a&{tQz3b*|Gcd)f} zYm!(%5)vS9jYls@F7#8l4H|NNpLRmP51@cw%iOH-)xbfc4~Bhe_QA^|pb(q?M7m== z3h-4IpdAxHOK&r5?cV;MPfq=0|75?jTN8kA4a`MR=6;Zwy^;=vX#~GvTcNuUu0G;g zIAh_NQ0OeANj0_IweWrC_fQ|KkDIJ{8L*HT!6g4Am|irU2E9nGz(*TDg4CNh1n^7z>?H0^B%=$6F6aaL6l36) zdQ0KDqkj!2?Rhc{>d`26*G5>;x?-1$-VZk+Ehkfpro!yf+2G}sfai0-U{!o zc{_0oK%3hwv#=Tj_7d?<@snKNpW}8OoBimTK0!`QW`)?~->Z5795eA)m|Q#sx`JKc z^?0FEHUA0ln|hjPQ($e^7O3m4gQiPcl45+fBLL^s+>ufYJ5}3-+G-Y0T5Sn5A6S+JY_kIaE^k-V;94hjsK-C zCNcT9ckO`9flYYYOp}6wxK8$79?25`m1V#=#$vxpf}dkBvnU1ljaC3@YPs#CJK%)5 zC(v|Ql9jineGRN`Urke9^O8FuLBk3D2{5;8F3m(FNkkuP_yDec?iaAFZEIpHz=i}E zWxk4W$jc(P!}_7T59e+C9k|k6Z95LMIuYw-flR!6i3@?q|DLpw9*Y3KN z@8k2^kpPJU95?m^xcjibKwG2@sytQj_?pLHZTk4{-N;z(k!TDQbu-n0&xC< zI|{|%F?^?`rVX~izWDN_iYajS>3@NFBj(ZE^lw|gg_W%|+BwJQD4dE`@s`WlC*-#d!MY!O}#B+QfM zhp&o)o=3n)QAK?pqvpAY%4gev`2wfrCdL3J)Bug1`24s^u@3aRKc4nt8@$ixqI>tfS#~$NwHGeU&t*_i4kYP}^0T>)Xl8 z0EAcp`_=46lZr_C^^>3f6K?pw-zt_|BG6lwNsnt*U@i;a9(z1n*X8~l20vr)`HjEJ z7)SuiK_d?71AZds&p00@Jv@%yS0V{rzMBz%=L+svImSGKUs{QFhqig*L{#vPC>jNS zT>dB6Z~T6gMTxn;qIpH$+~0+S#0U1R*_SrkZtvI*S3Q3ve7@;3v$h3DZWXZ1Kf}@3 z#c($aDDq3dZwmMsf6uT?u5IavgW-Mx{wN0jme)<`r&!7az%3Lb}t=1+f8_X%`HI&*z1c^L#DQS^D0^I&$_Y)bS` z{`U#E>E#LJc-hO5fx^HsyjrQARF5+p)h@}|(57O};UfcXypS~mK z%s2;TJ~lN40YrBX0&ra>JO~oHkZN_K%1@9gN-D#hC;t%>z=^ag<)`(Z(k7I=?D|sV zEP}-&7Sq()washc(kCv4O|2W1jW#BDUrPXLWu84Wa!X`GCco{7IjfV%$ zdk7|$O{77-_qV?f;aE7=caoPOmf01vVXvyaASOlO&NuIbM?ZVWUi%w^bNV*a3_NpW z@2#<~()lg#jgC99=Kp2F^J^w5{=ff-12Om?RKUOGH9DNSot!n}ELia5Y>3E-8!38r zX#%(ed~U?QiEX(365f&Vfn)1n*I}}mId#KB<)#PaHI218L8m6S{N2WSX6T${Qa2w zX{!_Q`4fSk$Qd)vfW4oZ2T?)*36Sh$B5dnri94n2v;^S&8C0SO{|=IvS$*!rh6G5H z-tDLU0gjn-ECgdgcz5f&G;caDc_Dr6myBLQyW4JU-wNkFeiokB+QbFSB%oRZWGupS zgSSSXu{*aHgC7X^0s2}KmTBLb{o(#&AEe+XW`8p96FF`AX|V6pdqEV1cP|2P{=zwd z?UdhRkUBn}D#&<8hM3BPstNG7^B#op*z~Ur)WU~bKcs_H<|Qvi*`sm~*t>df=#BQm zH81`G-d+2ajh5~ktON2{6`uKd@RrD5jOX+I#(5_L2F-6h&d^6;Va+1=`*AAxH@%it zrYRwS1D;t3VH8S;WXG;X0Gg5-WX#EF4tZVUb{d>twB-hja`gT2phSSN=O z@c->tZ1%@6_&25pej=w#KLwUPyEsk&HfR=HVYcmpU4#Iu}9WKUbRC5@~X} z&ZvM!j{wJXV4L8oWF337Y44hSvF3k(eqiO*jjv|Z$7K2R<#6Z=2SP~dO-KOzu0jC5 zOI%Cjkn|e9V7FElzbmZ?MJXZg;-^Rc94w!)A-Zcy1-sA44Bl^6yA$`rS$w|{rg2P{03SqIgFCnSI zId=g9@Lnd&hHm%>A;zy=w8`J6qTM3{H=lM3EZh4e*wncRKG^a>&OV%xmz`fGmrjNQ zMjrr8T}^PoQ|G|ew%Wvb0tu~xzWXhx-W%>c{(hQr{_2LzG`}XxrY(b`UOEh00KtR= zz=|QZ{qmid0E#Ymjg586pJS7%N-INJvJazL{i^9tl6(Gq(Y>%_>QdT0^0RH9<%i|U z%YbEc(P%hi+#wJQ2jQY8&x7xq*O;>dlahfsXh>G~tlkUmJwY}5`w4y`Cr&#Nj{Db- zpjRURJhk|9=QLqhhg5BdGKZZm$0H?MXoPD zFT0SC;NXuY{D^+N=x5Je3SaN|QrTb^)wc!*4Q2Cd7Qj8n-$&z8udeSu_=y}p^>{e( z<)a`Z2kk8oBC(y704@ZNS9E+1QP{(DwKlg>hrP- z3K@t0$jL|2uEy8=zpLQm%^xQB_W?}X=MnH9_jfvC^gzK+GI z;&b@mh)GA#UWK>5@q2h>^-H!f0IT1>aP%U$}lF*KvawMGn`YDtE5(Oe9 zr-SW0uXE=i0N;7ee?SQIh6|*re=Xprio@Z6M}GMPjH?(AudIEAei$JyyRZzino0uB zOUEyTvHr0T2nFDSweP{IhVNiy{Wo+x!nq^o!_4YEVE;)6Ky_g?H1;&YTN~cWY6j{N zlaGM&-#i_f>ER)M7!@eW;rF~88gfu~aRsR)y*Yq77rB|0MG*10!@{i!hZ=MC+ zQg`1Vq&kU?orD02&UG!3Lg+1!K`>t}>T{vLyWkEuWcH!(=7u+6N7s&AUwU3Lk-@5Q zLtT>%m6XH-CY4Qsa&I}5d&+5$u(`Kc`ATow=ImRi>Te%5=`gtT?Q@_j2?0bUo(=pY zFuVz%@QT6`)D-z1B;{irrcZAhzX*#LuRP^yIA!sv@cx$fVN=_tTwi)#1}d4>z+q8i zlSnqwPSQNbA(IY)pS^nl1jO!y!N;h~4SxdgpXvNa4#WQXy{m(D(wjj@2mcvIoC`lW z>ZkDOwohSA)0$jg_OKS>Ciz`{8nt!`PMY6Nf>)$d6q#I{izZ3Mq!=A-hRjK`l(wv| ztIMRkC)z{5$v0rhMy(qbH5al2_64qNCy0r~VecZTuF#+L6{EEW3pepclD|Xd88rr-**Qq{vkSEMlR( zryZI*o1w9z5$ap(VMogjXbrSNC=!BjBn+Wwh%S>U7K?$v3*htkpwL^WPX*orsPI=n zWpO1`6jy-Y5P)^C^dl)PJuT1~PB4CAe{0rowg`q$yQd=uO*jaC`N1X7DF(ngV2MTo zJjb$i7j_L#0`Q;jS}F(NEv)5v{o!a=gyQQ9X6yxjxae-!(7pjasm=NK8*?h;3pnH} zvE)02H3cYu3g3cVwgE@CQKYP5&Q*y zDDoG9+v|pw-WEE>qUEAf-Bh|aKYXRX!0yj+>M=_uEP-Erd^sk7&OTX(THhp|V}>UI z_%HSs%N>y)m>8LE-(~)}L-}JsYlDeCSNASS7(s2sl3#y-Az()U>YN*{1WR5j_3ENOa8Sv;*TsA z0Kf&yE`gH|Tn_(Q{V(W_bm!tyhg66^Khi%ECX`KpG5#^Iv2i23{=e7Z^-o`ij;>*t z=)|PCj^{qN4`xlB1(U~527j@i1{Q6PNp!AEuVo-I5U{3mY?g>)@wmls(`VNhECA?Z z1u#xDya=H5eAj`oc6bNh7;pYQpZOZ+W5557OYVaAHoXU1JBFFY%d!w{Keb{i%&43J zk|e>q-@FS?z4H`oYaGV?8j^vZNm7QTrlJOBPn``D$4&&172{pDhbnNGO0wx?raD); zzh$%Eeq;B8TfVp+6F__XIrQm)h`5G}yX8cu9a;jwR=xie*9M5d1QX_s766|7{$hCe zH~*wx>iJ^p7eji9Ln&lv@)=b#U|PjA*xtGwUijz*c;!E@KunAc{N#fvOa{wI%811? zZ~8o#H*FsHihK}^2JO$4&UIv4hQhobAUW(iW?#7D%Nw8rYgBUrP@Dh|l7|lgl$_=H zozx{?k4(S^CE#bc*}H!ESE$BX;8_L zo)vds7r>4HfEI|nn0o>!I@fayYLj0kF#zi7+xY%Yrwbms`Jd1bY=Hl5``=Jp){qEk zx8G;%KHy*-@Wi`Mz|(I%z4N&>slb~K0i@bDLD~Fi^I`V1*}(8gs%n30aW*u3y65Td zIg%W==g2+b?<@a^Er8Ypoq-sLN+Q>MX)Xz18E{45-V6~mS_8gb{|yB2>t}m&7k`DO$OA2XP0LJC2vMN|O zXCV|97N>X3nhYS_wqM)P0LoHrGnCJ*nF|lCxf|M47r>qXqPZi0it}CL@U?x9L~v0> zuU-bS1pn^1`cEJVGJL(`>%qL7K^M}jMg08f)zfJL&)v`6J^Y*W5=pw?&lK$aApyfW ziKk4TIGr{fax9nq`_8t{o(}N)NhY(aXTxJ_?uB--&GbHuB)~E`v;ay^aepZFpaXQj z-x&B)ErJ6V9|9Mga1p%x-OC`#;$U9Rph}^u5cZ$AKR6f%-1Wj;@bQX|bA3qzlXSFs zDsZO*{zU5l2}yuRX;CR0xaWbi_u_zLApZM6KyO!;;qUBGwFf-$!+n?lS`!igM0sxO zWvxR`0A=U+mWi#>3-sb;&`p12NcnX+J#gR6|A24mzk%(Y+Xw4X23<(L{@!EvhPB() z!p)D}3~hn7TwhWjVaXV4cw*@A3S`cx{Vo{V0Yg^DT|{`9PApP}Wm9)a8{p}bL6R~^ zQf66qI-Ia*&LS95F(Nw;X|OcBUD-h01YAC|Y9>6h_Cb>i(1!$KTy6-U^d!&sQZJfj zA^>B;4+;F8c_~brG7~;n|G{8g#-PjmQS)J1)iikagJSHEgb0o_T2_@9d=ETaAK?|lBwoVDu{pmQP%T#N-?Bw$xxDN_7p zYIF6Ilj0v=W=zB;x?~WYGDuEL3V5C|@Y5v()5X|bV0^K%v=SE0UIcE38`6?&HOpno z0zet;tCo=z@)tKgMqL2A?*foADHjA#a*}5S3Zgkk)Bd{ekMtIRTdw^B1mrGQ)41~u z?L~&xS~7VF2&@1%K6)dptzA2$zfV9fL^B?DX?mnZ{|#;a`!8AoryYA1)&4u%03RgSw{*%<=<4o*U;pFR(A3^E zB)?01b^&X7A;w{i&zOO3SE;OopqHodyj8R_`X8;_ey&wMgk6JZfe0}lb{SkKd+`9f z^#nr3KRj^Wflyjln%)6}3HWrid_Rd~a`|LB*ii zjqG{1Tycis3`_^x>sGi{j~s+2+#3wz?=i1yr?|! zPMP@q*)r)`^h06Ywsmmh!#8GUXzT>SVU6#M3K;mTQeXhTT}z6|0!ZKrSo&N+ayEz~ zpRp9BX8|y_U&xglm9@w0jEA?ky#yUn3uxVctt7w-z;8Hb2ne9&f}%O$`pDNH0jp^x-Sx3Sx5+b;gM1Y47!!o^iSwb>$({9=%V^ao)97A4+A*Y!Izywex0dN^ROTe&Q^vDpZ ziGk!s_7;KN91^T25(7v`@N>bG1u&*!jP3S>Wr^0a;n!zM1a{l-G_GVEe6ZvHpj~QC zNC3=G5kT1~-nZpWbcojMrxAc&F|h^k+iQLg8v~o@c=9`gICuv&`#S<1aNUE~(XsRg z<#!|wTrq+A`&2Zb+kxDsMa4=KtQ)#GKfjW3p!E#TuH-oO%ci=n74Q+H?YC5);~phN zxqYQ5nvcm~niNE{q%N7LQawUwCV@EUb+^Id4jA_fW49nuEdklw{|5MF;Q_YtZ<} zYykk6-2e;twQ{zAZQ=^q4;c^lSnE?=Zw|&YsXDc2j3~w~k%Q<+u|t}QuYm^(3D}wc zb^}$A8A&V(j*f!pm(9n3;hX^WwNxuh)2}CFzI66d@VdN-_f2=%=KLA$o9S^0mPh+X z!zYbzVghKkO#)I9fe^px$L)hl02QbEo)+7rQ)#8tBL5~LKydZXuZJC>x}7HSf54;z z0DIza{e#!jUVYgXLFO>{1z=>x0B~gX=WSg9q?IAAh~2{bn70Hk^I-ks!6EH(SbSlz zpAU)`$X(KjVnCjYV#vi%-=49rj9^?h?-QLQ;Dtl~00e|8XrewPwGa-z^DrLI!Q$SK}iy_|=K?u?=hq`-syo z-BpfNOMn4u?<$d*>Tv8czP&0|mR1zET%Fr_*8qXiFN}7Scgyrg- zeCBN5srxF4Q3C;Ox@GASN z2K>}WKlS|$ZouU~y$YJeR%q;M9O%ytx|I3KsOkUb7yb*f!j9TR}@IT}fpA8Z1sSnmBm>O==p zZ6<+UVUg+%R8&{MPcQk!PNDsYpLqE6!{Nh~AHoxFJdxFNbNEpgN-nim9@uMtqbr~; zGdzU&O8!xgv*)UNCs<^n&Z6&C)Mr>>}Ek{)s+o9UKvb@K`au8k$Lyn>r`` zBlnrS50n*@4H$?SmqUj8B)AXq$++)2KEW6p z2YkFDYfXUH{_3~z`PR>eea`=s$|>{%oTRNkn`8G0n1c&tXCE`)YU&$ELFP-j4~1gp zlKO|b*XR1VWJAWB4X$v^cbC{CohwV=HiO;1{hCan3K4pzL=)H2{zTgia|h>uMN=1n z*XfOK%S5{;n`d|}rhU?MBPzTVuqN;s4FV=20A?@=pyEXDYN;E|&{BPo>H_G&zsZx~ z@S~4}@9MrA$j=PAkTl;VQzCHw)dGZWJx0NO%OE<$j6H1)|-0XIPzX&G2NWiiba=(C@7|3v3Z z_FL(mGn4bH>*d~Z_@V2+dNZK@3|RvKaDzkuBQNw%2yGWPfP@%5<4=y00IATYopBCy z@SV^V?&|N)42dkAx)i=x^##1}{tH<>fJTYL$*KI{(Y{W$6(6z z8^F=}z3)}ARX)Tv9$@1Z1g3@|R-K>@r>kj`EKjbU43jD+B|g@AT(WXG#XkMDDr}A^ zb(g}%p0CwRKqCQwZUx8=R#7LIpFY%PX=AISMDYnFkRC|W16(9+NL;&T-dF$j}sG&`N62zPR)I5MW3-*K=d(VbV zEt~rL6N4_K+bD_p-}|q7;fF0hWaXS3egj3U+cw&7jr5bbP|5$Z@u{w}bNwuGAvNa} zo*AhZ9{^E_3y?}{pC`aT*TgVH#*3Nz{VBA+HdPc>!2B`u&F4th4ahVm&|mAqvR>pW zf~~>t^h6*n=Yr8J06gafMp&6`0;svjzcf-Sz6V;;4^f<296+@Q&i(O4urat9qGB5U zTaIMbh*=N_1mMA!AI!@6Nd8L+N5Iea0l$d=$a7y8hA5yL0^-%`Jr!*hPtyp1S^(PEe|U2Hd~oi?KZgI+4&P6F`J6sj zG;t9f*rO|$9m~6jbAbc+J|;i1kO1poI)!R(S^a~7ougyKAWP+CzH(@Ucf~HW2V)s< zRBI|E!;Q5s=`|mi2uRx84)Dfpmi`nThX?kZurF;QG@UnH?QJE2RL5uHw%DAHj83(q z_Xh}waRSiY0E~XR&Ld&f+0EG{fXWjJHihD7{R78gJxfO9Xs1Xi`K8n$i!#LOF4JPvMu;`Xduqkx}u z5$9EhK?40HnMr^aN}iFz$=e?6d@0w@U^vN$GYX#yH%q56Hkw~s4pqgVdtoFqz*xy3 z5fRAobrKLcs~s=%u*XPnJm?cQ{?J{Ksd)n)=~8+V4K&_kkDRdlA-cT{qx!5x>6_`~94u9ogEA zSF-?IRl?2NAL+ay*Y`i1WCYgyk!I;s``&DE3!rOy7{b%V^Z{tyCPQ)}FifO~p#YwUPE@F%N*KS{9w zrp}%Tqvwo=)}Ge>)`>xt0#^Zy^^b+SpU+P0t&nwsn{k->r`!4ejuQ6Ybx(F3m+Si< zPEviE|LJJ6cxs|7HvO4$0Bwf{K`um@0Y8Pdw~Ym;+vkj&1Et>5tI@(BV4m;?`avD4+!i8Lc!l)2YxV& z7=-9@q)LRq;bHZ`swXhcHNY9?nG%6I6$scmEE$_z^QRMJ>`z&;?O?yZlXF6Mq)u-I zFlJRUstdqzl4He%t=S=fQRkIh9;%DpP5piHAjCNE2?=;S9ys*$V_;MB@J#-hT0Ip$ zTk#pJ-Zbz4yoV8>fK^h{jAKj034r$K3-eWu{de5gHhkMdhgfP(RW!fdP+_z(s-YCJ zEmAH)*O4JW*uzR{-fQJn@Fz0&E$cpq4@MV_hB9wia!qd~n{+@v7*>F~>|h-bj5c5k zpf#QZq&EX9E&%J~9N(T-mmLBaahm`2NQ?NRc;p}HS%8E9repuVWO@|@LV@hnm@Eky zC!Tyw^{+4db-?E$I=_td>Y88c>aL5%&^6o@Tkq@qORn#IxX8#;{m+IP#O1chJ^&^Q zAXdge<9aSMi!5RbsN{gH|xF`@VR`9 z6I%cdGw_-Cj937?huKv3OxMI*-}i74tofgf)W??F`S|96K^TbDV6*@DFzHUINPmED zT(`_UoQL-RDEE{ncM-sHu4LP(#z0`OLGCv1M8bC>Mao2k?+_dgeDh@EU6L0DZh5(1X!2(0-}R>5zlS&1a__pRFA z0(>{;hEcvz6!^xDS_wg#2%yQfrAsL3kV1-OlCuzrwbB@X)(WjBQjttRLI4iV@!duB zSs;M({MUqbh_`F)|C$ScRCmDR^TGiq9Rl0hh93bCQ^_s6;f>GV7}$yM)AHh)>D5#d z1F9Q!P{6aCmH8T=1sW-6mfM#0BlehiIm{Y*_ZXsc4$ zqx4_ZP1rsJfSfhLe%t=u{&}wNJJ&+MAFjjTCt~#b)pg@&!O_tYbf2Mu-x~Q&N8?*f zeOUqi2=54}a91R6EwEco_Pgm!*5ko)?ko@hv0|iH2Mq$6%zpqq4}fuT&eaz;BB`xaKEfr)`bPcHmdb zocLdjw+1R*m2r)qBpBESpy>kNjw}+LH_<-n1_CYXq)FSsIG{1G4#Fs?1pF*x0njpm zbFR6pao_|{ajdUi>XEB;(2Jl)|4BSxpQ9E-fE|7WKpvFXE5fJWW-u^`ouFR6pVGaAS5c7_7&DiqS)(yG7?_3H7|MTIx*h!`kiKU%ivk0PNG59aQ;3qAri7LJo zya2YKcHn%sos{`tq>tI{+HW)Rs z2wWac?Fq=ln*db>#W}M<05v*?uQ4fwpk_VAiXC$;gtC@b)Kf zr}t^E1i+``tII4DM?HPE8(RW|67HG0#{#G2`kr$sRm%!qh}4P8=t>`=WWd3Z*M=61O1XHoG#g90!ovdH_gmK>+k6lLY$+tN=yM zA_#N`puV*pwlr=5S(5erMvcG(;N}d`f1>$W-5OxMtn>Rzng&JyBQGkR8QL6KMG}8B zz{|2?1&|lQ@jUE((qd@s9)9`%Wv()s`kPb|fZkZ{i#fn0s-KjiNh?UL%!+x-a!lAa z0!DATcjq0#d!SNDz`uilADPp7H8GH8bfN@3mqp`EeMC}eQQ15Ri~v>6DyVcAO#O7g zp9=UW&Fyw(ej?L9k(B_@=RSFcr{n#RA?lmjn_xrz28hLCwnQljYLt3K+G|Sm=%RrgOR>6Jipf5Q4A1|0>B&kQDgZ zRNCuN%u1urZwO*>h0KSIPj)ZK^*!fGjNn(Ek4=)4`YdAv{Fg_QoBfF*`~)C~r=YJA zs^Y*0NUhHTDw|dL)``lN5d)4Ra1=#z{49d z0L|&Zd_finpytfNyCe1DXr86{HFnWZE}bl z6oy>p?O^Dhx8&}pYG`CfGtg1puVlX z&oFXHNd`+zr9uG4L?Gknz#PlD)?VElN%Zd0B7n-}g>Q(hvBN3w4Q_x&0+aWi0dnbJ zRt;P0*Xn|F8p`QJ$_acKfgp^N(_t?M|cmYEpi@?}aGw`I&g12(#8# zdhyVJ-&7fbzeoUnA_)LTfM3B?Km}hxms9%ciGV66*e@N|AyEt>89>!?VmXr0dy1XK zG>{kQ3BdNY?XbCNGlZg{0a+9^RfXWfE`V_i0KJ8Z3<}C+fdI;m_x&ITq^U~eAOEV> z0-#z1GnUSQh&z_fsfJV-k%6z*d~LqlRFlnqMO|*-B;DpWbyy+76)@j4J<~HEb~Dkz zuZdlNR9%lv!{EQh0)8S%Onw6Pa<&{Q`AP-&iTrRaxib;yjr*n2^4c+AIBzec`>}-V1Et{davpIEKAx-U1381nNoG#wb1=!FWh$lhF0s)jB;p;>p z$*(8>7+L@b5zIMa0dzyp;MKH#N-z+F4O=(#3-sE=$_x~Dc$8!x;|D7Y$2iNl8|xnJ zx+&N9JCss$a`8_?+amWMTmg`-_TzKo5DBsA5(KZq3c_PJL6S&1Cv#BBl|m&~X*Tr- zI=5N?=^m3}AL6_F1wRxDSQ|4g2!sPr-(C;fI<`^3BN-(I^#J1u)s+R<0#Jj~TJxX5 z4dC6JYu!}?Ab_$<%6#(rU>6w!KpXVK>ITd^aUpbuI)|w0r6=TjZ>xS-1>K?U)TVwC zLU2ZS@O3*Z`)IYCL~t0{F~T{v;lB3mxxVM2lDR(_yKmQ)(5Epm2EDy8kR*||3hB>H zozrOl3<-LFlK}ig3_xOK7E0Mts9-CAS4US)X|mgaR7$WtT?-%y2@wCifGeP2_w#<* z644%PrysxFj;jC(;OT%*$1TZ3>)T9Kl|F0%2zvkjcuRm%O$9eUFaoGNzv#eNZS(^Q zdaVI3z#Bd|kh`j#x$Vn;N|fS;(zGZg_~ zsj5&2fHwVU;5P&T1qb6;e{Ea;`vO#-=Q}05Renav0YK(H0JyAdbR`tdD9P&QvW z&C4+v)@)ppe!wrmRNU;QZh$=jU=yo^ySM3|T|dqBZ4ZSU_lLdQZJUEz$BeElFDmvx zG#Y`HR&4Ipw?R`=C-ej&Ac+#S26XWIAYLgg6`XuPr5OJsz$d^;mh6+142&8-(Xr`( z9+81wJc@=VfaeNnRKB6R0UEj*psuTqYI_~vR?8yMlq~{)zGb8tkQbEfR94La(A`uH z+PD0+J!yD8B>_~O?YlU#UAj**{dG4$jRlm9Du;q;#ks4M*1J*fsH>|Bwl!?a81PmT zwzxsf{-e3sucR+3)95ZW~one(lIHW#IEU0C6%z!q^IE>w+EI zT4Bf5c4%qtg`SaN2>v#TD+dr28h>7zmw*YiL{>DuLw3-1a8gF1<-{7$myx9$&*?hY z?5A!sp38O{GHe6$HYekR2qv|LU<1|i1n|_gO$2NssaV&oRzZLKe&aUiyPZ6Tkt6+m zzXhPV037pF?Qh!8NcK)s5~BHUNJjK<%{%+@ZVM2;Qwt|0ipv}kP&$MJUq=-PoVkWi9l-y z>}0?<9%r{L8K{k*Om%EFi6B(~FooGqW6t;=hwHb;?Eo*f!n6)RW&!}}3h)k?yZJXA zNv+e=LBP{|e~Z*hmy!S=BB2C}3s5$>65L~aLs%6pS8t=)$p9d$)~y0Wo9@7VVj-nv z;0o~I4hV+4cIA!G6k}o`6teHOJkxVXZf<^PW$~{jTsn1Z)!!!1C#FyK7{ex0#u2hKMKbzk zq*@@1<$T8GTx9qS^EIpIva=)s64W84ud*=2jr47ny2u!hvwkB{9q-Q^kh$3g-*wRN@0wSF40fr17n@L^VGWkg?6 zJR!(Y&R){^XwUsack{WEWe?3M<=UCnX|rmepuht%0l!E_q`}%BPhso=Y^!aB@4l^t z`Wwq4Q6va4t~Z|Pno34j2`W`=Kd@00Q2#V+d2hgfU@U;@B( zp{F|x+jlg<=FK~xv!feCH7UqAQnJ<1Ln|Zr*F>(6qjhG>pT6W6zXxFo$fvE%08t?=&?5 z9Pjxy)-LZ6_x&Mm0T2S1TMa_7knZpGPfW}S$-#^FX=!VLKrk?13!re53s}kUumMaj zS{TjEZ2Ei8@cj((Ajm;C%-9P$`OnHqi#WH7wDED+9l!(-3_)Fe3!WOGySrCO4AV?_ zfTUJ{zMDn)>e`>g#}zX^9xG=+w$=WMu$FVN`cMw0sAGIhH}x3C(z`?{O^tQ_F>datpNW9CruL36D%w*nW<)K+WyhoFnBjV zJY~OYrcRHvOHaC4_gshIpoj^DqtMHRpB)(cxB+81v-*2>A3crNO(uSf z(fqf5>dV*>&5-wxf#1bA*vpWQd%EGKj*LHgk&*yPj&$!3yU_^U_cx>h(`LX0Rls_< zepI70B#D`y5Wx7D#+F8N4l@33H-> z=m}y3&4>h}vqIgm39)E|6=k(;&?u>DTHozR!LR~+ycs(iK$;dJxSXzo+Ip{tWf`OX zM9SM@46*Szz&X(HO_BxGIm9h`)^I(XMh}c;Cg?-}amr!h-hiP#(l2%CTMgEMscy#s z&h`PnkpMUdu`II%aj=Eq;XT%YUKM$?spYm{zw_`@5+tFY zm6yC^AgKx9821lSr#uxIngFR;tY&r<&nW}GQ0PPW1G=JgfuA6mhm4*Y6{G#s{@Q?w z4ETO<03%wq>;4-8M-7Z?dLUdo)GsYBdC8WfCV=DIUrX)sJY`Edj(7h@YLyouLjX|eoyAb^Osc|;nxCPc-)6Duu0$`~NpnO=tvyKPoVfDOqV}OP*0AIqL)cRP@i@AP@dC5zEB{cyobH5O4l9y>; z1y-W}O1P5zix!FyDG(`0`sD>!fXQe8V%;!lR4Se*xHEsN=gZM zdjcS2q_hFKHekXEkOpUDI*-<@!xgjFwmlxaBiAo6FL~*&q$YrqJ&(j1q;pLKfGq$H zsRU3ULBua&3qa1C0Fr5CJJ6=HPdb24Y5^z&z+!+qwqZ-9iKUrmS{wiw37`<3XnQhr zR<2)SUh>jkNlgH!y6=wGNtc7x1Sl&L>6c7KTZ#EZ2o?2%05Sn~f5;)j=0Bqgz|j~6 zc3GP7R7+d{S(vhdMa=H~@O0hQRFTd@(dC*DrB*mck>QjMR$ML=ND4etG+&J|vP+UfN&+Z4(|vrbR(c84uK+P>CZIsu`B{)T1U(fI z5Jfp@Qy`W806rV>fef}A34mk-3afaK0)*VuIDp!hTkE93`IvvTKM^`1*DrE+70&{} z+84b~Eo98}VBU{_T_*&lFG0lT$~lOe=wKAffpmh!)?(MoJ8!%pB>@zl?VT0f9Q#iB z3J}ojKavRKz$P-!a`Z8Fjfg-jmOK|AZIBNJ_%k2{V&+o<5I7|cP>VNi$HtH9253V! z>2Uy#Y3q0)RF>-(xjRbHu`VWBFS#K;${5oBn7j1H2N2K-QQR7^3>StB%L&WWmLQ!J zv^nEss5`-ssDyyY;l<%i4k-x$ZUEN%p(BDs#8Vf5WY`h{pv`4G?Ml^C9f61}QUb8$ zfLwsTpTR-e$p-`9i7fzu=YRk}Xms%dBXY?dt-NE!#ThN{61p>8jsTyg0dsBZ(&l2K~Q23q#JPH z+1$q*QWF3c-{H;%xm&K%hF~THAmBR|h?$I+Nf0o^#S|@RV}E4~`hf%k`(p)Iwvi@4 zVgV2mAXR|>i~}i3Qj3s2CZIkXGhSy4*vHx)?L9ZwFLQSj-~LXI+$*btQQ%sse7gbB zgfK?wz>k#@t&&tX$vXCt!DK+X-M|>aSd3cE=-@|vh=Ea;^>W5Q1m^9gK|Hi$w7SPB zaR$13d;sm%#W)iwhhF@|NsNI%Fx9LB*u zkpAf|BAhZ(iF%9)BZ_rN2n9jlxxouSrbPgS%UsWj4bpO?TL9#n5X4LtsJR?-iO^FR zg_vlG1M~;<*$5O4&=SxBfrJ2PbKo{yzL}u|UCP?G0aRB&8+yV~=GvqAZyl=!>qX_o zEdHaNLaagdD3smAen$1uJuj<`^g*+q98$cNf@HWKwy7>KA7OofF!gy03iS;zCY3< zkpCY?hq@+KfD#0Z=LFCMqC)QO)(3m8%=Qb)i@o^vbCk*vtcO(PtdKT`+-`w1QOn|N zY_Uy{Xxj~=jxI#M1E>Z7nO?lmjpt-ImmoulfguDD1jQmytps|otdfQ57a&>vQH3DX zG%@lUC{7NBU?DP^{L~5nt)3xk-Djvz8ILcSEdopePiL0|(sKb$_Z%Z_js4r03&5!s z03iVx|LdvDNc-N)t_j&ug%c}xNhy3DS`7C?ur#5vSP z+xBR1S~g!!UhJj#csCc>E>lbb=xGKm>5 z3J8%p*Mf&ZhLQo(gZIINz;v^~^y2bfmRbn1hI&S^Ayfj;od^UPVJP6&JPYb^aE6u$ z4r!(X(zLz#!yl@PV8RMRUC^$7W+zUN76EwA_g2d5qm7__6hyTE2tb?;fihxubr`~` zhNO}X=!Y^MkV&fmc{do;#Jcfdk|Q|}OalY*daPB{)(+!9p=xjkaaF=$Eq@BUGYEA) zF9s=G;w%-r5cwV*B>)zKS|CANfyZ+mN!2oh_KBgWB;x8StJow*G72Uc#rbDcjjQDh zssy2wse_WTs#+&lr+fA?)M_9W1k+3Bh$YrUSVS=07V zaOR-Z{JcQfGA|R_5*rWdXuWNsD0Mu^q+DFF~(x9Ih$MZ0Y2q|!c93uE=ObRR+P$r`M zsuChc%239P?qb9(1eGL|tW)*USe3n425J3JkkMrzZown{CxY||;75*4D1gS(A;DzD zSaM+v>2fM2a;P8*J~1%I*}0QyAYL&x$Qxkm@M1?pD<^F0I6W>IPF z0MMHO=`oz*T=JF7*-d{8{&Ucgu$xNZVXhLXRW1hw{8Y&b95(;m0&+WeBs&2@hsRJv zjv+z-N<1$k81xn#`yeR7n6)f}s6l^>S?sfU*{5 zXe^11;^in_#&eboTPZ5Of-=meN)T+^f>b@WwNCCyc&T8(3 z%;+S+f?5vR*ySookn@R{IwBa;*vcdmBjGLBb0Ks3GfJR>+SW0wd_)XFQI@G&VT=(3 z9?CpGm^K0UPIBHa)=L+upJ$+U2=R?Q4kZvM3Nmz+h9E=&fk;lR?Xwvq97u2wKp)UO z4t`~c>_VCY2?2NnCmke&S&iMjc8SIU^!_6Tzl?H0G5f3LKXu$<@@(C9#I6^uvy=yj-0 zy-p5VoS1-I2HjOqhSAep2;HS1?u0VLo*I~BH8R1Pl#^LHCmrxeH~d&khDZcc046wD z8K(m23KiGGt_L!+0@AktPII3oZH+xe`vj15U>Rs%02j6ZJlOXl<$;`n znN(Uo+m=8EE`XiZ*B*(s$g5U>7ZU&>I_N+keh-SJgS27Cn0QkSIj@6hYjO9Cg1aH< zx7qWOzLYNav60&7Y+Uz9mOX_Wi~VBk`y;nYKu&=}QmKr3_ZQ`eh|Pc69Hr;-n6y1P z-eL`a$r?~f)NdPE*3BdkcP?ZLF{tYbA*hK;>NZB%q68X|W+lX946LjY0VNGOI1O^L zJaI!&6kDHSrwlQX1~|3PpCHW=?Rs#K2mr1Cx9c0e3u3_2K);A+cVIWR06a7fz(IFu z7<#w}3BD-Y)L#M^f>we=;I~^R$w0&f@L>`l@ebk!ggR9#0L7a<8NH(r{^N&xn(ykl zd{9xb8%e=|uBmdjTm(v}g#bq8dD8SJAg^1|{?Yv^WRz-LZYbW1;qOXsI3D$3UZZ&V;gR2XdMcG z?8;Jdtg9qiC(qJAi65^-+Wj3^>w7&8a5`B@tOf`zh+$xea!jIQIB8!elr`HP6fJJG z29U`bFvbC_E`r{zAf7~+CJAWekc1pS-$(lZGI0Sg%1E%?>vWQ&G$aQRiUdW7VoO_M z^gID2(TLbac;0<~B<)XyWkdj;;~kGkP4c-~*I*KebYM5Y>vGcOKr%Q;XL+yU2FUWj z2w;#p4=I<*3LB^c;)II&xRpZr>E1$0OdrRl-4@?zDGHtNTE;jN}W_Z&Xx z2-$_D{B$oD+8A4m>l^7Rqj=jaBMVB_AM&_)85^G{atJp61*-jJCH4pE%og-k7r;sa za)P)3GLe8GMqmPQ9PDx*_nLUI)4S~j7< z0_Yhm0w_4uacp#({IWheFe06oI2r@+VJm>#M_@!R^oUV%fq(`Q2+Vdoz!v;{!EU=w zTLc(zV=KUe3Bc>XR2u|{eUG3w5(CMU`=EaZl0F}{7~RouNATJ~#>p-#{w1yjQjc7w zr}E&M$FiL4bn&RbEy#kvB54X%j8jAu#@b(!XeyclDIM5aYXF6r)+dm*z5z0kfO3po zD}jLoR9cWNF$1%~t$gunG z(ZL}AxDW*ATD}K69}cZw0O=Iu#@gTKanZK&?y?AU^I^cISiCtfT>==aAYmrp*IEWF z>m)eClO{m{v$5cyaRGU|4AFWS!lKghp%I?`ZFeOEB(bH;nGLsgJu`?n*(Ig)I8Sw? zPTU6|4jD|uGRgMCroZfQaWc3O)&4<=w)@LkrY>lG0CgfTn(veZWW#zQmq50X0Dv7S z!~=ykpif2y$e{WA1Qc0i;2ngmPDI>K6hSE3CZkY{Cfq4|6SH4S87B44$w=LQ9i$il z5$BJD?@*^aOZz%IxkwTqE5HQc!kRJc6QQGkGzVhM2y%J^(BC*fntp#e;5Re?*pq=C z3*ZSOV=F+Q?Yt7P0QY|=Hd%Ywa(2J^n>tqxB3^bWDLvi8M>k2w z;pfRJP2dc|`bFY+7P*`bxxgbJo?}pKPg(A*lH@QZ0IdFr<7oi40pyC=FB_}@q^*OE z_E*8K^%GRAh14VvH~izkmy^T;l9q9b)rkt6E=1Dq#cqT`9W>5Cutg&OS}#L=9(*7w zX7ZdfCII*G!r!Du`BI$#K*V|64je2ZNV1#>_^rU#N{mFn zb4n+uLd?i6JSWY9(JdnMM%7jU&HmRSx|#?~qu+~WuDiXvZ4mIXOG(Aqg=}O?^cbx1 z3b3M+l~E`eM2s$n0|Ub2kX$Yn$wf$x?2ic`MwvK1mbZ3UHj`q zVRZ>K68Qh^eF?N>Sy|qHraRv^zZ$w50vHFD#yBi97>DRGPD=yQ4KxZE1O+uwmS%|( z5l8}}E6dPAw}MkhRH8zHi33TDl0=M)s4EKThOVw2YOYsrzVp3j@16hO!#R7Od(Iu+ zdsVNh>+M>n&OPT2?+)kt{_h|5zipLZCcHYN;N0ihddO7;9BgIaK2D3t(DOw-EQy6m zh5B!x^=G2j8j`w}t8jSQ`a?3^*dqd%t3&nN1Wxo6(Cm(^0g~~pP6opi>LxNhR}BjRJoWBkLC<_&c?js{R=91WzTq z0VX-Bi5hTS0{Ix51Pm!~=QuY*AguFaBw(fo=D7l51~Sl90w79$D4Hn$7b<0{y%EE! zTy*<=7@GNrsqe3*J4e7fkBn}v0-zp&rH=(|7(!Kjg(?m}fxtyn0j0=?*2)m}%IF5f zGo}NNiU_RRhX%iwemVBB%(futDJwv+fCef7S|5R(W6*1lU@&4bKdTEzlewRszFNGd z_u(r)z4yQ^z|tKzR$jN_i}T%=vL37(Ni9=;r~txJ$m`XJ*Xt3FkPPB47QB1Uh*RKi z$e95+vt+skvsMME_2utX($9%x+b|@(GL;FJ0Qw$`&NG=680h){;K?6J z-2u8J7rmdl`mVhnyP06R)5hxSRz3c7@0F~}&w!AYUv}-HYQHE5SQV{)vtFWBZA^R? z@ZJk!-Wd%k@W;sfn_?dgP;LRzxCBmYAVUhuRdBNgMhTe5*(5Ms3Al9vyujDzd1Qc> ziwKbd>ZOucDpz<3-Oj-cA=9*??IHU=H~|4u179j|%+eOOwl;<5olBTP#tTu!;u^ zF2&G65|H%)x=E_41P6-<@c)MQk;|3c2jJ~6bIRt~I!^y!#Tz~9znXXWa|wuYZoCjE z`#nar{?$r}H_`G}$`Kdqf{p$*6YbH64`TBB<+sc&;2UesEPtKZv4JcpfT|hDQwj#` z388=+6UYVztsbO_`p8;*K0yV@J(UI{o=EzO#d2Am>tAHh?)Jry>s2^y=}$Go0kGcB zkNWd|_Xi??+H2sR(G$T17*Sh8Q0YKKN3B|drAAd&2X>Z5u-)iDXIPL8IEdVz_E=EX z{_x` z-nwh61@HU*n%6xKui-8J0+HHACWC&V$EehIp&l`GF&Wf7PJVwIVLb^DLi?`l-VCH4m1gZn`D%OEi0_sRp`=jBSk zDB|C!mV_61jDMvNt!-mWwDF|K)nw7SGd^U?uowaa3oCn&)(3O_^s}o{y&Wa6F~W; z(GT#;{2>)~Q5Q7Lnrqg}u#75znriOe*F#m@gB}~HHd;qb00j~M!t&lZ!SAK{K<7BC z0>~Yx21o+s5)wgKPLdj-Wb5uC3G}If2vb)Hx7VPs7O(WYKCFm0TzuQ^2aXb8xAR#0 z_QvNkHN8BN)>(rJzfO*%%1fmXeSX|(6@g^H_?L0sT^aID925AZ_=gmzwgSkI!Z-oO0CyxYdq7Wh_7Cz<%xb6T={-v3J==)d261o6nJ3Hq`qSZ(F z&vd3k)%;s7fZ)CN$NLBQ9S%$Y@SUjip9;3oyrO{w?j%`%I*z?B0N%S# z2L0GT#{3fhJl4QxIyz?pdAfD2Fv@^|r3@^oPq@^NO)RxKR@K5>ry^|QTo>4_xYCiMioC**?>wZl5v2gMj2QjVDouh*z5OXtFYW);IxSU6attO@y~Sw z4g-G2#mEv1P1{t>Lr4kGq@jR&FucSi3H183Zh}zFQq;v|N`=9*eg;t!|I06pUiQq} zJJ$~L+uV-h^y?a@;*0#PFobpOV<*y``ryd6-j#r(5n;7jiH9MA{|iC%Psgl195TFy z=n0Ig;vS~ylxYy_q8~RNAd~_~EVPLQi1c>i5@bj~6NwNu31nOYLjufJ0y!jLElrXD zKkE+2Lef$Y@@A<5tJNx}b+>vKVzIZ=6TJ~t)d=JFb5Jt@l>(@H+r4*>4pdumC;}+I zJoty~qWEnS2$cQ{NnvyYRu^m1D(;>cz;@J;GX&=<4W2RY?;RTa+2<95KUEWU>99R* zST=8fS`^C6K%Gbc?}#rkXz!vD=u?Uie|e_sM1}Qt>@PMzm!Jk8jF+n4cln1eABfp+ zw{iLv&2Nb}`0I854JG;2f*x|MsUY%MovQrm5vx{9+()0^|5Bg#76-gN9I+Al{3QKF zlJA$6T=u52q&m~DZIgge23!N$C;?`HlN&;@+yV2P#2v^K4{=+4fCj#mF0>T~fJ-pO z32*{{f$(VNA78H2_+q&NywCamlOwU;?a2(;)G3KbfXaob zlMr9%y z2k?A=q%p4U9E-=kPg8r*>W6%xUSics$Z3UL|8IG$QyH-?$$pvZV=+&Cc3T0&Di~<| z_e9b&17r)hX_g=*0UbAx7CO#J6Y{+0Td@b*HLxwe6%R;)g2wI02!GWxDDncT{Nt;Y zs;Gn|(Z4nlyH}9_QT}TOk|(~uuSmzM!cPA^@!+7p&!GvR^kV;)`3Afu%?5ZfD!$yT z!O~(y0%q&^UDz3Qp+8HbkQq~e2LZpEA($2X`LFA`4esLuxhW+;*#Qa+$`zD0Pzh{| zq&q;p6Ju4trh}-i7EtR{s6e5J#HMJnw>e2EZnumjo9x0Z5U=2dtU|;RXnuV4+O`RP9*x(S5E|`AVfC z&$T`?5_>I*{*P2eNgDXmMBwqkFT__5^E(}$0A5-80{&F|Ni(mCUXUyx6$Py=)u395 zptC%L&4muM29y$2J#Ve17U(YtZAAx~5 ztwE!}r7m_(DL#+ddC6v;X!*+#tJh1SQVKaNc?`Ztur>^NFCOusn%_fB*ez)o;$!Z?tmcy+lsS1RbVOxtqg;CU7<+}GK7#$SQ4tKXsA+u ze6?B=jVR)S8?o5AFyIvZ9|_go9It(4W_=w4KxhpfVcUoK%??cfG@@_tKOqIX>i~pl&dza+AoW#%9)>HM>m-+oDL~B=xc)e0)B>ltC=iXUQ@Xr&x#R&XE zwEQyB&!n|iQaaX_I+ggT<&IsyJ-N-2I6-QunI+emn;sN8n~+-n93^1a2(a|Eo%A5n zF&-wy;{izq!n`hZ0Y>8>mdiCx!9QvW+WO3p@9y>lsvs^`H}bW5@(cl>xu}UN!-v>h zv;VT=NC+T&N%#}uI)8f-3iF_q!<7`j_AlE47^!7h%B6@0HJ|%01Tk2ODcHyRDEnj1C{CJKeOJ!QV@m-DW?5dAoEN5b ztpz$o0_Js#NPvs9YS07*jS`5#E*nlsAe$cK`n{!@gv2ed;{l2o$oe;;l2}9Qzfh`( z;ZDrApXl?wUSCdhl8-YHf8zoK5D(wSo;mFAcq9Y>4?ro{_O8RgTQac#=>wzur(odn zQdO>Ga^nSE*zV`3fEkHkn)EMp1Lgt0eR~G*+wMZqYtf#v12loC8kJ;RK)D0~Fmeg5 zkD%M3%E2KFkO)R*3JMtsu4fYJITwat)pRfcsvV)H_8~mRtKtJ9;J@|EJ9eKulHXR3 z=ltkuU35lY1s(sTyv@HEFYCJTV}+i)145)g;4-x*CBN@`yc`9xgAakfRxNR=@eiKs zb9e#p4qoQn5la3zriNZjclEIXetFVA&G8F4Sr&{NVB~eIffkE2Rj7l44k4r@kj^Mf zq`K|KSb;#6k^jsh1Um)k%u%pn07hw`?~j5Gtv~tx>y;Xh{DAL&W+1jV(fW^u9KR16 z{M`8eqU_xmy*EB^^xur5ApjiV{o%ht74XA`0O+zUg@K$Lw7y)Gt;6@%`>;{(LTix8 z2+SJz%UI?VWa`#Det%w7pQ|qB1OF`X2$>;}%Z)`y0Fj(ZTnkmv&~O{o0F@8-htMA} zxd!1#&nT3}UoJ!>%ol-A{E$NC=O5k@y5E%Kzh);V)5HTolaf`kp`V z_+Z4=L-x!M?TY99_;MMqs-_sSH81u~qfNdCue|%b816#{^toaHpN~J-3)C!U6Xa4L zPa@-7N4DifZ-9?-pGtbk>Lcjuiq`Coq)+NZ+3^2=jGfN>P?tm2-G{r*6`$!atTO(i! zg&d_|TYN}^j`s6a*)u+<9E5zaTHz@FIh6pn&JX$4wJxRpREI;$>KpJw33f&gvnxjd z+oK}@9KpBwkH8K1-lW`>dg%E9ETS85YNakS0(+iVQiGjbPmHv}} z>LpLi5BSXl{(|77c@4xrAXuQ{M>1gAKr)~h0mV*42Z>-)H5ifo1qMU}OwB2XlaR8G zfm>vt0WOjSuL11rjIaqKsYbNViv;+>A_h~#rjOMlxTXoYd<9xFv}7TIA5|X$K0@G! zl-9%Jkol3v!?Wn5+~@ILIO4t0P|$>)k&N?k8~Aq0EgOJ~(_mYo1}svr1B4<@{BSoQ zXp=ymJ1~|aOw`DDP*4W|6U%QLH$x~%AyJ+yK=*}6l+^KewN~fLl`z_vbQ|n)5j}G1g?6xBScm*s6*St%p0&2$C$lB&g3EhA?tSl)Na2-{^R<8qn zt{s6X0l=xinwAxq8uS}~e9_;S75roGC+9u*pwfj@C{&g$$3qz)q)dS%g06txW(>X7 z2>L_7(|(NeVFXw&O<*AN;#H1b`!Wk^d{OE&h?Q zEOO3#6i64~G^v0xs(`aSxK`=F{;)6oTsa4_AOJW|;BOwke=OqfyvF$J9u)kAO2o51 zu1puIAR$euu7;uPGDI^BB@s}!A&L>~DgvNDA;k!WLJtd?ROdl6AU#2|KjrdVQ7Ebe`X~^T-!H8MJh%rbX&HErjnLZ1 zvU$gl$9fts{b!ZTCcd*{Ar1Jl)qi$PfSW1MB%p(Z+))MNB#>Bp;mUlgW^iVgp~R0KdvVIeZ8XmHNA> z1ON}hY5%(S4C?!`xu7TlP78;uuhw8~p$@E!D&YA_1$1LIM?g$S``MP-2JkfLe^9?a zO9u^r5F8s?v|?d2&}|7J~pEc+?M3ptJ|F`cXvl9|93X zo`}|Qe~-^c6}3o5e}sFq_A$OO^7H9k=^j1Y1<%;A5Kf9NA%Zw#v9ly#5reR0eU=26 zPUXd}?=I{>A-9OdjyV`LlFENOHjtMI$Ycd*x^pE8*-E7*)=~bG>$LOf9^csL2=e_U zNow$WRsoPe>(3rx=Z+GtM^6BB!Mxc2px71SfU65_*z5NJ z1rH?MgJ%f*6&L(Wmi~n?fP$c3-s8-}3N8OcWdemN!oHuHjF2KAu$BB!RuIzKi{u*6 zx&%ZJl#yop9EL4a0&OPe7mTDT;Ia=R#R^Cn&?33Cajq*4HTb!nl_;wWJ-sTe-kZ;a ze?FPuL>ZmPY(z%Xt8W3{<03wG(HEj2!~lgoN_+ypT%rr#hYs-BEw|Eofei4S+;}4Y z4L~88x~q$Wk|=)?7_=<9O#-n6+H6d~b^($p#fcA}wfcsXrWXm>Rfu*FP!b2F`W8w0 zBlw%867O!ueB)f3?~w1WtiSa2y-WbmFN;4Pz6XZ4JpsV0;JN-K?+N_4k#X_qBBCAv zlo2?!(f~j7VB-aCxDj`uH5#Zj1g50@j#m0l3i^%9{ah6=0sL+}VKVq95rOBa2Be`E z%7!Zh#HuC)YDrG3710`vyo+e)pb}`IThK)kkVGJ)Dv%S8Gzsv;3so+FZ$7i0zd+m~ zm#Nm^r)owDRuUP63n2te4f=)$v_Lw_dKfUdMk3xG$)**tGV~^=XBOYE0Fk!sDo_Af zpE(Oglef2W|3)2X7r>7AyY4_53`}3cw%|;-&k3v@JHaJG|W=$f`g2noi9>?nBsOkBG;P8mc#k0O*BZ zbVh(K;Du%d&aO6OeZZg|!_|A+u#K(&6$de^U%gqRp3$Rs%1M70~1&N+l8rkV=pi8gB=lvg882L`EH=aEtqR730R!)P*q;}q&AWw0g-gTv7C)e8LZ_a zyTl+eBw&hwthoSIU{3+o1OjvN{kCf`<_yQ%?vn2Le6V}l`Y6C5W?Su;cq3a z|CxH7*Q2s%T_5nPPqg?>x66kyQ_h>01pZWlm#lwPd}8zv9QoAnn??Yn0=&!Kr}68o zCUpVSI;#@NUIAy21j?llcJAxKwFq5-AuV{oR6y{s*58_xlf8c)zkf^x6sd>IxvAjK zD`Lt8e|npSwAQ}*2FOCo&cvSTP8`YGfo#PVN!hNZB`fRg%g3vw%RTAbC#ok6m1{>e zN$$($C9=wfD-}U4DPpcN5KK={<+?&q=J88^ph5%I+3&{E-=+D$^e5F=n zd?@&}Pqp~QZijaUL#|uM3UH(Uv;q)W|G&B!Fui#MKo{)&{=3AMc#~Zh5QaW9t7SN| z){wIW8CsX?pVfkmeg``7P&Ey4z>)%F7VCc$(m#(RvVp$5-2VLFF9v&I0MU9+pozfK z08a?QQ*{Oed=*%PggDf5Me>JCEw7oI%5+MA8$tk;VUR7|wCQs)3Fh;Oma_%>Oiunfp!J_#@RKY3Cs_Qv z=TCG2rhtD8#1pN)=e$-nreLQ>lLz`Dx$XHvKSzC^X*SROR;oO_9KeC_E?Ku*=+MxuTS$JxMTe_0ib~E@KfS{!rOCxoFf`H zp8)8Oyx99au`j+U$vf+SAaxHui>?5vfk8EfYtL!JCItkkf1q?OkI?$(fOcH^&!7Sd zfIO9UEp zxoW^JssXpopJl*kNI-Q8a{c;j9KZs;UDzXXp6A33>`6mTsc`0Xk`yM9fk!$2Fyd<@ z{TmCc8bo~iQkP$TW}k0&lC+20_7ioweL zX99!H1R~*pcb0g78)UT9g6S*B#Dst#etznA$d+W(zsYEwzg}y^FFv*_Q2H|~@MjZ% zneTr^JPe<>+0eW-1VH1Z@K)G{wV)m<` zKn2*O;3bm8Rt8=wP*UKhK|)OgCQz7(rYGHZGM3pU0hS>F9p%@+P22#b612+^XQ~A= z^8#E&kexm(|EA?8Sin!}|D(WXwW!2T*Bk6qwJwS6%A@=I^5#C<@AlPXC?)+_0)7?z zi(v^q3O@-4ZuU9rxOD_TIQ~}n4D{i%%_$QQTxyal(1cZV3E~Qe8_(&$b#w*Vw4exA zog`l+$L;ZNk$~y($BLAI>(l4C0(R^`pG%vG zIMb5F_}=O%m=H*!8mI$OIgF^w4?EjvaBBB`<3g8TcxI1ncREV?3&-zIw-Ejc-h)`V z1>@Ec0F76`*T5G1f#f)Vq}q*KfmL(`?nPICmKg6Xj^O%A3pUXep!Eb~ZTk^g|1lXq zgTFtSJTi*Gd5v-PGEdsl2LD_{0PeZ$d40xJ1+!c*!g_&e3c&0$MBpX40rM7&4oHZ= zQ3E-XZJY=_fR_7ihaUstI70%wARdsm5lbrj+<>6%e1CK>hto2>vEt zELVAVf5@MHbcb#1IXQom@=GiK0@#J?X#GEQ^8$a)?|Cc!h%;USABGnGZ{7gD19AoG zRdfZA1kSE6Km}F7{@FfUjXJQS;{j$?>r4Qe%lhXN$u#Mo{9WsP6bBIJ0l$774PG1U zLa%^4Mg&C)z&fXHyZ*mCH|v#@U{X-Q-cX9I4Q|Y?*PxEnSN}sR3_<9jXoHm{o?=IL+QUq zeg2s0gOFH%mPmg(F2jGl*?~WM++ zs0Dk2o-92zSJt%1|1|6GJhwpl&!z&3{r*`BhqB5cPx9x2T}$`mc9HbA6@Yb4jr4Wq zzGyNkzy*E!$GpizVB7%kToM3V34l%)I@TYOF27DQ5DnNQE$9H)QUpS{v4o7vU_XDn zWY}^6tbkyWod`UiCit-RdR?5VHW;-;yZS_%UA(-95OuA%aiBd*RP-B^+-( z0nm65{x0mm$7FLO{VwbRp?lYxu(nu-xXj_kJ#DzA;{h=@Rf5wk=secHFz`1;`WI&p z#vgxJ@aGXhkt>i$dk6Fxxo<0gd9DKCatOc-3Lx)T5rGvPRJy=Ra|1G8p2h_dCEzsj zNTd8|Ko6|6plkgT1(6K|nkav4&HZONH36v_7*7i_-w${#3~8bdKT~h8S`_llOI>#1 z$vrNk{==c3mIdQ!KOe54-T&QNCH*s(!7+^c;mzm@yd!xdL;}=0yBxv#as%!=wIDMD zy@e56UuwffrwctQ71k|j)N_)s;M8E=Jl4NRLF7vRqM)C7to6M4z^_5=Yk>O&R^L9( z0sbTfFy{XkT@7PFKkEteC;&G-sCy2iYG8~6lrz9B5)c^|z@!LcD;Sr=19F0bwkr^) zWFTL7JS#A!2FCjg7!vS&k5___mi1z18cpc}w6=%rsZVe7>*)8l`UBbFSGfs}<)^KW z(*MKovvAAWx=;JbZ_RiS`a6C22g#e!sljHw1ZP&8aL?KTR4XC0PY>Z**n-V&ANoiF zssZg}>km^ccm|LYB>yDoU+iv7FC3Z#els;%6j^=8@3+s(vl-vtI%oarb6bD&bgS?u zJkg#Lb7ftCv2%$ca7Z8lw3$ulNPB0dpW{+Eu7Q3|K>7YK zWGm$gKhtQi<#Lq|dNF_cQ#8@|u66}Jir_!eHtsY3mdEi& zlkx4a0Q)i?aIbkcG9FM0V6jnwd)Jz98i|0q&g|bifa|OUThu@#9w{M}jRPE!^&fk! zF>9~CyczypZsAadG!6p(yqJKSApnOc#uR|<|NArkUa1FGTnVWENNVlD`1zI!u#fe3 z#S1?H(V*)S5-OR^LSaL-hL}fj>Gf2p%s1(0Dm~Ig-F1;a8Ew186EM z#RF)8(R)ud;S?1K;k~{-tYx|kwu@JvC9Qm)`yM2zkgx~-ja)1wz0^cHmL=EsHDQHLlvhILR5ju@L ztU3VG5Y#Lf!ZRdbj_n=-%F??T0IOZtSPVcOdot)3u!VBOPt}_IbiK|ZJihe!E`R#c z9@}blcyBb4K|h`HGuGdv{WjnXd=TD#G#!2qGLD}BXxtA!23>e(@}@l1GF$czSg5O@ z;8Gn#8DQ^B53coFuuTh%k`hRsfR7QtEY?4l3}C9-n7wewn+kp#)WWxJXNdry zKoLNC+s^=gEG97H7z+Y=P788xDiIU_KXY4tES@0&og477>+HFf-tG!)%X>9@&~56O zoiG$z1R};<11pG#m!}}`H%cK}uQnK^{3_@MY+P*fC(i*}9i-xKr}=)tlV%~{=KO~c z!M}xv;aJypygdkj#X*!jn|#P!`a+o$H9a*0EcT79sBe-Zp1O8=YEDW|ZNJ&H9KHwFQng2fq_Aw$zK%L%~0H04FfkXi$=S)D*5QANy zV@h{T7QiNhIFl7{3WV~@gfmlxt$0I-K7T#b;IB6rwf5S*(Pif!+h$jHTWr5OptTQJ z67*ArJ}kNI!(YJr;CGK3atHkRZ{m0vdkF{hsKThm zU~9Pt*E>i8)Krwo$zmFWIevLzRbM`cXSe>vF@PcxaxJ{bkU{DW^MEYoH5I=6hTH_=!ii_|=^@+w1kHw;$tf#6PwE zK0J=1|JQGIzQ1VPUIaknrSNsoga0g(BZ)gez36>t*2=P%;C-hS<Bi|PQz2q1f@=E;6= z0iGVaYG7^>;OYI^1%RYtkdL_nV~c`}rvsB#;mnfxCIFaMBCL-+7I>bhm!f#BQs<`| zO}0=fvHhI^JNKzgeg$R!UPnj#Q}EkeiHa?tDhGfw2x^NHVd(ajrV*NFj)cQ1^MK2*tkoOKE_rHDG3-AU@3y6UO>kK zRA#_c0coR9D;|*SGc*3QpKoUYGNrx{Q;9G7{PAkFD(ChumMg5aJCxwRytU7Ex(NP} zO!wshpSDf>ogP8yf6I$~CXL&Z0BF1n{t1%6L!huE->F$?nSoRp$mF0%I}0h9pRwR>T2SPH-Bbq(i!7+0 zUmPO%t6>1}OnqDAcS<61aD5L3SA)H8|`x)4(7tRw0BTf!S0*z8?=0pO3tn4H z0=;F$UH@Ms@;(c05kTVWkNf@Ou7En9{_=SWAnO)*E+6OzX<{&dH|Gk0Uu5Ygk$~+w z(3(ri!d@k&y5Fg&vprtvSG^=;I3tNk0G;cnB6Hz=pvse@OeXm zU#9vb`1jD~f8xzN?nq!iGP8Hx1 zLKgfv@q)Y{;g|w&(}T`^c^697=Lg%r2iM9&#{ahfpGyLk3K)A_4jJU!&rQnE4hUvu z2#%%n?Ae0mSijqt+ITON%hbw?QM#{=M6kWlW#=A4pMSeWvY+*a68y;mreoGWfZu>$ zfd78n@R>C33B7v2KDtKjp&gu}Z_uH`5??R7O z&eb)8(}3@QdP?wb`jp|U^|$1Fo(jkXz3l>wgFl-(Ol||@6G5Q@u&lp1Z(Drxf7aj6 z5J4{RGq=;Ao<8RU2fd7?2diEn-xbh%ZYC0CRDk94JM{r+7a?8j1G31+k4r(o7s{3R zH2VDOwMJYCL%wmT&CWf(#jfnM*lwps^ZN6^pOSzNA4c2%JI4*3Y2(fy02<#7HQ0iW z;}85r$vY>INfJ=24V_x9BMB_Q+F}j-k_Wxj5o`>J1bWb+R^w)!${FQ&GA7gl-FCd+>#J0sn$xdLx_)z?tPHlq(^yWe&T34>r2A2M8zS?JJC6X&cscwW{tRz$NdV;PxV1_NRu*b-@9F}aU1>t2 zTmsP)&}j@|gMx#-9`xcEoj?v|5N7Z$9q6rkflTp_ zTP$Sd^*t@QQvHoHP7a$M(1*t&*jk5GA7z+TJAu^{0q|A{6d?&b9qxEB`ZUA?NwCfIle+$`S!g zP61jE8&d%Gac=QW4hf`+z{>~wyehzbzU>AWC7>7XRC*%}d|sE5zs9L^?_#CQVdSx= z&uz1(F77b&_hqENN2~U7p?V1@@W&bO@8I^M=<|R2xM6V6apw~NjR)by_;dUkewv!? z63F=j6dXjCV0Ezu_mE4l+?2;&9iZEYwM#$^M`<2`NP=W@`TrB;e*yTXx&|seruwxEmm} z)yJ=fR_h5wGpbVaPD=5yMybR*djodv(M^6~V~<_mYx7ojzy>s<54dSBCg%!hzuy%6 zTtt)eCiunMv%+uI@$4V~8ZVbM0>6#hayB>^1RhjNk*pj%yV`(zR~BHUQG=k2bdG9Z zYh+x4p{gDPF_tcbLg3FJ|FgkAe?IGPK+SD%7pQ@;n1JtEem6A;`3k_?&ej2pS$uG$ z|3ng))%x>UNkDx7KcfV6OhF`Fh3MmY9*=xqRKrLtl`CwuS{Exw03|=<*Dkf#xyLuf za z`o1qG5;g0_C0K;h=n_!xL2nVD6AfVtmB3EF2i@4D3n5<(93=XmYx!pb|D?Sm{rx=f zTarJoMnGQ$HW}nyCT_(axJ1AUNWh-hlV8T0yB~`M%n}65xB)~AK1v?seo+o0u}~@@ z=xZEhzi32d&IXJ>b#7NYd4Y<1+G1B#_961QY98uYmOm}B|n$NJ?VrV`Xs3W z@S%lg$m-t_1wONmXCDEW@$K*i{Qqb06ISzFf=U@(f_g=&0V095W?e2)>eoFORT*pz zy0DFkpp7IjOq!1>NiehjKNaW&`x&i&zH4Av_kzkor$|U&1tLLs=BltO{Qwe6pF7FN zQUcbDy}7Lam{m7hfg4~y7J&}|o-cU;)O?itr7EmeYGnCEHHt)Uf5e|Yw<9iG-xb$( z+I*+o6`jF|jTqI4>e+m5VUHpKAN~9gUXT9%x#Pa9k9s_N34q3Tz~99Ge*-_|=jOQt zkq!`2itzMO1I{cpVWm-p2;Bm|iEe>Egd3y=$Sq)&TVNA`LjYR-&kFQhH$W4>0aA$e z9_$Q+MGSeafExtN872sr0luB{A0vSoEIdpL>doi|klYXO!$$aj#SdX2D8p*0Cf2HT zSSnRyz2B9m_r>|Aw#C(*eQ{&I%UivH7>r`B*ZDGFH+}ofG41~l%JBX03#b5|h2z;x z05o0+b^QPRK$;-q5+rH>0bj3`VSS+nXORR>FEpWn#1K^j5DVlM^rRZtAE_!r*)tk) ziioE8|9mEQV7dZGQ;Wr~k7B>@}UFbUj~eR!7y3S_@e zk{>^0}&<@h!Nxu_vzWw)tMCFM5L^1^T$G8rCZg zfxTXzN%{Hc>wf@#D*YCoedF0r0A{=jUWflbluZ?q8jy`gQ4Np_uvkMiuvmwCmKM-0 zsLAX>*z_T;ao8F3U~kxi_HZPp8Pj5=)*Lz~|341$3BWH@0F#tMae#4L`e(?%i5t*6 zPtQA7h8_4bdoeEaize?(B!E00K5svk4Nw-}$A2X}uJ{o&{4%UWRahxkVL7TnJ&a(` zW^m#Bo_OZs4qQR2zt!rAc8?U$!@U+&u(9NvsR7w&M7AL>!78N;Q4P?xRIfs%9743P;ss5KlQ5vY=4 zwd#~Kh|_^T3Dg11pc1CX1@b2q6;uxU z!LKC$`%q5&bCmqOo2LFHTxhnXVS8WK>f`?Y& z(HIfPFF~W;oG`!#ueheaD5WS;G@M~E!ANqtU&`U zKI;kCc)AT2FYF=k+i(Mck8&TnO77EwvZ^G=0Nxt||2aJOeemz#PmlW&y_MtcBLFjA zBLjpFYq5iB4Plu!|r7XsjQo+^UTPzDQ!=sw13 zfqO{=JP*XVRe~@^8oV%An6DsU3VGzsA;<;e5xAn0*J>?ceG`T2>PJC4tA#*Z&^$^*?dk7vgb^yPW{kcm*uu)%Fg&^?JxzEZY!4D2X7H-G^2zMPOnC z)kUf*^q|cLiVTnl+H3$luE>B?K}?DO6iC^G0-!Mhn9(hmIQeMWKH~~Fz|ThgbNBhy z9dcy8pG5L~c{|V+pHg{Mvi4pH!LC5RjQb{9dr|_!?HD!@_}4BI=-YB5;CK3H@ndQ6 zL5w#y&5}SLKj*t)3H}AVSI*Q3gXPK5#yz^7#ZrU2je|M^6+ z$iHuF0ufj#zo|a^WFi13XRm{KxDO@h11Jls+KVLc7rY8AqSRkO&@cKF*o(j)c+k2s zfE&-C#NX<|=6(mZ+FkAAqsv7-A9Y5iAYW%r(~Q7>k1X@!X!V~t?#u0V7$*df9dAVl zJqh0}8$1B4}$12Vo7>=#SwyL~cPn?;$A>puZZ1vb>n)6_64j7hwg-V5x?xpoAB6 zJ%nJ%2eHJV?F~^845X{j5vU6I5c-0tm;sUjLj=X14k9LMK;#4yr-OOE$6B``U$Re> z`&>orO|ITEfjq9#EhS{Pibnyx5-iXrL5~~mYbf!{_;|ht(A^lq_T?UI-smW6-y&;2 zkpBIEvMp%sWvllh;M>E8Kf^!$CiqqO!{ffBZpU##0MiB$K?rZeYwaK7(PG|1%-n!L z_9YBt3Xxoa#VY!-jhZ3@+|%5HYNS*_xS}Q>b-frmNCYiDlKT$syGR2)B!(f#J{1sy ziWiuy0s)sNptjV)Gy*8hM&y?g+jI170`LtQ<57vvyV{4{-5%_;da&KbJ#PDG?fZ$f=b#(?P5<3IcmlV7 zh8F)fkNXn3oyQ3Q%sL)G@RuYByb-sxyoZ>z0gNh$hzw+`0Lh?Mmaf5yb`fYz!xE~7 zQX_zP2epAfKtgCsLeT0!jF1ds=zA19AVP?>LJ)G#D1Knnf(7caf+R~xOm8$| zeI^a?Y?Pj?dLXow$NM6b^(DMr5upS-S$W#i)Jz5Zk~~KWz#k##H#u~#jbQ%@g1)7| zPQkqWZXa4b{LEzSsqC7mh`yM`+N*I1-~YSdGQ1D|hn&rKGA4`@0+@GDAyJHOfd~H- zkIoi7ESWLrtDs>?lR*PrgariuLai+8320AQ1u8i%qdFim2o@-AfZ%R2=-?ldBp_8m zENct~=qB`Ok7O{Qa~^Fdi)r)a+?S+&AkU3ZD#EQBkZ)MuR&yJK%u7np>zaF0j8m4@ zol0?0(u+v$s|ft6vGP!sdpeFhAH0qSVo$(`Ed3UOesh45UV(lO0l(Kpcc_nU&_G%G z5n1|qti2k4DkJ-s;ln4upM9JVz(L11;#Iy3--THF5j=X{q=ywBtU`0J`n;Q(|L*=#GZ;Hq#H}s z0>0tcSH(%P^O3J7GSLi4J*kN@9lrcWfTw1QK1z9fF9>q7@D!jc5(l{!)VzfH7SKk-05wlmB*xU+63Kuv3zT4#iU1S=D3`$;tNVnPrZ#=h zdwn}F1R(3B$elr*a&or)RR@G{Co%HJf-Wp z15_*{mA0cQJqdblQg<_hp2jB70vrM!f!}~D$9)Oh$>W3oj&i&lo`bl1C4Q@~#*6dw zrae4aPY_hMB3mKQMubo+hf*m}0TQ_gL;y8 z0=U`ZyV1_>z&8O%Rq!piFVFf^n-J8o$}spEz`mZsOm2j9C5Rw`lrVhlX83`AoFo%3 zd9IxDFXYM@N$tG!!+Cm)Se8JR!MT`#%`~{xW7K-w!U@_P0_oL8AWW$}|%=lXsFQWbmC z(p;ZZmRlqwA(G8{j=m+_69*Z8A+5Y8E&a2u_ulO~P6*)mh6gW!zkwJ1*W&H3#r;>~ znT12XV&(_+@*Yw+#FTpuVbSx(1>F7^w~s>rzmKqg>PTPxWXv>92;g=Z4xc%;dHN(M!2dBGeH{K1Ts-bKbuvx};PxF4KnVu$cTm?;F!6J7|G9Dx zaQe94+6?0=Q1A}mPw+keF}gkf8$JsA$Ni>G#`riPfIDqaNpc@P2lWDxf!Y)?d^X%V z#XuJQlB~DqxPh#@S9=cU;df+pz{$7+#t8vDdxi(!0?$FEK;_9zV7P(aJnOc*Edcf4 z5LC(|*SS-BI`)!%2ls8g-^Klt5Tn2T(Yw2m# -#include "cdpultwindow.h" - - -inline uint qHash(const PIString &t) { - return t.hash(); -} - - -int main(int argc, char *argv[]) { - QApplication a(argc, argv); -#if QT_VERSION >= 0x050000 - a.setAttribute(Qt::AA_UseHighDpiPixmaps, true); -#endif - //################################ - QHash h2; - QMap m2; - PIVector keys; - PIString prefix = "1234567890fgbjyfjyjbghjkbgkbgjgsfh jhfgj ghfjhjfjf"; - PITimeMeasurer tm; - double el = 0.; - for (int i=0; i<100000; ++i) keys << randomi(); - piCout << keys.size(); - - tm.reset(); - for (int i=0; i<100000; ++i) { - h2[keys[i]] = prefix; - } - el = tm.elapsed_m(); piCout << el << h2.capacity() << h2.size(); - - tm.reset(); - for (int i=0; i<100000; ++i) { - m2[keys[i]] = prefix; - } - el = tm.elapsed_m(); piCout << el; - piCout << "*********"; - - PIString _s; - tm.reset(); - for (int i=0; i<100000; ++i) { - _s = h2.value(keys[i]); - } - el = tm.elapsed_m(); piCout << el << h2.capacity(); - - tm.reset(); - for (int i=0; i<100000; ++i) { - _s = m2.value(keys[i]); - } - el = tm.elapsed_m(); piCout << el; - //################################ - CDPultWindow w; - w.show(); - if (a.arguments().size() > 1) - w.loadFile(a.arguments()[1]); - return a.exec(); -} diff --git a/test/qcd_utils/qcd_core.cpp b/test/qcd_utils/qcd_core.cpp deleted file mode 100644 index c77e70e..0000000 --- a/test/qcd_utils/qcd_core.cpp +++ /dev/null @@ -1,297 +0,0 @@ -#include "qcd_core.h" -#include "cdutils_k.h" -#include "cdutils_core.h" -#include "piqt.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace CDUtils; - - -int __QCore_Initializer__::count_(0); -QCDCore * __QCore_Initializer__::__instance__(0); - - -__QCore_Initializer__::__QCore_Initializer__() { - count_++; - if (count_ > 1) return; - __instance__ = new QCDCore(); -} - - -__QCore_Initializer__::~__QCore_Initializer__() { - count_--; - if (count_ > 0) return; - if (__instance__ != 0) { - delete __instance__; - __instance__ = 0; - } -} - - - - -QCDCore::QCDCore() { - setObjectName("QCDCore"); - setName("QCDCore"); - CONNECTU(&K, changedGlobal, this, K_ChangedGlobal); - updating = direct_on = false; -} - - -QCDCore::~QCDCore() { -} - - -void QCDCore::K_ChangedGlobal() { - QMetaObject::invokeMethod(this, "updateBindedWidgets", Qt::QueuedConnection); -} - - -void QCDCore::slotBool(bool v) { - QWidget * w = (QWidget*)sender(); - if (!w || updating) return; - QList > pathes = binded_widgets.values(w); - foreach (const PIDeque & path, pathes) - K[path].setValue(PIString::fromBool(v)); - K.calculate(); - emit updateViewRequest(); -} - - -void QCDCore::slotInt(int v) { - QWidget * w = (QWidget*)sender(); - if (!w || updating) return; - QList > pathes = binded_widgets.values(w); - foreach (const PIDeque & path, pathes) - K[path].setValue(PIString::fromNumber(v)); - finishEdit(pathes); -} - - -void QCDCore::slotDouble(double v) { - QWidget * w = (QWidget*)sender(); - if (!w || updating) return; - QList > pathes = binded_widgets.values(w); - foreach (const PIDeque & path, pathes) - K[path].setValue(PIString::fromNumber(v)); - finishEdit(pathes); -} - - -void QCDCore::slotText(QString v) { - QWidget * w = (QWidget*)sender(); - if (!w || updating) return; - QList > pathes = binded_widgets.values(w); - foreach (const PIDeque & path, pathes) - K[path].setValue(Q2PIString(v)); - finishEdit(pathes); -} - - -void QCDCore::slotVariant(QVariant v) { - QWidget * w = (QWidget*)sender(); - if (!w || updating) return; - QList > pathes = binded_widgets.values(w); - foreach (const PIDeque & path, pathes) - K[path].setVariantValue(Q2PIVariant(v)); - finishEdit(pathes); -} - - -void QCDCore::slotDestroyed(QObject * o) { - if (!o) return; - if (!binded_widgets.contains((QWidget*)o)) return; - binded_widgets.remove((QWidget*)o); -} - - -int QCDCore::bindWindow(QWidget * wnd) { - if (!wnd) return 0; - //K.root().makePath(); - return bindWidgets(wnd->findChildren()); -} - - -int QCDCore::bindWidgets(QList wl) { - int ret = 0; - foreach (QWidget * w, wl) - if (bindWidget(w)) ++ret; - return ret; -} - - -bool QCDCore::bindWidget(QWidget * w) { - if (!w) return false; - QString on = w->objectName(); - QString cn = w->metaObject()->className(); - if (cn == "CDView") { - bindView(w); - return false; - } - PIVector ak = K.root().children(); - piForeachC (CDType * k, ak) { - if (!on.endsWith(PI2QString(k->pathString().join("_")))) continue; - if (bindWidget(w, *k)) return true; - } - return false; -} - - -bool QCDCore::bindWidget(QWidget * w, const CDType & k) { - if (!w) return false; - //piCout << "bind..." << k.name() << k.path(); - QString cn = w->metaObject()->className(); - bool ok = false; - if (cn == "QCheckBox" || cn == "QGroupBox") { - connect(w, SIGNAL(toggled(bool)), this, SLOT(slotBool(bool)), Qt::UniqueConnection); - ok = true; - } - if (cn == "QSpinBox" || cn == "QSlider" || cn == "QScrollBar") { - connect(w, SIGNAL(valueChanged(int)), this, SLOT(slotInt(int)), Qt::UniqueConnection); - ok = true; - } - if (cn == "QDoubleSpinBox" || cn == "SpinSlider" || cn == "EvalSpinBox") { - connect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double)), Qt::UniqueConnection); - ok = true; - } - if (cn == "QLineEdit" || cn == "CLineEdit") { - connect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)), Qt::UniqueConnection); - ok = true; - } - if (cn == "QVariantEdit") { - connect(w, SIGNAL(valueChanged(QVariant)), this, SLOT(slotVariant(QVariant)), Qt::UniqueConnection); - ok = true; - } - if (cn == "CDView") { - bindView(w); - } - connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(slotDestroyed(QObject*)), Qt::UniqueConnection); - setWidgetValue(w, k); - if (!ok) return false; - //piCout << k.name() << k.path() << "ok"; - binded_widgets.insert(w, k.path()); - return true; -} - - -void QCDCore::updateBindedWidgets() { - QMapIterator > it(binded_widgets); - QWidgetList to_remove; - updating = true; - while (it.hasNext()) { - QWidget * w = it.next().key(); - if (!K.exists(it.value())) - to_remove << w; - else - setWidgetValue(w, K[it.value()]); - } - foreach (QWidget * w, to_remove) - unbindWidget(w); - updating = false; -} - - -void QCDCore::bindView(QWidget * v) { - CDView * w = qobject_cast(v); - if (!w) return; - connect(this, SIGNAL(updateViewRequest()), w, SLOT(refreshValues()), Qt::UniqueConnection); -} - - -void QCDCore::setWidgetValue(QWidget * w, const CDType & k) { - if (!w) return; - QString cn = w->metaObject()->className(); - if (cn == "QCheckBox") qobject_cast(w)->setChecked(k.toBool()); - if (cn == "QGroupBox") qobject_cast(w)->setChecked(k.toBool()); - if (cn == "QSpinBox") qobject_cast(w)->setValue(k.toInt()); - if (cn == "QSlider") qobject_cast(w)->setValue(k.toInt()); - if (cn == "QScrollBar") qobject_cast(w)->setValue(k.toInt()); - if (cn == "QDoubleSpinBox") qobject_cast(w)->setValue(k.toDouble()); - if (cn == "SpinSlider") qobject_cast(w)->setValue(k.toDouble()); - if (cn == "QLineEdit") qobject_cast(w)->setText(PI2QString(k.value())); - if (cn == "CLineEdit") qobject_cast(w)->setText(PI2QString(k.value())); - if (cn == "EvalSpinBox") qobject_cast(w)->setValue(k.toDouble()); - if (cn == "QVariantEdit") qobject_cast(w)->setValue(PI2QVariant(k.variantValue())); -} - - -void QCDCore::finishEdit(const QList > & pathes) { - K.calculate(); - if (direct_on) { - foreach (const PIDeque & path, pathes) - K.directChange(K[path]); - } - emit updateViewRequest(); -} - - -int QCDCore::unbindWindow(QWidget * wnd) { - if (!wnd) return 0; - return unbindWidgets(wnd->findChildren()); -} - - -int QCDCore::unbindWidgets(QList wl) { - int ret = 0; - foreach (QWidget * w, wl) - if (unbindWidget(w)) ++ret; - return ret; -} - - -bool QCDCore::unbindWidget(QWidget * w) { - if (!w) return false; - //qDebug() << "unbind" << w; - if (!binded_widgets.contains(w)) return false; - QString cn = w->metaObject()->className(); - if (cn == "QCheckBox" || cn == "QGroupBox") - disconnect(w, SIGNAL(toggled(bool)), this, SLOT(slotBool(bool))); - if (cn == "QSpinBox" || cn == "QSlider" || cn == "QScrollBar") - disconnect(w, SIGNAL(valueChanged(int)), this, SLOT(slotInt(int))); - if (cn == "QDoubleSpinBox" || cn == "SpinSlider" || cn == "EvalSpinBox") - disconnect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double))); - if (cn == "QLineEdit" || cn == "CLineEdit") - disconnect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString))); - if (cn == "QVariantEdit") - disconnect(w, SIGNAL(valueChanged(QVariant)), this, SLOT(slotVariant(QVariant))); - //qDebug() << "remove b" << binded_widgets.size(); - binded_widgets.remove(w); - //qDebug() << "remove a" << binded_widgets.size(); - return true; -} - - -void QCDCore::unbindAllWidgets() { - QMap > bwm = binded_widgets; - QMapIterator > it(bwm); - while (it.hasNext()) { - QWidget * w = it.next().key(); - unbindWidget(w); - } - binded_widgets.clear(); -} - - -void QCDCore::updateBindedWidget(const CDType & k_) { - QMapIterator > it(binded_widgets); - updating = true; - while (it.hasNext()) { - QWidget * w = it.next().key(); - const CDType & k(K[it.value()]); - if (k.path() != k_.path()) continue; - setWidgetValue(w, k); - } - updating = false; -} diff --git a/test/qcd_utils/qcd_core.h b/test/qcd_utils/qcd_core.h deleted file mode 100644 index 84d38bb..0000000 --- a/test/qcd_utils/qcd_core.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef QCD_CORE_H -#define QCD_CORE_H - -#include -#include -#include -#include "piobject.h" -#include "cdutils_types.h" - - -class QCDCore; - - -class __QCore_Initializer__ { -public: - __QCore_Initializer__(); - ~__QCore_Initializer__(); - static int count_; - static QCDCore * __instance__; -}; - - -class QCDCore: public QObject, public PIObject -{ - Q_OBJECT - PIOBJECT(QCDCore) - friend class __QCore_Initializer__; -public: - static QCDCore * instance() {return __QCore_Initializer__::__instance__;} - - int bindWindow(QWidget * wnd); - int bindWidgets(QList wl); - bool bindWidget(QWidget * w); - bool bindWidget(QWidget * w, const CDUtils::CDType & k); - - int unbindWindow(QWidget * wnd); - int unbindWidgets(QList wl); - bool unbindWidget(QWidget * w); - void unbindAllWidgets(); - - void updateBindedWidget(const CDUtils::CDType & k_); - void setDirectKEnabled(bool yes) {direct_on = yes;} - bool isDirectKEnabled() const {return direct_on;} - -private: - QCDCore(); - ~QCDCore(); - - void bindView(QWidget * v); - void setWidgetValue(QWidget * w, const CDUtils::CDType & k); - void finishEdit(const QList > & pathes); - EVENT_HANDLER(void, K_ChangedGlobal); - - QMultiMap > binded_widgets; - bool updating, direct_on; - -private slots: - void slotBool(bool v); - void slotInt(int v); - void slotDouble(double v); - void slotText(QString v); - void slotVariant(QVariant v); - void slotDestroyed(QObject * ); - -public slots: - void updateBindedWidgets(); - -signals: - void updateViewRequest(); - -}; - - -static __QCore_Initializer__ __QCore_initializer__; - - -#endif // QCD_CORE_H diff --git a/test/qcd_utils/qcd_graphic.cpp b/test/qcd_utils/qcd_graphic.cpp deleted file mode 100644 index 5583495..0000000 --- a/test/qcd_utils/qcd_graphic.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "qcd_graphic.h" -#include "ui_qcd_graphic.h" -#include "cdutils_core.h" -#include "cdutils_x.h" -#include "graphic.h" -#include "piqt.h" - -using namespace CDUtils; - - -CDGraphicWidget::CDGraphicWidget(QWidget * p): QWidget(p) { - ui = new Ui::CDGraphicWidget(); - ui->setupUi(this); - ui->graphic->setGraphicsCount(0); -} - - -Graphic * CDGraphicWidget::graphic() const { - return ui->graphic; -} - - -void CDGraphicWidget::setConfigVisible(bool on) { - ui->widgetConfig->setVisible(on); -} - - -bool CDGraphicWidget::isConfigVisible() const { - return ui->widgetConfig->isVisible(); -} diff --git a/test/qcd_utils/qcd_graphic.h b/test/qcd_utils/qcd_graphic.h deleted file mode 100644 index d082fea..0000000 --- a/test/qcd_utils/qcd_graphic.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef QCD_GRAPHIC_H -#define QCD_GRAPHIC_H - -#include -#include - -namespace CDUtils { - class CDType; - class CDSection; -} - -namespace Ui { - class CDGraphicWidget; -} - -class Graphic; - - -class CDGraphicWidget: public QWidget { - Q_OBJECT - friend class CDGraphics; - friend class GDockWidget; -public: - CDGraphicWidget(QWidget * p = 0); - - Graphic * graphic() const; - bool isConfigVisible() const; - -public slots: - void setConfigVisible(bool on); - -private: - Ui::CDGraphicWidget * ui; - -private slots: - -signals: - -}; - - -#endif // QCD_GRAPHIC_H diff --git a/test/qcd_utils/qcd_graphic.ui b/test/qcd_utils/qcd_graphic.ui deleted file mode 100644 index 511ed61..0000000 --- a/test/qcd_utils/qcd_graphic.ui +++ /dev/null @@ -1,169 +0,0 @@ - - - CDGraphicWidget - - - - 0 - 0 - 470 - 380 - - - - CD Pult - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Graphic::Autofit|Graphic::BorderInputs|Graphic::Clear|Graphic::Configure|Graphic::CursorAxis|Graphic::Fullscreen|Graphic::Legend|Graphic::OnlyExpandY|Graphic::Pause|Graphic::Save - - - false - - - false - - - 100.000000000000000 - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - History: - - - - - - - 100.000000000000000 - - - - - - - Qt::Horizontal - - - - 1 - 20 - - - - - - - - Visible: - - - - - - - -1.000000000000000 - - - - - - - Qt::Horizontal - - - - 1 - 20 - - - - - - - - - - - - Graphic - QFrame -

    98GuW*Qqsw(|wp_2* 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 diff --git a/test/qad/icons/touchslider.png b/test/qad/icons/touchslider.png deleted file mode 100644 index f0effc14419910c356cc0ca9839a78fc901553a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)V7?k<5TCB2J86V}z*D1SE?AS3=M%N=ML$MlpOaK@#JFGm8-eO?*oXOxDylkOtxIqyqZtdFM-uj`p&dJg^`RYG8$#Zg^=a=W@ob$l{vLyjB z-~fa@mTa4=3bt8*39tzm{9E8=>@3g$cqHItC=@b$KHp6re_&t$zu(^vv`IiA7K;H8 zi9`ql0>ol5UVq1n>V`@c6a^e&8jv?3lYw2&#qfH)1cN~g!vMhR^#T}wO)o)9Qr%Ep z3oaezX&@@5!DbH9lhb}65SRf6Tw*pT6nE;2fOEauh_Ju3T*v^1VGs-kXMlw$?ov2`s6>0$5EqW`rP=)gcP`k-$os?8NfkWu z<|k-Pchj*yL8^CKX}K(yM*oDHX7R{ow&*7Ye`fRUDDijuNFRvv?B37uwY^OEz#f)9 z`ZP!1+sT%Dwh>Kp-#-us~*O)xS9UL zU$A2BW}+Xx#REIKd1mdhmn1vy-T)fPrP96~_mjKShw(%wi(6J>6)Z0HM@XDM%UzFe zVBkoIm96c#7cLJm-@KSbBKH{hhD#g#s{CIZrQyI zMZRZcYdcl9H;^11!d>M`$v_H70CBr=PS0kyG(EH(p!%NG037*j6Qe)%;?$~GzP<>( z{_A<1S`{8$pAbM6$OGwey`sK;(cl>1xuXG1uLa=v*V|dchtxE$Abl-?WxsT#T*wH! zX;?t6+#TQ7(h~g<(DYigTkCF!J1P{cyaj~_fW0-kc7aTN-;HYjr8xok)4_ZSzucHAm##ARdpPYKJ9v?aH?nbtaFT~ p_MzS8{7*kcS#@n~eKnJs;7{C*F@Q{TfolK&002ovPDHLkV1hkvqO|}3 diff --git a/test/qad/icons/transform-move.png b/test/qad/icons/transform-move.png deleted file mode 100644 index b20fc4482967538ec7b1cfacd6c9af1884fb78d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24712 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 diff --git a/test/qad/icons/variable-add.png b/test/qad/icons/variable-add.png deleted file mode 100644 index 0a551b11fbdf2703f3f5b08b55bedb2224e7719b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipY> z4mkzrV(Kse00FH@L_t(I%k7cDOB7)k#(&?oA(SL4vL;ASSP*oOA_6bEq*74`a|qgq z{(w3pbnm(Z6$PG>2m&t!1!jj%3LWZVhak3sAsUvoX=kZ|3V@6w(^|2lQOu z_xHTd%LARNiZi}AQLC&}?D*nDjVcbnj*j4)IOP-N$K`#;`|ga+2~WK56TMyM-NWuX z(UHMCwb7yBk$$-*UOFk0Pr3+pm+Wf&%g0XR=eCWgl5d;f-oquEq#7wDcT2N`QGU(5aCQ869AEnNwmiNGLS9B z)Xvk4?LA4{tI*o;{OfBxRw%ljkL!KI51KrB`pSNCKeHZ1TVRuA$XF34n{c8GaS{Vi z2!3qf2TlAS;Nr}fxN+@*2&3?ya4S*2-z}b-Jo;A?#u#Kv@nU(ER;)0YK}w0ze=etK v3c$8CPFJp5r4&kOv{r3*-Ynf0{1-m~l12tL%ht0F00000NkvXXu0mjf=-Bo< diff --git a/test/qad/icons/variable-copy.png b/test/qad/icons/variable-copy.png deleted file mode 100644 index 42d91c3a35a7eb9be22ef3867f49864c28eaa7a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmV-70?7S|P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipY> z5ga4M=38d~00Fm2L_t(I%k7cBYZGA{#y{_Sm(x%O>klkg1UCmK^&b!^r6h5&E-Ee^ zvbYrN?kI>jC}fBZLdaMVO5F;I1+9XMi=d`z)W+Otded+*)XK`d0$_8;&WAD-vK z!}qJ$Mx|1zP%IWtXIZx4X|0`dxqJtB$4;tLDmVQgkWQx~tyW8X-59mzs0wbeisO6V$q|x+g z2kRW%zn8a-4|KwiYqOWIHYMsAR#zJ|n;%KjjDfLy`uvrj=?KfuUf>2ly0n9J+CjkV zOhEz6%-xVbWt*mq9vEZyo_!>VB{r5rM~<=dbOiwS?8Hg+_dIJYQP1$`@hf_LgH0__ z6k!reKkfrC7z_YVTfK4e;+z;`FeV{M%+Sor;$6jm@e3K&)pf`D6e9 diff --git a/test/qad/icons/variable-edit.png b/test/qad/icons/variable-edit.png deleted file mode 100644 index 420ace3aa5f71809727aec6784e854fcf61e08b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmV-70?7S|P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipY> z4+|tnxx^>{00Fm2L_t(I%k7dqXj5Srg`bExzw#tT5CkjNHv|{JGR$duq2X%v{tr@A5jooY(HtX>HmdiVPd^21a7U zFEW+6&eC#$dsjONQzIlDn4ZgGts(K{+Yiky=5%syu~EnKLn3Pti3w^I+P8FYXXqfG zw~eAs5^JRqmMoOY6iOA!?kdlwv-+X%k(%cr5+f4xczlBN;C*X-?*_dmy8ilth~Ni?7q6EH zLW9K8SmRf6yG0WsL}bUXk6002ovPDHLk FV1i@30X_f# diff --git a/test/qad/icons/variable-remove.png b/test/qad/icons/variable-remove.png deleted file mode 100644 index 0686e7cbffeedd6834722abfa1838540d09978d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipY> z4+J#QmdJwu00GQNL_t(I%k7a%Yg17ag}-}E@zGYRQF7B_vA)142DKA$htunL1I^AnJWP0kmlleLsrCD8p*xMal@*(0$a$8geAO`Ty z3+_BhimDoX-^a|)(K~dL-BSyUM>^=8Es*LAlbT)ZY-qmq@U@7D7-Pf_l-!Q*lCtZ{ zV9#dxG(0MUJ>61v9l0CdCk;bXN>i`Z(YA)QHO{1<%*{^79t%e_H0;Ms=qO>JY0RV1(p-e7cAeYZ`;nX4L#^rNPu~b~v zTv2-I-BACL1AjGPt;MfsMm|nZ2{g85@qHg{{%o#Rt1Me%-}wR2TBEhW7~OE@bMk@1 afAJF~(*N*@`tK?L0000V~SGG~Bu?qM@~ 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 diff --git a/test/qad/icons/view-preview.png b/test/qad/icons/view-preview.png deleted file mode 100644 index ac3cd37cf675a43b5126515a958ebda9ce8f1748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35511 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 diff --git a/test/qad/icons/z-down.png b/test/qad/icons/z-down.png deleted file mode 100644 index 6f72223e843bc5cfd6a68cd9e529013caf8fcadd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6659 zcmcIJhf~u{u)l-|0V9M6(qrf#y-Ft(sZs?Ik=_Lb1Zkm!A|O&l0R<@{iqZ*4hft(Q zM~d`blwJb@$>W>%FTA%mJ9~3;ySKNyb2q#D(okRX8Wl4Y007stwbYFP0CYJ80Z{Tw z^5|KC(>BMii{V%b5jC+hN(Ek+tKL#vv5O#ZSDKYe% z&=+rX!q$|v5gu?h={Fawd*X2XgGCAazjnDK00aQ=Lc5Mp88%kZ;d7zHtqiz~LP%Dp zB8iriXcm1q_i7jHmTcRE!R)k1t$^RFe+&CpLLcsTg^I^LwNe$B7i z^Q4F5303xn_N++|kFAN24Kfg2nR-Nwa;KnfYCGoyzlTevd_t$C*$+U3M~lctnjY#~}=!NT)k$5Vy?FQ%7ft^GZ00kIu ze(JLPoY?Z6d7P{ZE92%}xM4i@)}vV?8Nyd#pAbhn;-zZO=GB@ZWew=aF=*PtMQ8}2 z=E#B7=a%yckeu`YK8ZrF0qjyN?ZdEed!{Q3gpA0-slw5D0`hf2o_rajs9+Idxq;j2E(uNQu97S-|!KZaz$n9|n#Lh1ycmrP7#T#ph%J8uS|Y>U~v{7|jp%AzOk5 zpHN{@2Wv28^`D_JT{$O3BOd1s`+$t#%?{EbkUs7J>y7xe3`(+j^hvVSP$F^`llR@r zvX1w!7%@jQr1YKg9+0(7YGoJfbpr?0@`)-**| zUTN6pQHskp_c!^J9R@s%i{#+|8xwPVt?yU+uM8DU2g$YXzH&g#Du)3%pdwq^$XEgG z!&=E2Udl36TuwNTif!?0vzJN3y-nspk3;&1AE^(18lYmZC~Q+ewK`-ZN!22@$1Sp= zHZ5FiEmGxFXk(3g=%nqmN!1^Kf)e%y{2H!MC}N+HlKK_NSjsr4u>chOyRCqq;r33@ zzzvQZ7-i8IfqvlZXUCG7Qs6}4>%Ryf5|~tRwvre)4|B=X$Z1S_7=m>`sXxIfd*9qM zI${|NM$sjKVBjt^T_l2`;>}Q64|A_0Y)t$}A*PTA)}is0J;Hd}fW6eB-9e4b>doYl zSr!ckN)_wtXDsj1O(eQ2WS^(UN4pPH>TmNihOSsW)GnED<*R+H1qOrs<5a~Uq~b6ozWYXQye>CJ}Bt!C!-- z5s@KGsweM|@;XB2U2ix!DYev2p|*xTTjpMI_eBc+a4hRyEvzH)ttlTv9yWOcNUTej zfd_U}7sJIE6r%X;2boJZqsbo@%!@l8I!GL0+}x4#BpdvNB)0GKjgi$GZk@BX-KyG| z3VD0F$t`MRzx#=Me}&wUkomvTW&&#k0}nKk@KzdS(NQho6lLOp{R#@=fC^BIi?1xP zz8lSbvkgMYWqrj% zhr1(Brv`z5ehbB5Qa80kefz&G4A+?0Zn+j~OlJ^E6G;Jj;0B)9LtNB#EZinWU`y<` zcJfCI&+V~#glNK^bqTR!zWkU5ERzHcoWoUzrL-Nyae?~#&)vkknkfO$-7a{ZHrj%Z zZm!2=+t$=3i`XR*TGw~m9m$Nns;;umk55)i65c8|o7U;&-{u{5Y#*YIn&XC1S%xlF zk+PcN;GhLi!D>E|Hz$j=Qs~|u6-5JK<>ne_xfz>Qm|X&nd@@V}(AdQA-W-Qi^-h-N zD?|*`y_XUZ?b0nIV-An$36>=wdnm4qVJU1V-z;@x8<)!WHDQM1iiRQjHHi6qk56Ku z?zQ}ss0kV*-VotmHJ9)W%r8vO6JXyvc{l&h5aAH|&}k^u;p6>?=f(e)s$LEBejLbt z49oD{!n{P{11Qm()aRqV$7|`3Maq}o%iW$1D3)h<^uvuS__qS{P~ndm#dA7y-ZI|* z)5vbUp2rT_@T10)B^8TzgFj`iI7!1@O$qlBIh}LdC+NIAQ-)KQWV_d97@N!H(ki>Z zR_+66vh^h_7dh{@_LJCtS@mPg;QAHKbx83z&n*nvc)EGwS*?%0&OZ?Tf&x?-2@~^oq&G8W({zWfC$TM46>N+%Ehc*4 zK$!H6(WBA0`?_pa#f&a%eA3t39}!2^yba+_m@(&nu25PubWq9R>r#5`Z>h;qq-BLd zYUEKivo8?@VwH{_wKCh{l@ZgCDDb;z?(ghQ0cg8G5YeuEH;qT`YImBf049sjn|gHF zJVI&2lKW>5bV~z00HM|#kb^CKq)xfxS2`IUgfxMr6#ffq{s5ztI6PO`JQq{OHWRi0 z@^J%A<)d>y-DZ2Ds-Qm;FDpL&VUle9;3#oh6N)A?rA{<-i9Pv*My{%6#SrQ=O> z(UA1xj_j#*oXL~{RjKV!?@-HCHAo~yPP(@C`|h^D)Q3`t{0f$)eMo_^_28t_W=_?v z6%Drbkj?$hfKAaibz3+TuMh6{9ZWCoqK!7PbLR$WXD|*2RW4os?%tdR4V^~loo8=m3>d= zJD1)Hy<-;TELZ{XKEK;)oZWIA{^JQE^&(5x;wQIo+wwc!Fc)2KVV5iBnxEBS`8LW* zws{(D@3%%v2hFcQJd?;#@wu(oZ@!d>IKh%g-O?o$@We(69g7Lf;@e2M?=s(q#H-_9 zTPEq(**Yk|Wv~&MKb_3k_n_^ExfGtyQ?0m}%Y*tyg;mMP{F4(pJhfe27B>gv?CC?D zpC8a2dHsn#B8e)&(JJsj-RUDZljC$zo8WM;&&ho6Z205_>_D*K}=8z>Zy>kpGu}#SUP2Aykdct}Hbbp*%PoX%y?Dk)# zv0m&;&#Vi;PNnSWa~1@AF5|WCs{g%0kH6>g02UC(dD*F#8(SSh3TAC(He{jW5&=St z_JAaI7QmX7w)e@o^_Uye+Z3!r3&;5o$drwAIk^2bRshrm$F+Wv!qLzx_wVOr?(vcf zC!@8F2QFW5E!8C>H;Tn-cq_|`-NI60U2VTd$bnuI-lvZ7_8241xYnV^xHDm3cjVdZ z?5tHY!_fy7W|%~@qj~Gu8Rq14jj&53B2yg$6n_~gUofa*k-XSQ5m7U$23o3L!;7P} zA2%CMrn{?_3_n)x#jN88zpRPttUhJ?Jz2eVum5g+6OBxFs?B?mpejN$-I^|ciAr_; z?13rka4NykpkA}g0K9ZW)Ub_6o9HY{4 zv`7h$kTLt{&sL|3ruIoyEk@NC9UTOp73YM1B#-D{90pu_7Rq>!=)B_`%6wiSSm>_| z33*~p;tDettA?JOOX>ApoTu04{e5(OX!YXkalEGZ01FL5DJO%6_G?L@V*iq2Rr3ll zbfmXgu$-bS>(p5&G;54(etNT+mfRjx>P0Fsgp<>+9c)MQK4#@5fEBjCNG{zxYA9#G zpZ~cM6jdNuMd8^G&v}m1U)eCvO)Sv^Pqs|T6<}a0;wR>D*0H4LRJ70>cf*eKz$(O zpi0lh6j%Mx$Nvr_7K8fhqV$+?Gs_B(Twcu88|e?LT&oWNOuQ~6o}be(1=r=lU8Voz zYD%L~f8EsdgSkA(MRKA=6Z-$w3w(xyOv4Rh4r}b9V>^cq_d5OU4ZP-nen~K`TcGkl zeG^HQVsZV5SA$YDuf1kyP03<&4jhB!v;+ObfC?2_D&x%fSU$gQQ*pfp?na`!udg41 zonlG}`*%y6&Y_@8?VOq@kzm&pbhZh7XO=Qs5<-Z6&^MEO_*cK7& z)5iyOv-J2sfk6JUfQj%~A63Mg388c!4OYZOj@tKiX|RxauQ(2)K-gSq-USl&A+fEf zC%gx(h^$yh)fFgjHOn?Ov%oc(ZHuOh%{dz2!t2ta&*;4B+_%k^G9U^)|hCZc&ZckW5m1 z?OkHiV1;Ww-f=c0irfJ{ae+?r@AAR3U%8KSe`D=^5>?6__KyBgf;m(el0K1FG4I1+ z)6Hnwn)9HrKBW9XKg$kFdhJtJWtDAsBv-C$lzY=`k#eyLvhl!R;3NwA+isNQTA4MY zU<&+6Rm3+2T5Ge%lEzKW8@Hn6h~e0rn87jK|_~4G9~)eoe_A!D32p5G$7#* zVnU#Z$^UGd6*+?nn~s3I2nTRtUviw8M!3w9p^8~jeQaKP%oCHj+> z^N87?ltI)!Gn6a$aC^^BqxB5&6rh?Kvt}_swcjJ8K#&xoyjJR$xge2kY#aOF`nsNa_O7*srA<8}a9fN@WqN#gOjNK41u!Hx7XaPNt4-?! zQm8=Kg5r534YeBmMn7k#jxE1!8Lg8@8b5Oy;y;c(6GFDpYt8pqHrWh`Bo@E+jt=@q z%&%DJv`H38W^UGi-+D`yCP$g}=+uY_!#Pmj8GQWt>~X>is7#!KTx84et2giVvNPe< z%HGz}9%{E=xmoux4KjUayh;0TByuP#UMY#vUv=CXb|hpO?P|f(@RIaZL}JjcJ@v%8 zo-{wJA+K|f?}gfpYEoAtqY5y)5TZ#~czt6~j=ae6lhql-fBae{W2<1tQto~p>&acN zoXjKseFniZ%7patO0IcRl#g$&?!iR-&pl1qT@|~;D9B^_){6UDVPu7b>p`%Bt?q<% zYInu&gy1o1yk=ryvYvqZyQeO2v#3<#z%~c>tder`tm+19$Z5} z(DIh;!*UHZ*(k@wh!%;5y6K*k&VEkAwK|BAsp4zabv*PjXjW)|U70)8H~PeeTL+>` z5zwbMz{?TgzXNfO&6KhQFIv`B)q@>dZY;5trx+HthIUMlgctA^;vik$4|Ink;^!u< zHY0}1FW;lyIDrDMX_R`KzY0s>L;jWW+_|{U4&K(`Gxp7C5kNUkmA12VQAN;IrU6+JzABI)Fud%8^d3&FW#19&W#|qE8Pf{(h4A2T~Y3WG-UYZz{xRAoriw9 zZ0JNM&$lYp8>`-(j?D*fz$3I~>5B!*(A|RPIqInxjhn3JhFCsf=7+%GAxljK13+tN zODc6}vg^G3Ow*`YjHm_Keq|heq2D=nfr+;~FAX{lo?qcyz2Cq2>Qw>$vutt>y5B`WSeQ&9QYySKp z{rk#;C%9x>=cwPVgT5MYh_u?+|J>iyuQ9-#h!xmY)?`<|^QvI9fB>`U!yiv79KzHG zr`C3KxWq~+cB}c&vR&8bhvWLFX0V(W*bS~hc{PjvW5=X8FHso*LF7IidUq3dBH{}U>^K8Qk(6MOmmeZ;I}?%)Ri zTq9%T?*N{Cew+Q;0u}%WOubWs3clcD7X|UWvrs<{0F>$C>oGxJaOlyauiCiKg(SDs zIje%Vd}zh;tK;WLL~9Rv|6tNZvsYjG@zd?x#{RAg5aIoirjMG2tf;8N@y^8ffEwiR z{nmg?p;Z-u9Xh|9i~W%ksE*#zV04z^*}`Qdi=u&)YZbG7ij6&CQhjRM2np+CC>r2> zf2v4;l%`9(;hA|kh4l0a5BmIfi^?IVz3l=4sZfbdS0o7{lsnzCL9Wt>?0}$fM&N^ z9yVeH>c^c!h2i)<@^@)ofp6H|Dz5<$PZmx>7sNey&dRaNtoN3>tY}#ee&7ATRBpUW z+(F38#hV7JgoY>piX1jQIUMX1#%03}enUp~D+z1bApZ?^D#+z&`k%A9))ikpE8>`6SBh|E z52KCr;zEIuSlax`+NX;7!b(DR_Wxj)N;z{n8HB-+!2Du~g|k<2n(dK(L&FOJe-IRe zb=At@CMws#0z}%7`4m_HyCC*Cdj9r3rhRj*c`9`PEK|-fFUvBn5Pd%)tL3Pg@y|>v zCRBJNr!>qnm3DBWfE+i^K*xVo?R%Hknf-e^kx%U@cS)lf=+X~qyipI&l>@Kj zj=NwQKg+{G(D|qiD+!I#qw}GX(7p{9G2_c!(M&6}1hG1?E~cKOOEGu#koRppeeB_h zOu;6{b^{XAEi3>Czri?s-Nxj+*^hE>6nFKq*c@gF8;=NT&;nfXC?E-M!w_<5vw@?9 zEAAlLT`q||7$NBU1({+`LUH&X^CoY90F{%A3n^u=p}g)iX~)VAcv^fMWGpc|7|tTt z)r-M_xT%(1CqA|9fCPD7s!KoUgRR&?G~cpgj+r9=HD6K3Ydg&`ZGWk5E7fGGa5l4Z zyRnEoqiQ9)%(IspF@y2zyHgUc+!`VNU=(13^%JjfYIcapt4EBN%rGm30a%MD0ZzJq z?~?x;ufLc1<{}1UvD1}hGYVJ~i)bW3(Y2VRTFHyA#{~wS?9m46)c)*R?6P9@)w@VS^eE8@i$qN#`YO>oQG?Z^mk_-r1QDW(XsZ)pktorl zCeb@l_TBFf?_cn~Gv_&X&a~&uoilgtJvT;ITb+W8i3|V$3JsL1J^+9SO%MPjAqZ2? zGFyTmvC>jk1@QmX!nV@agdUhX%E$`z zYCf6|*|kQ@zo>6&YU*Fy-2HK~-C^J}RQq{$d%gW-b2CA_dG2reT}R>Sr*wa{fFBT~ zD^uN2u=!j{-MqUQvmXw~Q0_>>K?Dw!;kR`GAZ`Sk*luwChOdJ9+b;;R&zU5;R*qX-F^+lddhc83I^L4E`r|d z3&rVxPqP%}*Z>eM8+N?x@-Q0dll7sohSE*}0J(s&`H3!HQ=Gz-qTP%W(={`DgJv6#u zsw^II)?MKH34gVV52qSMvMU686EN3$(oLz5|CUUX<=^?Cq&vI%K2TrhP{{xQ*g^E_-4vCFuV--h!_V#Ugtyrhi1dI3!;)Al2OF6ly^Xt03JYX`UqfOmA$)$+6 zKnJk%CQWp?Q>Bwx?YpQusf2?u%%qqXeouzm+1d?Ddn_YA*0<;Vy69quSt=1x7xr9P z`Rp`GH3_`D8P?m(Tz9dQYr@jJHc!VPsm=FyAoGI=%6XRl4lKorwklly@>ce7^C*-{ z6+KUSYloD0>awxfH2@iMAn(q+vXMZFbv25?6qsYYVh=%mTtGsR(?VPd#^I;X;1Y$} zwAZKuu7p^r$M&kU^LyWPw%NNdsi4yk%MJSVN`@nMJ@lLkHD;1ui#p(2f#rOefJFO= z$%V)?NVxxD#g7Dp3pSZpMs3IT;}FV&3xW2 z>^6IU>3aWGhktt0GBK4BL^cP|OprKjUmvrOE=rDtmT^ShqstIuj^VKUrV67TFcpgF zQ(%O0VjpuVHeBq?yu!3C{|!E^FsCe>RzRKFtkNzjFpw$&EE$038aB1F&)i9agO@1U z%Hy!JE-wdVR+9=WE}`hdM-`!D0U|KyQePn?(X;{U$b;= zT&Q+(%dKo#Xo2f<#wnbbsrjxgB`|Dj*ztSWXBM&<==c)Re^y4}HSwLM@6E}>2Vvpz zu+>`RRfmR#?6<(-&@!r`64Q{iYYwpXThNb@>&ouXIrUp&VOlrLQZ4PXN=mL=UI$Y5 z72NqCz|*|!_KNN9R;c7LK8`v$L1uBL(2Nfy5JqL7uY%6nWO`@{EQu0 z02uQhs#n77XYz!d3b^3<`DL~H!JM$hD2uC8;ouu=k!nXQdz}CihWEOu=WsHJhg7h| ztj+&31@rB{Z)d;P465XEzRG>3Jx{DX(oVyqAau&bF-z@&b%2Z-MATHl`16Kvxn35( z+u#1^I(;ZDnu-xm!y!l>Oy$$f+8>AI-c@#SurxT`UAw%<$7ZciLfkQ&8;#}WG^4)k ziIz-idJOHp`|m;`HX; znHpc?T3y7=B>PK!8}}*Tq^<*hM1N0#5wx0+nw^T7a2a_zqL){5#1Z-~ehEquPE3im zK4NM1vjIjnLG{n*%3eX9A;qMHu*zW4k+Qni82h0a+A*uy8qs9+#Bk3~S7mwZd?N{~cNtNG_I$-)QQSiKT8sV0#GDqrR=y zcWodi5-#>1?4hh~8ki>4nigDF2$qLakzB>~$&H7s@sCx&V$C&`cR-SB3R@CaP+36s zq5}Y>y~0R*Vr4Y=uCyOal|rEgX30BmvO(Yx?u?X$#W$9q)ciFk3p{9}gMa*%xlcmR z+rJrRpGzYy(T71IN7)RI<3Ov5#n$(kDTmH+;8viC1-I`&I{Y--o-(eW$ zZbp33CR9EI)iW4K<|Ax5{Sa%ctoMTS+EL*`Oo6!lk%r*5_0)8Bpq1oeCZ`|oKvHZ^ z4?O3K*=@^el_aGK(rS&}7yHTu^9{srxt}B|pbI^hOb6ZmHY|HCRqwNshu@hv$ZmRp z=QULW!Fu3nf^k+puKLEca-<;q$XVoZd+`J9lADy+RZhk93-by|sECvvU!S4(2&a>Z z_V^!SyWfzK{t;N7{#=KN=g*REP?rqai%PNLA=Y-4D(2SUsKdLTpWkg3QyB2kc{H6x zYema5!AMUO%1K8*+(Jdp4~7^7_q~yQrSJPw{I>(w3gwPV8R#s&kTcZzJI(Yll1XvX zbBSq8ccQpwyY3=2F03l*6S9?eD0ClG(larXX!I%uqOx)3xoGRcDV27Vhu`Z?Qn^Dq ze*E(K@{y!=P8G}ajJ7~f(^T!)#;*N3+jCpywRbXH404IjEjK;nfO8qt9^Rm;W2S;b z04f>;MJM1TG*o}-+=GmI6X|;o%hnSssytc}=eD{s3oo+B1vF8G>c{MKt=d(1?$7Vc zaC>cRN%NYfAzaDbB~ZmX;J(IpQ48=i-^xrvNuV zuxsmV)VJE5?p6UNi|$~w6LDOTYF3(}v#In>i6Jm_1@lg@rUzz31*QbaX{yJKrLV>Q!dtw4_7qI7UX<{cPI z0;L_3*IzHeoUk59(F;W}mkMC&uk6Oj&)_8Ydx-U7T%g=-RlTvt_XM1MZAh&W8dJos zrm(6cJBU=7zNqGd=Z`LqMRK%x>jRf7#L`(En=#R=`Lt|X&Kf=I zn0ZOg@HY@z-oB^Q$@MXJht=<#+zQ}wUg`L$68iWuvm5GfMe>1^k~m@mph zPPH{>^H&G_2wrri<=i?Sqsnm=w0 zLpqvI+urvP zKX*Fo_h=p4wJI{6pMXg|{L6snlNyb>XCn%~PE7US(hQRY%iG4-K*c6R)zAGNX3@o= zn)#NYBH*#PE>6nE)IZ)31XDn|AtFbXZu7u_luhrS)Q`)B->4;&K6<$4p%2%%lLad8mit{T+Tc1vW&t+hO6j{?F*h%2D!`^M=l1+#bYewz-*($s}vPDKOK-@g%E zpuOoq7q1mRIJs*h0?19hHlE|phh@HT%?CzPCVmtwGtL7pRc%eS-kn3 zEc}j6dmH5zBXfAG4IkRca`fnY0KTlV&h!Y)KDC*XI*Hr4l0ir|UBiEEH@vQ&CNso8 zP{HI5S-eF>hoMvWlFM1*UECaxgAN{=i?3{mW2W2my=_XA$fNbcECy%NIWS~6Wo}}W zTBE~EmZ*-06L}0bf$NKaP^}4Kyy`{Ha-hkQ1hw$LeQn}E7lnZ|$V|$m=V!ChDhG@dKetd^S zB3!8_)J9<=@~)r$3kb8m;@4n>nNXCc@FvM^Mu_n6Oz5DxIaASA{C?jy3S<9pB`Fe^ z=ljSgj?pvCBRF<$!q-fgt>~p=y>+!}eX{UoR?P%;E9ER2^NmjU?NS(zka(Eb1MK@1 zS~e_*#$Zp%?cyNY%-qJE9r`?P1$hk6bqzgAr(jXGwD?C^|yst61pq%5Ia?2~$= z{0DB3R=a{(9cF|vpI=L1f5O3fI zjJ&AGj~zL&N&5A=u52=IVwLrAl{G3yf>=VKKLt}>r8KKq{(Z}WdNWB}B-mXs75OYv zwA*`fc%`xDhk)Q;s#)3GebF15V;^M#Q0vb+bYmNSqGD3CcD2F^qTp(rAbTLzPwx1! z;sLU@E;CM&l*+DWeEpp|agTNZiL(rE97?0#tfF_xVehdz0^^C$`!3`K(A+T*W zMdLglHD?6Ajyk+-u*X;`|Rz z9+CazM)tDAIH+{_H+C)5CAqDZ-&<||tY8wgIlg)9G7>vPvG`A-SbNLk5rt#;)P5Rw zXsS&?cH=1&G=eD7-|^-c-Zk~QDMZ)kWvRh__{N7Lal16GWkD}v>^JBK_N*ktWbWGZ zkSUEwhl2@K$?k8&6){HGNx#hJk(^S7~Tv;^tSfrh$6W8=a;ucHD2cdq)(i86pjmBEkaYz|B~ffMIjHt#$OIH1WB)t{%p=WEe4&o z{AviRe(77+SKzfT{-q!9-?a5a^E0`1z=m_1LhOCSr-GH%1P7U$r(dOY?JRd%1svt? zeS|4YZgYb3nV!2wGivZ4;#=E<{X&i%FwWee!<;DO?|swh;p=d(Dk>6*Y-QIVg*=Zx z8alz81vf^m-mm=;tw4b5Cm>ck-p(=As-#7EEv_H;aXuXKWibPKd6BnRVH7uQ;`#oC z0x}NZ=J?JZ?X|bAvrBrYkD=Vp;U`uRV+^v4=}<*r(ny^fPWD4FMnKsm+andiRXnDT zWJwp$b_o{uml}OSbapapK_T`q_+l2nOdtM`7aj|{#j{DCg_iU&t&zPqW{2g1AMnR* zo3yjY-&_!)`lsdyKbT>|JUh<58=2q;F1|SMb-Ljc7v^)_-l1(7{4|42Vut<(6~TV{ zzNR>)32#2F19K`S3~4Z0KY|}*8ucy*Y#b%1WkbVh?yWj+&qRy8s0d@X0h`BD=#%?o zGI^|iff$L0YFg^%IH*Sj`6Qg*$&OzCa&G#kh8;2)zrXR9X`MJ7wGH5q6DB?;Vr#avx+$xqcW! z=_9|z#A;84K64beGMfD~c*UT-4ri`=6?O-9Hmd@W_2TobF{)5Remg-H2C;Xk#%sS( z$ele(wT>MdWJ*qw@zhZF9JEkcAbU@O}p84j-NtK+)8lyL%J+oTg=P-4l#mXfxcC1h;Zx;&DWKLi?r*&yjbjsOn zt)Dj>q(<|TvZcxvD-{Xwj!+Q|1(EoW$;E9(tC>VBl3IKgtcW+$0T*+D145R^b{0 zK&h&^VXL>@0=wO=c*5x954U6wz2Uh;+_konF4*baJL5EsXdk zhr7|rdzYw}o{H0KImz~5xboq{;+zt%d+!I40%M$Nx0%`GMo2;Rln!w>tQ=VLO?8BM z;d}vfx)iX_p48KfZtJqPC!!Ln!qk?noqIY`e2goO;li2Uc5j+(SnW@Lt$N@nTI`gH zbyfu^mkJBfV%9AYo0=E89Gc(}O)##XdN37jDc5N>WlaQorm?cM)1mH!%5Z^;GTov4 z<TXLhu*fr3`cUrc}KR%{ch|;%nyvXb|bkl?EI52`x#W#AP*02q8Y)17bVo zJUMUw0ja7$@`U;Q!3R6UDWbJM&evt;Cz(fwmx_e5=^4~0h^ihFL&3;bC{>0Iy>}@I z1DRCE;;;wzLA8oB$Rg*@-X}uk$D|-&Z6?&`O^Ix|y&>m_zqsmGHU4z77&SVQPphz2 z9}z@_xlG>-&A#95EZdCH*D-^VvwlI4wHL>E&mw4d1fH6xMqOxTZ3jrO2_BPu)Cx&3 zmV!{ZC;wc)4S1Q_2^8%+LK@O)O7C1P5Gy(0vyO?aXQijqkXu)Ir^3!@L>A*&xHHDw z6a5ppNagNjm!@TOly7Ks_0^;Oy92FqDR~}b7g{6BBMJ;NvJ@}{#sEqUw+QR~@6TvP zUzuZ_Xt1KAiZF`I(@*zrv7pa)NAI!eTuF`J{dSW~+l$8IpJ?qa^NJvue9LE~M%G$% zM!yyfFh6(VFPUe3l$$*!wUSsTOyt#rkgCiWX1BMh-={i)pgqDytn4U{f zS{N`*gV=I|2}uTTj!?FUF(Sfm8ho++={@;)@L>*quKYpA^>GM~d}oY+^tqfxvK42# z(92tGK{Ao|PK>sL#Wym#Q<8oelSk|Um^p-IyLzuvbdrccqg01p8xR3thg!PCObvwO z00_V$nrX1BwVMuKpqDsQXMUtZjm#pLcp-VM=vl{jk1O9{OqH}N?!wmpB!sw-Y47dM z$&+lu{1=OXHXuiNFYy{I5%9$i#48q1fg@yyIDU;gzJ6R^;N%d&yK$cx7Vq880Yp$g zI+@6^7v}-o2#mB}&UwXxbvT6@KBd5ec=L@6$)li9!|um&9nVMa_RKRaMn*4^X+=b8qW_ zD*!q&{cB9qtALtQE3lEK)DSE-+e_Q5pNhwcf%+E+ASS9T5iSd=v|XS0vR#ryANYg5 zkOleqrIhZneiK)yvGv_CaKLNeYiQ^Yjmq8Y-784Zq`gzy`>dG%PK?{B%-=Zmx$-hs zk4bsUf|MHO$4MnER92hVBG_KE@spB7@ljR?KNAg~`n=iZ2y<-3q&j8(WG18^dwE8= z6BQhdYA4n1JNa-zf#0_7cIli1PD6en62f?R$5gDm;MZiQM7*Xspo)zf?%~co9O%kB zu9M3NjIU-Al?4hNF(=0TpPn#!R!(`mSSBnhrHbrx4?GsBrXF~5Ovvty_UL}B`)Blg zKw`?HSCtb16f%7)sp{Y*s^$y925hA)?}>q^+-raOMjY;Ixj5BbYYrt_XNCW=lh|+` zR+hCgQ}P28o3dJcD89@IER37{u6YKN1rhcgz5mCku0T|^0yUiqsY<;K2Lm_A4FmX( zq`94%1)e#v5<>vfufI*`PtyeWXSf1uPCxX#qXMa72kj;ptBTa47RokE1LNOycp(6k zT0`Dbsww`z5}V{7@va&Il{kOCFm))vqI_Gf;$%c>qk^Dq4%Gll3;-Yx$%&Y-*t7q2 wxbDwoGF*%ht`Y#i1V9LY67c^~qWbYfcc$rV7|m);{@YLEfwpRuGCJ&k0PlPi!~g&Q diff --git a/test/qad/icons/z-up.png b/test/qad/icons/z-up.png deleted file mode 100644 index d4b3806419666e331e0755210243f6d1f8da9789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6936 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%0A8yJS*%UxBmW-R6>pU#0C0!9pH{uYX4rC^xc+* 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 diff --git a/test/qad/icons/zoom-original.png b/test/qad/icons/zoom-original.png deleted file mode 100644 index 55b3ac82e78f9ba77b4b4caa4668cd445f1c4336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50411 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 Qq5$|a(7mElrG=0DKhH;K-~a#s diff --git a/test/qad/icons/zoom-out.png b/test/qad/icons/zoom-out.png deleted file mode 100644 index 6e4e03f5c7e9f89c3f52988aff5bc6a75c45c64e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47817 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 O0bR{o8r5pH;r|a!x1FE> diff --git a/test/qad/icons/zoom-range.png b/test/qad/icons/zoom-range.png deleted file mode 100644 index 070a16f8696d709568caba1615f52faf43dea336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48890 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 z 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 diff --git a/test/qad/icons/zoom-rect.png b/test/qad/icons/zoom-rect.png deleted file mode 100644 index 5fa6283f3f13ecb8c7d4f51fe31d3c3f459ae1a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63008 zcmZ_0Wl&tf7BxB$Jhb~Xn% z8CyHJGCG*MlCU!}GqUh3E;oLD>0g43xQM!^!TCG1r^ZPVCn9*KiyRcw!{*Y%vo+hs zj-B!an*`P4Kd;uf&d#g0PT_YA+bb;hKjDJQJF_4&{gvF@YKn=x z%FfG5sbw$d za!_=z5bu}Y*JDS|0KW8(^f-}`Leu$%8((l7NwCpa5M_9;tSG7(?C&RE5+@K-7#M}i zzYG+A4Zc52H~e6eaCLt89C!ej$yqTkIY2_O%cwsXtIlwOxc;|`@82t8D{M48AR2Lg zMqWmSdPY)~W@cL6TuNr@R%UK4UrM&tb(-+bg5V4AT|rgVSwvJ+75|+HI50eXIX01A zhqBw=Tk0~~ew^d#&;irMNCvHn_>FW@9j;f0?0?2&=!tP~59ao`+}xRVdIA?5%g52Q z1b}&UeO}873ib?+4>C{iGIKUJ-(*~EMkl10^TX73lrF$f8NHb=d~b%^k4-|<)Q(Bh zK?ezFL_~Ym_O`FCt!+;_M6{D7wga{n8jxs^CCF?`{dLiZ{{tw_`V%le>i$hJe*V=1 z(_SXeakYNWM@}yLwV%{@o3`RaquuM-(dG8GeR}M5(mXeVFhlU`Y!v+QWc$IauaMFg zM7323)-l=&4N_^*qocIPm0JB*pgz4m+xA2N`O{dS223yh|2}l@ z?(o&UT@#pk{Lo7gyi>h!wb_0LtL5QQ6B;^5mU4=L8#Z==O9DZ1yDeo0k^g+Wh&VfT z_ceMO{04FCcmhsjs1kA6@$Dhei$J$Y{P3z@sOHdB|kv9MUi<Rm4-@4Oyt4F!+OWqp4eyVeRGE1BG_gtfd}LC*C7b%{_hM3xxDt>R5;JzT;K@! zz1%w~D@#ku%IXO53YwXNn2ibrnQoH@T#DEv?OZ*VGrxlv#HpFS(TQM+q4{HD{mw6e zdnw-e5x~eu8B=iALe@LH%c~p%hli=G9FBxBgtD@P#9i3#JYp3TW@l$d-y9Vb7}PbFguT2dQ%F?m ziw9_+!ZF(@5(X+EC?M0ia8coR1xm^+MRmM~H?AW`<-0(?!S_nwCd~XX!a++psNi!W z?0gic%eRtiDF?Hz>brp5r>Azk@82(wdHq>; zre+|?YgQU5OKK^{T^^o@g+IQW?3`@k!nXpz`23V4$R9U1sCYmm<2^J~LUe>4|Bv1M zGgt@+5mbC^7_`JhR15;x8~CV%tgPXj&Zg=Z9>GL7v@b#awUQM%+f1U z#SoG5^3b?g!cc(+;S{hH)+eDJXlQd1baXbY32|N?IEdnBCM|n z2vf4MvKBGekbKm{iFSxe9l-`ZdB-?h9Th@bBTmB`4Ji#>ao1cX2_~4+3v^JtUT-2XsAX&ZFtHaZe zDpb4ej<1}K7=Qdk>rKm;&(YVBIz4^{mzU#8pKqWt*o?w3mT15A@aP4NgAV~?9<>Zc0Tq$>4|!a1SFwGMaf9( zk!D7q5M!5EhRs|(!r^Dhhx}Y^3iRvg9al(DnEE>t@*fZ7Z$Ung6aB(|nI}1}a`-9) zz7y(oadvKqk5|H_6r%=Nk_qjg!^W~CQ)mAz#sEMO>rR;Y1`)G%&jsnXk$f$?-jFuvo%1$`suumAtCrj_w~hF|Vc_ev zXJNg01hd^n4~F{%`sdo|CZTl8k>0!5@_8I#DI?}$V+#OX?1w~C0ha*jh~>yC;nt8? z@KL+R1{E~YmDC(qGJ)!VU}+YJg}Ao1Cly#&YCejor6)oVsei<;XL#_L&F;)+9J2WB zga5yA2sr^kYDT$|-}7S0Nb>8%AtvUfq@-kX!jI%cjM3w@Q6&kX=om~9+EX=-o-V>7 zKYL)SRfM9UfdR5eKPkpIT_yQU-h}*Sz%^>ot5@y7&x??n&WHYRpw!+g5XWfgA^Ug} z#b~U>vfgMzE~E7VNfenB<*o$-6Aj@SEBHN+IRN(2Wt(%G`eGx>$e$YaXUjz2ZSK4@ zS?gYBZh8VH^1y@s-+I#(hj7#f+4GPh)sb!e4p*)IS%)6)oc?cvVDx#jAW)rqv&wNkv6@tRn5N^N^HUZPYI#ndN#)|K6UZ`z% z>A``qh)#5;YKifMg0ib&G~g94Z?B=D;i2B2Vj+qo`&1|K;fm8U3@?dyrakdV`L{m9 zH*+c(bo@t4xH8m8u`yC+23>?B(kM7g2H|26@qLPOV%J62KeT_}kyUSc!KT>$fHnFk3ey^7CXdG&$)_&n%8 zg#K1tL|+|UDT|6Ki;F4;L-QRN-^8U~Pff$tyRVo(seIZVyjpYv!QeyWz|B7O&Q_b3 zt)7I2{rvVe#9s{bUyuvI-Ui;nkMa^CoLENifq58MBsc9UEVsE4>00Mk{*Rr_Prf)L z(n!jQ*IE@Y|JN#vhlhEEB#L*GYn9%g)#rM=|DE0>%+{x6tZEM@&=w|s8prSXd^2Vl z|D@Lv^TV#lok?!E$}kxQ27BkX)=#$=S|k|PCLAFH5n}i5k2;{x)C7%XQFqSy`S#HCDW^hOdLOo&llgbq?(d!d`}jev zi4ABUD8Y$u>U$%40oy_!`$Dzz3o9!~@sYScqoXB3@uqNrso>4%0A96ga#}rA9R!Uf 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%0A8EDI(vWs0j!bZ0= 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 VhWT? - - - - SQLFilterEdit - - ≈ - - - - ≠ - - - - ≥ - - - - ≤ - - - - - SQLTableWidget - - Table doesn`t exists! - Таблица не существует! - - - Add record - Добавить запись - - - Configure filters - Настроить фильтры - - - Clear - Очистить - - - Operator AND - Операция И - - - Operator OR - Операция ИЛИ - - - Remove selected - Удалить выделенные - - - Table "%1" doesn`t exists! - Таблица "%1" не существует! - - - diff --git a/test/qad/sql_table/plugin/CMakeLists.txt b/test/qad/sql_table/plugin/CMakeLists.txt deleted file mode 100644 index d6e9378..0000000 --- a/test/qad/sql_table/plugin/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -qad_plugin(sql_table "Gui;Widgets;Sql" "") diff --git a/test/qad/sql_table/plugin/qad_sql_table.cpp b/test/qad/sql_table/plugin/qad_sql_table.cpp deleted file mode 100644 index 795bfb6..0000000 --- a/test/qad/sql_table/plugin/qad_sql_table.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "qad_sql_table.h" -#include "sql_table_plugin.h" -#include "sql_record_plugin.h" - - -QADSQLTable::QADSQLTable(QObject * parent): QObject(parent) { - m_widgets.append(new SQLTablePlugin(this)); - m_widgets.append(new SQLRecordPlugin(this)); -} - - -QList QADSQLTable::customWidgets() const { - return m_widgets; -} - - -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(qad_sql_table_plugin, QADSQLTable) -#endif diff --git a/test/qad/sql_table/plugin/qad_sql_table.h b/test/qad/sql_table/plugin/qad_sql_table.h deleted file mode 100644 index bb59554..0000000 --- a/test/qad/sql_table/plugin/qad_sql_table.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef QAD_SQL_TABLE_H -#define QAD_SQL_TABLE_H - -#include -#include - -class QADSQLTable: public QObject, public QDesignerCustomWidgetCollectionInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetCollectionInterface) -#if QT_VERSION >= 0x050000 - Q_PLUGIN_METADATA(IID "qad.sql_table") -#endif -public: - explicit QADSQLTable(QObject * parent = 0); - virtual QList customWidgets() const; - -private: - QList m_widgets; - -}; - -#endif // QAD_SQL_TABLE_H diff --git a/test/qad/sql_table/plugin/sql_record_plugin.cpp b/test/qad/sql_table/plugin/sql_record_plugin.cpp deleted file mode 100644 index 031977d..0000000 --- a/test/qad/sql_table/plugin/sql_record_plugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "sql_record_widget.h" -#include "sql_record_plugin.h" -#include - - -SQLRecordPlugin::SQLRecordPlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void SQLRecordPlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool SQLRecordPlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * SQLRecordPlugin::createWidget(QWidget * parent) { - return new SQLRecordWidget(parent); -} - - -QString SQLRecordPlugin::name() const { - return QLatin1String("SQLRecordWidget"); -} - - -QString SQLRecordPlugin::group() const { - return QLatin1String("Editor Widgets"); -} - - -QIcon SQLRecordPlugin::icon() const { - return QIcon(":/icons/sql_table.png"); -} - - -QString SQLRecordPlugin::toolTip() const { - return QLatin1String(""); -} - - -QString SQLRecordPlugin::whatsThis() const { - return QLatin1String(""); -} - - -bool SQLRecordPlugin::isContainer() const { - return false; -} - - -QString SQLRecordPlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString SQLRecordPlugin::includeFile() const { - return QLatin1String("sql_record_widget.h"); -} - diff --git a/test/qad/sql_table/plugin/sql_record_plugin.h b/test/qad/sql_table/plugin/sql_record_plugin.h deleted file mode 100644 index 8278f86..0000000 --- a/test/qad/sql_table/plugin/sql_record_plugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef SQLRECORDPLUGIN_H -#define SQLRECORDPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class SQLRecordPlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - SQLRecordPlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // SQLRECORDPLUGIN_H diff --git a/test/qad/sql_table/plugin/sql_table_plugin.cpp b/test/qad/sql_table/plugin/sql_table_plugin.cpp deleted file mode 100644 index 50e0969..0000000 --- a/test/qad/sql_table/plugin/sql_table_plugin.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "sql_table_widget.h" -#include "sql_table_plugin.h" -#include - - -SQLTablePlugin::SQLTablePlugin(QObject * parent): QObject(parent) { - m_initialized = false; -} - - -void SQLTablePlugin::initialize(QDesignerFormEditorInterface * /* core */) { - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - - -bool SQLTablePlugin::isInitialized() const { - return m_initialized; -} - - -QWidget * SQLTablePlugin::createWidget(QWidget * parent) { - return new SQLTableWidget(parent); -} - - -QString SQLTablePlugin::name() const { - return QLatin1String("SQLTableWidget"); -} - - -QString SQLTablePlugin::group() const { - return QLatin1String("Editor Widgets"); -} - - -QIcon SQLTablePlugin::icon() const { - return QIcon(":/icons/sql_table.png"); -} - - -QString SQLTablePlugin::toolTip() const { - return QLatin1String(""); -} - - -QString SQLTablePlugin::whatsThis() const { - return QLatin1String(""); -} - - -bool SQLTablePlugin::isContainer() const { - return false; -} - - -QString SQLTablePlugin::domXml() const { - return QLatin1String("\n\n"); -} - - -QString SQLTablePlugin::includeFile() const { - return QLatin1String("sql_table_widget.h"); -} - diff --git a/test/qad/sql_table/plugin/sql_table_plugin.h b/test/qad/sql_table/plugin/sql_table_plugin.h deleted file mode 100644 index e3ce3f1..0000000 --- a/test/qad/sql_table/plugin/sql_table_plugin.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef SQLTABLEPLUGIN_H -#define SQLTABLEPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class SQLTablePlugin: public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - SQLTablePlugin(QObject * parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget * createWidget(QWidget * parent); - void initialize(QDesignerFormEditorInterface * core); - -private: - bool m_initialized; - -}; - -#endif // SQLTABLEPLUGIN_H diff --git a/test/qad/sql_table/qad_sql_table.qrc b/test/qad/sql_table/qad_sql_table.qrc deleted file mode 100644 index b1caabc..0000000 --- a/test/qad/sql_table/qad_sql_table.qrc +++ /dev/null @@ -1,26 +0,0 @@ - - - ../icons/edit-table-insert-row-below.png - ../icons/dialog-close.png - ../icons/edit-clear.png - ../icons/edit-guides.png - ../icons/view-grid.png - ../icons/zoom-fit-best.png - ../icons/configure.png - ../icons/document-save.png - ../icons/edit-clear-locationbar-rtl.png - ../icons/edit-find.png - ../icons/list-add.png - ../icons/edit-delete.png - ../icons/item.png - ../icons/node-add.png - ../icons/node.png - ../icons/edit-copy.png - ../icons/edit-paste.png - ../icons/expand_s_x.png - ../icons/expand_s_y.png - ../icons/expand_x.png - ../icons/expand_y.png - ../icons/sql_table.png - - diff --git a/test/qad/sql_table/sql_record_widget.cpp b/test/qad/sql_table/sql_record_widget.cpp deleted file mode 100644 index eac9bdc..0000000 --- a/test/qad/sql_table/sql_record_widget.cpp +++ /dev/null @@ -1,352 +0,0 @@ -#include "sql_record_widget.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -SQLRecordWidget::SQLRecordWidget(QWidget * parent): QWidget(parent) { - setLayout(new QFormLayout()); - ro = false; -} - - -SQLRecordWidget::~SQLRecordWidget() { -} - - -void SQLRecordWidget::setRecord(const QSqlRecord & q, bool full_update) { - //qDebug() << (q.count() - hidden.size()) << (layout()->count() / 2); - if (full_update || (q.count() - hidden.size()) != (layout()->count() / 2)) createWidgets(q); - for (int i = 0; i < q.count(); ++i) { - QSqlField f = q.field(i); - QWidget * val = 0; - for (int w = 0; w < cws.size(); ++w) - if (cws[w]->objectName() == f.name()) { - val = cws[w]; - break; - } - if (val == 0) continue; - if (qobject_cast(val)) { - if (relations.contains(f.name())) { - bool ok = false; - int sv(f.value().toInt(&ok)); - if (!ok) - qobject_cast(val)->setText(""); - else { - QList > & rv(relations[f.name()]); - for (int j = 0; j < rv.size(); ++j) { - if (sv == rv[j].first) { - qobject_cast(val)->setText(rv[j].second); - break; - } - } - } - } else - qobject_cast(val)->setText(f.value().toString()); - } - if (qobject_cast(val)) qobject_cast(val)->setChecked(f.value().toBool()); - if (qobject_cast(val)) qobject_cast(val)->setValue(f.value().toDouble()); - if (qobject_cast(val)) qobject_cast(val)->setColor(QColor::fromRgba(f.value().toUInt())); - if (qobject_cast(val)) { - QString s = f.value().toString(); - qobject_cast(val)->setValue(s.isEmpty() ? QStringList() : s.split(";")); - } - if (qobject_cast(val)) { - bool ok = false; - int sv(f.value().toInt(&ok)); - if (!ok) - ((QComboBox*)val)->setCurrentIndex(-1); - else { - QList > & rv(relations[f.name()]); - for (int j = 0; j < rv.size(); ++j) { - if (sv == rv[j].first) { - ((QComboBox*)val)->setCurrentIndex(j); - break; - } - } - } - } - } -} - - -void SQLRecordWidget::setFixedValue(const QString & name, const QVariant & value) { - foreach (QWidget * w, cws) { - if (w->objectName() != name) continue; - if (qobject_cast(w)) {qobject_cast(w)->setText(value.toString()); qobject_cast(w)->setReadOnly(true);} - if (qobject_cast(w)) {qobject_cast(w)->setChecked(value.toBool()); w->setEnabled(false);} - if (qobject_cast(w)) {qobject_cast(w)->setValue(value.toDouble()); qobject_cast(w)->setReadOnly(true);} - if (qobject_cast(w)) {qobject_cast(w)->setColor(QColor::fromRgba(value.toUInt())); qobject_cast(w)->setEnabled(false);} - if (qobject_cast(w)) {qobject_cast(w)->setValue(QStringList()); qobject_cast(w)->setEnabled(false);} - } - -} - - -void SQLRecordWidget::clearValues() { - foreach (QWidget * w, cws) { - if (qobject_cast(w)) qobject_cast(w)->setText(QString()); - if (qobject_cast(w)) qobject_cast(w)->setChecked(false); - if (qobject_cast(w)) qobject_cast(w)->setValue(0.); - if (qobject_cast(w)) qobject_cast(w)->setColor(Qt::black); - if (qobject_cast(w)) qobject_cast(w)->setValue(QStringList()); - } -} - - -void SQLRecordWidget::createWidgets(const QSqlRecord & q) { - qDeleteAll(cws); - cws.clear(); - delete layout(); - QFormLayout * lay = new QFormLayout(); - lay->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); - lay->setLabelAlignment(Qt::AlignRight); - lay->setContentsMargins(0, 0, 0, 0); - setLayout(lay); - //qDebug() << "createWidgets" << q.count(); - for (int i = 0; i < q.count(); ++i) { - QSqlField f = q.field(i); - if (hidden.contains(f.name())) continue; - QPair ctr = trColumn(f.name()); - QWidget * val = 0; - if (relations.contains(f.name())) { - if (ro) { - val = new QLineEdit(); - } else { - val = new QComboBox(); - QList > & rv(relations[f.name()]); - bool ok = false; - int sv(f.value().toInt(&ok)); - for (int j = 0; j < rv.size(); ++j) { - ((QComboBox*)val)->addItem(rv[j].second, rv[j].first); - if (ok) - if (sv == rv[j].first) - ((QComboBox*)val)->setCurrentIndex(j); - } - if (!ok) - ((QComboBox*)val)->setCurrentIndex(-1); - } - } else { - switch (fieldType(f)) { - case QVariant::Int: - case QVariant::UInt: - case QVariant::LongLong: - case QVariant::ULongLong: - case QVariant::Double: - val = new QDoubleSpinBox(); - ((QDoubleSpinBox*)val)->setRange(-1E+99, 1E+99); - ((QDoubleSpinBox*)val)->setDecimals(3); break; - case QVariant::String: - val = new QLineEdit(); break; - case QVariant::Bool: - val = new QCheckBox(); break; - case QVariant::Color: - val = new ColorButton(); - ((ColorButton*)val)->setUseAlphaChannel(true); - ((ColorButton*)val)->setUseNativeDialog(true); - break; - case QVariant::StringList: - val = new StringListEdit(); - break; - default: break; - } - if (f.type() == QVariant::String || f.type() == QVariant::StringList) val->setProperty("_string", true); - } - if (val != 0) { - QString lt = ctr.first.left(1).toUpper() + ctr.first.right(ctr.first.length() - 1); - while (lt.endsWith("_")) lt.chop(1); - QLabel * lbl = new QLabel(lt + ":"); - lbl->setToolTip(ctr.second); - cws << lbl; - val->setObjectName(f.name()); - cws << val; - lay->addRow(lbl, val); - } else { - if (!hidden.contains(ctr.first)) - hidden << ctr.first; - } - } - updateWidgets(); - emit widgetsCreated(); -} - - -void SQLRecordWidget::updateWidgets() { - foreach (QWidget * w, cws) { - if (qobject_cast(w)) qobject_cast(w)->setReadOnly(ro); - if (qobject_cast(w)) qobject_cast(w)->setEnabled(!ro); - if (qobject_cast(w)) qobject_cast(w)->setReadOnly(ro); - if (qobject_cast(w)) qobject_cast(w)->setEnabled(!ro); - if (qobject_cast(w)) qobject_cast(w)->setEnabled(!ro); - if (qobject_cast(w)) qobject_cast(w)->setEnabled(!ro); - } -} - - -QVariant::Type SQLRecordWidget::fieldType(const QSqlField & f) { - QString ft = ftypes.value(f.name()); - if (ft.isEmpty()) return f.type(); - if (ft == "l") return QVariant::StringList; - if (ft == "b") return QVariant::Bool; - if (ft == "n") return QVariant::Int; - if (ft == "f") return QVariant::Double; - if (ft == "c") return QVariant::Color; - if (ft == "r") return QVariant::Rect; - if (ft == "a") return QVariant::RectF; - if (ft == "p") return QVariant::Point; - if (ft == "v") return QVariant::PointF; - return QVariant::String; -} - - -void SQLRecordWidget::addTranslation(const QString & file) { - QPIConfig conf(file, QIODevice::ReadOnly, QPIConfig::Config); - QPIConfig::Branch ae = conf.allLeaves(); - foreach (QPIConfig::Entry * e, ae) - translates[e->name()] = QPair(e->value(), e->comment()); -} - - -QString SQLRecordWidget::getValuesQuery() const { - QString ret("("); - bool first = true; - foreach (QWidget * w, cws) { - QWidget * vw(0); - if (qobject_cast(w)) {if (!qobject_cast(w)->text().isEmpty()) vw = w;} - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (vw == 0) continue; - if (!first) ret += ","; - first = false; - ret += vw->objectName(); - } - ret += ") VALUES ("; - foreach (QWidget * w, cws) { - QWidget * vw(0); - if (qobject_cast(w)) { - if (!qobject_cast(w)->text().isEmpty()) { - vw = w; - bool q = w->property("_string").toBool(); - if (q) ret += "'"; - ret += qobject_cast(w)->text(); - if (q) ret += "'"; - } - } - if (qobject_cast(w)) { - vw = w; - ret += qobject_cast(w)->isChecked() ? "1" : "0"; - } - if (qobject_cast(w)) { - vw = w; - ret += QString::number(qobject_cast(w)->value()); - } - if (qobject_cast(w)) { - vw = w; - ret += QString::number(qobject_cast(w)->color().rgba()); - } - if (qobject_cast(w)) { - vw = w; - ret += "'" + qobject_cast(w)->value().join(";") + "'"; - } - if (qobject_cast(w)) { - vw = w; - ret += ((QComboBox*)w)->itemData(((QComboBox*)w)->currentIndex(), Qt::UserRole).toString(); - } - if (vw == 0) continue; - ret += ","; - } - if (ret.endsWith(",")) ret.chop(1); - ret += ")"; - return ret; -} - - -QString SQLRecordWidget::getUpdateQuery() const { - QString ret; - bool first = true; - foreach (QWidget * w, cws) { - QWidget * vw(0); - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (qobject_cast(w)) vw = w; - if (vw == 0) continue; - if (!first) ret += ","; - first = false; - ret += vw->objectName() + "="; - if (qobject_cast(w)) { - if (qobject_cast(w)->text().isEmpty()) - ret += "null"; - else { - bool q = w->property("_string").toBool(); - if (q) ret += "'"; - ret += qobject_cast(w)->text(); - if (q) ret += "'"; - } - } - if (qobject_cast(w)) - ret += qobject_cast(w)->isChecked() ? "1" : "0"; - if (qobject_cast(w)) - ret += QString::number(qobject_cast(w)->value()); - if (qobject_cast(w)) - ret += QString::number(qobject_cast(w)->color().rgba()); - if (qobject_cast(w)) - ret += "'" + qobject_cast(w)->value().join(";") + "'"; - if (qobject_cast(w)) { - QString cd = ((QComboBox*)w)->itemData(((QComboBox*)w)->currentIndex(), Qt::UserRole).toString(); - ret += cd.isEmpty() ? "null" : cd; - } - } - return ret; -} - - -bool SQLRecordWidget::isEmpty() const { - return layout()->count() < 2; -} - - -void SQLRecordWidget::updateRelations() { - relations.clear(); - for (int i = 0; i < relations_src.size(); ++i) { - QSqlQuery q(QString("SELECT %1,%2 FROM %3").arg(relations_src[i].key, relations_src[i].ocol, relations_src[i].table), QSqlDatabase::database(connection_name)); - QList > cr; - while (q.next()) - cr << QPair(q.value(0).toInt(), q.value(1).toString()); - relations[relations_src[i].tcol] = cr; - } - QFormLayout * lay = (QFormLayout*)layout(); - if (!lay) return; - for (int i = 0; i < lay->rowCount(); ++i) { - QString name = lay->itemAt(i, QFormLayout::FieldRole)->widget()->objectName(); - if (hidden.contains(name)) continue; - QComboBox * val = qobject_cast(lay->itemAt(i, QFormLayout::FieldRole)->widget()); - if (!val) continue; - if (!relations.contains(name)) continue; - QList > & rv(relations[name]); - bool ok = false; - int sv(val->itemData(val->currentIndex()).toInt()); - val->clear(); - for (int j = 0; j < rv.size(); ++j) { - val->addItem(rv[j].second, rv[j].first); - if (sv == rv[j].first) - val->setCurrentIndex(j); - } - if (!ok) - val->setCurrentIndex(-1); - } -} diff --git a/test/qad/sql_table/sql_record_widget.h b/test/qad/sql_table/sql_record_widget.h deleted file mode 100644 index 68903fa..0000000 --- a/test/qad/sql_table/sql_record_widget.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef SQL_RECORD_WIDGET_H -#define SQL_RECORD_WIDGET_H - -#include -#include -#include -#include -#include -#include - -class SQLRecordWidget: public QWidget { - Q_OBJECT -public: - SQLRecordWidget(QWidget * parent = 0); - ~SQLRecordWidget(); - - void setRecord(const QSqlRecord & q, bool full_update = false); - void setReadOnly(bool yes) {ro = yes; updateWidgets();} - void setFixedValue(const QString & name, const QVariant & value); - void setTypeForName(const QString & name, const QString & type) {ftypes[name] = type;} - void clearValues(); - void removeWidgets() {qDeleteAll(cws); cws.clear();} - - void hideColumn(const QString & col) {hidden << col;} - void showColumn(const QString & col) {hidden.remove(col);} - void showColumns() {hidden.clear();} - void addRelation(const QString & this_column, const QString & other_table, const QString & other_key, const QString & other_column) {relations_src << RelationSrc(this_column, other_table, other_key, other_column); updateRelations();} - void removeRelations() {relations_src.clear(); updateRelations();} - void addTranslation(const QString & file); - void setConnectionName(const QString &conn_name) {connection_name = conn_name;} - QString connectionName() const {return connection_name;} - - QString getValuesQuery() const; - QString getUpdateQuery() const; - bool isEmpty() const; - QWidget * valueWidget(const QString & name) const {foreach (QWidget * w, cws) if (w->objectName() == name) return w; return 0;} - - void updateRelations(); - -protected: - QPair trColumn(const QString & n) {QPair trn = translates.value(n); if (trn.first.isEmpty()) return QPair(n, ""); return trn;} - void createWidgets(const QSqlRecord & q); - void updateWidgets(); - QVariant::Type fieldType(const QSqlField & f); - - struct RelationSrc { - RelationSrc(const QString & v0 = QString(), const QString & v1 = QString(), const QString & v2 = QString(), const QString & v3 = QString()): - tcol(v0), - table(v1), - key(v2), - ocol(v3) - {} - QString tcol; - QString table; - QString key; - QString ocol; - }; - - QMap > translates; - QVector relations_src; - QMap > > relations; - QMap ftypes; - QSet hidden; - QWidgetList cws; - bool ro; - QString connection_name; - -signals: - void updateRequest(); - void widgetsCreated(); - -}; - -#endif // SQL_RECORD_WIDGET_H diff --git a/test/qad/sql_table/sql_table_widget.cpp b/test/qad/sql_table/sql_table_widget.cpp deleted file mode 100644 index 8caf1be..0000000 --- a/test/qad/sql_table/sql_table_widget.cpp +++ /dev/null @@ -1,1081 +0,0 @@ -#include "sql_table_widget.h" -#include "ui_sql_table_widget.h" -#include -#include -#include -#include -#include -#include "qad_types.h" - - -QString SQLTableWidget::_dir; - - -ColumnProperties::ColumnProperties(const QString & table_, const QString & type_, const QString & name_, const QString & def_, bool auto_, bool prim_, bool option_) { - visible = true; - table = table_; - name = name_; - def = def_; - auto_increment = auto_; - primary = prim_; - optional = option_; - int bs = type_.indexOf("("), bf = type_.indexOf(")"); - size = type_.mid(bs + 1, bf - bs - 1).toInt(); - key_column = 0; - type = typeFromString(type_.toLower()); - is_text = (type == ColumnProperties::Chars || type == ColumnProperties::Text); -} - - -ColumnProperties::DataType ColumnProperties::typeFromString(const QString & n) { - if (n.indexOf("datetime") >= 0 || n.indexOf("timestamp") >= 0) return ColumnProperties::DateTime; - if (n.indexOf("date") >= 0) return ColumnProperties::Date; - if (n.indexOf("time") >= 0) return ColumnProperties::Time; - if (n.indexOf("int") >= 0) return ColumnProperties::Int; - if (n.indexOf("char") >= 0) return ColumnProperties::Chars; - if (n.indexOf("dec") >= 0 || n.indexOf("numeric") >= 0 || n.indexOf("real") >= 0 || - n.indexOf("float") >= 0 || n.indexOf("double") >= 0) return ColumnProperties::Float; - if (n.indexOf("text") >= 0) return ColumnProperties::Text; - if (n.indexOf("blob") >= 0) return ColumnProperties::Binary; - return ColumnProperties::Unknown; -} - - - - -QVariant SQLQueryModel::data(const QModelIndex & item, int role) const { - QVariant var = QSqlQueryModel::data(item, role); - //QVariant::Type t = var.type(); - /*if (t == QVariant::Date) return var.toDate().toString("dd.MM.yyyy"); - if (t == QVariant::Time) return var.toTime().toString("hh:mm:ss"); - if (t == QVariant::DateTime) return var.toDateTime().toString("dd.MM.yyyy hh:mm:ss");*/ - return var; -} - - -bool SQLQueryModel::setData(const QModelIndex& index, const QVariant & value, int role) { - if (value.isValid() && role == Qt::EditRole) { - QSqlQuery q(QSqlDatabase::database(conn_name)); - int col = mapColumn(index.column()); - ColumnProperties::DataType t = column_props[col].type; - bool quotes = (t == ColumnProperties::Chars || t == ColumnProperties::Text || - t == ColumnProperties::Date || t == ColumnProperties::Time || - t == ColumnProperties::ColumnProperties::DateTime); - QString val = value.toString(); - if (t == ColumnProperties::Date) val = value.toDate().toString("yyyy-MM-dd"); - if (t == ColumnProperties::Time) val = value.toTime().toString("hh:mm:ss"); - if (t == ColumnProperties::DateTime) val = value.toDateTime().toString("yyyy-MM-dd hh:mm:ss"); - if (!q.exec("UPDATE " + table_ + " SET " + column_props[col].name + "=" + - (quotes ? "'" : "") + val + (quotes ? "'" : "") + - " WHERE " + column_props[0].name + "=" + record(index.row()).value(0).toString() + ";")) { - qDebug() << "[UPDATE]" << q.lastQuery() << "Error:" << q.lastError(); - return false; - } - //qDebug() << "[UPDATE]" << q.lastQuery(); - dataChanged(index, index); - updateTable(true); - emit tableChanged(); - return true; - } - return false; -} - - - - -SQLUniEdit::SQLUniEdit(const ColumnProperties & prop, const QString & conn_name, QWidget * parent): QWidget(parent), prop_(prop), connection_name(conn_name) { - wtext = 0; wint = 0; wfloat = 0; wdate = 0; wtime = 0; wdatetime = 0; wrelation = 0; - setProp(prop_); - w_ << (QWidget **)&wtext << (QWidget **)&wint << (QWidget **)&wfloat << (QWidget **)&wdate << (QWidget **)&wtime << (QWidget **)&wdatetime << (QWidget **)&wrelation; -} - - -void SQLUniEdit::setProp(const ColumnProperties & p) { - for (int i = 0; i < w_.size(); ++i) deleteW(*w_[i]); - wtext = 0; wint = 0; wfloat = 0; wdate = 0; wtime = 0; wdatetime = 0; wrelation = 0; - prop_ = p; - if (prop_.isRelation()) { - wrelation = new QComboBox(this); - wrelation->installEventFilter(this); - for (int i = 0; i < prop_.relation_list.size(); ++i) - wrelation->addItem(prop_.relation_list[i].second, prop_.relation_list[i].first); - connect(wrelation, SIGNAL(currentIndexChanged(int)), this, SLOT(value_int(int))); - } else { - ColumnProperties::DataType t = prop_.getType(); - switch (t) { - case ColumnProperties::Int: wint = new QSpinBox(this); wint->setRange(-0x7FFFFFFF, 0x7FFFFFFF); connect(wint, SIGNAL(valueChanged(int)), this, SLOT(value_int(int))); break; - case ColumnProperties::Float: wfloat = new QDoubleSpinBox(this); wfloat->setRange(-1E+300, 1E+300); wfloat->setDecimals(2); connect(wfloat, SIGNAL(valueChanged(double)), this, SLOT(value_float(double))); break; - case ColumnProperties::Date: wdate = new QDateEdit(this); wdate->setDisplayFormat("dd.MM.yyyy"); wdate->setCalendarPopup(true); wdate->setDate(QDate::currentDate()); connect(wdate, SIGNAL(dateChanged(QDate)), this, SLOT(value_date(QDate))); break; - case ColumnProperties::Time: wtime = new QTimeEdit(this); wtime->setDisplayFormat("hh:mm:ss"); wtime->setTime(QTime::currentTime()); connect(wtime, SIGNAL(timeChanged(QTime)), this, SLOT(value_time(QTime))); break; - case ColumnProperties::DateTime: wdatetime = new QDateTimeEdit(this); wdatetime->setDisplayFormat("dd.MM.yyyy hh:mm:ss"); wdatetime->setCalendarPopup(true); wdatetime->setDateTime(QDateTime::currentDateTime()); connect(wdatetime, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(value_datetime(QDateTime))); break; - case ColumnProperties::Chars: - case ColumnProperties::Text: - case ColumnProperties::Unknown: - default: wtext = new QLineEdit(this); connect(wtext, SIGNAL(textChanged(QString)), this, SLOT(value_text(QString))); break; - } - } - for (int i = 0; i < w_.size(); ++i) - if (*w_[i]) (*w_[i])->setHidden(false); - resizeEvent(0); -} - - -QString SQLUniEdit::value(bool for_insert) { - QString ret; - ColumnProperties::DataType t = (for_insert ? prop_.type : prop_.getType()); - bool quotes = (t == ColumnProperties::Chars || t == ColumnProperties::Text || - t == ColumnProperties::Date || t == ColumnProperties::Time || - t == ColumnProperties::ColumnProperties::DateTime); - if (quotes) ret = "'"; - if (prop_.isRelation()) - if (for_insert) - ret += wrelation->itemData(wrelation->currentIndex()).toString(); - else - ret += wrelation->currentText(); - else { - if (wint != 0) ret += QString::number(wint->value()); - else { - if (wfloat != 0) ret += QString::number(wfloat->value()); - else { - if (wdate != 0) ret += wdate->date().toString("yyyy-MM-dd"); - else { - if (wtime != 0) ret += wtime->time().toString("hh:mm:ss"); - else { - if (wdatetime != 0) ret += wdatetime->dateTime().toString("yyyy-MM-dd hh:mm:ss"); - else { - ret += wtext->text(); - } - } - } - } - } - } - if (quotes) ret += "'"; - if (ret == "''") ret.clear(); - return ret; -} - - -bool SQLUniEdit::eventFilter(QObject * o, QEvent * e) { - if (e->type() == QEvent::MouseButtonPress) - updateRelation(); - return QWidget::eventFilter(o, e); -} - - -void SQLUniEdit::setValue(const QVariant & value) { - if (prop_.isRelation()) return; - if (wint != 0) wint->setValue(value.toInt()); - else { - if (wfloat != 0) wfloat->setValue(value.toDouble()); - else { - if (wdate != 0) wdate->setDate(value.toDate()); - else { - if (wtime != 0) wtime->setTime(value.toTime()); - else { - if (wdatetime != 0) wdatetime->setDateTime(value.toDateTime()); - else { - wtext->setText(value.toString()); - } - } - } - } - } - -} - - -void SQLUniEdit::updateRelation() { - prop_.relation_list = SQLTableWidget::getColumnValues(prop_.relation_table, prop_.relation_key, prop_.relation_column, connection_name); - int pi = wrelation->currentIndex(); - wrelation->blockSignals(true); - wrelation->clear(); - for (int i = 0; i < prop_.relation_list.size(); ++i) - wrelation->addItem(prop_.relation_list[i].second, prop_.relation_list[i].first); - wrelation->setCurrentIndex(pi); - wrelation->blockSignals(false); -} - - - -SQLNewEdit::SQLNewEdit(const ColumnProperties & prop, const QString & conn_name, QWidget * parent): QWidget(parent), prop_(prop) { - line = new SQLUniEdit(prop, conn_name); - line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - check = new QCheckBox(); - check->setChecked(true); - check->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - connect(check, SIGNAL(toggled(bool)), line, SLOT(setEnabled(bool))); - QLayout * lay = new QHBoxLayout(); - lay->addWidget(check); - lay->addWidget(line); - lay->setContentsMargins(0, 0, 0, 0); - lay->setSpacing(0); - setLayout(lay); - setProp(prop); - check->setChecked(!prop.primary); -} - - -void SQLNewEdit::setProp(const ColumnProperties & p) { - prop_ = p; - line->setProp(p); - check->setEnabled(p.optional); - if (!check->isEnabled()) check->setChecked(true); -} - - - -SQLFilterEdit::SQLFilterEdit(const ColumnProperties & prop, const QString & conn_name, QWidget * parent): QWidget(parent), prop_(prop) { - line = new SQLUniEdit(prop, conn_name); - line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - combo = new QComboBox(); - combo->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); - QStringList sl; - sl << " " << "=" << trUtf8("≈") << trUtf8("≠") << ">" << trUtf8("≥") << "<" << trUtf8("≤"); - combo->addItems(sl); - combo->setCurrentIndex(0); - connect(line, SIGNAL(valueChanged(QVariant)), this, SIGNAL(filterChanged())); - connect(line, SIGNAL(valueChanged(QVariant)), this, SLOT(value_changed())); - connect(combo, SIGNAL(currentIndexChanged(int)), this, SIGNAL(filterChanged())); - QLayout * lay = new QHBoxLayout(); - lay->addWidget(combo); - lay->addWidget(line); - lay->setContentsMargins(0, 0, 0, 0); - lay->setSpacing(2); - setLayout(lay); - setProp(prop); -} - - -QString SQLFilterEdit::filter() const { - QString ret; - if (combo->currentIndex() == 0) return ret; - ret = prop_.fullName(); - switch (combo->currentIndex()) { - case 1: ret.append("="); break; - case 2: ret.append("="); break; - case 3: ret.append("!="); break; - case 4: ret.append(">"); break; - case 5: ret.append(">="); break; - case 6: ret.append("<"); break; - case 7: ret.append("<="); break; - }; - QString val = line->value(); - if (prop_.is_text && combo->currentIndex() == 2) { - ret.chop(1); - ret.append(" LIKE '%"); - ret.append(val.mid(1, val.length() - 2)); - ret.append("%'"); - } else - ret.append(val); - return ret; -} - - -void SQLFilterEdit::clear() { - line->setValue(QVariant()); - combo->setCurrentIndex(0); - -} - - - - -SQLItemDelegate::SQLItemDelegate(QList & cp, QVector & ci, bool & ro, const QString & conn_name, QObject * parent): - QStyledItemDelegate(parent), column_props(cp), column_indexes(ci), read_only(ro), connection_name(conn_name) {;} - - -QWidget * SQLItemDelegate::createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const { - if (read_only) return 0; - ColumnProperties & cp(column_props[mapColumn(index.column())]); - if (cp.isRelation()) { - cp.relation_list = SQLTableWidget::getColumnValues(cp.relation_table, cp.relation_key, cp.relation_column, connection_name); - QComboBox * w = new QComboBox(parent); - w->setGeometry(option.rect); - for (int i = 0; i < cp.relation_list.size(); ++i) { - w->addItem(cp.relation_list[i].second, cp.relation_list[i].first); - if (index.data().toString() == cp.relation_list[i].second) - w->setCurrentIndex(i); - } - return w; - } else { - QWidget * w = QStyledItemDelegate::createEditor(parent, option, index); - if (qobject_cast(w)) {qobject_cast(w)->setDisplayFormat("hh:mm:ss");} - else if (qobject_cast(w)) {qobject_cast(w)->setCalendarPopup(true); qobject_cast(w)->setDisplayFormat("dd.MM.yyyy");} - else if (qobject_cast(w)) {qobject_cast(w)->setCalendarPopup(true); qobject_cast(w)->setDisplayFormat("dd.MM.yyyy hh:mm:ss");} - return w; - } - return 0; -} - - -QString SQLItemDelegate::displayText(const QVariant & value, const QLocale & locale) const { - QVariant::Type t = value.type(); - if (t == QVariant::Date) return value.toDate().toString("dd.MM.yyyy"); - if (t == QVariant::Time) return value.toTime().toString("hh:mm:ss"); - if (t == QVariant::DateTime) return value.toDateTime().toString("dd.MM.yyyy hh:mm:ss"); - return QStyledItemDelegate::displayText(value, locale); -} - - -void SQLItemDelegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const { - if (qobject_cast(editor)) { - model->setData(index, qobject_cast(editor)->itemData(qobject_cast(editor)->currentIndex())); - return; - } - QStyledItemDelegate::setModelData(editor, model, index); -} - - - -SQLTableWidget::SQLTableWidget(QWidget * parent): QWidget(parent), filters_group(this) { - ui = new Ui::SQLTableWidget(); - ui->setupUi(this); - model = 0; - timer = 0; - connection_name = QSqlDatabase::defaultConnection; - filters_active = first_update = true; - table_opened = read_only = false; - ui->labelNew->setFixedSize(preferredIconSize(1.2, this)); - ui->labelFilter->setFixedSize(preferredIconSize(1.2, this)); - ui->view->installEventFilter(this); - ui->view->viewport()->installEventFilter(this); - ui->view->horizontalHeader()->setSortIndicator(0, Qt::AscendingOrder); - ui->view->horizontalHeader()->viewport()->installEventFilter(this); - ui->view->setItemDelegate(new SQLItemDelegate(column_props, column_indexes, read_only, connection_name)); - ui->view->horizontalHeader()->setItemDelegate(new QItemDelegate()); - ui->view->verticalHeader()->setDefaultSectionSize(fontHeight() * 1.5); - //qDebug() << view->horizontalHeader()->itemDelegate(); - //qDebug() << fontMetrics().elidedText(, Qt::ElideNone, 30, Qt::TextWordWrap); - setTableVisible(false); - connect(ui->view->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), this, SLOT(header_sectionResized(int, int, int))); - connect(ui->view->horizontalHeader(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(header_sortIndicatorChanged(int, Qt::SortOrder))); - connect(ui->view->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(scrolled(int))); - - - //act_add.setText(trUtf8("Add ...")); - //act_del.setText(trUtf8("Remove selected")); - action_del = new QAction(QIcon(":/icons/edit-delete.png"), trUtf8("Remove selected"), this); - connect(action_del, SIGNAL(triggered(bool)), this, SLOT(del_triggered())); - popup_menu.addAction(action_del); - ui->actionFilter_AND->setChecked(true); - filters_group.addAction(ui->actionFilter_AND); - filters_group.addAction(ui->actionFilter_OR); - connect(&filters_group, SIGNAL(triggered(QAction * )), this, SLOT(updateTable())); - popup_filter.addAction(ui->actionFiltersClear); - popup_filter.addSeparator(); - popup_filter.addAction(ui->actionFilter_AND); - popup_filter.addAction(ui->actionFilter_OR); - ui->buttonFilterConfig->setMenu(&popup_filter); - //connect(&act_add, SIGNAL(triggered(bool)), this, SLOT(add_triggered())); - //connect(&act_del, SIGNAL(triggered(bool)), this, SLOT(del_triggered())); -} - - -SQLTableWidget::~SQLTableWidget() { - stopTimer(); - if (model != 0) delete model; -} - - -bool SQLTableWidget::eventFilter(QObject * o, QEvent * e) { - if (o == ui->view) { - if (e->type() == QEvent::KeyPress) { - QKeyEvent * ke = (QKeyEvent * )e; - if (ke->key() == Qt::Key_Home) {ui->view->selectRow(0); return true;} - if (ke->key() == Qt::Key_End) {ui->view->selectRow(ui->view->verticalHeader()->count() - 1); return true;} - } - } - if (o == ui->view->viewport()) { - if (e->type() == QEvent::MouseButtonPress) { - QMouseEvent * me = (QMouseEvent * )e; - if (me->button() == Qt::RightButton) { - action_del->setVisible(!read_only); - popup_menu.popup(me->globalPos()); - } - } - } - if (o == ui->view->horizontalHeader()->viewport()) { - QMouseEvent * me = (QMouseEvent * )e; - if (e->type() == QEvent::MouseButtonPress) - pp = me->pos(); - if (e->type() == QEvent::MouseButtonRelease) { - if ((me->pos() - pp).manhattanLength() < QApplication::startDragDistance()) { - if (me->button() == Qt::LeftButton) { - int ci = ui->view->horizontalHeader()->logicalIndexAt(me->pos()), - ri = ui->view->horizontalHeader()->logicalIndexAt(me->pos() + QPoint(3, 0)), - li = ui->view->horizontalHeader()->logicalIndexAt(me->pos() - QPoint(3, 0)); - //qDebug() << ci << ri << li; - if ((ci < 0) || (ci >= ui->view->horizontalHeader()->count()) || (ci != ri) || (ci != li) || (tm.elapsed() <= QApplication::doubleClickInterval())) { - tm.restart(); - return QObject::eventFilter(o, e); - } - tm.restart(); - Qt::SortOrder o = Qt::AscendingOrder; - if (ui->view->horizontalHeader()->sortIndicatorSection() == ci && - ui->view->horizontalHeader()->sortIndicatorOrder() == Qt::AscendingOrder) - o = Qt::DescendingOrder; - ui->view->horizontalHeader()->setSortIndicator(ci, o); - return true; - } - if (me->button() == Qt::RightButton) { - popup_col.clear(); - for (int i = 0; i < column_props.size(); ++i) { - QPair ctr = trColumn(column_props[i].name); - QAction * a = popup_col.addAction(ctr.first, this, SLOT(column_triggered(bool))); - a->setToolTip(ctr.second); - a->setCheckable(true); - a->setChecked(column_props[i].visible); - a->setData(i); - } - popup_col.popup(me->globalPos()); - return true; - } - } else return true; - } - } - return QWidget::eventFilter(o, e); -} - - -void SQLTableWidget::timerEvent(QTimerEvent * ) { - setTableName(table_); -} - - -void SQLTableWidget::setTableName(const QString & t) { - ui->labelEmpty->setText(tr("Table \"%1\" doesn`t exists!").arg(t)); - stopTimer(); - table_opened = false; - first_update = true; - table_ = t; - if (!QSqlDatabase::database(connection_name).isOpen()) { - qDebug() << "[setTableName] Database in not opened!"; - setTableVisible(false); - timer = startTimer(1000); - return; - } - model = new SQLQueryModel(table_, connection_name, column_props, column_indexes, this); - connect(model, SIGNAL(updateTable(bool)), this, SLOT(updateTable(bool))); - connect(model, SIGNAL(tableChanged()), this, SIGNAL(tableChanged())); - //model->setTable(table_); - cquery = "SELECT * FROM " + table_ + ";"; - model->setQuery(cquery, QSqlDatabase::database(connection_name)); - ui->view->setModel(model); - connect(ui->view->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), this, SIGNAL(selectionChanged()), Qt::UniqueConnection); - //((QSqlQueryModel * )model)->setQuery(QSqlQuery("SELECT id FROM " + table_ + ";")); - setTableVisible(checkTable()); - updateTable(); - foreach (const QString & wr, wait_rels) { - QStringList wrl = wr.split(";"); - addRelation(wrl[0], wrl[1], wrl[2], wrl[3]); - } - QMapIterator cnit(col_vis); - while (cnit.hasNext()) { - cnit.next(); - setColumnVisible(cnit.key(), cnit.value()); - } -} - - -bool SQLTableWidget::checkTable() { - table_opened = false; - QSqlDatabase db = QSqlDatabase::database(connection_name); - if (db.driver() == 0) return false; - bool te = db.tables(QSql::Tables).contains(table_, Qt::CaseInsensitive ); - //qDebug() << "tables:" << db.tables(QSql::Tables) << table_ << table_opened; - if (!te) { - timer = startTimer(1000); - return false; - } - /*if (!q.exec("SHOW TABLES")) { - qDebug() << "[SHOW TABLES]" << q.lastError(); - timer = startTimer(1000); - return false; - } - while (q.next()) { - //qDebug() << q.value(0); - if (q.value(0) == table_) - {table_opened = true; break;} - } - if (!table_opened) { - timer = startTimer(1000); - return false; - }*/ - QSqlRecord header = db.record(table_); - QString pin = db.primaryIndex(table_).fieldName(0); - table_opened = true; - column_props.clear(); - for (int i = 0; i < header.count(); ++i) { - QSqlField f = header.field(i); - column_props << ColumnProperties(table_, - f.type() == QVariant::String ? "text" : QVariant::typeToName(f.type()), - f.name(), - f.defaultValue().toString(), - f.isAutoValue(), - f.name() == pin, - f.requiredStatus() == QSqlField::Optional - ); - } - /*if (!q.exec("DESCRIBE " + table_ + ";")) { - qDebug() << "[DESCRIBE " + table_ + "]" << q.lastError(); - timer = startTimer(1000); - return false; - } - while (q.next()) { - column_props << ColumnProperties(table_, - q.value(1).toString().toLower(), - q.value(0).toString().toLower(), - q.value(4).toString().toLower(), - q.value(5).toString().toLower().indexOf("auto_increment") >= 0, - q.value(3).toString().toLower().indexOf("pri") >= 0); - }*/ - //ui->labelNew->setFixedWidth(qMax(ui->view->verticalHeader()->sizeHint().width() + 2, 16)); - //ui->labelFilter->setFixedWidth(qMax(ui->view->verticalHeader()->sizeHint().width() + 2, 16)); - ui->scrollAreaNew->setFixedHeight(QLineEdit().sizeHint().height() + 2); - ui->scrollAreaFilter->setFixedHeight(QLineEdit().sizeHint().height() + 2); - qDeleteAll(column_news); - qDeleteAll(column_filters); - column_news.clear(); - column_filters.clear(); - SQLNewEdit * le = 0; - for (int i = 0; i < column_props.size(); ++i) { - le = new SQLNewEdit(column_props[i], connection_name); - le->setFixedWidth(ui->view->horizontalHeader()->sectionSize(i)); - column_news.push_back(le); - ui->layoutNew->insertWidget(i, le); - } - for (int i = 0; i < column_props.size(); ++i) { - SQLFilterEdit * fe = new SQLFilterEdit(column_props[i], connection_name); - fe->setFixedWidth(ui->view->horizontalHeader()->sectionSize(i)); - column_filters.push_back(fe); - ui->layoutFilter->insertWidget(i, fe); - connect(fe, SIGNAL(filterChanged()), this, SLOT(updateTable())); - } - return true; -} - - -QStringList SQLTableWidget::getTableColumns(const QString & t) { - QStringList ret; - QSqlDatabase db = QSqlDatabase::database(connection_name); - QSqlRecord header = db.record(t); - for (int i = 0; i < header.count(); ++i) - ret << header.field(i).name(); - return ret; -} - - -QString SQLTableWidget::getColumnType(const QString & t, const QString & c) { - QSqlDatabase db = QSqlDatabase::database(connection_name); - QSqlRecord header = db.record(t); - for (int i = 0; i < header.count(); ++i) { - QSqlField f = header.field(i); - if (f.name() != c) continue; - return (f.type() == QVariant::String ? "text" : QVariant::typeToName(f.type())); - } - return QString(); -} - - -QList > SQLTableWidget::getColumnValues(const QString &t, const QString &k, const QString &c, const QString &conn_name) { - QList > ret; - QSqlQuery q(QSqlDatabase::database(conn_name)); - if (!q.exec("SELECT " + t + "." + k + "," + t + "." + c + " FROM " + t + ";")) - return ret; - while (q.next()) - ret << QPair(q.value(0).toString(), q.value(1).toString()); - return ret; -} - - -QPair SQLTableWidget::trColumn(const QString & n) { - QPair ftr = fixed_translates.value(n); - if (!ftr.first.isEmpty()) - return ftr; - QPair trn = translates.value(n); - if (trn.first.isEmpty()) return QPair(n, ""); - return trn; -} - - -void SQLTableWidget::updateTable(bool save_selection) { - if (!filters_active || !table_opened) return; - int vp = ui->view->verticalScrollBar()->value(); - int hp = ui->view->horizontalScrollBar()->value(); - //bool focus = view->hasFocus(); - QModelIndex csi; - QModelIndexList sl; - if (save_selection) { - csi = ui->view->selectionModel()->currentIndex(); - sl = ui->view->selectionModel()->selectedRows(); - } - if (custom_query.isEmpty()) { - QString cr = columnRelations(), cf = columnFilters(); - bool where = !cr.isEmpty() || !cf.isEmpty(), and_ = !cr.isEmpty() && !cf.isEmpty(); - cquery = "SELECT " + columnNames() + " FROM " + tableNames() + - (where ? " WHERE " : "") + cr + (and_ ? " AND " : "") + cf + " ORDER BY " + - column_props[ui->view->horizontalHeader()->sortIndicatorSection()].fullName() + - (ui->view->horizontalHeader()->sortIndicatorOrder() == Qt::DescendingOrder ? " DESC" : " ASC") + ";"; - } else - cquery = custom_query; - //qDebug() << cquery; - model->setQuery(cquery, QSqlDatabase::database(connection_name)); - if (model->lastError().isValid()) - qDebug() << model->lastError(); - if (first_update) { - ui->view->resizeColumnsToContents(); - for (int i = 0; i < ui->view->horizontalHeader()->count(); ++i) - if (ui->view->horizontalHeader()->sectionSize(i) < 100) - ui->view->horizontalHeader()->resizeSection(i, 100); - first_update = false; - } - //ui->labelNew->setFixedWidth(qMax(ui->view->verticalHeader()->sizeHint().width() + 2, 16)); - //ui->labelFilter->setFixedWidth(qMax(ui->view->verticalHeader()->sizeHint().width() + 2, 16)); - ui->layoutNew->invalidate(); - if (save_selection) { - QItemSelectionModel * sm = ui->view->selectionModel(); - foreach (const QModelIndex & i, sl) - sm->select(i, QItemSelectionModel::Select | QItemSelectionModel::Rows); - sm->setCurrentIndex(csi, QItemSelectionModel::Select); - //ui->view->setFocus(); - } - if (custom_query.isEmpty()) { - for (int i = 0; i < model->columnCount(); ++i) { - QPair ctr = trColumn(column_props[mapColumn(i)].name); - model->setHeaderData(i, Qt::Horizontal, ctr.first, Qt::DisplayRole); - model->setHeaderData(i, Qt::Horizontal, ctr.second, Qt::ToolTipRole); - } - } else { - if (custom_col_names.isEmpty()) { - QSqlRecord header = model->record(); - for (int i = 0; i < header.count(); ++i) { - QSqlField f = header.field(i); - QPair ctr = trColumn(f.name()); - model->setHeaderData(i, Qt::Horizontal, ctr.first, Qt::DisplayRole); - model->setHeaderData(i, Qt::Horizontal, ctr.second, Qt::ToolTipRole); - } - } else { - for (int i = 0; i < qMin(custom_col_names.size(), model->columnCount()); ++i) { - QPair ctr = trColumn(custom_col_names[i]); - model->setHeaderData(i, Qt::Horizontal, ctr.first, Qt::DisplayRole); - model->setHeaderData(i, Qt::Horizontal, ctr.second, Qt::ToolTipRole); - } - } - } - ui->view->verticalScrollBar()->setValue(vp); - ui->view->horizontalScrollBar()->setValue(hp); - //if (focus) view->setFocus(); -} - - -void SQLTableWidget::setConnectionName(const QString & conn_name) { - connection_name = conn_name; - ui->view->setItemDelegate(new SQLItemDelegate(column_props, column_indexes, read_only, connection_name)); -} - - -QString SQLTableWidget::tableNames() { - QString ret = table_; - QSet rtables; - for (int i = 0; i < column_props.size(); ++i) { - ColumnProperties & cp(column_props[i]); - if (!cp.visible || cp.relation_key.isEmpty() || cp.relation_column.isEmpty()) - continue; - if (rtables.contains(cp.relation_table)) - continue; - rtables << cp.relation_table; - ret.append("," + cp.relation_table); - } - return ret; -} - - -QString SQLTableWidget::columnNames() { - QString ret; - bool first = true; - column_indexes.clear(); - for (int i = 0; i < column_props.size(); ++i) { - ColumnProperties & cp(column_props[i]); - column_news[i]->setVisible(cp.visible); - column_filters[i]->setVisible(cp.visible); - if (!cp.visible && !cp.primary) - continue; - if (!first) ret.append(","); - first = false; - ret.append(cp.fullName()); - if (i > 0) column_indexes.push_back(i); - } - //qDebug() << column_indexes; - return ret; -} - - -QString SQLTableWidget::columnFilters() { - QString ret; - bool and_ = ui->actionFilter_AND->isChecked(); - for (int i = 0; i < column_props.size(); ++i) { - if (!column_filters[i]->isVisible() || column_filters[i]->isEmpty()) - continue; - if (!ret.isEmpty()) - ret.append(and_ ? " AND " : " OR "); - ret.append(column_filters[i]->filter()); - } - if (!ret.isEmpty()) { - ret.prepend("("); - ret.append(")"); - } - return ret; -} - - -QString SQLTableWidget::columnRelations() { - QString ret; - for (int i = 0; i < column_props.size(); ++i) { - ColumnProperties & cp(column_props[i]); - if (!cp.visible || cp.relation_key.isEmpty() || cp.relation_column.isEmpty()) - continue; - if (!ret.isEmpty()) - ret.append(" AND "); - ret.append(table_ + "." + cp.name + "="); - ret.append(cp.relation_table + "." + cp.relation_key); - } - if (!ret.isEmpty()) { - ret.prepend("("); - ret.append(")"); - } - return ret; -} - - -void SQLTableWidget::on_buttonAdd_clicked() { - QStringList values; - bool at_least = false; - for (int i = 0; i < column_props.size(); ++i) { - values.append(column_news[i]->value()); - if (!values.back().isEmpty()) at_least = true; - } - if (!at_least) return; - QString qs("INSERT INTO " + table_ + " ("); - bool first = true; - for (int i = 0; i < column_props.size(); ++i) { - if (values[i].isEmpty() || !column_news[i]->isEnabled()) continue; - if (!first) qs.append(","); - qs.append(column_props[i].name); - first = false; - } - qs.append(") VALUES("); - first = true; - for (int i = 0; i < column_props.size(); ++i) { - if (values[i].isEmpty() || !column_news[i]->isEnabled()) continue; - if (!first) qs.append(","); - qs.append(values[i]); - first = false; - } - qs.append(");"); - QSqlQuery q(QSqlDatabase::database(connection_name)); - if (q.exec(qs)) { - updateTable(); - emit tableChanged(); - } else - qDebug() << q.lastError(); - //qDebug() << q.lastQuery(); -} - - -void SQLTableWidget::on_actionFiltersClear_triggered() { - filters_active = false; - foreach (SQLFilterEdit * l, column_filters) - l->clear(); - filters_active = true; - updateTable(); -} - - -void SQLTableWidget::on_view_clicked(const QModelIndex & index) { - emit rowClicked(index.row()); - emit recordClicked(model->record(index.row())); -} - - -void SQLTableWidget::del_triggered() { - QModelIndexList si = ui->view->selectionModel()->selectedIndexes(); - QSet ids; - foreach (const QModelIndex & i, si) - ids << model->index(i.row(), 0).data().toInt(); - if (ids.isEmpty()) return; - QString qs("DELETE FROM " + table_ + " WHERE " + column_props[0].name + " IN ("); - bool first = true; - foreach (int i, ids) { - if (!first) qs.append(","); - qs.append(QString::number(i)); - first = false; - } - qs.append(");"); - //qDebug() << qs; return; - QSqlQuery q(QSqlDatabase::database(connection_name)); - if (q.exec(qs)) { - updateTable(); - emit tableChanged(); - } else - qDebug() << q.lastError(); -} - - -void SQLTableWidget::setColumnVisible(int ind, bool visible) { - if (!columnExists(ind)) return; - column_props[ind].visible = visible; - if (ind == 0) { - ui->view->setColumnHidden(0, !visible); - if (visible) ui->view->horizontalHeader()->resizeSection(0, ui->view->horizontalHeader()->defaultSectionSize()); - } - //qDebug() << ind << on; - updateTable(); - for (int i = 0; i < ui->view->horizontalHeader()->count(); ++i) { - column_news[mapColumn(i)]->setFixedWidth(ui->view->horizontalHeader()->sectionSize(i)); - column_filters[mapColumn(i)]->setFixedWidth(ui->view->horizontalHeader()->sectionSize(i)); - } -} - - -bool SQLTableWidget::addRelation(const QString & this_column, const QString & other_table, const QString & other_key, const QString & other_column) { - QString wr = this_column + ";" + other_table + ";" + other_key + ";" + other_column; - if (!wait_rels.contains(wr)) wait_rels << wr; - ColumnProperties * cp = const_cast(columnProperty(this_column)); - if (cp == 0) return false; - cp->relation_table = other_table; - cp->relation_key = other_key; - cp->relation_column = other_column; - cp->relation_type = ColumnProperties::typeFromString(getColumnType(other_table, other_column)); - cp->relation_list = getColumnValues(other_table, other_key, other_column, connection_name); - for (int i = 0; i < column_props.size(); ++i) - column_news[i]->setProp(column_props[i]); - for (int i = 0; i < column_props.size(); ++i) - column_filters[i]->setProp(column_props[i]); - updateTable(); - return true; -} - - -void SQLTableWidget::addTranslation(const QString & file) { - QPIConfig conf(file, QIODevice::ReadOnly, QPIConfig::Config); - QPIConfig::Branch ae = conf.allLeaves(); - foreach (QPIConfig::Entry * e, ae) - translates[e->name()] = QPair(e->value(), e->comment()); -} - - -void SQLTableWidget::addFixedColumnTranslation(const QString & col_name, const QString & col_tr, const QString & col_tt) { - fixed_translates[col_name] = QPair(col_tr, col_tt); - updateTable(); -} - - -void SQLTableWidget::selectId(int id) { - if (!model) return; - for (int i = 0; i < model->rowCount(); ++i) - if (model->data(model->index(i, 0)).toInt() == id) { - ui->view->selectRow(i); - break; - } -} - - -void SQLTableWidget::setAdditionalActions(QList a) { - foreach (QAction * i, add_actions) - popup_menu.removeAction(i); - add_actions = a; - popup_menu.addActions(a); -} - - -void SQLTableWidget::setCustomQuery(const QString & q) { - custom_query = q; - updateTable(); -} - - -QString SQLTableWidget::preprocessScript(QString text) { - QTextStream s(&text, QIODevice::ReadOnly); - QString out; - int ce = 0; - while (!s.atEnd()) { - QString line = s.readLine(); - ce = line.indexOf("--"); - if (ce >= 0) - line.chop(line.length() - ce); - out.append(line).append("\n"); - } - int cs = out.indexOf("/*"); - while (cs >= 0) { - ce = out.indexOf("*/", cs); - if (ce > cs) - out.remove(cs, ce - cs + 2); - cs = out.indexOf("/*"); - } - //qDebug() << out; - return out; -} - - -bool SQLTableWidget::executeScript(const QString & text_, QSqlDatabase db, bool skip_errors, bool sqlite) { - QString text = preprocessScript(text_); - int ls = 0, le = text.indexOf(';'); - QSqlQuery q(db); - db.transaction(); - while (le > 0) { - QString line = text.mid(ls, le - ls + 1).trimmed(), fword; - if (sqlite) line.replace("auto_increment", "autoincrement"); - QTextStream(&line, QIODevice::ReadOnly) >> fword; - fword = fword.trimmed().toLower(); - if (fword == "exec" || fword == "execute") { - line = line.right(line.length() - fword.length()).trimmed(); - if (line.endsWith(";")) line.chop(1); - line = line.trimmed(); - if (line.endsWith("'") || line.endsWith("\"")) line.chop(1); - if (line.startsWith("'") || line.startsWith("\"")) line.remove(0, 1); - executeScriptFile(line, db, skip_errors, sqlite); - } else { - if (!q.exec(line)) { - qDebug() << q.lastError(); - if (!skip_errors) - return false; - } - } - ls = le + 1; - le = text.indexOf(';', ls); - } - db.commit(); - return true; -} - - -bool SQLTableWidget::executeScriptFile(const QString & file, QSqlDatabase db, bool skip_errors, bool sqlite) { - QFile f(_dir + file); - if (!f.open(QIODevice::ReadOnly)) { - qDebug() << "Can`t open file" << file << "!"; - return false; - } - QString pd = _dir; - _dir = QFileInfo(f).absolutePath() + "/"; - QByteArray ba = f.readAll(); - bool ok = executeScript(QString::fromUtf8(ba.data(), ba.size()), db, skip_errors, sqlite); - f.close(); - _dir = pd; - return ok; -} - - -void SQLTableWidget::column_triggered(bool on) { - setColumnVisible(((QAction * )sender())->data().toInt(), on); -} - - -void SQLTableWidget::header_sectionResized(int logicalIndex, int oldSize, int newSize) { - column_news[mapColumn(logicalIndex)]->setFixedWidth(newSize); - column_filters[mapColumn(logicalIndex)]->setFixedWidth(newSize); -} - - -void SQLTableWidget::header_sortIndicatorChanged(int logicalIndex, Qt::SortOrder order) { - updateTable(); -} - - -bool SQLTableWidget::connectToDatabase(const QString & config, const QString & conn_name) { - bool ok = true; - { - QPIConfig conf(config, QIODevice::ReadOnly, QPIConfig::Config); - if (!conf.isOpen()) - ok = false; - else { - QSqlDatabase base = QSqlDatabase::addDatabase(conf.getValue("driver", "QMYSQL").stringValue(), conn_name); - if (!base.isValid()) { - qDebug() << "[QSqlDatabase::addDatabase] Error:" << base.lastError(); - ok = false; - } else { - base.setHostName(conf.getValue("host", "").stringValue()); - base.setPort(conf.getValue("port", -1)); - base.setDatabaseName(conf.getValue("database", "").stringValue()); - if (!base.open(conf.getValue("login", "").stringValue(), conf.getValue("password", "").stringValue())) { - qDebug() << "[QSqlDatabase::open] Error:" << base.lastError(); - ok = false; - } - } - } - } - if (!ok) - QSqlDatabase::removeDatabase(conn_name); - /*QSqlQuery q; - QString dbname = conf.getValue("database", "").stringValue(); - bool dbex = false; - if (!q.exec("SHOW DATABASES;")) { - qDebug() << "[SHOW DATABASES]" << q.lastError(); - return false; - } - while (q.next()) - if (q.value(0) == dbname) - {dbex = true; break;} - if (!dbex) { - if (!q.exec("CREATE DATABASE " + dbname + ";")) { - qDebug() << "[CREATE DATABASE]" << q.lastError(); - return false; - } - } - if (!q.exec("USE " + dbname + ";")) { - qDebug() << "[USE]" << q.lastError(); - return false; - }*/ - return ok; -} - - -QTableView * SQLTableWidget::tableView() { - return ui->view; -} - - -bool SQLTableWidget::lineNewVisible() const { - return ui->widgetNew->isVisibleTo(ui->pageTable); -} - - -bool SQLTableWidget::lineFilterVisible() const { - return ui->widgetFilter->isVisibleTo(ui->pageTable); -} - - -QSqlRecord SQLTableWidget::currentRecord() const { - if (model) return model->record(ui->view->currentIndex().row()); - return QSqlRecord(); -} - - -void SQLTableWidget::setTableVisible(bool on) { - ui->stackedWidget->setCurrentIndex(on ? 1 : 0); -} - - -void SQLTableWidget::setLineNewVisible(bool on) { - ui->widgetNew->setVisible(on); - ui->buttonAdd->setVisible(on); -} - - -void SQLTableWidget::setLineFilterVisible(bool on) { - ui->widgetFilter->setVisible(on); - ui->buttonFilterConfig->setVisible(on); -} - - -void SQLTableWidget::setReadOnly(bool yes) { - read_only = yes; - ui->scrollAreaNew->setDisabled(yes); - ui->buttonAdd->setDisabled(yes); -} - - -void SQLTableWidget::scrolled(int value) { - ui->scrollAreaNew->horizontalScrollBar()->setValue(value); - ui->scrollAreaFilter->horizontalScrollBar()->setValue(value); -} diff --git a/test/qad/sql_table/sql_table_widget.h b/test/qad/sql_table/sql_table_widget.h deleted file mode 100644 index b518ee0..0000000 --- a/test/qad/sql_table/sql_table_widget.h +++ /dev/null @@ -1,335 +0,0 @@ -#ifndef MYSQLTABLE_H -#define MYSQLTABLE_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 "qpiconfig.h" - - -struct ColumnProperties { - enum DataType {Unknown, Int, Float, Chars, Text, Binary, Date, Time, DateTime}; - ColumnProperties(const QString & table_, const QString & type_, const QString & name_, const QString & def_, bool auto_, bool prim_, bool option_); - bool isRelation() const {return (!relation_key.isEmpty() && !relation_column.isEmpty());} - QString shortName() const {if (!isRelation()) return name; return relation_column;} - QString fullName() const {if (!isRelation()) return table + "." + name; return (relation_table.isEmpty() ? "" : relation_table + ".") + relation_column;} - DataType getType() const {if (!isRelation()) return type; return relation_type;} - static DataType typeFromString(const QString & n); - - DataType type; - int size; - bool auto_increment; - bool primary; - bool optional; - bool visible; - bool is_text; - QString table; - QString name; - QString relation_table; - QString relation_key; - QString relation_column; - QList > relation_list; // - DataType relation_type; - int key_column; - QString def; -}; - - - - -struct TableColumns { - int mapColumn(int abs_ind) const {if (abs_ind <= 0 || abs_ind >= column_indexes.size() + 1) return 0; return column_indexes[abs_ind - 1];} - QVector column_indexes; - QList columns; -}; - - - - -class SQLQueryModel: public QSqlQueryModel { - Q_OBJECT -public: - explicit SQLQueryModel(QString & t, QString & conn, QList & cp, QVector & ci, QObject* parent = 0): QSqlQueryModel(parent), table_(t), column_props(cp), column_indexes(ci), conn_name(conn) {;} - virtual QVariant data(const QModelIndex & item, int role = Qt::DisplayRole) const; -protected: - virtual Qt::ItemFlags flags(const QModelIndex & ) const {return (Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);} - virtual bool setData(const QModelIndex & index, const QVariant& value, int role = Qt::EditRole); - int mapColumn(int abs_ind) const {if (abs_ind <= 0 || abs_ind >= column_indexes.size() + 1) return 0; return column_indexes[abs_ind - 1];} - QString & table_; - QList & column_props; - QVector & column_indexes; - QString & conn_name; -signals: - void updateTable(bool save_selection); - void tableChanged(); -}; - - - - -class SQLUniEdit: public QWidget { - Q_OBJECT -public: - explicit SQLUniEdit(const ColumnProperties & prop, const QString & conn_name, QWidget * parent = 0); - ~SQLUniEdit() {for (int i = 0; i < w_.size(); ++i) deleteW(*w_[i]);} - void setProp(const ColumnProperties & p); - QString value(bool for_insert = false); - void clear() {setValue(QVariant());} -private: - void deleteW(QWidget * w) {if (w != 0) delete w;} - void resizeW(QWidget * w) {if (w != 0) w->setGeometry(QRect(0, 0, width(), height()));} - void resizeEvent(QResizeEvent * ) {for (int i = 0; i < w_.size(); ++i) resizeW(*w_[i]);} - bool eventFilter(QObject * o, QEvent * e); - QLineEdit * wtext; - QSpinBox * wint; - QDoubleSpinBox * wfloat; - QDateEdit * wdate; - QTimeEdit * wtime; - QDateTimeEdit * wdatetime; - QComboBox * wrelation; - QList w_; - ColumnProperties prop_; - QString connection_name; -private slots: - void value_text(QString value) {valueChanged(value);} - void value_int(int value) {valueChanged(value);} - void value_float(double value) {valueChanged(value);} - void value_date(QDate value) {valueChanged(value);} - void value_time(QTime value) {valueChanged(value);} - void value_datetime(QDateTime value) {valueChanged(value);} -public slots: - void setValue(const QVariant & value); - void updateRelation(); -signals: - void valueChanged(const QVariant & ); -}; - - - - -class SQLNewEdit: public QWidget { - Q_OBJECT - friend class SQLTableWidget; -public: - explicit SQLNewEdit(const ColumnProperties & prop, const QString & conn_name, QWidget * parent = 0); - ~SQLNewEdit() {delete line; delete check;} - void setProp(const ColumnProperties & p); - bool isEnabled() const {return check->isChecked();} - QString value() const {return line->value(true);} - void clear() {line->clear();} -private: - ColumnProperties prop_; - SQLUniEdit * line; - QCheckBox * check; -}; - - - - -class SQLFilterEdit: public QWidget { - Q_OBJECT - friend class SQLTableWidget; -public: - explicit SQLFilterEdit(const ColumnProperties & prop, const QString & conn_name, QWidget * parent = 0); - ~SQLFilterEdit() {delete line; delete combo;} - void setProp(const ColumnProperties & p) {prop_ = p; line->setProp(p);} - QString filter() const; - bool isEmpty() const {return line->value().isEmpty() || combo->currentIndex() == 0;} - void clear(); -private: - ColumnProperties prop_; - SQLUniEdit * line; - QComboBox * combo; -private slots: - void value_changed() {if (combo->currentIndex() == 0) combo->setCurrentIndex(prop_.is_text ? 2 : 1);} -public slots: -signals: - void filterChanged(); -}; - - - - -class SQLItemDelegate: public QStyledItemDelegate { - Q_OBJECT -public: - explicit SQLItemDelegate(QList & cp, QVector & ci, bool & ro, const QString & conn_name, QObject * parent = 0); - ~SQLItemDelegate() {;} -private: - QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const; - QString displayText(const QVariant & value, const QLocale & locale) const; - void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const; - int mapColumn(int abs_ind) const {if (abs_ind <= 0 || abs_ind >= column_indexes.size() + 1) return 0; return column_indexes[abs_ind - 1];} - void setConnectionName(const QString & conn_name) {connection_name = conn_name;} - QList & column_props; - QVector & column_indexes; - bool & read_only; - QString connection_name; -private slots: -public slots: -signals: -}; - - - - -namespace Ui { - class SQLTableWidget; -}; - - -class SQLTableWidget: public QWidget -{ - Q_OBJECT - Q_PROPERTY(QString tableName READ tableName WRITE setTableName) - Q_PROPERTY(QString connectionName READ connectionName WRITE setConnectionName) - Q_PROPERTY(bool lineNewVisible READ lineNewVisible WRITE setLineNewVisible) - Q_PROPERTY(bool lineFilterVisible READ lineFilterVisible WRITE setLineFilterVisible) - Q_PROPERTY(bool readOnly READ readOnly WRITE setReadOnly) - friend class SQLItemDelegate; - friend class SQLUniEdit; -public: - SQLTableWidget(QWidget * parent = 0); - virtual ~SQLTableWidget(); - - bool isTableExists() const {return table_opened;} - const QString & tableName() const {return table_;} - - QTableView * tableView(); - bool readOnly() const {return read_only;} - - const ColumnProperties * columnProperty(int index) const {if (index < 0 || index >= column_props.count()) return 0; return &(column_props[index]);} - const ColumnProperties * columnProperty(const QString & name) const {return columnProperty(columnByName(name));} - const QList & columnProperties() const {return column_props;} - QStringList columnNames() const {QStringList sl; foreach (const ColumnProperties & i, column_props) sl << i.name; return sl;} - int columnsCount() const {return column_props.size();} - bool isColumnVisible(int ind) {if (!columnExists(ind)) return false; return column_props[ind].visible;} - bool isColumnVisible(const QString & name) {if (!columnExists(name)) return false; return column_props[columnByName(name)].visible;} - bool isColumnHidden(int ind) {if (!columnExists(ind)) return true; return !column_props[ind].visible;} - bool isColumnHidden(const QString & name) {if (!columnExists(name)) return true; return !column_props[columnByName(name)].visible;} - void setColumnVisible(int ind, bool visible); - void setColumnVisible(const QString & name, bool visible) {col_vis[name] = visible; setColumnVisible(columnByName(name), visible);} - void setColumnHidden(int ind, bool hidden) {setColumnVisible(ind, !hidden);} - void setColumnHidden(const QString & name, bool hidden) {col_vis[name] = !hidden; setColumnVisible(columnByName(name), !hidden);} - - bool lineNewVisible() const; - bool lineFilterVisible() const; - bool addRelation(const QString & this_column, const QString & other_table, const QString & other_key, const QString & other_column); - void addTranslation(const QString & file); - void addFixedColumnTranslation(const QString & col_name, const QString & col_tr, const QString & col_tt = QString()); - void fetchMore() {if (model) model->fetchMore();} - void fetchAll() {if (model) while (model->canFetchMore()) model->fetchMore();} - void selectId(int id); - - void setAdditionalActions(QList a); - - QSqlRecord headerRecord() const {if (model) return model->record(); return QSqlRecord();} - QSqlRecord currentRecord() const; - - void setCustomQuery(const QString & q); - void setCustomColumnNames(const QStringList & cn) {custom_col_names = cn; updateTable();} - - static bool isTableExists(const QString & table, const QString & conn_name = QLatin1String(QSqlDatabase::defaultConnection)) {return QSqlDatabase::database(conn_name).tables().contains(table, Qt::CaseInsensitive);} - - static bool executeScript(const QString & text, QSqlDatabase db = QSqlDatabase::database(), bool skip_errors = false, bool sqlite = false); - static bool executeScriptFile(const QString & file, QSqlDatabase db = QSqlDatabase::database(), bool skip_errors = false, bool sqlite = false); - - static bool isConnectedToDatabase(const QString & conn_name = QLatin1String(QSqlDatabase::defaultConnection)) {return QSqlDatabase::database(conn_name, false).isOpen();} - static bool connectToDatabase(const QString & config, const QString & conn_name = QLatin1String(QSqlDatabase::defaultConnection)); - - QString connectionName() const {return connection_name;} - -private: - static QString preprocessScript(QString text); - - bool eventFilter(QObject * o, QEvent * e); - void timerEvent(QTimerEvent * ); - void stopTimer() {if (timer != 0) killTimer(timer); timer = 0;} - bool checkTable(); - QStringList getTableColumns(const QString & t); - QString getColumnType(const QString & t, const QString & c); - static QList > getColumnValues(const QString & t, const QString & k, const QString & c, const QString & conn_name); - void setTableVisible(bool on); - int mapColumn(int abs_ind) const {if (abs_ind <= 0 || abs_ind >= column_indexes.size() + 1) return 0; return column_indexes[abs_ind - 1];} - int columnByName(const QString & name) const {for (int i = 0; i < column_props.size(); ++i) if (column_props[i].name == name) return i; return -1;} - bool columnExists(int index) const {return (index >= 0 && index < column_props.size());} - bool columnExists(const QString & name) const {for (int i = 0; i < column_props.size(); ++i) if (column_props[i].name == name) return true; return false;} - QPair trColumn(const QString & n); - QString tableNames(); - QString columnNames(); - QString columnFilters(); - QString columnRelations(); - - Ui::SQLTableWidget * ui; - QString table_, cquery, custom_query; - QStringList custom_col_names; - SQLQueryModel * model; - //QAction act_add, act_del; - QList column_props; - QList column_news; - QList column_filters; - QVector column_indexes; - QStringList wait_rels; - QMenu popup_menu, popup_col, popup_filter; - QTime tm; - QActionGroup filters_group; - QAction * action_del; - QList add_actions; - QMap > translates, fixed_translates; - QMap col_vis; - int timer; - bool filters_active, table_opened, read_only, first_update; - static QString _dir; - QPoint pp; - QString connection_name; - - -public slots: - void setTableName(const QString & t); - void setLineNewVisible(bool on); - void setLineFilterVisible(bool on); - void setReadOnly(bool yes); - void updateTable(bool save_selection = false); - void setConnectionName(const QString &conn_name); - -private slots: - void on_buttonAdd_clicked(); - void on_actionFiltersClear_triggered(); - void on_view_clicked(const QModelIndex & index); - void header_sectionResized(int logicalIndex, int oldSize, int newSize); - void header_sortIndicatorChanged(int logicalIndex, Qt::SortOrder order); - void scrolled(int value); - void del_triggered(); - void column_triggered(bool on); - -signals: - void rowClicked(int row); - void recordClicked(QSqlRecord rec); - void selectionChanged(); - void tableChanged(); - -}; - - -#endif // MYSQLTABLE_H diff --git a/test/qad/sql_table/sql_table_widget.ui b/test/qad/sql_table/sql_table_widget.ui deleted file mode 100644 index fba0fc1..0000000 --- a/test/qad/sql_table/sql_table_widget.ui +++ /dev/null @@ -1,369 +0,0 @@ - - - SQLTableWidget - - - - 0 - 0 - 445 - 570 - - - - SQLTableWidget - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 1 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Table doesn`t exists! - - - Qt::AlignCenter - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 2 - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 16 - 0 - - - - :/icons/edit-table-insert-row-below.png - - - true - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - QFrame::NoFrame - - - Qt::ScrollBarAlwaysOff - - - Qt::ScrollBarAlwaysOff - - - true - - - - - 0 - 0 - 352 - 154 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 1 - 10 - - - - - - - - - - - - - - - Add record - - - - :/icons/list-add.png:/icons/list-add.png - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 16 - 0 - - - - :/icons/edit-find.png - - - true - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - QFrame::NoFrame - - - Qt::ScrollBarAlwaysOff - - - Qt::ScrollBarAlwaysOff - - - true - - - - - 0 - 0 - 154 - 256 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 1 - 10 - - - - - - - - - - - - - - - Configure filters - - - - :/icons/configure.png:/icons/configure.png - - - QToolButton::InstantPopup - - - - - - - true - - - QAbstractItemView::SelectRows - - - QAbstractItemView::ScrollPerPixel - - - QAbstractItemView::ScrollPerPixel - - - true - - - true - - - - - - - - - - - - :/icons/edit-clear.png:/icons/edit-clear.png - - - Clear - - - - - true - - - Operator AND - - - Operator AND - - - - - true - - - Operator OR - - - Operator OR - - - - - - - - diff --git a/test/qad/touch_widgets/CMakeLists.txt b/test/qad/touch_widgets/CMakeLists.txt deleted file mode 100644 index 1140e08..0000000 --- a/test/qad/touch_widgets/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -qad_project(touch_widgets "Gui;Widgets" "") diff --git a/test/qad/touch_widgets/plugin/CMakeLists.txt b/test/qad/touch_widgets/plugin/CMakeLists.txt deleted file mode 100644 index 558030d..0000000 --- a/test/qad/touch_widgets/plugin/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -qad_plugin(touch_widgets "Gui;Widgets" "") diff --git a/test/qad/touch_widgets/plugin/qad_touch_widgets.cpp b/test/qad/touch_widgets/plugin/qad_touch_widgets.cpp deleted file mode 100644 index caf2bbe..0000000 --- a/test/qad/touch_widgets/plugin/qad_touch_widgets.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "qad_touch_widgets.h" -#include "touchsliderplugin.h" -#include "touchbuttframeplugin.h" -#include "touchbuttonplugin.h" - - -QADTouchWidgets::QADTouchWidgets(QObject * parent): QObject(parent) { - m_widgets.append(new TouchSliderPlugin(this)); - m_widgets.append(new TouchButtFramePlugin(this)); - m_widgets.append(new TouchButtonPlugin(this)); -} - - -QList QADTouchWidgets::customWidgets() const { - return m_widgets; -} - - -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(qad_touch_widgets_plugin, QADTouchWidgets) -#endif diff --git a/test/qad/touch_widgets/plugin/qad_touch_widgets.h b/test/qad/touch_widgets/plugin/qad_touch_widgets.h deleted file mode 100644 index e7cbf2a..0000000 --- a/test/qad/touch_widgets/plugin/qad_touch_widgets.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef QAD_TOUCH_WIDGETS_H -#define QAD_TOUCH_WIDGETS_H - -#include -#include - -class QADTouchWidgets: public QObject, public QDesignerCustomWidgetCollectionInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetCollectionInterface) -#if QT_VERSION >= 0x050000 - Q_PLUGIN_METADATA(IID "qad.touch_widgets") -#endif -public: - explicit QADTouchWidgets(QObject *parent = 0); - virtual QList customWidgets() const; - -private: - QList m_widgets; - -}; - -#endif // QAD_TOUCH_WIDGETS_H diff --git a/test/qad/touch_widgets/plugin/touchbuttframeplugin.cpp b/test/qad/touch_widgets/plugin/touchbuttframeplugin.cpp deleted file mode 100644 index dee389b..0000000 --- a/test/qad/touch_widgets/plugin/touchbuttframeplugin.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "touchbuttframe.h" -#include "touchbuttframeplugin.h" - -#include -#include -#include - - -TouchButtFramePlugin::TouchButtFramePlugin(QObject *parent) - : QObject(parent) -{ - m_initialized = false; -} - -void TouchButtFramePlugin::initialize(QDesignerFormEditorInterface * /*core*/ ) -{ - if (m_initialized) - return; - - // Add extension registrations, etc. here - //core->propertyEditor()->property(); - m_initialized = true; -} - -bool TouchButtFramePlugin::isInitialized() const -{ - return m_initialized; -} - -QWidget *TouchButtFramePlugin::createWidget(QWidget *parent) -{ - TouchButtFrame * tbw = new TouchButtFrame(parent); - QStringList l; - l.append("First"); - l.append("Second"); - tbw->setButtons(l); - return tbw; -} - -QString TouchButtFramePlugin::name() const -{ - return QLatin1String("TouchButtFrame"); -} - -QString TouchButtFramePlugin::group() const -{ - return QLatin1String("Touch Widgets"); -} - -QIcon TouchButtFramePlugin::icon() const -{ - return QIcon(":/icons/touchbuttframe.png"); -} - -QString TouchButtFramePlugin::toolTip() const -{ - return QLatin1String(""); -} - -QString TouchButtFramePlugin::whatsThis() const -{ - return QLatin1String(""); -} - -bool TouchButtFramePlugin::isContainer() const -{ - return false; -} - -QString TouchButtFramePlugin::domXml() const -{ - return QLatin1String("\n" - " \n" - " \n" - " \n" - " 0\n" - " 0\n" - " 100\n" - " 100\n" - " \n" - " \n" - " \n" - "\n"); -} - -QString TouchButtFramePlugin::includeFile() const -{ - return QLatin1String("touchbuttframe.h"); -} - diff --git a/test/qad/touch_widgets/plugin/touchbuttframeplugin.h b/test/qad/touch_widgets/plugin/touchbuttframeplugin.h deleted file mode 100644 index a4314b8..0000000 --- a/test/qad/touch_widgets/plugin/touchbuttframeplugin.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TOUCHBUTTFRAMEPLUGIN_H -#define TOUCHBUTTFRAMEPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class TouchButtFramePlugin : public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - TouchButtFramePlugin(QObject *parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget *createWidget(QWidget *parent); - void initialize(QDesignerFormEditorInterface *core); - -private: - bool m_initialized; -}; - -#endif diff --git a/test/qad/touch_widgets/plugin/touchbuttonplugin.cpp b/test/qad/touch_widgets/plugin/touchbuttonplugin.cpp deleted file mode 100644 index 9d977a0..0000000 --- a/test/qad/touch_widgets/plugin/touchbuttonplugin.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include "touchbutton.h" -#include "touchbuttonplugin.h" - -#include -#include -#include - - -TouchButtonPlugin::TouchButtonPlugin(QObject *parent) - : QObject(parent) -{ - m_initialized = false; -} - -void TouchButtonPlugin::initialize(QDesignerFormEditorInterface * /* core */) -{ - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - -bool TouchButtonPlugin::isInitialized() const -{ - return m_initialized; -} - -QWidget *TouchButtonPlugin::createWidget(QWidget *parent) -{ - return new TouchButton(parent); -} - -QString TouchButtonPlugin::name() const -{ - return QLatin1String("TouchButton"); -} - -QString TouchButtonPlugin::group() const -{ - return QLatin1String("Touch Widgets"); -} - -QIcon TouchButtonPlugin::icon() const -{ - return QIcon(":/icons/touchbutton.png"); -} - -QString TouchButtonPlugin::toolTip() const -{ - return QLatin1String(""); -} - -QString TouchButtonPlugin::whatsThis() const -{ - return QLatin1String(""); -} - -bool TouchButtonPlugin::isContainer() const -{ - return false; -} - -QString TouchButtonPlugin::domXml() const -{ - return QLatin1String("\n\n"); -} - -QString TouchButtonPlugin::includeFile() const -{ - return QLatin1String("touchbutton.h"); -} - diff --git a/test/qad/touch_widgets/plugin/touchbuttonplugin.h b/test/qad/touch_widgets/plugin/touchbuttonplugin.h deleted file mode 100644 index 423c164..0000000 --- a/test/qad/touch_widgets/plugin/touchbuttonplugin.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TOUCHBUTTONPLUGIN_H -#define TOUCHBUTTONPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class TouchButtonPlugin : public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - TouchButtonPlugin(QObject *parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget *createWidget(QWidget *parent); - void initialize(QDesignerFormEditorInterface *core); - -private: - bool m_initialized; -}; - -#endif // TOUCHBUTTONPLUGIN_H diff --git a/test/qad/touch_widgets/plugin/touchsliderplugin.cpp b/test/qad/touch_widgets/plugin/touchsliderplugin.cpp deleted file mode 100644 index c49f321..0000000 --- a/test/qad/touch_widgets/plugin/touchsliderplugin.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "touchslider.h" -#include "touchsliderplugin.h" - -#include -#include -#include - - -TouchSliderPlugin::TouchSliderPlugin(QObject *parent) - : QObject(parent) -{ - m_initialized = false; -} - -void TouchSliderPlugin::initialize(QDesignerFormEditorInterface * /* core */) -{ - if (m_initialized) - return; - - // Add extension registrations, etc. here - - m_initialized = true; -} - -bool TouchSliderPlugin::isInitialized() const -{ - return m_initialized; -} - -QWidget *TouchSliderPlugin::createWidget(QWidget *parent) -{ - TouchSlider * ts = new TouchSlider(parent); - ts->setMinimum(-5.); - ts->setMaximum(5.); - ts->setPrecision(0.2); - ts->setValue(2.2); - ts->setPrefix("Distanse"); - ts->setSuffix("meters"); - return ts; -} - -QString TouchSliderPlugin::name() const -{ - return QLatin1String("TouchSlider"); -} - -QString TouchSliderPlugin::group() const -{ - return QLatin1String("Touch Widgets"); -} - -QIcon TouchSliderPlugin::icon() const -{ - return QIcon(":/icons/touchslider.png"); -} - -QString TouchSliderPlugin::toolTip() const -{ - return QLatin1String(""); -} - -QString TouchSliderPlugin::whatsThis() const -{ - return QLatin1String(""); -} - -bool TouchSliderPlugin::isContainer() const -{ - return false; -} - -QString TouchSliderPlugin::domXml() const -{ - return QLatin1String("\n\n"); -} - -QString TouchSliderPlugin::includeFile() const -{ - return QLatin1String("touchslider.h"); -} - diff --git a/test/qad/touch_widgets/plugin/touchsliderplugin.h b/test/qad/touch_widgets/plugin/touchsliderplugin.h deleted file mode 100644 index 3ceaa34..0000000 --- a/test/qad/touch_widgets/plugin/touchsliderplugin.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TOUCHSLIDERPLUGIN_H -#define TOUCHSLIDERPLUGIN_H - -#include -#if QT_VERSION >= 0x050000 -# include -#else -# include -#endif - -class TouchSliderPlugin : public QObject, public QDesignerCustomWidgetInterface -{ - Q_OBJECT - Q_INTERFACES(QDesignerCustomWidgetInterface) - -public: - TouchSliderPlugin(QObject *parent = 0); - - bool isContainer() const; - bool isInitialized() const; - QIcon icon() const; - QString domXml() const; - QString group() const; - QString includeFile() const; - QString name() const; - QString toolTip() const; - QString whatsThis() const; - QWidget *createWidget(QWidget *parent); - void initialize(QDesignerFormEditorInterface *core); - -private: - bool m_initialized; -}; - -#endif diff --git a/test/qad/touch_widgets/touch_bar.h b/test/qad/touch_widgets/touch_bar.h deleted file mode 100644 index ab14b9c..0000000 --- a/test/qad/touch_widgets/touch_bar.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef TOUCH_BAR_H -#define TOUCH_BAR_H - -#include - -class touch_bar: public QProgressBar { - Q_OBJECT -public: - touch_bar(QWidget * parent = 0): QProgressBar(parent) - { - //setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum); - } -signals: - void mouseMoveEvent(QMouseEvent * e); - void mousePressEvent(QMouseEvent * e); -}; -#endif // TOUCH_BAR_H diff --git a/test/qad/touch_widgets/touch_widgets.qrc b/test/qad/touch_widgets/touch_widgets.qrc deleted file mode 100644 index cfb77f1..0000000 --- a/test/qad/touch_widgets/touch_widgets.qrc +++ /dev/null @@ -1,7 +0,0 @@ - - - ../icons/touchbuttframe.png - ../icons/touchbutton.png - ../icons/touchslider.png - - diff --git a/test/qad/touch_widgets/touchbuttframe.cpp b/test/qad/touch_widgets/touchbuttframe.cpp deleted file mode 100644 index 5f5b0fa..0000000 --- a/test/qad/touch_widgets/touchbuttframe.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "touchbuttframe.h" - - -TouchButtFrame::TouchButtFrame(QWidget * parent, Qt::Orientation orientation): QFrame(parent) { - id_click = id_set = -1; - TouchButton b; - colr = b.noColor(); - colg = b.yesColor(); - colw = b.grayColor(); - colp = b.downColor(); - setFrameShape(QFrame::StyledPanel); - lay = new QBoxLayout(QBoxLayout::LeftToRight); - lay->setContentsMargins(0, 0, 0, 0); - if (orientation == Qt::Vertical) lay->setDirection(QBoxLayout::TopToBottom); -} - - -void TouchButtFrame::addButton(const QString & caption) { - TouchButton * butt = new TouchButton(lay->count(), caption); - butt->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - butt->setCheckable(true); - butt->setAutoExclusive(true); - //butt->setAutoFillBackground(true); - lay->addWidget(butt); - this->setLayout(lay); - connect(butt, SIGNAL(clickedID(int)), SLOT(butt_click(int))); - connect(butt, SIGNAL(toggledID(int, bool)), SLOT(butt_toggle(int, bool))); -} - - -void TouchButtFrame::resetColors() { - for (int i = 0; i < lay->count(); ++i) { - button(i)->setYesColor(colg); - button(i)->setNoColor(colr); - button(i)->setGrayColor(colw); - button(i)->setDownColor(colp); - } -} - - -void TouchButtFrame::deleteButtons() { - while (!lay->isEmpty()) - delete button(0); -} - - -void TouchButtFrame::setButtons(const QStringList & captions) { - int cur = currentButton(); - deleteButtons(); - for (int i = 0; i < captions.size(); ++i) - addButton(captions.at(i)); - if (button(cur) != 0) button(cur)->setChecked(true); - else if (!captions.isEmpty()) button(0)->setChecked(true); -} - - -void TouchButtFrame::setCurrentButton(int index) { - if (button(index) != 0) { - if (currentButton() != -1) button(currentButton())->setChecked(false); - button(index)->setChecked(true); - } -} - - -int TouchButtFrame::currentButton() { - for (int i = 0; i < buttonsCount(); ++i) - if (button(i)->isChecked()) return i; - return -1; -} - - -QStringList TouchButtFrame::buttons() { - QStringList l; - for (int i = 0; i < lay->count(); ++i) - l.append(button(i)->text()); - return l; -} - - -TouchButton * TouchButtFrame::button(int index) { - if (index >= 0 && index < lay->count()) - return (qobject_cast(lay->itemAt(index)->widget())); - return 0; -} diff --git a/test/qad/touch_widgets/touchbuttframe.h b/test/qad/touch_widgets/touchbuttframe.h deleted file mode 100644 index 1d695d8..0000000 --- a/test/qad/touch_widgets/touchbuttframe.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef TOUCHBUTTFRAME_H -#define TOUCHBUTTFRAME_H - -#include -#include -#include -#include "touchbutton.h" - - -class TouchButtFrame: public QFrame -{ - Q_OBJECT - Q_PROPERTY(QColor colorYes READ colorYes WRITE setColorYes) - Q_PROPERTY(QColor colorNo READ colorNo WRITE setColorNo) - Q_PROPERTY(QColor colorGray READ colorGray WRITE setColorGray) - Q_PROPERTY(QColor colorDown READ colorDown WRITE setColorDown) - Q_PROPERTY(QStringList buttons READ buttons WRITE setButtons) - Q_PROPERTY(int currentButton READ currentButton WRITE setCurrentButton) - Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation) - Q_PROPERTY(int clickID READ clickID WRITE setClickID) - Q_PROPERTY(int setID READ setID WRITE setSetID) - -public: - TouchButtFrame(QWidget * parent = 0, Qt::Orientation orientation = Qt::Horizontal); - - int clickID() const {return id_click;} - int setID() const {return id_set;} - - void setButtons(const QStringList & captions); - QStringList buttons(); - TouchButton * button(int index); - int buttonsCount() const {return lay->count();} - int currentButton(); - Qt::Orientation orientation() const {if (lay->direction() == 0) return Qt::Horizontal; else return Qt::Vertical;} - QColor colorYes() const {return colg;} - QColor colorNo() const {return colr;} - QColor colorGray() const {return colw;} - QColor colorDown() const {return colp;} - - void setCurrentButton(int index); - void setColorYes(QColor col) {colg = col; resetColors();} - void setColorNo(QColor col) {colr = col; resetColors();} - void setColorGray(QColor col) {colw = col; resetColors();} - void setColorDown(QColor col) {colp = col; resetColors();} - void setOrientation(Qt::Orientation orientation) {if (orientation == Qt::Horizontal) lay->setDirection(QBoxLayout::LeftToRight); else lay->setDirection(QBoxLayout::TopToBottom);} - -private: - void resetColors(); - void deleteButtons(); - void addButton(const QString & caption); - - int id_click, id_set; - QColor colr, colg, colw, colp; - QBoxLayout * lay; - //int count; - -private slots: - void butt_click(int index) {emit clicked(index); emit clickedID(id_click, index);} - void butt_toggle(int index, bool checked) {emit toggled(index, checked); emit toggledID(id_click, index, checked);} - -public slots: - void enable() {setEnabled(true);} - void disable() {setAllButtonsGray(); setEnabled(false);} - - void setClickID(int id) {id_click = id;} - void setSetID(int id) {id_set = id;} - - - void setButtonChecked(int index) {if (button(index) != 0) button(index)->setChecked(true);} - void setButtonUnchecked(int index) {if (button(index) != 0) button(index)->setChecked(false);} - void setButtonState(int index, TouchButton::State state) {if (button(index) != 0) button(index)->setState(state);} - void setButtonYes(int index) {if (button(index) != 0) button(index)->setStateYes();} - void setButtonNo(int index) {if (button(index) != 0) button(index)->setStateNo();} - void setButtonGray(int index) {if (button(index) != 0) button(index)->setStateGray();} - void setAllButtonsState(TouchButton::State state) {for (int i = 0; i < buttonsCount(); ++i) button(i)->setState(state);} - void setAllButtonsYes() {for (int i = 0; i < buttonsCount(); ++i) button(i)->setStateYes();} - void setAllButtonsNo() {for (int i = 0; i < buttonsCount(); ++i) button(i)->setStateNo();} - void setAllButtonsGray() {for (int i = 0; i < buttonsCount(); ++i) button(i)->setStateGray();} - - void hideButton(int index) {if (button(index) != 0) button(index)->hide();} - void showButton(int index) {if (button(index) != 0) button(index)->show();} - void enableButton(int index) {if (button(index) != 0) button(index)->enable();} - void disableButton(int index) {if (button(index) != 0) button(index)->disable();} - - - void enableID(int set_id) {if (set_id == id_set) enable();} - void disableID(int set_id) {if (set_id == id_set) disable();} - - void setButtonCheckedID(int set_id, int index) {if (set_id == id_set) setButtonChecked(index);} - void setButtonUncheckedID(int set_id, int index) {if (set_id == id_set) setButtonUnchecked(index);} - void setButtonStateID(int set_id, int index, TouchButton::State state) {if (set_id == id_set) setButtonState(index, state);} - void setButtonYesID(int set_id, int index) {if (set_id == id_set) setButtonYes(index);} - void setButtonNoID(int set_id, int index) {if (set_id == id_set) setButtonNo(index);} - void setButtonGrayID(int set_id, int index) {if (set_id == id_set) setButtonGray(index);} - void setAllButtonsStateID(int set_id, TouchButton::State state) {if (set_id == id_set) setAllButtonsState(state);} - void setAllButtonsYesID(int set_id) {if (set_id == id_set) setAllButtonsYes();} - void setAllButtonsNoID(int set_id) {if (set_id == id_set) setAllButtonsNo();} - void setAllButtonsGrayID(int set_id) {if (set_id == id_set) setAllButtonsGray();} - - void hideButtonID(int set_id, int index) {if (set_id == id_set) hideButton(index);} - void showButtonID(int set_id, int index) {if (set_id == id_set) showButton(index);} - void enableButtonID(int set_id, int index) {if (set_id == id_set) enableButton(index);} - void disableButtonID(int set_id, int index) {if (set_id == id_set) disableButton(index);} - -signals: - void clicked(int index); - void toggled(int index, bool checked); - void clickedID(int id, int index); - void toggledID(int id, int index, bool checked); - -}; - -#endif // TOUCHBUTTFRAME_H diff --git a/test/qad/touch_widgets/touchbutton.cpp b/test/qad/touch_widgets/touchbutton.cpp deleted file mode 100644 index 7da1be1..0000000 --- a/test/qad/touch_widgets/touchbutton.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include "touchbutton.h" - - -TouchButton::TouchButton(QWidget * parent): QToolButton(parent) { - init(); -} - - -TouchButton::TouchButton(int id__, const QString & text): QToolButton(0) { - init(); - id_click = id_yes = id_no = id__; - setText(text); -} - - -TouchButton::~TouchButton() { -} - - -void TouchButton::init() { - connect(this, SIGNAL(clicked(bool)), this, SLOT(_clicked())); - connect(this, SIGNAL(toggled(bool)), this, SLOT(_toggled(bool))); - animation.setTargetObject(this); - animation.setPropertyName("currentColor"); - animation.setEasingCurve(QEasingCurve::OutSine); - animation.setDuration(350); - delay_blink = 500; - anim = auto_gray = true; - state_ = Gray; - id_click = id_yes = id_no = -1; - timer = 0; - pal = palette(); - col_yes = QColor(Qt::green); - col_no = QColor(Qt::red); - col_down = QColor(Qt::yellow); - col_gray = col_cur = col_up = pal.button().color(); - col_dst = col_gray; -} - - -void TouchButton::timerEvent(QTimerEvent * e) { - if (e->timerId() == timer) { - killTimer(e->timerId()); - timer = 0; - setCurrentColor(col_blink); - animateColor(col_dst); - return; - } - QToolButton::timerEvent(e); -} - - -void TouchButton::mousePressEvent(QMouseEvent * e) { - animateColor(col_down); - QToolButton::mousePressEvent(e); - emit pressedID(id_click); -} - - -void TouchButton::mouseReleaseEvent(QMouseEvent * e) { - setCurrentColor(col_down); - animateColor(col_dst); - QToolButton::mouseReleaseEvent(e); - emit releasedID(id_click); -} - - -void TouchButton::animateColor(const QColor & tc) { - if (anim) { - animation.stop(); - animation.setStartValue(currentColor()); - animation.setEndValue(tc); - animation.start(); - } else { - col_cur = tc; - applyColor(); - } -} - - -void TouchButton::applyState(State s) { - if (s == state_) return; - State ps = state_; - state_ = s; - emit stateChanged(state_, ps); - emit stateChangedID(id_click, state_, ps); -} - - -void TouchButton::blink(const QColor & tc) { - col_blink = tc; - if (timer > 0) killTimer(timer); - timer = startTimer(delay_blink); -} - - -void TouchButton::setState(State s) { - switch (s) { - case Gray: setStateGray(); break; - case Yes: setStateYes(); break; - case No: setStateNo(); break; - default: break; - }; -} diff --git a/test/qad/touch_widgets/touchbutton.h b/test/qad/touch_widgets/touchbutton.h deleted file mode 100644 index 0733b1c..0000000 --- a/test/qad/touch_widgets/touchbutton.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef TOUCHBUTTON_H -#define TOUCHBUTTON_H - -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class TouchButton: public QToolButton -{ - Q_OBJECT - Q_ENUMS(State) - Q_PROPERTY(QColor downColor READ downColor WRITE setDownColor) - Q_PROPERTY(QColor upColor READ upColor WRITE setUpColor) - Q_PROPERTY(QColor grayColor READ grayColor WRITE setGrayColor) - Q_PROPERTY(QColor yesColor READ yesColor WRITE setYesColor) - Q_PROPERTY(QColor noColor READ noColor WRITE setNoColor) - Q_PROPERTY(QColor currentColor READ currentColor WRITE setCurrentColor DESIGNABLE false) - Q_PROPERTY(State state READ state WRITE setState) - Q_PROPERTY(bool autoGray READ autoGray WRITE setAutoGray) - Q_PROPERTY(bool animated READ animated WRITE setAnimated) - Q_PROPERTY(int animationDuration READ animationDuration WRITE setAnimationDuration) - Q_PROPERTY(QEasingCurve::Type animationCurve READ animationCurve WRITE setAnimationCurve) - Q_PROPERTY(int blinkDelay READ blinkDelay WRITE setBlinkDelay) - Q_PROPERTY(int clickID READ clickID WRITE setClickID) - Q_PROPERTY(int yesID READ yesID WRITE setYesID) - Q_PROPERTY(int noID READ noID WRITE setNoID) - -public: - explicit TouchButton(QWidget * parent = 0); - TouchButton(int id, const QString & text = QString()); - ~TouchButton(); - - enum State {Gray, Yes, No}; - - int clickID() const {return id_click;} - int yesID() const {return id_yes;} - int noID() const {return id_no;} - - QColor downColor() const {return col_down;} - QColor upColor() const {return col_up;} - QColor grayColor() const {return col_gray;} - QColor yesColor() const {return col_yes;} - QColor noColor() const {return col_no;} - QColor currentColor() const {return col_cur;} - State state() const {return state_;} - bool autoGray() const {return auto_gray;} - bool animated() const {return anim;} - int animationDuration() const {return animation.duration();} - QEasingCurve::Type animationCurve() const {return animation.easingCurve().type();} - int blinkDelay() const {return delay_blink;} - - void blink(const QColor & tc); - -private: - void timerEvent(QTimerEvent * e); - void mousePressEvent(QMouseEvent * e); - void mouseReleaseEvent(QMouseEvent * e); - - void init(); - void animateColor(const QColor & tc); - void applyColor() {pal.setColor(QPalette::Button, col_cur); setPalette(pal);} - void applyState(State s); - - QPalette pal; - QColor col_down, col_up, col_gray, col_yes, col_no, col_cur, col_dst, col_blink; - QPropertyAnimation animation; - State state_; - int id_click, id_yes, id_no, delay_blink, timer; - bool anim, auto_gray; - -private slots: - void _clicked() {emit clickedID(id_click);} - void _toggled(bool on) {if (!on && auto_gray) setStateGray(); emit toggledID(id_click, on);} - -public slots: - void enable() {setEnabled(true);} - void disable() {setStateGray(); setEnabled(false);} - - void setClickID(int id) {id_click = id;} - void setYesID(int id) {id_yes = id;} - void setNoID(int id) {id_no = id;} - - void setDownColor(const QColor & col) {col_down = col;} - void setUpColor(const QColor & col) {col_up = col;} - void setGrayColor(const QColor & col) {col_gray = col;} - void setYesColor(const QColor & col) {col_yes = col;} - void setNoColor(const QColor & col) {col_no = col;} - - - void setState(State s); - void setStateGray() {col_dst = col_gray; applyState(Gray); animateColor(col_dst);} - void setStateYes() {col_dst = col_yes; applyState(Yes); animateColor(col_dst);} - void setStateNo() {col_dst = col_no; applyState(No); animateColor(col_dst);} - void setStateYesOrNo(bool yes) {if (yes) setStateYes(); else setStateNo();} - void setStateYesOrGray(bool yes) {if (yes) setStateYes(); else setStateGray();} - void setStateNoOrYes(bool no) {if (no) setStateNo(); else setStateYes();} - void setStateNoOrGray(bool no) {if (no) setStateNo(); else setStateGray();} - - void blinkYes() {blink(col_yes);} - void blinkNo() {blink(col_no);} - void blinkYesOrNo(bool yes) {blink(yes ? col_yes : col_no);} - void blinkNoOrYes(bool no) {blink(no ? col_no : col_yes);} - - - void enableID(int yes_id) {if (yes_id == id_yes) enable();} - void disableID(int yes_id) {if (yes_id == id_yes) disable();} - - void setStateID(int yes_id, State s) {if (yes_id == id_yes) setState(s);} - void setStateGrayID(int yes_id) {if (yes_id == id_yes) setStateGray();} - void setStateYesID(int yes_id) {if (yes_id == id_yes) setStateYes();} - void setStateNoID(int no_id) {if (no_id == id_no) setStateNo();} - void setStateYesOrNoID(int yes_id, bool yes) {if (yes_id == id_yes) setStateYesOrNo(yes);} - void setStateYesOrGrayID(int yes_id, bool yes) {if (yes_id == id_yes) setStateYesOrGray(yes);} - void setStateNoOrYesID(int no_id, bool no) {if (no_id == id_no) setStateNoOrYes(no);} - void setStateNoOrGrayID(int no_id, bool no) {if (no_id == id_no) setStateNoOrGray(no);} - - void blinkYesID(int yes_id) {if (yes_id == id_yes) blinkYes();} - void blinkNoID(int no_id) {if (no_id == id_no) blinkNo();} - void blinkYesOrNoID(int yes_id, bool yes) {if (yes_id == id_yes) blinkYesOrNo(yes);} - void blinkNoOrYesID(int no_id, bool no) {if (no_id == id_no) blinkNoOrYes(no);} - - - void setColor(const QColor & col) {col_dst = col; animateColor(col_dst);} - void setCurrentColor(const QColor & col) {col_cur = col; applyColor();} - - void setAutoGray(bool yes) {auto_gray = yes;} - void setAnimated(bool yes) {anim = yes;} - void setAnimationDuration(int dur) {animation.setDuration(dur);} - void setAnimationCurve(QEasingCurve::Type curve) {animation.setEasingCurve(QEasingCurve(curve));} - void setBlinkDelay(int dur) {delay_blink = dur;} - - void delayedClick() {QMetaObject::invokeMethod(this, "click", Qt::QueuedConnection);} - void delayedToggle() {QMetaObject::invokeMethod(this, "toggle", Qt::QueuedConnection);} - - void delayedClickID(int yes_id) {if (yes_id == id_yes) delayedClick();} - void delayedToggleID(int yes_id) {if (yes_id == id_yes) delayedToggle();} - -signals: - void clickedID(int id); - void pressedID(int id); - void releasedID(int id); - void toggledID(int id, bool on); - void stateChanged(State state, State prev_state); - void stateChangedID(int id, State state, State prev_state); - -}; - -QT_END_NAMESPACE - -#endif // TOUCHBUTTON_H diff --git a/test/qad/touch_widgets/touchslider.cpp b/test/qad/touch_widgets/touchslider.cpp deleted file mode 100644 index 515acdc..0000000 --- a/test/qad/touch_widgets/touchslider.cpp +++ /dev/null @@ -1,242 +0,0 @@ -#include "touchslider.h" -#include "ui_touchslider.h" - - -TouchSlider::TouchSlider(QWidget * parent): QGroupBox(parent), ui(new Ui::TouchSlider) { - ui->setupUi(this); - ui->barNeg->setMinimum(0); - prec = 1; - id_click = id_set = -1; - hasZero = true; - m_readOnly = false; - m_showMinMax = false; -} - - -TouchSlider::~TouchSlider() { - delete ui; -} - - -void TouchSlider::on_pbMin_clicked() { - if (m_readOnly) return; - ui->barNeg->setValue(ui->barNeg->maximum()); - ui->barPos->setValue(ui->barPos->minimum()); -} - - -void TouchSlider::on_pbMax_clicked() { - if (m_readOnly) return; - ui->barNeg->setValue(ui->barNeg->minimum()); - ui->barPos->setValue(ui->barPos->maximum()); -} - - -void TouchSlider::on_pbInc_clicked() { - if (ui->barPos->value() >= 0 && ui->barNeg->value() == 0) ui->barPos->setValue(ui->barPos->value() + 1); - if (ui->barNeg->value() > 0) ui->barNeg->setValue(ui->barNeg->value() - 1); -} - - -void TouchSlider::on_pbDec_clicked() { - if (ui->barNeg->value() >= 0 && ui->barPos->value() == 0 && hasZero) ui->barNeg->setValue(ui->barNeg->value() + 1); - if (ui->barPos->value() > 0) ui->barPos->setValue(ui->barPos->value() - 1); -} - - -void TouchSlider::on_pbZero_clicked() { - ui->barNeg->setValue(ui->barNeg->minimum()); - ui->barPos->setValue(ui->barPos->minimum()); -} - - -void TouchSlider::setValue(double val) { - if (val < minimum()) val = minimum(); - if (val > maximum()) val = maximum(); - if (val < 0) { - ui->barPos->setValue(ui->barPos->minimum()); - if (hasZero) ui->barNeg->setValue(qRound(-val / prec)); - } else { - ui->barPos->setValue(qRound(val / prec)); - ui->barNeg->setValue(ui->barNeg->minimum()); - } - updateCaption(); -} - - -double TouchSlider::value() const { - if (ui->barNeg->value() <= ui->barNeg->minimum()) - return (double)(ui->barPos->value()) * prec; - else return -(double)(ui->barNeg->value()) * prec; -} - - -void TouchSlider::setMaximum(double max) { - double val = value(); - if (max < 0) return; - ui->barPos->setMaximum(qRound(max / prec)); - setValue(val); - ui->pbMax->setText(QString::number(maximum())); -} - - -double TouchSlider::maximum() const { - return (double)(ui->barPos->maximum()) * prec; -} - - -void TouchSlider::setMinimum(double min) { - double val = value(); - if (min < 0) { - hasZero = true; - ui->barNeg->setMaximum(qRound(-min / prec)); - ui->barPos->setMinimum(0); - ui->barNeg->setVisible(true); - ui->pbZero->setVisible(true); - setValue(val); - } else { - hasZero = false; - ui->barNeg->setMaximum(0); - ui->barNeg->setVisible(false); - ui->pbZero->setVisible(false); - ui->barPos->setMinimum(qRound(min / prec)); - setValue(val); - } - ui->pbMin->setText(QString::number(minimum())); -} - - -double TouchSlider::minimum() const { - if (hasZero) return -(double)(ui->barNeg->maximum()) * prec; - return (double)(ui->barPos->minimum()) * prec; -} - - -void TouchSlider::setPrecision(double precision) { - double min = minimum(); - double max = maximum(); - double val = value(); - prec = precision; - setMinimum(min); - setMaximum(max); - setValue(val); - ui->pbInc->setText("+" + QString::number(precision)); - ui->pbDec->setText("-" + QString::number(precision)); -} - - -double TouchSlider::precision() const { - return prec; -} - - -void TouchSlider::updateCaption() { - setTitle(pref + " " + QString::number(value()) + " " + suff); - emit valueChanged(value()); - emit valueChanged((int)value()); - emit valueChangedID(id_click, value()); - emit valueChangedID(id_click, (int)value()); -} - - -void TouchSlider::on_barPos_mouseMoveEvent(QMouseEvent * e) { - if (m_readOnly) return; - int tx = e->x(); - if (tx > ui->barPos->width()) tx = ui->barPos->width(); - if (tx < 0) { - if (hasZero) { - int nx = tx + ui->barNeg->width() + layout()->spacing(); - if (nx < ui->barNeg->width()) { - QMouseEvent * event = new QMouseEvent(QMouseEvent::MouseMove, QPoint(nx, 0), Qt::NoButton, Qt::NoButton, Qt::NoModifier); - on_barNeg_mouseMoveEvent(event); - return; - } - } - tx = 0; - } - ui->barPos->setValue(ui->barPos->minimum() + qRound((double)(tx * (ui->barPos->maximum() - ui->barPos->minimum())) / (double)(ui->barPos->width()))); - ui->barNeg->setValue(ui->barNeg->minimum()); -} - - -void TouchSlider::on_barNeg_mouseMoveEvent(QMouseEvent * e) { - if (m_readOnly) return; - int tx = e->x(); - if (tx < 0) tx = 0; - if (tx > ui->barNeg->width()) { - int nx = tx - ui->barPos->width() - layout()->spacing(); - if (nx > 0) { - QMouseEvent * event = new QMouseEvent(QMouseEvent::MouseMove, QPoint(nx, 0), Qt::NoButton, Qt::NoButton, Qt::NoModifier); - on_barPos_mouseMoveEvent(event); - return; - } - tx = ui->barNeg->width(); - } - ui->barNeg->setValue(ui->barNeg->maximum() - qRound((double)(tx * ui->barNeg->maximum()) / (double)(ui->barNeg->width()))); - ui->barPos->setValue(ui->barPos->minimum()); -} - - -void TouchSlider::on_barPos_mousePressEvent(QMouseEvent * e) { - if (m_readOnly) return; - ui->barPos->setValue(ui->barPos->minimum() + qRound((double)(e->x() * (ui->barPos->maximum() - ui->barPos->minimum())) / (double)(ui->barPos->width()))); - ui->barNeg->setValue(ui->barNeg->minimum()); -} - - -void TouchSlider::on_barNeg_mousePressEvent(QMouseEvent * e) { - if (m_readOnly) return; - ui->barNeg->setValue(ui->barNeg->maximum() - qRound((double)(e->x()*ui->barNeg->maximum()) / (double)(ui->barNeg->width()))); - ui->barPos->setValue(ui->barPos->minimum()); -} - - -void TouchSlider::on_barNeg_valueChanged(int) { - updateCaption(); -} - - -void TouchSlider::on_barPos_valueChanged(int) { - updateCaption(); -} - - -void TouchSlider::setReadOnly(bool arg) { - QBoxLayout * bl = qobject_cast(layout()); - m_readOnly = arg; - if (arg) { - ui->pbDec->hide(); - ui->pbInc->hide(); - if (hasZero) - ui->pbZero->hide(); - bl->setStretchFactor(ui->pbMin, 2); - bl->setStretchFactor(ui->pbMax, 2); - } else { - ui->pbDec->show(); - ui->pbInc->show(); - if (hasZero) - ui->pbZero->show(); - bl->setStretchFactor(ui->pbMin, 1); - bl->setStretchFactor(ui->pbMax, 1); - } -} - - -void TouchSlider::setShowMinMax(bool arg) { - QBoxLayout * bl = qobject_cast(layout()); - m_showMinMax = arg; - if (arg) { - ui->pbMin->hide(); - ui->pbMax->hide(); - bl->setStretchFactor(ui->pbInc, 2); - bl->setStretchFactor(ui->pbDec, 2); - bl->setStretchFactor(ui->pbZero, 2); - } else { - ui->pbMin->show(); - ui->pbMax->show(); - bl->setStretchFactor(ui->pbInc, 1); - bl->setStretchFactor(ui->pbDec, 1); - bl->setStretchFactor(ui->pbZero, 1); - } -} - diff --git a/test/qad/touch_widgets/touchslider.h b/test/qad/touch_widgets/touchslider.h deleted file mode 100644 index 97c2b92..0000000 --- a/test/qad/touch_widgets/touchslider.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef TOUCHSLIDER_H -#define TOUCHSLIDER_H - -#include -#include - -namespace Ui { - class TouchSlider; -} - -class TouchSlider: public QGroupBox -{ - Q_OBJECT - Q_PROPERTY(bool readOnly READ readOnly WRITE setReadOnly) - Q_PROPERTY(bool showMinMax READ showMinMax WRITE setShowMinMax) - Q_PROPERTY(double minimum READ minimum WRITE setMinimum) - Q_PROPERTY(double maximum READ maximum WRITE setMaximum) - Q_PROPERTY(double value READ value WRITE setValue) - Q_PROPERTY(double precision READ precision WRITE setPrecision) - Q_PROPERTY(QString prefix READ prefix WRITE setPrefix) - Q_PROPERTY(QString suffix READ suffix WRITE setSuffix) - Q_PROPERTY(int clickID READ clickID WRITE setClickID) - Q_PROPERTY(int setID READ setID WRITE setSetID) - -public: - explicit TouchSlider(QWidget *parent = 0); - ~TouchSlider(); - - int clickID() const {return id_click;} - int setID() const {return id_set;} - - double minimum() const; - double maximum() const; - double value() const; - double precision() const; - QString prefix() const {return pref;} - QString suffix() const {return suff;} - bool readOnly() const {return m_readOnly;} - bool showMinMax() const {return m_showMinMax;} - -private: - void updateCaption(); - - Ui::TouchSlider *ui; - bool hasZero; - bool m_readOnly; - bool m_showMinMax; - double prec; - int id_click, id_set; - QString pref, suff; - -public slots: - void enable() {setEnabled(true);} - void disable() {setEnabled(false);} - - void setClickID(int id) {id_click = id;} - void setSetID(int id) {id_set = id;} - - void setSuffix(const QString & text) {suff = text; updateCaption();} - void setPrefix(const QString & text) {pref = text; updateCaption();} - void setPrecision(double precision); - void setPrecision(int precision) {setPrecision((double)precision);} - void setMinimum(double min); - void setMinimum(int min) {setMinimum((double)min);} - void setMaximum(double max); - void setMaximum(int max) {setMaximum((double)max);} - void setReadOnly(bool yes); - void setShowMinMax(bool yes); - - void setValue(double val); - void setValue(int val) {setValue((double)val);} - - void enableID(int set_id) {if (set_id == id_set) enable();} - void disableID(int set_id) {if (set_id == id_set) disable();} - - void setValueID(int set_id, double val) {if (set_id == id_set) setValue(val);} - void setValueID(int set_id, int val) {if (set_id == id_set) setValue(val);} - - void clickMin() {on_pbMin_clicked();} - void clickMax() {on_pbMax_clicked();} - void clickInc() {on_pbInc_clicked();} - void clickDec() {on_pbDec_clicked();} - void clickZero() {on_pbZero_clicked();} - -private slots: - void on_barPos_valueChanged(int value); - void on_barNeg_valueChanged(int value); - void on_barNeg_mousePressEvent(QMouseEvent*); - void on_barPos_mousePressEvent(QMouseEvent*); - void on_barNeg_mouseMoveEvent(QMouseEvent*); - void on_barPos_mouseMoveEvent(QMouseEvent*); - void on_pbZero_clicked(); - void on_pbDec_clicked(); - void on_pbInc_clicked(); - void on_pbMax_clicked(); - void on_pbMin_clicked(); - -signals: - void valueChanged(double val); - void valueChanged(int val); - void valueChangedID(int id, double val); - void valueChangedID(int id, int val); -}; - -#endif // TOUCHSLIDER_H diff --git a/test/qad/touch_widgets/touchslider.ui b/test/qad/touch_widgets/touchslider.ui deleted file mode 100644 index 2d25657..0000000 --- a/test/qad/touch_widgets/touchslider.ui +++ /dev/null @@ -1,187 +0,0 @@ - - - TouchSlider - - - - 0 - 0 - 449 - 77 - - - - val - - - Qt::AlignCenter - - - - 4 - - - 2 - - - - - - 0 - 0 - - - - - 45 - 45 - - - - -100 - - - - - - - - 0 - 0 - - - - 0 - - - false - - - true - - - - - - - - 0 - 0 - - - - 100 - - - 50 - - - false - - - - - - - - 0 - 0 - - - - - 45 - 45 - - - - 100 - - - - - - - - 0 - 0 - - - - - 45 - 45 - - - - - - - - true - - - 500 - - - - - - - - 0 - 0 - - - - - 45 - 45 - - - - 0 - - - - - - - - 0 - 0 - - - - - 45 - 45 - - - - + - - - true - - - 500 - - - - - - - - TouchButton - QToolButton -

  • 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 diff --git a/test/qad/icons/dialog-close.png b/test/qad/icons/dialog-close.png deleted file mode 100644 index 6072634c29af12ad1fefccab20f4940c7d56379a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39321 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ÆE2)F-x%Zf_xyQDUC&`WHQ>FF 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 Q0l<&*K{tmgdwkme0n>b}uK)l5 diff --git a/test/qad/icons/document-edit.png b/test/qad/icons/document-edit.png deleted file mode 100644 index 1ecb10cd7d8ba87b41e649da92789c12885634e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30106 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