From f8146f24ea9d7771d3d1be6b64037bdfbe3e1872 Mon Sep 17 00:00:00 2001 From: zhuzihcu Date: Thu, 11 May 2023 18:24:58 +0800 Subject: [PATCH] update --- example/qml/App.qml | 2 - example/qml/page/T_Awesome.qml | 4 - example/qml/page/T_Badge.qml | 5 - example/qml/page/T_BreadcrumbBar.qml | 4 - example/qml/page/T_Buttons.qml | 6 +- example/qml/page/T_CalendarPicker.qml | 4 - example/qml/page/T_Carousel.qml | 4 - example/qml/page/T_CheckBox.qml | 4 - example/qml/page/T_ColorPicker.qml | 4 - example/qml/page/T_DatePicker.qml | 4 - example/qml/page/T_Dialog.qml | 4 - example/qml/page/T_Expander.qml | 4 - example/qml/page/T_FlipView.qml | 4 - example/qml/page/T_Home.qml | 5 - example/qml/page/T_InfoBar.qml | 4 - example/qml/page/T_MediaPlayer.qml | 4 - example/qml/page/T_Menu.qml | 4 - example/qml/page/T_MultiWindow.qml | 4 - example/qml/page/T_Pivot.qml | 4 - example/qml/page/T_Progress.qml | 4 - example/qml/page/T_RatingControl.qml | 4 - example/qml/page/T_Rectangle.qml | 4 - example/qml/page/T_Settings.qml | 4 - example/qml/page/T_Slider.qml | 4 - example/qml/page/T_StatusView.qml | 4 - example/qml/page/T_TabView.qml | 8 +- example/qml/page/T_TableView.qml | 4 - example/qml/page/T_Text.qml | 4 - example/qml/page/T_TextBox.qml | 4 - example/qml/page/T_Theme.qml | 4 - example/qml/page/T_TimePicker.qml | 4 - example/qml/page/T_ToggleSwitch.qml | 4 - example/qml/page/T_Tooltip.qml | 4 - example/qml/page/T_TreeView.qml | 4 - example/qml/page/T_Typography.qml | 6 +- example/qml/window/AboutWindow.qml | 4 +- example/qml/window/ChatWindow.qml | 261 ------------------ example/qml/window/MainWindow.qml | 25 +- example/qml/window/main.qml | 14 + example/src/controller/ChatController.cpp | 56 ---- example/src/controller/ChatController.h | 35 --- example/src/main.cpp | 9 +- src/CMakeLists.txt | 13 +- src/Def.h | 18 +- src/FluApp.cpp | 59 +--- src/FluApp.h | 65 +---- src/FluColors.cpp | 10 + src/FluColors.h | 9 +- src/FluRegister.cpp | 2 +- src/FluTheme.cpp | 13 +- src/FluTheme.h | 14 +- src/FluTools.cpp | 11 + src/FluTools.h | 11 +- src/NativeEventFilter.cpp | 81 ------ src/NativeEventFilter.h | 17 -- src/WindowHelper.cpp | 32 +-- src/WindowHelper.h | 9 +- src/imports/FluentUI/Controls/FluAppBar.qml | 2 +- .../FluentUI/Controls/FluNavigationView.qml | 37 ++- .../FluentUI/Controls/FluScrollablePage.qml | 13 +- .../FluentUI/Controls/FluSingleton.qml | 16 -- .../FluentUI/Controls/FluTableView.qml | 13 +- src/imports/FluentUI/Controls/FluWindow.qml | 26 +- .../FluentUI/designer/fluentui.metainfo | 17 ++ .../designer/images/busyindicator-icon.png | Bin 0 -> 320 bytes .../designer/images/busyindicator-icon16.png | Bin 0 -> 229 bytes .../designer/images/busyindicator-icon@2x.png | Bin 0 -> 643 bytes .../FluentUI/designer/images/button-icon.png | Bin 0 -> 162 bytes .../designer/images/button-icon16.png | Bin 0 -> 145 bytes .../designer/images/button-icon@2x.png | Bin 0 -> 259 bytes .../designer/images/checkbox-icon.png | Bin 0 -> 258 bytes .../designer/images/checkbox-icon16.png | Bin 0 -> 230 bytes .../designer/images/checkbox-icon@2x.png | Bin 0 -> 336 bytes .../designer/images/combobox-icon.png | Bin 0 -> 156 bytes .../designer/images/combobox-icon16.png | Bin 0 -> 155 bytes .../designer/images/combobox-icon@2x.png | Bin 0 -> 185 bytes .../FluentUI/designer/images/control-icon.png | Bin 0 -> 293 bytes .../designer/images/control-icon16.png | Bin 0 -> 229 bytes .../designer/images/control-icon@2x.png | Bin 0 -> 509 bytes .../designer/images/delaybutton-icon.png | Bin 0 -> 189 bytes .../designer/images/delaybutton-icon16.png | Bin 0 -> 160 bytes .../designer/images/delaybutton-icon@2x.png | Bin 0 -> 286 bytes .../FluentUI/designer/images/dial-icon.png | Bin 0 -> 267 bytes .../FluentUI/designer/images/dial-icon16.png | Bin 0 -> 243 bytes .../FluentUI/designer/images/dial-icon@2x.png | Bin 0 -> 505 bytes .../FluentUI/designer/images/frame-icon.png | Bin 0 -> 121 bytes .../FluentUI/designer/images/frame-icon16.png | Bin 0 -> 117 bytes .../designer/images/frame-icon@2x.png | Bin 0 -> 125 bytes .../designer/images/groupbox-icon.png | Bin 0 -> 133 bytes .../designer/images/groupbox-icon16.png | Bin 0 -> 125 bytes .../designer/images/groupbox-icon@2x.png | Bin 0 -> 136 bytes .../designer/images/itemdelegate-icon.png | Bin 0 -> 127 bytes .../designer/images/itemdelegate-icon16.png | Bin 0 -> 124 bytes .../designer/images/itemdelegate-icon@2x.png | Bin 0 -> 133 bytes .../FluentUI/designer/images/label-icon.png | Bin 0 -> 206 bytes .../FluentUI/designer/images/label-icon16.png | Bin 0 -> 182 bytes .../designer/images/label-icon@2x.png | Bin 0 -> 284 bytes .../FluentUI/designer/images/page-icon.png | Bin 0 -> 190 bytes .../FluentUI/designer/images/page-icon16.png | Bin 0 -> 148 bytes .../FluentUI/designer/images/page-icon@2x.png | Bin 0 -> 195 bytes .../designer/images/pageindicator-icon.png | Bin 0 -> 179 bytes .../designer/images/pageindicator-icon16.png | Bin 0 -> 158 bytes .../designer/images/pageindicator-icon@2x.png | Bin 0 -> 207 bytes .../FluentUI/designer/images/pane-icon.png | Bin 0 -> 93 bytes .../FluentUI/designer/images/pane-icon16.png | Bin 0 -> 92 bytes .../FluentUI/designer/images/pane-icon@2x.png | Bin 0 -> 96 bytes .../designer/images/progressbar-icon.png | Bin 0 -> 101 bytes .../designer/images/progressbar-icon16.png | Bin 0 -> 92 bytes .../designer/images/progressbar-icon@2x.png | Bin 0 -> 127 bytes .../designer/images/radiobutton-icon.png | Bin 0 -> 279 bytes .../designer/images/radiobutton-icon16.png | Bin 0 -> 218 bytes .../designer/images/radiobutton-icon@2x.png | Bin 0 -> 482 bytes .../designer/images/rangeslider-icon.png | Bin 0 -> 269 bytes .../designer/images/rangeslider-icon16.png | Bin 0 -> 231 bytes .../designer/images/rangeslider-icon@2x.png | Bin 0 -> 282 bytes .../designer/images/roundbutton-icon.png | Bin 0 -> 229 bytes .../designer/images/roundbutton-icon16.png | Bin 0 -> 186 bytes .../designer/images/roundbutton-icon@2x.png | Bin 0 -> 381 bytes .../designer/images/scrollview-icon.png | Bin 0 -> 110 bytes .../designer/images/scrollview-icon16.png | Bin 0 -> 116 bytes .../designer/images/scrollview-icon@2x.png | Bin 0 -> 145 bytes .../FluentUI/designer/images/slider-icon.png | Bin 0 -> 190 bytes .../designer/images/slider-icon16.png | Bin 0 -> 156 bytes .../designer/images/slider-icon@2x.png | Bin 0 -> 227 bytes .../FluentUI/designer/images/spinbox-icon.png | Bin 0 -> 144 bytes .../designer/images/spinbox-icon16.png | Bin 0 -> 151 bytes .../designer/images/spinbox-icon@2x.png | Bin 0 -> 178 bytes .../designer/images/stackview-icon.png | Bin 0 -> 162 bytes .../designer/images/stackview-icon16.png | Bin 0 -> 151 bytes .../designer/images/stackview-icon@2x.png | Bin 0 -> 167 bytes .../designer/images/swipeview-icon.png | Bin 0 -> 163 bytes .../designer/images/swipeview-icon16.png | Bin 0 -> 152 bytes .../designer/images/swipeview-icon@2x.png | Bin 0 -> 184 bytes .../FluentUI/designer/images/switch-icon.png | Bin 0 -> 205 bytes .../designer/images/switch-icon16.png | Bin 0 -> 160 bytes .../designer/images/switch-icon@2x.png | Bin 0 -> 314 bytes .../designer/images/textarea-icon.png | Bin 0 -> 149 bytes .../designer/images/textarea-icon16.png | Bin 0 -> 133 bytes .../designer/images/textarea-icon@2x.png | Bin 0 -> 163 bytes .../designer/images/textfield-icon.png | Bin 0 -> 154 bytes .../designer/images/textfield-icon16.png | Bin 0 -> 147 bytes .../designer/images/textfield-icon@2x.png | Bin 0 -> 172 bytes .../FluentUI/designer/images/toolbar-icon.png | Bin 0 -> 131 bytes .../designer/images/toolbar-icon16.png | Bin 0 -> 114 bytes .../designer/images/toolbar-icon@2x.png | Bin 0 -> 140 bytes .../designer/images/toolbutton-icon.png | Bin 0 -> 141 bytes .../designer/images/toolbutton-icon16.png | Bin 0 -> 128 bytes .../designer/images/toolbutton-icon@2x.png | Bin 0 -> 158 bytes .../designer/images/toolseparator-icon.png | Bin 0 -> 111 bytes .../designer/images/toolseparator-icon16.png | Bin 0 -> 123 bytes .../designer/images/toolseparator-icon@2x.png | Bin 0 -> 131 bytes .../FluentUI/designer/images/tumbler-icon.png | Bin 0 -> 132 bytes .../designer/images/tumbler-icon16.png | Bin 0 -> 127 bytes .../designer/images/tumbler-icon@2x.png | Bin 0 -> 153 bytes 154 files changed, 211 insertions(+), 829 deletions(-) delete mode 100644 example/qml/window/ChatWindow.qml create mode 100644 example/qml/window/main.qml delete mode 100644 example/src/controller/ChatController.cpp delete mode 100644 example/src/controller/ChatController.h delete mode 100644 src/NativeEventFilter.cpp delete mode 100644 src/NativeEventFilter.h delete mode 100644 src/imports/FluentUI/Controls/FluSingleton.qml create mode 100644 src/imports/FluentUI/designer/fluentui.metainfo create mode 100644 src/imports/FluentUI/designer/images/busyindicator-icon.png create mode 100644 src/imports/FluentUI/designer/images/busyindicator-icon16.png create mode 100644 src/imports/FluentUI/designer/images/busyindicator-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/button-icon.png create mode 100644 src/imports/FluentUI/designer/images/button-icon16.png create mode 100644 src/imports/FluentUI/designer/images/button-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/checkbox-icon.png create mode 100644 src/imports/FluentUI/designer/images/checkbox-icon16.png create mode 100644 src/imports/FluentUI/designer/images/checkbox-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/combobox-icon.png create mode 100644 src/imports/FluentUI/designer/images/combobox-icon16.png create mode 100644 src/imports/FluentUI/designer/images/combobox-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/control-icon.png create mode 100644 src/imports/FluentUI/designer/images/control-icon16.png create mode 100644 src/imports/FluentUI/designer/images/control-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/delaybutton-icon.png create mode 100644 src/imports/FluentUI/designer/images/delaybutton-icon16.png create mode 100644 src/imports/FluentUI/designer/images/delaybutton-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/dial-icon.png create mode 100644 src/imports/FluentUI/designer/images/dial-icon16.png create mode 100644 src/imports/FluentUI/designer/images/dial-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/frame-icon.png create mode 100644 src/imports/FluentUI/designer/images/frame-icon16.png create mode 100644 src/imports/FluentUI/designer/images/frame-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/groupbox-icon.png create mode 100644 src/imports/FluentUI/designer/images/groupbox-icon16.png create mode 100644 src/imports/FluentUI/designer/images/groupbox-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/itemdelegate-icon.png create mode 100644 src/imports/FluentUI/designer/images/itemdelegate-icon16.png create mode 100644 src/imports/FluentUI/designer/images/itemdelegate-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/label-icon.png create mode 100644 src/imports/FluentUI/designer/images/label-icon16.png create mode 100644 src/imports/FluentUI/designer/images/label-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/page-icon.png create mode 100644 src/imports/FluentUI/designer/images/page-icon16.png create mode 100644 src/imports/FluentUI/designer/images/page-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/pageindicator-icon.png create mode 100644 src/imports/FluentUI/designer/images/pageindicator-icon16.png create mode 100644 src/imports/FluentUI/designer/images/pageindicator-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/pane-icon.png create mode 100644 src/imports/FluentUI/designer/images/pane-icon16.png create mode 100644 src/imports/FluentUI/designer/images/pane-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/progressbar-icon.png create mode 100644 src/imports/FluentUI/designer/images/progressbar-icon16.png create mode 100644 src/imports/FluentUI/designer/images/progressbar-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/radiobutton-icon.png create mode 100644 src/imports/FluentUI/designer/images/radiobutton-icon16.png create mode 100644 src/imports/FluentUI/designer/images/radiobutton-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/rangeslider-icon.png create mode 100644 src/imports/FluentUI/designer/images/rangeslider-icon16.png create mode 100644 src/imports/FluentUI/designer/images/rangeslider-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/roundbutton-icon.png create mode 100644 src/imports/FluentUI/designer/images/roundbutton-icon16.png create mode 100644 src/imports/FluentUI/designer/images/roundbutton-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/scrollview-icon.png create mode 100644 src/imports/FluentUI/designer/images/scrollview-icon16.png create mode 100644 src/imports/FluentUI/designer/images/scrollview-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/slider-icon.png create mode 100644 src/imports/FluentUI/designer/images/slider-icon16.png create mode 100644 src/imports/FluentUI/designer/images/slider-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/spinbox-icon.png create mode 100644 src/imports/FluentUI/designer/images/spinbox-icon16.png create mode 100644 src/imports/FluentUI/designer/images/spinbox-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/stackview-icon.png create mode 100644 src/imports/FluentUI/designer/images/stackview-icon16.png create mode 100644 src/imports/FluentUI/designer/images/stackview-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/swipeview-icon.png create mode 100644 src/imports/FluentUI/designer/images/swipeview-icon16.png create mode 100644 src/imports/FluentUI/designer/images/swipeview-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/switch-icon.png create mode 100644 src/imports/FluentUI/designer/images/switch-icon16.png create mode 100644 src/imports/FluentUI/designer/images/switch-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/textarea-icon.png create mode 100644 src/imports/FluentUI/designer/images/textarea-icon16.png create mode 100644 src/imports/FluentUI/designer/images/textarea-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/textfield-icon.png create mode 100644 src/imports/FluentUI/designer/images/textfield-icon16.png create mode 100644 src/imports/FluentUI/designer/images/textfield-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/toolbar-icon.png create mode 100644 src/imports/FluentUI/designer/images/toolbar-icon16.png create mode 100644 src/imports/FluentUI/designer/images/toolbar-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/toolbutton-icon.png create mode 100644 src/imports/FluentUI/designer/images/toolbutton-icon16.png create mode 100644 src/imports/FluentUI/designer/images/toolbutton-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/toolseparator-icon.png create mode 100644 src/imports/FluentUI/designer/images/toolseparator-icon16.png create mode 100644 src/imports/FluentUI/designer/images/toolseparator-icon@2x.png create mode 100644 src/imports/FluentUI/designer/images/tumbler-icon.png create mode 100644 src/imports/FluentUI/designer/images/tumbler-icon16.png create mode 100644 src/imports/FluentUI/designer/images/tumbler-icon@2x.png diff --git a/example/qml/App.qml b/example/qml/App.qml index f45e90e..f1781b6 100644 --- a/example/qml/App.qml +++ b/example/qml/App.qml @@ -8,13 +8,11 @@ Window { id:app Component.onCompleted: { FluApp.init(app) - FluTheme.frameless = ("windows" === Qt.platform.os) FluTheme.darkMode = FluDarkMode.System FluApp.routes = { "/":"qrc:/example/qml/window/MainWindow.qml", "/about":"qrc:/example/qml/window/AboutWindow.qml", "/login":"qrc:/example/qml/window/LoginWindow.qml", - "/chat":"qrc:/example/qml/window/ChatWindow.qml", "/media":"qrc:/example/qml/window/MediaWindow.qml", "/singleTaskWindow":"qrc:/example/qml/window/SingleTaskWindow.qml", "/standardWindow":"qrc:/example/qml/window/StandardWindow.qml", diff --git a/example/qml/page/T_Awesome.qml b/example/qml/page/T_Awesome.qml index c3b8784..26caa39 100644 --- a/example/qml/page/T_Awesome.qml +++ b/example/qml/page/T_Awesome.qml @@ -8,10 +8,6 @@ FluContentPage { title:"Awesome" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - FluTextBox{ id:text_box placeholderText: "请输入关键字" diff --git a/example/qml/page/T_Badge.qml b/example/qml/page/T_Badge.qml index 6ca7856..11b9b64 100644 --- a/example/qml/page/T_Badge.qml +++ b/example/qml/page/T_Badge.qml @@ -9,11 +9,6 @@ FluScrollablePage{ title:"Badge" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 - FluArea{ Layout.fillWidth: true Layout.topMargin: 20 diff --git a/example/qml/page/T_BreadcrumbBar.qml b/example/qml/page/T_BreadcrumbBar.qml index bf266ac..30d6809 100644 --- a/example/qml/page/T_BreadcrumbBar.qml +++ b/example/qml/page/T_BreadcrumbBar.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"BreadcurmbBar" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 Component.onCompleted: { var items = [] diff --git a/example/qml/page/T_Buttons.qml b/example/qml/page/T_Buttons.qml index 64299d7..0547e8e 100644 --- a/example/qml/page/T_Buttons.qml +++ b/example/qml/page/T_Buttons.qml @@ -7,12 +7,8 @@ import FluentUI import "../component" FluScrollablePage{ - title:"Buttons" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 + title:"Buttons" FluText{ Layout.topMargin: 20 diff --git a/example/qml/page/T_CalendarPicker.qml b/example/qml/page/T_CalendarPicker.qml index 11e4c23..b7b3814 100644 --- a/example/qml/page/T_CalendarPicker.qml +++ b/example/qml/page/T_CalendarPicker.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"CalendarPicker" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Carousel.qml b/example/qml/page/T_Carousel.qml index 3461464..83c2ed3 100644 --- a/example/qml/page/T_Carousel.qml +++ b/example/qml/page/T_Carousel.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Carousel" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_CheckBox.qml b/example/qml/page/T_CheckBox.qml index 7e2fd6a..8603bb4 100644 --- a/example/qml/page/T_CheckBox.qml +++ b/example/qml/page/T_CheckBox.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"CheckBox" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_ColorPicker.qml b/example/qml/page/T_ColorPicker.qml index 2df0c53..03195f4 100644 --- a/example/qml/page/T_ColorPicker.qml +++ b/example/qml/page/T_ColorPicker.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"ColorPicker" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_DatePicker.qml b/example/qml/page/T_DatePicker.qml index e54fb0c..7930bcc 100644 --- a/example/qml/page/T_DatePicker.qml +++ b/example/qml/page/T_DatePicker.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"TimePicker" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Dialog.qml b/example/qml/page/T_Dialog.qml index ea9b2f6..ff561c8 100644 --- a/example/qml/page/T_Dialog.qml +++ b/example/qml/page/T_Dialog.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Dialog" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Expander.qml b/example/qml/page/T_Expander.qml index 7e1245e..21e10aa 100644 --- a/example/qml/page/T_Expander.qml +++ b/example/qml/page/T_Expander.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Expander" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_FlipView.qml b/example/qml/page/T_FlipView.qml index 0ac4947..ba7fa49 100644 --- a/example/qml/page/T_FlipView.qml +++ b/example/qml/page/T_FlipView.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"FlipView" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Home.qml b/example/qml/page/T_Home.qml index f7423d0..8100050 100644 --- a/example/qml/page/T_Home.qml +++ b/example/qml/page/T_Home.qml @@ -7,11 +7,6 @@ import FluentUI FluScrollablePage{ - - leftPadding:10 - rightPadding:0 - bottomPadding:20 - ListModel{ id:model_header ListElement{ diff --git a/example/qml/page/T_InfoBar.qml b/example/qml/page/T_InfoBar.qml index c66d25c..3162176 100644 --- a/example/qml/page/T_InfoBar.qml +++ b/example/qml/page/T_InfoBar.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"InfoBar" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_MediaPlayer.qml b/example/qml/page/T_MediaPlayer.qml index 12da086..2508da8 100644 --- a/example/qml/page/T_MediaPlayer.qml +++ b/example/qml/page/T_MediaPlayer.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"MediaPlayer" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 onVisibleChanged: { if(visible){ diff --git a/example/qml/page/T_Menu.qml b/example/qml/page/T_Menu.qml index 01bef38..186c96d 100644 --- a/example/qml/page/T_Menu.qml +++ b/example/qml/page/T_Menu.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Menu" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_MultiWindow.qml b/example/qml/page/T_MultiWindow.qml index b107b56..819904d 100644 --- a/example/qml/page/T_MultiWindow.qml +++ b/example/qml/page/T_MultiWindow.qml @@ -11,10 +11,6 @@ FluScrollablePage{ property var loginPageRegister: registerForWindowResult("/login") title:"MultiWindow" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 Connections{ target: loginPageRegister diff --git a/example/qml/page/T_Pivot.qml b/example/qml/page/T_Pivot.qml index 24838c1..b0ba4e3 100644 --- a/example/qml/page/T_Pivot.qml +++ b/example/qml/page/T_Pivot.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Pivot" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Progress.qml b/example/qml/page/T_Progress.qml index dc6954f..dc0de53 100644 --- a/example/qml/page/T_Progress.qml +++ b/example/qml/page/T_Progress.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Progress" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_RatingControl.qml b/example/qml/page/T_RatingControl.qml index b1d7bbc..fd33420 100644 --- a/example/qml/page/T_RatingControl.qml +++ b/example/qml/page/T_RatingControl.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"RatingControl" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Rectangle.qml b/example/qml/page/T_Rectangle.qml index 232e041..96db0a7 100644 --- a/example/qml/page/T_Rectangle.qml +++ b/example/qml/page/T_Rectangle.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Rectangle" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Settings.qml b/example/qml/page/T_Settings.qml index dd25c01..19cb660 100644 --- a/example/qml/page/T_Settings.qml +++ b/example/qml/page/T_Settings.qml @@ -9,10 +9,6 @@ import "../component" FluScrollablePage{ title:"Settings" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Slider.qml b/example/qml/page/T_Slider.qml index 48cce7f..45138ad 100644 --- a/example/qml/page/T_Slider.qml +++ b/example/qml/page/T_Slider.qml @@ -8,10 +8,6 @@ import FluentUI FluScrollablePage{ title:"Slider" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_StatusView.qml b/example/qml/page/T_StatusView.qml index f2774e5..6ba5d59 100644 --- a/example/qml/page/T_StatusView.qml +++ b/example/qml/page/T_StatusView.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"StatusView" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ id:layout_actions diff --git a/example/qml/page/T_TabView.qml b/example/qml/page/T_TabView.qml index a03f303..40f8d4f 100644 --- a/example/qml/page/T_TabView.qml +++ b/example/qml/page/T_TabView.qml @@ -7,14 +7,10 @@ import "../component" FluScrollablePage{ - title:"TabView" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 - property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green] + title:"TabView" + Component{ id:com_page Rectangle{ diff --git a/example/qml/page/T_TableView.qml b/example/qml/page/T_TableView.qml index fa26c5d..1576210 100644 --- a/example/qml/page/T_TableView.qml +++ b/example/qml/page/T_TableView.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"TableView" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 Component.onCompleted: { const columns = [ diff --git a/example/qml/page/T_Text.qml b/example/qml/page/T_Text.qml index 51edce7..0540032 100644 --- a/example/qml/page/T_Text.qml +++ b/example/qml/page/T_Text.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Text" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_TextBox.qml b/example/qml/page/T_TextBox.qml index 1c2dfd0..622feb7 100644 --- a/example/qml/page/T_TextBox.qml +++ b/example/qml/page/T_TextBox.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"TextBox" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Theme.qml b/example/qml/page/T_Theme.qml index 9ddf242..f4a7704 100644 --- a/example/qml/page/T_Theme.qml +++ b/example/qml/page/T_Theme.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Theme" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_TimePicker.qml b/example/qml/page/T_TimePicker.qml index 48e1109..672c363 100644 --- a/example/qml/page/T_TimePicker.qml +++ b/example/qml/page/T_TimePicker.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"TimePicker" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_ToggleSwitch.qml b/example/qml/page/T_ToggleSwitch.qml index 6123c5f..0678851 100644 --- a/example/qml/page/T_ToggleSwitch.qml +++ b/example/qml/page/T_ToggleSwitch.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"ToggleSwitch" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Tooltip.qml b/example/qml/page/T_Tooltip.qml index 2bb0ce4..2ad2d8a 100644 --- a/example/qml/page/T_Tooltip.qml +++ b/example/qml/page/T_Tooltip.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage{ title:"Tooltip" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 FluText{ Layout.topMargin: 20 diff --git a/example/qml/page/T_TreeView.qml b/example/qml/page/T_TreeView.qml index 01a7801..8763eb2 100644 --- a/example/qml/page/T_TreeView.qml +++ b/example/qml/page/T_TreeView.qml @@ -8,10 +8,6 @@ import "../component" FluScrollablePage { title:"TreeView" - leftPadding:10 - rightPadding:10 - bottomPadding:20 - spacing: 0 function randomName() { var names = ["张三", "李四", "王五", "赵六", "钱七", "孙八", "周九", "吴十"] diff --git a/example/qml/page/T_Typography.qml b/example/qml/page/T_Typography.qml index ce1d2db..234debc 100644 --- a/example/qml/page/T_Typography.qml +++ b/example/qml/page/T_Typography.qml @@ -5,11 +5,9 @@ import FluentUI FluContentPage { - title: "Typography" property real textScale: 1 - leftPadding:10 - rightPadding:10 - bottomPadding:20 + + title: "Typography" Component.onCompleted: { slider.seek(0) diff --git a/example/qml/window/AboutWindow.qml b/example/qml/window/AboutWindow.qml index 559aef5..fd8f379 100644 --- a/example/qml/window/AboutWindow.qml +++ b/example/qml/window/AboutWindow.qml @@ -119,6 +119,7 @@ FluWindow { RowLayout{ spacing: 14 + Layout.topMargin: 20 Layout.leftMargin: 15 FluText{ text:"捐赠:" @@ -147,12 +148,11 @@ FluWindow { RowLayout{ spacing: 14 Layout.leftMargin: 15 + Layout.topMargin: 20 FluText{ id:text_desc text:"个人开发,维护不易,你们的捐赠就是我继续更新的动力!\n有什么问题提Issues,只要时间充足我就会解决的!!" } } - - } } diff --git a/example/qml/window/ChatWindow.qml b/example/qml/window/ChatWindow.qml deleted file mode 100644 index ec04983..0000000 --- a/example/qml/window/ChatWindow.qml +++ /dev/null @@ -1,261 +0,0 @@ -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls -import FluentUI -import Controller -import QtQuick.Dialogs - -FluWindow { - - title:"ChatGPT" - width: 680 - height: 600 - minimumWidth: 500 - minimumHeight: 600 - - onInitArgument: - (argument)=>{ - scrollview.focus = true - } - - ChatController{ - id:controller - - onResponseDataChanged: { - appendMessage(false,responseData) - } - - } - - ListModel{ - id:model_message - ListElement{ - isMy:false - text:"欢迎使用ChatGPT" - } - ListElement{ - isMy:true - text:"好的,3Q" - } - } - - FluAppBar{ - id:appbar - title:"ChatGPT" - width:parent.width - } - - Component{ - id:com_text - TextEdit { - id:item_text - text: message - wrapMode: Text.WrapAnywhere - readOnly: true - selectByMouse: true - selectByKeyboard: true - selectedTextColor: Qt.rgba(51,153,255,1) - color:FluColors.Black - selectionColor: { - if(FluTheme.dark){ - return FluTheme.primaryColor.lighter - }else{ - return FluTheme.primaryColor.dark - } - } - width: Math.min(list_message.width-200,600,implicitWidth) - TapHandler{ - acceptedButtons: Qt.RightButton - onTapped: { - menu_item.showMenu(item_text.selectedText) - } - } - } - } - - FluArea{ - id:layout_content - anchors{ - top: appbar.bottom - left: parent.left - right: parent.right - bottom: layout_bottom.top - margins: 10 - } - color: FluTheme.dark ? Qt.rgba(39/255,39/255,39/255,1) : Qt.rgba(245/255,245/255,245/255,1) - ListView{ - id:list_message - anchors.fill: parent - model:model_message - clip: true - ScrollBar.vertical: FluScrollBar {} - preferredHighlightBegin: 0 - preferredHighlightEnd: 0 - highlightMoveDuration: 0 - header:Item{ - width: list_message.width - height:20 - } - footer:Item{ - width: list_message.width - height:20 - } - delegate: Item{ - width: ListView.view.width - height: childrenRect.height - - FluRectangle{ - id:item_avatar - width: 30 - height: 30 - radius:[15,15,15,15] - anchors{ - right: isMy ? parent.right : undefined - rightMargin: isMy ? 20 : undefined - left: isMy ? undefined : parent.left - leftMargin: isMy ? undefined : 20 - top:parent.top - } - Image { - asynchronous: true - anchors.fill: parent - sourceSize: Qt.size(100,100) - source: isMy ? "qrc:/example/res/svg/avatar_2.svg" : "qrc:/example/res/image/logo_openai.png" - } - } - - Rectangle{ - id:item_layout_content - color: isMy ? "#FF95EC69" : "#FFFFFF" - width: item_msg_loader.width+10 - height: item_msg_loader.height+10 - radius: 3 - anchors{ - top: item_avatar.top - right: isMy ? item_avatar.left : undefined - rightMargin: isMy ? 10 : undefined - left: isMy ? undefined : item_avatar.right - leftMargin: isMy ? undefined : 10 - - } - - Loader{ - id:item_msg_loader - property var message: model.text - anchors.centerIn: parent - sourceComponent: com_text - } - } - - - Item{ - id:item_layout_bottom - width: parent.width - anchors.top: item_layout_content.bottom - height: 20 - } - } - } - } - - FluArea{ - id:layout_bottom - height: 90 - anchors{ - bottom: parent.bottom - bottomMargin: 10 - left: parent.left - right: parent.right - leftMargin: 10 - rightMargin: 10 - } - - - ScrollView{ - id:scrollview - anchors{ - bottom: parent.bottom - left: parent.left - right: button_send.left - bottomMargin: 10 - leftMargin: 10 - rightMargin: 10 - } - height: Math.min(textbox.implicitHeight,64) - FluMultilineTextBox{ - id:textbox - focus:true - placeholderText: "请输入消息" - } - } - - FluFilledButton{ - id:button_send - text:controller.isLoading ? timer_loading.loadingText :"发送" - anchors{ - bottom: parent.bottom - right: parent.right - bottomMargin: 10 - rightMargin: 10 - } - width: 60 - disabled: controller.isLoading - onClicked:{ - var text = textbox.text - appendMessage(true,text) - controller.sendMessage(text) - textbox.clear() - } - - Timer{ - id:timer_loading - property int count : 0 - property string loadingText : "" - interval: 500 - running: controller.isLoading - repeat: true - onTriggered: { - switch(count%3){ - case 0: - loadingText = "." - break - case 1: - loadingText = ".." - break - case 2: - loadingText = "..." - break - default: - loadingText = "" - break - } - count++ - } - } - - } - } - - FluMenu{ - id:menu_item - focus: false - property string selectedText: "" - FluMenuItem{ - text:"复制" - onClicked: { - controller.clipText(menu_item.selectedText) - showSuccess("复制成功") - } - } - function showMenu(text){ - menu_item.selectedText = text - menu_item.popup() - } - } - - function appendMessage(isMy,text){ - model_message.append({isMy:isMy,text:text}) - list_message.positionViewAtEnd() - } - -} diff --git a/example/qml/window/MainWindow.qml b/example/qml/window/MainWindow.qml index 4b0e6a9..505a445 100644 --- a/example/qml/window/MainWindow.qml +++ b/example/qml/window/MainWindow.qml @@ -48,7 +48,7 @@ FluWindow { MenuItem { text: "退出" onTriggered: { - window.destoryWindow() + window.deleteWindow() FluApp.closeApp() } } @@ -76,7 +76,7 @@ FluWindow { positiveText:"退出" neutralText:"取消" onPositiveClicked:{ - window.destoryWindow() + window.deleteWindow() FluApp.closeApp() } @@ -102,6 +102,27 @@ FluWindow { ItemsOriginal.startPageByItem(data) } } + actionItem:Item{ + height: 40 + width: 148 + RowLayout{ + anchors.centerIn: parent + spacing: 5 + FluText{ + text:lang.dark_mode + } + FluToggleSwitch{ + selected: FluTheme.dark + clickFunc:function(){ + if(FluTheme.dark){ + FluTheme.darkMode = FluDarkMode.Light + }else{ + FluTheme.darkMode = FluDarkMode.Dark + } + } + } + } + } Component.onCompleted: { ItemsOriginal.navigationView = nav_view ItemsFooter.navigationView = nav_view diff --git a/example/qml/window/main.qml b/example/qml/window/main.qml new file mode 100644 index 0000000..e466a8e --- /dev/null +++ b/example/qml/window/main.qml @@ -0,0 +1,14 @@ +import QtQuick +import FluentUI + +Window { + id:window + width: 400 + height: 400 + visible: true + + FluButton{ + text:"123" + } + +} diff --git a/example/src/controller/ChatController.cpp b/example/src/controller/ChatController.cpp deleted file mode 100644 index 16f59d2..0000000 --- a/example/src/controller/ChatController.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "ChatController.h" - -ChatController::ChatController(QObject *parent) - : QObject{parent} -{ - isLoading(false); - networkManager = new QNetworkAccessManager(this); -} - - -void ChatController::sendMessage(const QString& text){ - isLoading(true); - QUrl apiUrl("https://api.openai.com/v1/chat/completions"); - QNetworkRequest request(apiUrl); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - request.setRawHeader("Authorization", QString::fromStdString("Bearer %1").arg(QString::fromUtf8(QByteArray::fromBase64(baseKey.toUtf8()))).toUtf8()); - QJsonObject requestData; - requestData.insert("model", "gpt-3.5-turbo"); - messages.append(createMessage("user",text)); - requestData.insert("messages", messages); - QJsonDocument requestDoc(requestData); - QByteArray requestDataBytes = requestDoc.toJson(); - QNetworkReply* reply = networkManager->post(request, requestDataBytes); - connect(reply, &QNetworkReply::finished,this, [=]() { - if (reply->error() == QNetworkReply::NoError) { - QString responseString = QString::fromUtf8(reply->readAll()); - qDebug() << responseString; - QJsonDocument doc = QJsonDocument::fromJson(responseString.toUtf8()); - QJsonObject jsonObj = doc.object(); - QString text = jsonObj.value("choices").toArray().at(0).toObject().value("message").toObject().value("content").toString(); - if(text.isEmpty()){ - text = "响应错误:content为空数据"; - }else{ - messages.append(createMessage("assistant",text)); - } - responseData(text.trimmed()); - } else { - responseData("网络错误:"+reply->errorString()); - } - isLoading(false); - reply->deleteLater(); - }); -} - -QJsonObject ChatController::createMessage(const QString& role,const QString& content){ - QJsonObject message; - message.insert("role",role); - message.insert("content",content); - return message; -} - -void ChatController::clipText(const QString& text){ - qDebug()<setText(text); -} diff --git a/example/src/controller/ChatController.h b/example/src/controller/ChatController.h deleted file mode 100644 index 3e5953d..0000000 --- a/example/src/controller/ChatController.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef CHATCONTROLLER_H -#define CHATCONTROLLER_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../stdafx.h" - -class ChatController : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(bool,isLoading) - Q_PROPERTY_AUTO(QString,responseData); -public: - explicit ChatController(QObject *parent = nullptr); - - Q_INVOKABLE void sendMessage(const QString& text); - Q_INVOKABLE void clipText(const QString& text); -private: - QJsonObject createMessage(const QString& role,const QString& content); - -private: - QNetworkAccessManager* networkManager; - QJsonArray messages; - QString baseKey = "c2stbXgxWm5MQkZ5TzhNYzNmRWl6eDZUM0JsYmtGSnNBWjNiakJjSXB6WGN3QW9KSk11"; -}; - -#endif // CHATCONTROLLER_H diff --git a/example/src/main.cpp b/example/src/main.cpp index e76d8b8..8663e40 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -6,11 +6,7 @@ #include #include "lang/Lang.h" #include "AppInfo.h" -#include "controller/ChatController.h" #include "tool/IPC.h" -#if defined(STATICLIB) -#include -#endif int main(int argc, char *argv[]) { @@ -41,10 +37,6 @@ int main(int argc, char *argv[]) } app.setQuitOnLastWindowClosed(false); QQmlApplicationEngine engine; -#if defined(STATICLIB) - FluentUI::initialize(&engine); -#endif - qmlRegisterType("Controller",1,0,"ChatController"); QQmlContext * context = engine.rootContext(); Lang* lang = appInfo->lang(); context->setContextProperty("lang",lang); @@ -53,6 +45,7 @@ int main(int argc, char *argv[]) }); context->setContextProperty("appInfo",appInfo); const QUrl url(QStringLiteral("qrc:/example/qml/App.qml")); +// const QUrl url(QStringLiteral("qrc:/example/qml/window/main.qml")); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d7a087e..0f13f20 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,13 +9,16 @@ if(APPLE) set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) endif() -#设置可执行文件输出目录 +##设置可执行文件输出目录 if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/debug) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_PREFIX_PATH}/bin) else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/release) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_PREFIX_PATH}/bin) endif() +#设置QML路径 +set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_PREFIX_PATH}/qml) + #设置版本号 add_definitions(-DVERSION=1,2,9,0) @@ -36,7 +39,7 @@ foreach(filepath ${QML_PATHS}) endforeach(filepath) #遍历所有资源文件 -file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp) +file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp *.metainfo) foreach(filepath ${RES_PATHS}) string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath}) list(APPEND resource_files ${filename}) @@ -49,8 +52,8 @@ foreach(filepath IN LISTS qml_files resource_files) endforeach() #添加qml模块 +qt_add_library(fluentui SHARED) qt_add_qml_module(fluentui - OUTPUT_DIRECTORY ${CMAKE_PREFIX_PATH}/qml/FluentUI VERSION 1.0 URI "FluentUI" SOURCES ${sources_files} fluentui.rc diff --git a/src/Def.h b/src/Def.h index 4185523..8a2bf59 100644 --- a/src/Def.h +++ b/src/Def.h @@ -6,13 +6,13 @@ namespace Fluent_DarkMode { Q_NAMESPACE - enum Fluent_DarkModeType { - System = 0x0, - Light = 0x1, - Dark = 0x2, - }; - QML_NAMED_ELEMENT(FluDarkMode) -Q_ENUMS(Fluent_DarkModeType); +enum Fluent_DarkModeType { + System = 0x0, + Light = 0x1, + Dark = 0x2, +}; +Q_ENUM_NS(Fluent_DarkModeType) +QML_NAMED_ELEMENT(FluDarkMode) } namespace Fluent_Awesome { @@ -1422,8 +1422,8 @@ enum class Fluent_AwesomeType { SpeechSolidBold=0xf8b2, ClickedOutLoudSolidBold=0xf8b3, }; - QML_NAMED_ELEMENT(FluentIcons) -Q_ENUMS(Fluent_AwesomeType) +Q_ENUM_NS(Fluent_AwesomeType) +QML_NAMED_ELEMENT(FluentIcons) } #endif // DEF_H diff --git a/src/FluApp.cpp b/src/FluApp.cpp index c443e6d..0a129f4 100644 --- a/src/FluApp.cpp +++ b/src/FluApp.cpp @@ -9,27 +9,16 @@ #include #include #include "Def.h" -#ifdef Q_OS_WIN -#pragma comment(lib, "Dwmapi.lib") -#pragma comment(lib, "User32.lib") -#include -#include -#include -static bool isCompositionEnabled() + +FluApp* FluApp::m_instance = nullptr; + +FluApp *FluApp::getInstance() { - BOOL composition_enabled = FALSE; - bool success = ::DwmIsCompositionEnabled(&composition_enabled) == S_OK; - return composition_enabled && success; + if(FluApp::m_instance == nullptr){ + FluApp::m_instance = new FluApp; + } + return FluApp::m_instance; } -#endif - -FluApp* FluApp::fluApp = nullptr; - -FluTheme* FluApp::fluTheme = nullptr; - -FluColors* FluApp::fluColors = nullptr; - -FluTools* FluApp::fluTools = nullptr; FluApp::FluApp(QObject *parent) : QObject{parent} @@ -38,43 +27,14 @@ FluApp::FluApp(QObject *parent) } FluApp::~FluApp(){ - if (nativeEvent != Q_NULLPTR) { - delete nativeEvent; - nativeEvent = Q_NULLPTR; - } -} -void FluApp::setFluApp(FluApp* val){ - FluApp::fluApp = val; -} - -void FluApp::setFluTheme(FluTheme* val){ - FluApp::fluTheme = val; -} - -void FluApp::setFluColors(FluColors* val){ - FluApp::fluColors = val; -} - -void FluApp::setFluTools(FluTools* val){ - FluApp::fluTools = val; } void FluApp::init(QQuickWindow *window){ this->appWindow = window; - QQmlEngine *engine = qmlEngine(appWindow); - QQmlComponent component(engine, ":/FluentUI/Controls/FluSingleton.qml"); - component.create(); - nativeEvent = new NativeEventFilter(); - qApp->installNativeEventFilter(nativeEvent); } void FluApp::run(){ -#ifdef Q_OS_WIN - if(!isCompositionEnabled()){ - fluTheme->frameless(false); - } -#endif navigate(initialRoute()); } @@ -113,9 +73,6 @@ void FluApp::navigate(const QString& route,const QJsonObject& argument,FluRegist } } view = qobject_cast(component.createWithInitialProperties(properties)); - if(fluTheme->frameless()){ - view->setFlag(Qt::FramelessWindowHint,true); - } wnds.insert(view->winId(),view); if(fluRegister){ fluRegister->to(view); diff --git a/src/FluApp.h b/src/FluApp.h index 289cae0..dab8e00 100644 --- a/src/FluApp.h +++ b/src/FluApp.h @@ -11,7 +11,6 @@ #include "FluTheme.h" #include "FluTools.h" #include "FluColors.h" -#include "NativeEventFilter.h" #include "FluRegister.h" #include "stdafx.h" @@ -33,11 +32,19 @@ class FluApp : public QObject QML_NAMED_ELEMENT(FluApp) QML_SINGLETON - -public: +private: + /** + * @brief FluApp 将默认构造函数设置为私有,则qml创建单例就会走create工厂方法创建单例 + * @param parent + */ explicit FluApp(QObject *parent = nullptr); +public: ~FluApp(); - + static FluApp *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine) + { + return getInstance(); + } + static FluApp *getInstance(); /** * @brief run */ @@ -69,62 +76,14 @@ public: */ Q_INVOKABLE void closeApp(); - /** - * @brief setFluApp 在FluSingleton.qml调用,拿到QML中FluApp的单例 - * @param val - */ - Q_INVOKABLE void setFluApp(FluApp* val); - - /** - * @brief setFluTheme 在FluSingleton.qml调用,拿到QML中FluTheme的单例 - * @param val - */ - Q_INVOKABLE void setFluTheme(FluTheme* val); - - /** - * @brief setFluColors 在FluSingleton.qml调用,拿到QML中FluColors的单例 - * @param val - */ - Q_INVOKABLE void setFluColors(FluColors* val); - - /** - * @brief setFluColors 在FluSingleton.qml调用,拿到QML中FluTools的单例 - * @param val - */ - Q_INVOKABLE void setFluTools(FluTools* val); - public: /** * @brief wnds */ QMap wnds; - /** - * @brief fluApp - */ - static FluApp* fluApp; - - /** - * @brief fluTheme - */ - static FluTheme* fluTheme; - - /** - * @brief fluColors - */ - static FluColors* fluColors; - - /** - * @brief fluTools - */ - static FluTools* fluTools; - private: - /** - * @brief nativeEvent - */ - NativeEventFilter *nativeEvent = Q_NULLPTR; - + static FluApp* m_instance; /** * @brief appWindow */ diff --git a/src/FluColors.cpp b/src/FluColors.cpp index feaeb78..46e7536 100644 --- a/src/FluColors.cpp +++ b/src/FluColors.cpp @@ -1,5 +1,15 @@ #include "FluColors.h" +FluColors* FluColors::m_instance = nullptr; + +FluColors *FluColors::getInstance() +{ + if(FluColors::m_instance == nullptr){ + FluColors::m_instance = new FluColors; + } + return FluColors::m_instance; +} + FluColors::FluColors(QObject *parent) : QObject{parent} { diff --git a/src/FluColors.h b/src/FluColors.h index 34b6e56..9b0ac95 100644 --- a/src/FluColors.h +++ b/src/FluColors.h @@ -46,8 +46,15 @@ class FluColors : public QObject Q_PROPERTY_AUTO(FluColorSet*,Green); QML_NAMED_ELEMENT(FluColors) QML_SINGLETON -public: +private: explicit FluColors(QObject *parent = nullptr); + static FluColors* m_instance; +public: + static FluColors *getInstance(); + static FluColors *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine) + { + return getInstance(); + } }; #endif // FLUCOLORS_H diff --git a/src/FluRegister.cpp b/src/FluRegister.cpp index e698f13..4cc8c6d 100644 --- a/src/FluRegister.cpp +++ b/src/FluRegister.cpp @@ -12,7 +12,7 @@ FluRegister::FluRegister(QObject *parent) } void FluRegister::launch(const QJsonObject& argument){ - FluApp::fluApp->navigate(path(),argument,this); + FluApp::getInstance()->navigate(path(),argument,this); } void FluRegister::onResult(const QJsonObject& data){ diff --git a/src/FluTheme.cpp b/src/FluTheme.cpp index b5459d0..d4c1ab4 100644 --- a/src/FluTheme.cpp +++ b/src/FluTheme.cpp @@ -5,15 +5,24 @@ #include "FluApp.h" #include +FluTheme* FluTheme::m_instance = nullptr; + +FluTheme *FluTheme::getInstance() +{ + if(FluTheme::m_instance == nullptr){ + FluTheme::m_instance = new FluTheme; + } + return FluTheme::m_instance; +} + FluTheme::FluTheme(QObject *parent) : QObject{parent} { connect(this,&FluTheme::darkModeChanged,this,[=]{ Q_EMIT darkChanged(); }); - primaryColor(FluApp::fluColors->Blue()); + primaryColor(FluColors::getInstance()->Blue()); nativeText(false); - frameless(true); darkMode(Fluent_DarkMode::Fluent_DarkModeType::Light); qApp->installEventFilter(this); } diff --git a/src/FluTheme.h b/src/FluTheme.h index 1cd388b..1c60291 100644 --- a/src/FluTheme.h +++ b/src/FluTheme.h @@ -22,11 +22,6 @@ class FluTheme : public QObject */ Q_PROPERTY_AUTO(FluColorSet*,primaryColor) - /** - * @brief frameless 是否是无边框窗口,只支持windows部分电脑 - */ - Q_PROPERTY_AUTO(bool,frameless); - /** * @brief darkMode 夜间模式,支持System=0、Light=1、Dark=2 */ @@ -39,8 +34,15 @@ class FluTheme : public QObject QML_NAMED_ELEMENT(FluTheme) QML_SINGLETON -public: +private: + static FluTheme* m_instance; explicit FluTheme(QObject *parent = nullptr); +public: + static FluTheme *getInstance(); + static FluTheme *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine) + { + return getInstance(); + } bool dark(); Q_SIGNAL void darkChanged(); private: diff --git a/src/FluTools.cpp b/src/FluTools.cpp index 16b24df..8307a63 100644 --- a/src/FluTools.cpp +++ b/src/FluTools.cpp @@ -3,6 +3,17 @@ #include #include +FluTools* FluTools::m_instance = nullptr; + +FluTools *FluTools::getInstance() +{ + if(FluTools::m_instance == nullptr){ + FluTools::m_instance = new FluTools; + } + return FluTools::m_instance; +} + + FluTools::FluTools(QObject *parent) : QObject{parent} { diff --git a/src/FluTools.h b/src/FluTools.h index 01a634f..5264a86 100644 --- a/src/FluTools.h +++ b/src/FluTools.h @@ -13,10 +13,15 @@ class FluTools : public QObject QML_NAMED_ELEMENT(FluTools) QML_SINGLETON - -public: +private: explicit FluTools(QObject *parent = nullptr); - + static FluTools* m_instance; +public: + static FluTools *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine) + { + return getInstance(); + } + static FluTools *getInstance(); /** * @brief clipText 将字符串添加到剪切板 * @param text diff --git a/src/NativeEventFilter.cpp b/src/NativeEventFilter.cpp deleted file mode 100644 index 6966cbf..0000000 --- a/src/NativeEventFilter.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "NativeEventFilter.h" -#include "FluTheme.h" -#include "FluApp.h" -#ifdef Q_OS_WIN -#pragma comment(lib, "Dwmapi.lib") -#pragma comment(lib, "User32.lib") -#include -#include -#endif - -bool NativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) -{ -#ifdef Q_OS_WIN - if (eventType == "windows_generic_MSG" && FluApp::fluTheme->frameless()) { - MSG* msg = static_cast(message); - if (msg == Q_NULLPTR) - return false; - if(!FluApp::fluApp->wnds.contains((WId)msg->hwnd)){ - return false; - } - switch(msg->message) { - case WM_NCCALCSIZE:{ - NCCALCSIZE_PARAMS& params = *reinterpret_cast(msg->lParam); - if (params.rgrc[0].top != 0) - params.rgrc[0].top -= 1; - *result = WVR_REDRAW; - return true; - } - case WM_NCHITTEST: { - auto view = FluApp::fluApp->wnds[(WId)msg->hwnd]; - bool isResize = !(view->maximumWidth()==view->minimumWidth()&&view->maximumHeight()==view->minimumHeight()); - const LONG borderWidth = 8; - RECT winrect; - GetWindowRect(msg->hwnd, &winrect); - long x = GET_X_LPARAM(msg->lParam); - long y = GET_Y_LPARAM(msg->lParam); - if (x >= winrect.left && x < winrect.left + borderWidth && - y < winrect.bottom && y >= winrect.bottom - borderWidth && isResize) { - *result = HTBOTTOMLEFT; - return true; - } - if (x < winrect.right && x >= winrect.right - borderWidth && - y < winrect.bottom && y >= winrect.bottom - borderWidth && isResize) { - *result = HTBOTTOMRIGHT; - return true; - } - if (x >= winrect.left && x < winrect.left + borderWidth && - y >= winrect.top && y < winrect.top + borderWidth && isResize) { - *result = HTTOPLEFT; - return true; - } - if (x < winrect.right && x >= winrect.right - borderWidth && - y >= winrect.top && y < winrect.top + borderWidth && isResize) { - *result = HTTOPRIGHT; - return true; - } - if (x >= winrect.left && x < winrect.left + borderWidth && isResize) { - *result = HTLEFT; - return true; - } - if (x < winrect.right && x >= winrect.right - borderWidth && isResize) { - *result = HTRIGHT; - return true; - } - if (y < winrect.bottom && y >= winrect.bottom - borderWidth && isResize) { - *result = HTBOTTOM; - return true; - } - if (y >= winrect.top && y < winrect.top + borderWidth && isResize) { - *result = HTTOP; - return true; - } - return false; - } - default: - break; - } - } -#endif - return false; -} diff --git a/src/NativeEventFilter.h b/src/NativeEventFilter.h deleted file mode 100644 index 3b60455..0000000 --- a/src/NativeEventFilter.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef NATIVEEVENTFILTER_H -#define NATIVEEVENTFILTER_H - -#include -#include - -/** - * @brief The NativeEventFilter class - */ -class NativeEventFilter : public QAbstractNativeEventFilter -{ - -public: - bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override; -}; - -#endif // NATIVEEVENTFILTER_H diff --git a/src/WindowHelper.cpp b/src/WindowHelper.cpp index e72cf59..6e1f7ee 100644 --- a/src/WindowHelper.cpp +++ b/src/WindowHelper.cpp @@ -2,20 +2,6 @@ #include "FluRegister.h" #include "FluApp.h" -#include "FluTheme.h" - -#ifdef Q_OS_WIN -#pragma comment(lib, "Dwmapi.lib") -#pragma comment(lib, "User32.lib") -#include -#include -#include -enum class Style : DWORD -{ - windowed = (WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN), - aero_borderless = (WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN) -}; -#endif WindowHelper::WindowHelper(QObject *parent) : QObject{parent} @@ -27,20 +13,6 @@ void WindowHelper::initWindow(QQuickWindow* window){ this->window = window; } -void WindowHelper::firstUpdate(){ -#ifdef Q_OS_WIN - if(FluApp::fluTheme->frameless()){ - HWND wnd = (HWND)window->winId(); - SetWindowLongPtr(wnd, GWL_STYLE, static_cast(Style::aero_borderless)); - const MARGINS shadow_on = { 1, 1, 1, 1 }; - DwmExtendFrameIntoClientArea(wnd, &shadow_on); - SetWindowPos(wnd, Q_NULLPTR, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - ShowWindow(wnd, SW_SHOW); - window->setFlag(Qt::FramelessWindowHint,false); - } -#endif -} - QVariant WindowHelper::createRegister(QQuickWindow* window,const QString& path){ FluRegister *p = new FluRegister(window); p->from(window); @@ -48,9 +20,9 @@ QVariant WindowHelper::createRegister(QQuickWindow* window,const QString& path){ return QVariant::fromValue(p); } -void WindowHelper::destoryWindow(){ +void WindowHelper::deleteWindow(){ if(this->window){ - FluApp::fluApp->wnds.remove(this->window->winId()); + FluApp::getInstance()->wnds.remove(this->window->winId()); this->window->deleteLater(); } } diff --git a/src/WindowHelper.h b/src/WindowHelper.h index 0e60c51..075a9b3 100644 --- a/src/WindowHelper.h +++ b/src/WindowHelper.h @@ -25,9 +25,9 @@ public: Q_INVOKABLE void initWindow(QQuickWindow* window); /** - * @brief destoryWindow 销毁窗口,释放资源,QML中的Window close并不会销毁窗口,只是把窗口隐藏了 + * @brief deleteWindow 销毁窗口,释放资源,QML中的Window close并不会销毁窗口,只是把窗口隐藏了 */ - Q_INVOKABLE void destoryWindow(); + Q_INVOKABLE void deleteWindow(); /** * @brief createRegister 创建一个FluRegsiter对象,在FluWindow中registerForWindowResult方法调用 @@ -37,11 +37,6 @@ public: */ Q_INVOKABLE QVariant createRegister(QQuickWindow* window,const QString& path); - /** - * @brief firstUpdate 窗口创建成功后调用,只调用一次 - */ - Q_INVOKABLE void firstUpdate(); - private: QQuickWindow* window; }; diff --git a/src/imports/FluentUI/Controls/FluAppBar.qml b/src/imports/FluentUI/Controls/FluAppBar.qml index d5184a8..c530c84 100644 --- a/src/imports/FluentUI/Controls/FluAppBar.qml +++ b/src/imports/FluentUI/Controls/FluAppBar.qml @@ -31,7 +31,7 @@ Rectangle{ id:root color: Qt.rgba(0,0,0,0) - visible: FluTheme.frameless + visible: false height: visible ? 30 : 0 opacity: visible z: 65535 diff --git a/src/imports/FluentUI/Controls/FluNavigationView.qml b/src/imports/FluentUI/Controls/FluNavigationView.qml index 21ab726..2f95143 100644 --- a/src/imports/FluentUI/Controls/FluNavigationView.qml +++ b/src/imports/FluentUI/Controls/FluNavigationView.qml @@ -19,12 +19,8 @@ Item { property FluObject items property FluObject footerItems property int displayMode: FluNavigationView.Auto - property Component autoSuggestBox - property var window : { - if(Window.window == null) - return null - return Window.window - } + property Component autoSuggestBox + property Component actionItem id:control @@ -471,7 +467,7 @@ Item { Item { id:nav_app_bar width: parent.width - height: 50 + height: 40 z:999 RowLayout{ height:parent.height @@ -479,8 +475,8 @@ Item { FluIconButton{ iconSource: FluentIcons.ChromeBack Layout.leftMargin: 5 - Layout.preferredWidth: 40 - Layout.preferredHeight: 40 + Layout.preferredWidth: 30 + Layout.preferredHeight: 30 Layout.alignment: Qt.AlignVCenter disabled: nav_swipe.depth === 1 iconSize: 13 @@ -503,8 +499,8 @@ Item { id:btn_nav iconSource: FluentIcons.GlobalNavButton iconSize: 15 - Layout.preferredWidth: d.isMinimal ? 40 : 0 - Layout.preferredHeight: 40 + Layout.preferredWidth: d.isMinimal ? 30 : 0 + Layout.preferredHeight: 30 Layout.alignment: Qt.AlignVCenter onClicked: { d.enableNavigationPanel = !d.enableNavigationPanel @@ -529,6 +525,7 @@ Item { } return 5 } + sourceSize: Qt.size(40,40) Layout.alignment: Qt.AlignVCenter } FluText{ @@ -538,6 +535,22 @@ Item { font: FluTextStyle.Body } } + + Item{ + anchors.right: parent.right + height: parent.height + width: { + if(loader_action.item){ + return loader_action.item.width + } + return 0 + } + Loader{ + id:loader_action + anchors.centerIn: parent + sourceComponent: actionItem + } + } } Item{ @@ -620,7 +633,7 @@ Item { if(d.isMinimal || d.isCompactAndPanel){ return FluTheme.dark ? Qt.rgba(61/255,61/255,61/255,1) : Qt.rgba(243/255,243/255,243/255,1) } - if(window && window.active){ + if(Window.window.active){ return FluTheme.dark ? Qt.rgba(26/255,34/255,41/255,1) : Qt.rgba(238/255,244/255,249/255,1) } return FluTheme.dark ? Qt.rgba(32/255,32/255,32/255,1) : Qt.rgba(243/255,243/255,243/255,1) diff --git a/src/imports/FluentUI/Controls/FluScrollablePage.qml b/src/imports/FluentUI/Controls/FluScrollablePage.qml index 22bb114..f71b85c 100644 --- a/src/imports/FluentUI/Controls/FluScrollablePage.qml +++ b/src/imports/FluentUI/Controls/FluScrollablePage.qml @@ -8,19 +8,20 @@ Item { property alias title: text_title.text default property alias content: container.data - property int spacing : 5 - property int leftPadding: 0 + property int spacing : 0 + property int leftPadding: 10 property int topPadding: 0 - property int rightPadding: 0 - property int bottomPadding: 0 + property int rightPadding: 10 + property int bottomPadding: 10 id:control FluText{ id:text_title - font: FluTextStyle.TitleLarge + font: FluTextStyle.Title visible: text !== "" - height: visible?implicitHeight:0 + height: visible ? implicitHeight : 0 + padding: 0 anchors{ top: parent.top topMargin: control.topPadding diff --git a/src/imports/FluentUI/Controls/FluSingleton.qml b/src/imports/FluentUI/Controls/FluSingleton.qml deleted file mode 100644 index bee9dd9..0000000 --- a/src/imports/FluentUI/Controls/FluSingleton.qml +++ /dev/null @@ -1,16 +0,0 @@ -import QtQuick -import QtQuick.Controls -import FluentUI - -QtObject { - - id:control - - Component.onCompleted: { - FluApp.setFluApp(FluApp) - FluApp.setFluColors(FluColors) - FluApp.setFluTheme(FluTheme) - FluApp.setFluTools(FluTools) - } - -} diff --git a/src/imports/FluentUI/Controls/FluTableView.qml b/src/imports/FluentUI/Controls/FluTableView.qml index 965d67d..ff8df19 100644 --- a/src/imports/FluentUI/Controls/FluTableView.qml +++ b/src/imports/FluentUI/Controls/FluTableView.qml @@ -1,5 +1,6 @@ import QtQuick import QtQuick.Controls +import QtQuick.Controls.Basic import QtQuick.Layouts import FluentUI @@ -144,12 +145,22 @@ Item { } } model:model_data_source - delegate: Item{ + delegate: Control{ + id:item_control height: table_row.maxHeight width: layout_table.width property var model_values : getObjectValues(index) property var itemObject: getObject(index) property var listModel: model + Rectangle{ + anchors.fill: parent + color: { + if(item_control.hovered){ + return FluTheme.dark ? Qt.rgba(68/255,68/255,68/255,1) : Qt.rgba(251/255,251/255,251/255,1) + } + return FluTheme.dark ? Qt.rgba(62/255,62/255,62/255,1) : Qt.rgba(1,1,1,1) + } + } Row{ id: table_row spacing: 0 diff --git a/src/imports/FluentUI/Controls/FluWindow.qml b/src/imports/FluentUI/Controls/FluWindow.qml index ce7f0e1..2c8453e 100644 --- a/src/imports/FluentUI/Controls/FluWindow.qml +++ b/src/imports/FluentUI/Controls/FluWindow.qml @@ -4,7 +4,7 @@ import QtQuick.Controls import QtQuick.Layouts import FluentUI -ApplicationWindow { +Window { enum LaunchMode { Standard, @@ -20,7 +20,7 @@ ApplicationWindow { property var pageRegister property var closeFunc: function(event){ if(closeDestory){ - destoryWindow() + deleteWindow() }else{ visible = false event.accepted = false @@ -28,13 +28,9 @@ ApplicationWindow { } signal initArgument(var argument) - QtObject{ - id:d - property bool firstFlag: true - } - id:window - background: Rectangle{ + Rectangle{ + anchors.fill: parent color: { if(active){ return FluTheme.dark ? Qt.rgba(26/255,34/255,40/255,1) : Qt.rgba(238/255,244/255,249/255,1) @@ -51,17 +47,9 @@ ApplicationWindow { Item{ id:container anchors.fill: parent - anchors.margins: window.visibility === Window.Maximized && FluTheme.frameless ? 8/Screen.devicePixelRatio : 0 clip: true } - onActiveChanged: { - if(d.firstFlag){ - helper.firstUpdate() - d.firstFlag = false - } - } - onClosing:(event)=>closeFunc(event) FluInfoBar{ @@ -76,8 +64,6 @@ ApplicationWindow { Component.onCompleted: { helper.initWindow(window) initArgument(argument) - window.x = (Screen.width - window.width)/2 - window.y = (Screen.desktopAvailableHeight - window.height)/2 } function showSuccess(text,duration,moremsg){ @@ -100,8 +86,8 @@ ApplicationWindow { return helper.createRegister(window,path) } - function destoryWindow(){ - helper.destoryWindow() + function deleteWindow(){ + helper.deleteWindow() } function onResult(data){ diff --git a/src/imports/FluentUI/designer/fluentui.metainfo b/src/imports/FluentUI/designer/fluentui.metainfo new file mode 100644 index 0000000..f5b2714 --- /dev/null +++ b/src/imports/FluentUI/designer/fluentui.metainfo @@ -0,0 +1,17 @@ +MetaInfo { + Type { + name: "FluentUI.Controls.FluButton" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "FluButton" + category: "FluentUI - Controls" + libraryIcon: "images/button-icon.png" + version: "2.0" + requiredImport: "FluentUI" + toolTip: qsTr("A button with text.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" } + } + } +} \ No newline at end of file diff --git a/src/imports/FluentUI/designer/images/busyindicator-icon.png b/src/imports/FluentUI/designer/images/busyindicator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..666d1ed93f76570004e94223558089ced1e89d8c GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA*$4Q9xB}@F6oBLJUrh%ZAyN|L z7tFxO#xEo+qN-`&n^`q=)82jW{`{S8ERqD2pX2G`7@~2$b<%C7W(6MS<`b?LH4Faz zkN*DP&NAWY%O_oMy6ly|WX@#02izj{Pu5HpVQ5lGFRxp5W>RE==_Q}Jao@ECmgdP= zYciFde#zKoTg&ibdqrFOP1es1mG(yt*3>1nt*HKyaBd1`oLB2o>rZ!`JWm~{5OGu3 z-Wn2dercFjmVI4!ShKG8o%NmX?tOcPENVJ<{^HY~y~iH{WgrSX}SQ0fMNtbkS`y?J z%)rRR#?HkpASk7wX<%+;V{7N;=@k?lms(U@SzXiDzhL2_Z3hk>I)3rVo44AI zd}%!c17p6Yi(`n#@w;I+Cp8%e@LXS1q}+6(OJiPw$^ZYQ+9v~8C$%oADV{fJ-n&&N zO=Vju1Z52E*gPyAsaGB~7JDi!x-jrB2bU6)ASc(Pun9dIOOBf-zSzbj&TzT>OZmTD zYAo+ftism!)Q7$dxt-|r>Z|npz;8L*c9>3{eKf6l+H1`(Qe7Jsw&h0tb80nP@+vRX zFZyfRjvc(%1Z@L*UVXNhO=2;R43N$zrThHpvGXAiLhxJtJ(@%1%M5ow4pL=1B z7S~(eZI^XIex$EziOgF3o-29gj#nnWrIVLl31Vfs;`n=HtWE``z$H9drFi)yGAWNpMC6Qz=Th;HrCD0`(8dbS%dX_09W6_hSaAu zr%zc2@h9vn&=dwwS3j3^P6u2 literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/button-icon@2x.png b/src/imports/FluentUI/designer/images/button-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f90a1ba7dcee2e885f80f19577c929a9f3b94f01 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-smH|E?u0VPPS-@%gv09*Jp^_lK zUt9t!zbm^cO1WaEN(Y*!;w1913pKaR(dsdO_h?# zTCj>S>Op_{RC~X5Z83H`@BLzWsjVg7$e(^}2BY3tHt)CJ3!_SaRx)_H`njxgN@xNA Dl(=r_ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/checkbox-icon.png b/src/imports/FluentUI/designer/images/checkbox-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee669b3a888107706f6ee4244f3ad8d25c6e7308 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaASqAuoxB}@FWC5q`$7+F^g-U|_ zf*F|EL}i?O{le0guHLle@||zLDvWL@0A|2JeY zDRSRE{As_ILc{Cyh1wp`KUz$Zd3Ybq+v?n+=ohiMj3>QudGpee`0Z9Q5joS>cBF3H zE2EcGy*E$vtyR0n>)Zq3KIW4rZ@z2C`7^KX16%83rEKR&UK^l|44$rjF6*2UngH8| BZVLba literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/checkbox-icon16.png b/src/imports/FluentUI/designer/images/checkbox-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..8d89eab8413ba0656b2de084d7f88bc8ee9fa857 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!S%6Q7E0A76Iykax$2y=+!IB`q zU1}Q| zc1*o{rdqL~TuP_&xrngu33juE8P#i2TAT_QH%@vlc=6Bdlryq-E&8YB^{frsy!rmZ cO&?CP@2=*nQq)q90-DU=>FVdQ&MBb@0A-_KhyVZp literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/checkbox-icon@2x.png b/src/imports/FluentUI/designer/images/checkbox-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..51c5601de02228eb480bf24d3c72cbc1c2756ef7 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sW&u7Su0VPP>EOt&9qWKP1xteb zf*H6(rDdGLq6_!!zjXQLoo|23k7R2DC3kqbIEHu}e|yDKsM&zWCD74Li2cN0{n>(d zChcBbu+8xG|5ZF5+p3=?^O}4x_Bg(hYso#nVAhInZHKmf(GWQEJn)MG!x{D4{fo{Y z+OS<=!S;V*2X=oy^i@;l*Dec|3Q@7)*g74zbm moYkufvtxpGzxyv|!*J(FW3X23r`te3FnGH9xvXgGyCcGT15k*$ zB*-tAK|tPi&+RH8*V5C)F+?If*}#p7M@=sv;lP2O=H^8_=IpNh3l|tLciFl%fdmgE qoM2#mQuN?i(usgGj)fYVY#DwADIR`NX%GiAgu&C*&t;ucLK6T6s4><6 literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/combobox-icon16.png b/src/imports/FluentUI/designer/images/combobox-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..15fc3505ba2660040691c9ad005582bc5349f2b8 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW1=1^!z{Rs?wca=H1B$Yg z1o;Is2*@i$Hoo2iZA!u6{1-oD!Mp>BgT=OV@lPaP6+PBgH&sTwfe6l%*@sK+wdz+v<3!jPt{gM18D X*0Uz8->u99G@ilJ)z4*}Q$iB}>>E0^ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/control-icon.png b/src/imports/FluentUI/designer/images/control-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fd9e4e8ff3fd207c48a0a30c3e3029511627f006 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAnFaWSxB}@Fq=O^7cB}*H6f6ny z3ufTg&@>NBOK)n~eE8)1kKcZ9u4X+Al4F`FY7M|9k&a_cj;q zUeWs}^3tSj%pF@|I%ZlPfAC`ev*!BJGtBpAIV?SK+3aw6uI}kYJn#43|Bz{vCi*w6 z!t2~DDGBlm zX5cgP%bc}f>B;-Q{zeDg+YS^@^mK6y;gC&ENC=p_)u@A!-Dh+ra!&EHGlr`t^Q`tc$I$p$ qi-lQ_HJs-z$w(#tiEHF0SI=Wgh`8WAJqKb6Mw<&;$TPwOwrh literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/control-icon@2x.png b/src/imports/FluentUI/designer/images/control-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..22604d24925ee67a08bd61b1392c907074440f8f GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-r0X`wFKzao&!9mrT5e^S8qIf{pI`5Ux$q51~M=(>Uz33hIkxbI_>4O zCIg<<=8gvqIbM;f@BdGGeC4T0?$$eo`y=+9Ubr(eNXdHAqL;^JR?6*O=Aj|*dsDh# z?au!V@~@`Ojd*=n+Gf?dH@(@SKYx@w*lxH)Z@xZLW_021Cua4N=I4}KuY3^Pp#E#c ziP(Fge52PK&D1Aa3lE*Be-pam#)riV zj(ySo%xQG_V4Ky$_5KPr?=yHl1{q$GdD5D+jCW7K1EwF-AGjXQZ0&9KX4bRYvF9T% zOMc)E&Ih?{c_|gETV{VeR#yKfZNUR&Z3~h9`~9&s8y>s2*UR{=d3^q8`JbPxVWx-O U*)FTR0ERJxr>mdKI;Vst07{qug8%>k literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/delaybutton-icon.png b/src/imports/FluentUI/designer/images/delaybutton-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5a55bd9f77a7ce1712cdcde0b71f75c6d4f8fde8 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w#Q>iWS0KG&#fpRb_5n#CIC|*N zsbj|=>Dd%8G=cpQH_#hb4|fyZU_4_CpZd;dpcyBm14V;{mU46Nk-( zF3vtCwF)7h2lZSZHXo8_4`)BQLjwvjCmJ;OXk; Jvd$@?2>{dMfvo@l literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/dial-icon.png b/src/imports/FluentUI/designer/images/dial-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b63e35235dd797157aaca4cd31f9a11de42daa GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wl>na*S0KHD5SU)=kO5T3T@vIM z%pk3iR@1cU@cSQsS0x+$0}6M0x;TbNgvVY`6lw|(X?<8fW1{E{oszHz6V8auZgeuA z9l><*gpf}Y$B+DT3(l+0E7?EOxcpgM!;>36&v_UoO@8%w?b=mw3}JOe3|zJEu7$r< z%>2q%J=ZwsE1UFIrT!Nhyr%3~hnd`^_RsvF?yZwmdc;H0aDscu51USBN(=tm h=M{eYr1&vZe~HdaSHlyYQ-RK6@O1TaS?83{1OQJXYvlj{ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/dial-icon16.png b/src/imports/FluentUI/designer/images/dial-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8c7c09b05c2887c856770cc47b145793989155 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=1^s1_#a*o&jp$D+%%o zX5f=B^Qvi@we;kr`|p0GF5Te|lu7q=aSY*zc0IR|*Cm0$;i0?B6tAVaB}o&s^Vs)p z=n%|tNayNwQ}laxw&3Xe?su>6F|Vr3X5_lcxai{fCsQZCw7xno>U0FZRj!b2WJ&GI yv+GvfXZJqfD_#)9E|bD&dvQh8Q~xjfKQgZ~2|KemWuXnwN(N6?KbLh*2~7YGG-fjZ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/dial-icon@2x.png b/src/imports/FluentUI/designer/images/dial-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..22547a16b83685ee549deed44d142efa8ebd7c6d GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s;Q>A&u0VPP4Zy32&P70@WlDnl zf*Cl)#HAFJbgdm@5{k>3X3Uy@;OdQMufKf%@#~N0sox727#K}GT^vI^jxU{db6c|k zhwH|yxvP$?jI#aze{SuI2fR*EdEb*8M3*^qSY$r^mC5#OWqGKVyvHj>Ip?`7SI)of zV$QA(yR!Hh+r(&L&tEq=rW#tmn$FFnqk4V+17`8XcAGV7Z(b8Ej47F2|LgebGvEKu zvhVx6TK>58rxWMTPutJ3v;O#xQ+bc$@4gK$-?yal+VrcdZ}4)39dth%J*}_8ykq7H zRVA-$?|HAabY#sdxU0HAZBe8AD@SJLz$%TEv%(lWR$7@g23asTxcX(xUaRf5+<Q z^{)mOFQ*vK$k--%hDEuId9(Mk1!pr$&6w4{D2I;hrMfOUBj}OVyxi`*lQqpW3AF`uo;a{j%TJAIi_4oWIY$ ZJaE;{_RqlwzXAiA!PC{xWt~$(699>c@_PUP literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/frame-icon.png b/src/imports/FluentUI/designer/images/frame-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..32abc8bf1e6b9d98a5ce461efcb593f89e527838 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wloB=)|u0VPP7+ja>lLc~^N`m}? z83eLb?#2LlvYsxEAso@k5v*)HE3TXhP&knkagc!}s$}^FOHPJWnHo+^t0Z3m6*73b L`njxgN@xNAUMC+6 literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/frame-icon16.png b/src/imports/FluentUI/designer/images/frame-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b65ad53bb792c1c2c20d782e8481330a701eeb GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Hl8kyAr`&KF&mSP*0XUj2&>ML zl#q~!m~f*>x^${DJ8XFtA;v`HHt}v{UIAHN$ry#@Jx!jD|-jlxp P&0+9#^>bP0l+XkK#Wf<5 literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/frame-icon@2x.png b/src/imports/FluentUI/designer/images/frame-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8b876f38ec88057dd131434dcf4ce12657cded8a GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDD3?#L31Vw-pXMj(LE0A6R2G?c!WPu!}k|4ie z27zpqyD>nXqNj^vh{nX^h*lN}jpsVNtxXyV>5R-G1-(UW2JN#nSr}FyTNQR*YnM1s OF@vY8pUXO@geCxN=^q&Y literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/groupbox-icon.png b/src/imports/FluentUI/designer/images/groupbox-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5542ecf8bf7ae6b433f2b8cdeaa4529ccb251c5f GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wlJOMr-u0VPP3>dQs_5=CMB|(0{ z3K|E0A6R1IBEE{Xjl*NswPK zgMhs4p4(MGu7;s1=sKkJL|y^{Q=wB>ex(Tfv`dYc&5 X70r@R{m3N))WhKE>gTe~DWM4fo2w@4 literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/itemdelegate-icon.png b/src/imports/FluentUI/designer/images/itemdelegate-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..822cf3e7b8bd78fbe03c6d022b08cce8c47327ff GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wlJOMr-u0VPP3>dQs_5=CMB|(0{ z3Sajv*Yf$q)YXv&c*QaB5u8&^VougXedQs_5=CMB|(0{ z3{K_-D8zmURJVht6OP|{SRL9`y L>gTe~DWM4fCek7V literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/itemdelegate-icon@2x.png b/src/imports/FluentUI/designer/images/itemdelegate-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb81308ff8d271d4f55f3f8a44174eee3d83969c GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDD3?#L31Vw-pPk>K|E0A6R1IBEE{Xjl*NswPK zgMhs4p4(MGuBxYtV~EDYyU2 L)z4*}Q$iB}_{U9= literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/label-icon16.png b/src/imports/FluentUI/designer/images/label-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..b68d38456852cecc813b19f2e0a61cbecd7b12e0 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b1=1^s0M93H^#>~DDGBlm zX5bT$kk^Us>O1)S&s6a#T0n6lPZ!4!j_BkB1-1?6ESZ^jdhVtx^sF&X@6*uKoSSG7 q9K$SVnVit9#uUzcoz_BWa)JN= literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/page-icon.png b/src/imports/FluentUI/designer/images/page-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ac87e899124276f452c1709ffeaa4488857a26 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipS0KH2_wN0B_8i!^4}uQu z-+%bv!DELHpFDQ#%!w1{PMun@V#VrJt1g^5bMfq1dCfa)Ks`JqL4LsuJn~jiHS-SK zdH3UQ=Erk+KygD)7sn8Z@Z^LCmdq^XED{G8&g``3ocZ}QL+9suZlmY%3_{QUo2Q)n i&m_Ul!pCFH$6&u}(S_6b)0Bal89ZJ6T-G@yGywo)y-T?O literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/page-icon16.png b/src/imports/FluentUI/designer/images/page-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6810b6053c29e358e0e7fe7717b695f07c29c8 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=1^4tk}DI_u&Hv4j(*t z^w1$7_u|>Jj*DAg0_E6Bg8YIR7@5vpxGGw|ZwXLD)zif>gd;jR!Nc3zJ2ZiTNkQ3` qtoyr-DL^^4k|4ie21cfHm#(UN-cbXJgm}6*hFJ8zJ?+Tb;2_|9(aYgb zlmnC4HD-kb=VNy2ZPR=M4gUZ7#Q5OEH@0`Jo2_@uYJ9<$k~qP&L7Xv8BqOln?7;}0 pBd-*u>pw9%IOD;}1q&XC=T*tOKV5!V{sYi_22WQ%mvv4FO#l}POVj`W literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/pageindicator-icon.png b/src/imports/FluentUI/designer/images/pageindicator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..edb6b377bbde35765c6982742927d65c2c83c6a9 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wxd5LKS0KFt1`Z!MaOBXTqlXRw z1y-+Gb@A-k%CmIUzxxy(x^5&48iU zN_L`UFv|oBV<0V{sll$q`nX|f!kn3$27DYM7aD_)9B?pN9^u(pQO(dH9~B&Op78;-K=Z492SelF{r5}E*24>C*u literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/pageindicator-icon@2x.png b/src/imports/FluentUI/designer/images/pageindicator-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7be0ee813ba27559bd1823f23c4640509aedb4d9 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)Iqyv0HT!Hk86)X1c-VG!VA2@L2 z(4nJ;4guL0&z^mK$@?!*n!O~*FPMRmN#NY2t6AyneL$fYPZ!4!i_^&o2?-kQ%|@(j zDGd`=cpOr_xU9i>kuv9WmM*arP7z%Vp%YO7DigLY@KVThoce;}i0VZppn}7K(^+D; wcL8ym3wIj}PmdQ*XlIf}`3*0gX$kBMiU)ILXEoIw0oudh>FVdQ&MBb@0EWy+1poj5 literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/pane-icon.png b/src/imports/FluentUI/designer/images/pane-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..62ebe487ffe431d595456f891f6a75e93f8d821b GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaT3?y&uT)!Jgu?6^qxUN{S;^Nt}{aNilfFeSk pE{-7_(a8x8OrQSO2e2wLGW_15+RHoHxB@84;OXk;vd$@?2>?6*8cYBH literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/pane-icon16.png b/src/imports/FluentUI/designer/images/pane-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8048441c3f5ba946a2b52ccbeab9ea4efd82f3 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>xvaCE}lKxpVj^YC?e?T n;uyjaot(hH{M)`oFhY?b&XDiurWHpjfRYTJu6{1-oD!MU6APxr67>%Bb{q=3QG)z4*}Q$iB}a4H*& literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/progressbar-icon.png b/src/imports/FluentUI/designer/images/progressbar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a023f73c30f735932d3faaa1a92ad6ed8ba20251 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjI-V|$As(H{2@}J_b)$KbLh*2~7YzlOAmV literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/progressbar-icon16.png b/src/imports/FluentUI/designer/images/progressbar-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..6fede21d8c25587b5fbd68f10760931a80a84e28 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`%APKcAr`&K2@zopr0GEar6aWAK literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/progressbar-icon@2x.png b/src/imports/FluentUI/designer/images/progressbar-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0069400335675fff35c3e9969eb8b0e5fadd1623 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCH%}MGkc`H+=dA@B3`AHCG&?%{ zsrGW5s-(0*fZrfLXoL0xJ5HdwKbH%?-_zngHfQR`os(>q@*X{Rmw8`Nf;l@-jv+3x WiiM5+)WnO?AfBhIpUXO@geCxwLMILY literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/radiobutton-icon.png b/src/imports/FluentUI/designer/images/radiobutton-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d38170e22f79cab05291702503bae084452c6857 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w-2k5uS0KHDXmH?6;TfO?zLFrn zU0Krr%(n zA^<$q|pm3C@i(?2!baFz1!OX3fW-@ZPlruXjFf%8cc5IAoXe>3C zU@?eze{Zi&_V;&ZdG75l*Dxr3fA5e%^>-yUwzYSyCBxqPB_t%=-phTk!TX@-;jM>x gTcR1ai#+3Dn7-Rux}xN2Gtd?WPgg&ebxsLQ0J2q78vpn3Iu0VPP&A{^DYtBFm;geE<3DPr;4-3m6y}#XMacLp+Yp4LdG& z$bctUeC`y!T?haFpD8n=OhRy%>co4SWsmYDOboeeps#e=rX;jUzT=>h?n}_ssn@sPp#IY>u!B8r(W!9xgTGGL%sIk+ zdGD^?ibXr`zJI2DV_o^ZF7qgc4%z>6ej9Z!TJz?7-})qmt#@sgea~9rULD44P&du_ z!gi3<^f*CluxcLR-b*IdjJAdKgRo{R7EMfj+3bM=7#W6%8 zd~1)nP=f-)fh0!}Zm9?V<4X%t%#z;;{b)@*ectl$miv~y2Ub-bTsUh%XmY?+0o~rP j*dHw2OTT*B|7{d^+sWeo@KW|%plJ-Au6{1-oD!M<1?gaw literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/rangeslider-icon@2x.png b/src/imports/FluentUI/designer/images/rangeslider-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aee69b3302f3d2e198bf43205bed9593c06cca74 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)Iv;urWT!HioykOfU3Dlg8YIR_%zIBEj@7Z{;#*qeJg>YQ$1ZALoEE06C_xh`3$Phz5_MY3)> z%5^A)XIes|mj%PkIDuzE3ZLKIwO$>j8+FVdQ&MBb@0Cucy AmH+?% literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/roundbutton-icon.png b/src/imports/FluentUI/designer/images/roundbutton-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b470dc25b0ef504feaf40abc6f19568d906b9f GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wxd5LKS0KFtH?W@m@j6fiXGxG> zFoT9>TGQsk?|(e_e)a}XFxS(?F+?IfIROZYR?nHY=l}y-&qU+KgjEbPk`0AYnRwP1KU8RN6h1if$b-%YK8Yt>3YHm$C|O*VOjBYE;p;LI xVGihV+bD9>QiIR+Bh#wq0egC-6gn0#FLtWuOXvXa#&v+PioHQw)QK@tcXd;8BtDnm{ Hr-UW|OUgb; literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/roundbutton-icon@2x.png b/src/imports/FluentUI/designer/images/roundbutton-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4553e165e75e017d03c687f524864cfc5ec31d4e GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sP60k4u0VPPW#Ct1(;1*Cq9s9o z!3>;I3d*`Mi6!MtGiM#VdgIxb?>~P9`o4PwRB+YP#WBR=_}ppXe1{EqoTt95I1>GR zf7azrv*0(s)fo9Zg)YwW+i9uxOeB4|)vg6s=hc7MWjpcvwoh$YznLqOx!wo)Y+f$U zBrnvqw(d-glic-Ro%%Bz{+=@2)UZC7H!|tO{MqJ>t}WkRONk}L{f}PK_UTXY>7+M{ z@2$EM@P6tFNe6wleu+Pq^m#5$JjBx_lU87o+%{7wtz(LTvl81u-VYNWcppB`RWB1G zRq*lP(_V9dJBtc99vCvSOUg|xka%3!&o5Gw^3YjOe)o@r)z4*}Q$iB}{k^e- literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/scrollview-icon.png b/src/imports/FluentUI/designer/images/scrollview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef73ff19f5b4fea251158ef7cebcfe18ba69c2e GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wlJOMr-u9cOQH8nLWR;;*q_U!v9 zbqj&wvYsxEAso@kKlqv0B{l@8zw|kn+s?EsbamL;hC+suKdUFi=w8kODrE3<^>bP0 Hl+XkKR3IXa literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/scrollview-icon16.png b/src/imports/FluentUI/designer/images/scrollview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ca7a368537023c3d2aab9034a7b7d582e63687 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bt*or9si|4Ibm@u}D=wZr z%Tqe_C{Rkl)5S4_LpHg9k(r&1O~aYtn85-wXT~%IW+4MMMio1T&DW%E7}p#r1*&E6 MboFyt=akR{0K6X`r~m)} literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/scrollview-icon@2x.png b/src/imports/FluentUI/designer/images/scrollview-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb7f9665eca2873d71eb11f37de87085a3a41e9 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)IBm#UwTq`RptE;PPYHC`Vo9EA; zzi82-6)RR;JbU)3^*2SJ8WT?!#}JF&WR2r2tUL+^2|`|67Alt}xv9FTw#{tmRt_zm r!pO|$FwI4Z%VVjF6Q}5e*IEn~eA8xo_AY1v>SyqD^>bP0l+XkK7yB&s literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/slider-icon.png b/src/imports/FluentUI/designer/images/slider-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0a9729bea5b8c361644c46bf9755b9e25aa10b GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w^#Gp`S0KG&#fpn(&jLv}Sh;c~ zG8-s+GkMlUpi-`qAirP+0Ree~oqP9w`z7|l=K)aE#?!?yL?S#nVS#c&=bTpz&nwnM zU1dtsV065?D)clbP0l+XkK9+5_f literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/slider-icon16.png b/src/imports/FluentUI/designer/images/slider-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..a08622df89c7e26c95037576756b0438b963784f GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a1=1@pz{-^?FP=SHSblLH zP@1hI$S;_IOF(|!_w{)>CxIebo-U3d9MQ=M3cLop+Bg~{buu&g9JF+GbtBggTe~DWM4f1MxKD literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/slider-icon@2x.png b/src/imports/FluentUI/designer/images/slider-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..93842e4cddee2520e82323ed034328f7e29b39f0 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)Iv;urWT!HioykOfU3Dlg8YIR_%zIBEj@7Z{;#*qeJg>Yah@)YAr`&K2@8@2R+%OsYz uKnq><7cq0>j!3FlFbkG%=x;j6!0>Zp{@VR@QyPFaF?hQAxvXdQs_5=CMB|(0{ z3L5L+wznlvQ>KXhV@_90`)R@y85}Sb4q9e00{mnKmY&$ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/spinbox-icon16.png b/src/imports/FluentUI/designer/images/spinbox-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f88711dd25f81cc0083234d51cba9f1bbc521e10 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=1^!z%ebMD4-BaNswPK z1EYX^>1<(6Am7;2#W92)2^X5sLCr#>{$kjZ#Ntn60YZ6EEWaf^Ai<*uk jFc^wN2=MGEQ(|Bc`^mMoELHn2P&Xuyn5(77 z%&o2a;#Ng@b=d#Wzp$Pz?H7DW# literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/stackview-icon16.png b/src/imports/FluentUI/designer/images/stackview-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..0f19d0efa3e7202c191d6b4102899c27258e0074 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0VPP3>dQs_5=CMB|(0{ z3K|E0A6R1IBEE{Xjl*NswPK zgMhs4p4(MGuDhp;V~9p@azaAFAAUBTgogId;x5;M+m-*zbM1TZJcgIGIm6&N!x5RX zRmD!96Tki8N&V5!@}c0L!GXrV9#8-9wl-HO9p+_NX0&lujk4HMppguou6{1-oD!M< D&7C&v literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/swipeview-icon.png b/src/imports/FluentUI/designer/images/swipeview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..031cb27c367c05b5853f5229142b77ebbdefcc62 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w{s5m4S0KFt2^`ZBiUJC;lmz(& zGcXFsm(CXE1oG`YT^vIs!jlUanbp}08Ul7$222&`+dN6A=`qVQWebO?9DTyf+%q=xu&y>B_N`<)fMlqs1<(6Am7B(#W92?~LJnCXX66dsD+?qR8 jAk0ErQ?oI*-IAHXL7Ly(+U%+hP(OpGtDnm{r-UW|@!uw@ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/swipeview-icon@2x.png b/src/imports/FluentUI/designer/images/swipeview-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ccb978c46996706aa482cba92f28a43da013256 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I_yc@GT!HioBydbiC<-XVQWE4B z%)lrhUpiZu6UYzoba4!^IGtSJ$mYkx;n3D1TxK>==$x0rf)35b9N|`>1nUi+7K)t{ zlo;8rOk|j(vslR4foVoZNKD2Yi36NdFR6GP?QxDNYfDK~UEna*S0KHD5SU)=kO5T3T@vIM z%)rj2R55e$`&_1;n*!&=+Fo_?@JtdoSJrlwk%woEz&X7TzAhsX=71izjUq=aLs%KuulQ>w TOgmNrG?>BD)z4*}Q$iB}`lm>% literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/switch-icon16.png b/src/imports/FluentUI/designer/images/switch-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..9abd27565926d503ac3471e00d013441b5f6cd1e GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=1_9fvFWCML;?Bk|4ie z2ECA-C%^r2xh?h?C}iO2;uyjaot&V+WH4(gv*RX)=8R734$%_{>khCai5M?2FlcBw jCBU;oB*rktT9AR^`ytWfM#=tWpk4+~S3j3^P6EOt&9qWKP1xteb zf*F`a#Z}dD>SSIpSB8 zV@*t#>+O8alk$m4ZF2g@l_7OYr#-Phbobc&oOfOQ?D+*pjO(8IUi z5z^1%Ie$L%%K6t3yJQHf9oHjMU!>Hf)zGQ0My9-Jw2BZSwz0#^o(m6I(@Y$pc-> N;OXk;vd$@?2>^i*jFbQX literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/textarea-icon.png b/src/imports/FluentUI/designer/images/textarea-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b2dc0f84decad634be9c7b7c31b306b2d61dc4 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w{s5m4S0KFt2^`ZBiUJC;lmz(& zGcXFsm(CXE1o90%T^vIsrY09SGV!<+_e@b>I1`xAz!0VFe0?#~bB3=Q6sBly*fHUh ip-{r1RH-s?1_mxUyWcLaN-}|(89ZJ6T-G@yGywpsJt_tO literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/textarea-icon16.png b/src/imports/FluentUI/designer/images/textarea-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..4afc1fbab56a1466a0bab865a88d16c252da0a0d GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=1^!z%ebMD4-BaNswPK z1EYX^>1<(6AYakb#W95AdU8P{6PpfCx~f8eVyp{mR$mjhUfbpdt}<`NwTtDMvZHlh Q0u?iOy85}Sb4q9e0D9&lIsgCw literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/textarea-icon@2x.png b/src/imports/FluentUI/designer/images/textarea-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c32ecc71a9a1d084ad0989bd4def630eaecefe9e GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I_yc@GT!HioBydbiC<-XVQWE4B z%)lrhUpiZu6Uevsba4!^=uIv-$SBb^xn;8uS3sk;h2a7Qu|qb#l&!0Q0(4wpRS!i6Bs;Q{an^LB{Ts5Df}t~ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/textfield-icon16.png b/src/imports/FluentUI/designer/images/textfield-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a62a6582b38f7eeefa997a6110515444ef2ebb GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=1^!z%ebMD4-BaNswPK z1EYX^>1<(6AYb3p#W92)2^XBgE&66fg;%c6}d6IBIQ|rN#uB>w(>aYkG fHX1y*)d{rcE!X4*y(4#kS{XcD{an^LB{Ts5V)`vK literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/textfield-icon@2x.png b/src/imports/FluentUI/designer/images/textfield-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e05fd41b9a4b4e4d751171d16b79cf2582a0d016 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I_yc@GT!HioBydbiC<-XVQWE4B z%)lrhUpiZu6Ug`Qba4!^IGvmz!Ro>+F4G{xnXamFIg*nxq(R8fz}L^iY_q@w2I(eW zCLNbaE#2Kr-KQ5!E(jA!STu{>lQ;H_&=qf<#SIw@438K>)_;|G+Uv;7hQ?78H*D{ cE-*4MIAkgIUY=GN4K$U()78&qol`;+0N(N{rvLx| literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/toolbar-icon16.png b/src/imports/FluentUI/designer/images/toolbar-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..569373afa13d54df936d5504e23f315fb79cf28b GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mYyz-Ar`&K2@bP0l+XkKI29kM literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/toolbar-icon@2x.png b/src/imports/FluentUI/designer/images/toolbar-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd9e6ceebccdd430910b93bb78c2d7a0c427fe42 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDD3?#L31Vw-pPk>K|E0A6R1IBEE{Xjl*NswPK zgMhs4p4(MGu8yaRV~EDYgGyCcGT15k*$ zB*-tAK|tPi&+RH8SIg7IF+?IfIbng8fg95g3%4dUy<^9^4s{)J=u>3wP(Gk@z(=j! d!h0nb!{aX!{@eHEtpMs`@O1TaS?83{1OQF4D^~yj literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/toolbutton-icon16.png b/src/imports/FluentUI/designer/images/toolbutton-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab7861c25f176bff19ca9ba7efef7bb84eee7bf GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar`&K2@mdKI;Vst0Ar>hZvX%Q literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/toolbutton-icon@2x.png b/src/imports/FluentUI/designer/images/toolbutton-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e5958cded3f6380ff124298781f879a0db94f438 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)IgaUj*T!Hio7+Ae()y1=CYc^&5 z28uG51o;Is2*}&+xm^Y1T6nrRhFF|VPLN=AVNRAwIG`%R%G&Ge?Cjjr+sne*dN8J= th2g?Q0ZwN&wlstCCEh%TBxHa}8PcYvn9YpzegHIs!PC{xWt~$(69Cf&FCG8@ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/toolseparator-icon.png b/src/imports/FluentUI/designer/images/toolseparator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e99f06f2eff39c0532c1b2075134f2232271d72 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaT3?y&uT)!Jgu?6^qxB}@FD^{Gjzd{GdVk`;r z3ubV5b|VeQ5%+X)4B?1QPHlLc~^N`m}? z83eLb?#2Ll@}4e^Aso@k2@cFYygWV$R#O@kMVuOT7BG2owsbQw6g4qrnv}g~0V-wi MboFyt=akR{09WxHl>h($ literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/toolseparator-icon@2x.png b/src/imports/FluentUI/designer/images/toolseparator-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..549c11c67cf8a556cd0b0e0c69a829ec85ab4eea GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDD3?#L31Vw-pXMj(LE0A6R2G?c!WPu!}k|4ie z27zpqyD>nXx~Gd{h{nX^1POx$TPHo6bKyb&2m6tTty!Wi%t<^(d|l2jMXi__8JrLK Vv>%r;R0C>Z@O1TaS?83{1OST3A`k!o literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/tumbler-icon.png b/src/imports/FluentUI/designer/images/tumbler-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..98eb8232a268efdc2df72a346f17c181f0bb157e GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wlJOMr-u0VPP3>dQs_5=CMB|(0{ z3O_I+89ZJ6T-G@yGywp7rzX7s literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/tumbler-icon16.png b/src/imports/FluentUI/designer/images/tumbler-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5f95cf327e4213256393bdb3d2afef20afb85f GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0VPP3>dQs_5=CMB|(0{ z3Sajv*Y;$q5IT{>}gYN8W3W_P_oke=Gleu2InwV_@ihAS<=LY1J>F OQU*^~KbLh*2~7a>`X=fC literal 0 HcmV?d00001 diff --git a/src/imports/FluentUI/designer/images/tumbler-icon@2x.png b/src/imports/FluentUI/designer/images/tumbler-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..236abf0cfe2a6e344f9502b8221e2869e62de1b3 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDD3?#L31Vw-pPk>K|E0A6R1IBEE{Xjl*NswPK zgMhs4p4(MGuBE4oV~EDYbP0l+XkKB^NHe literal 0 HcmV?d00001