diff --git a/example/qml/App.qml b/example/qml/App.qml index f45e90ec..f1781b6c 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/component/CodeExpander.qml b/example/qml/component/CodeExpander.qml index 50dfaa12..6d69d480 100644 --- a/example/qml/component/CodeExpander.qml +++ b/example/qml/component/CodeExpander.qml @@ -120,7 +120,8 @@ FluExpander{ "FluStatusView", "FluRatingControl", "FluPasswordBox", - "FluBreadcrumbBar" + "FluBreadcrumbBar", + "FluCopyableText" ]; code = code.replace(/\n/g, "
"); code = code.replace(/ /g, " "); diff --git a/example/qml/global/ItemsFooter.qml b/example/qml/global/ItemsFooter.qml index 5f7991a6..a5b48efa 100644 --- a/example/qml/global/ItemsFooter.qml +++ b/example/qml/global/ItemsFooter.qml @@ -4,11 +4,13 @@ import QtQuick import FluentUI FluObject{ - id:footer_items property var navigationView + id:footer_items + FluPaneItemSeparator{} + FluPaneItem{ title:lang.about icon:FluentIcons.Contact @@ -16,6 +18,7 @@ FluObject{ FluApp.navigate("/about") } } + FluPaneItem{ title:lang.settings icon:FluentIcons.Settings @@ -23,4 +26,5 @@ FluObject{ navigationView.push("qrc:/example/qml/page/T_Settings.qml") } } + } diff --git a/example/qml/global/ItemsOriginal.qml b/example/qml/global/ItemsOriginal.qml index f5b52c23..499cc554 100644 --- a/example/qml/global/ItemsOriginal.qml +++ b/example/qml/global/ItemsOriginal.qml @@ -9,14 +9,14 @@ FluObject{ FluPaneItem{ title:lang.home - // icon:FluentIcons.Home - cusIcon: Image{ - anchors.centerIn: parent - source: FluTheme.dark ? "qrc:/example/res/svg/home_dark.svg" : "qrc:/example/res/svg/home.svg" - sourceSize: Qt.size(30,30) - width: 18 - height: 18 - } + icon:FluentIcons.Home + // cusIcon: Image{ + // anchors.centerIn: parent + // source: FluTheme.dark ? "qrc:/example/res/svg/home_dark.svg" : "qrc:/example/res/svg/home.svg" + // sourceSize: Qt.size(30,30) + // width: 18 + // height: 18 + // } onTap:{ navigationView.push("qrc:/example/qml/page/T_Home.qml") } @@ -34,6 +34,12 @@ FluObject{ navigationView.push("qrc:/example/qml/page/T_Buttons.qml") } } + FluPaneItem{ + title:"Text" + onTap:{ + navigationView.push("qrc:/example/qml/page/T_Text.qml") + } + } FluPaneItem{ title:"Slider" image:"qrc:/example/res/image/control/Slider.png" diff --git a/example/qml/page/T_Awesome.qml b/example/qml/page/T_Awesome.qml index c3b8784c..26caa39f 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 6ca78562..11b9b64f 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 bf266ace..30d6809a 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 64299d74..0547e8ed 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 11e4c23b..b7b38148 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 3461464e..83c2ed35 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 7e2fd6af..8603bb45 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 2df0c535..03195f4d 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 e54fb0c8..7930bcc8 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 ea9b2f67..ff561c8b 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 7e1245ed..21e10aa2 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 0ac49475..ba7fa49f 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 66a416e4..8100050d 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{ @@ -41,7 +36,7 @@ FluScrollablePage{ } FluText{ text:"FluentUI Gallery" - fontStyle: FluText.TitleLarge + font: FluTextStyle.TitleLarge anchors{ top: parent.top left: parent.left @@ -101,7 +96,7 @@ FluScrollablePage{ } FluText{ text: model.title - fontStyle: FluText.Body + font: FluTextStyle.Body Layout.topMargin: 20 Layout.leftMargin: 20 } @@ -184,7 +179,7 @@ FluScrollablePage{ FluText{ id:item_title text:modelData.title - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong anchors{ left: item_icon.right leftMargin: 20 @@ -198,7 +193,7 @@ FluScrollablePage{ color:FluColors.Grey120 wrapMode: Text.WrapAnywhere elide: Text.ElideRight - fontStyle: FluText.Caption + font: FluTextStyle.Caption maximumLineCount: 2 anchors{ left: item_title.left @@ -236,7 +231,7 @@ FluScrollablePage{ FluText{ text: "Recently added samples" - fontStyle: FluText.Title + font: FluTextStyle.Title Layout.topMargin: 20 Layout.leftMargin: 20 } @@ -253,7 +248,7 @@ FluScrollablePage{ FluText{ text: "Recently updated samples" - fontStyle: FluText.Title + font: FluTextStyle.Title Layout.topMargin: 20 Layout.leftMargin: 20 } diff --git a/example/qml/page/T_InfoBar.qml b/example/qml/page/T_InfoBar.qml index c66d25ce..31621767 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 12da086c..2508da8d 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 01bef380..186c96dd 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 b107b560..819904dc 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 24838c1c..b0ba4e3f 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 dc6954ff..dc0de532 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 b1d7bbcb..fd334207 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 6592e053..96db0a7e 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 @@ -67,7 +63,7 @@ FluScrollablePage{ } FluText{ text:"配合图片使用" - fontStyle: FluText.SubTitle + font: FluTextStyle.Subtitle Layout.topMargin: 20 } RowLayout{ diff --git a/example/qml/page/T_Settings.qml b/example/qml/page/T_Settings.qml index c6ef662c..19cb660a 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 @@ -28,7 +24,7 @@ FluScrollablePage{ } FluText{ text:lang.dark_mode - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } Repeater{ @@ -62,7 +58,7 @@ FluScrollablePage{ FluText{ text:lang.navigation_view_display_mode - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } Repeater{ @@ -93,7 +89,7 @@ FluScrollablePage{ FluText{ text:lang.locale - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } diff --git a/example/qml/page/T_Slider.qml b/example/qml/page/T_Slider.qml index 48cce7f7..45138adb 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 f2774e5a..6ba5d59c 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 a03f3032..40f8d4f0 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 20b143ce..15762109 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 = [ @@ -71,7 +67,6 @@ FluScrollablePage{ leftPadding:6 rightPadding:6 onClicked:{ - console.debug(dataModel.index) showSuccess(JSON.stringify(dataObject)) } } diff --git a/example/qml/page/T_Text.qml b/example/qml/page/T_Text.qml new file mode 100644 index 00000000..0540032e --- /dev/null +++ b/example/qml/page/T_Text.qml @@ -0,0 +1,32 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import QtQuick.Window +import FluentUI +import "../component" + +FluScrollablePage{ + + title:"Text" + + FluArea{ + Layout.fillWidth: true + Layout.topMargin: 20 + height: 60 + paddings: 10 + + FluCopyableText{ + text: "这是一个可以支持复制的Text" + anchors.verticalCenter: parent.verticalCenter + } + + } + CodeExpander{ + Layout.fillWidth: true + Layout.topMargin: -1 + code:'FluCopyableText{ + text:"这是一个可以支持复制的Text" +}' + } + +} diff --git a/example/qml/page/T_TextBox.qml b/example/qml/page/T_TextBox.qml index 1c2dfd01..622feb7f 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 9ddf2422..f4a77042 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 48e11091..672c3633 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 6123c5f8..06788518 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 2bb0ce4a..2ad2d8ac 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 01a7801c..8763eb23 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 e2beb6d6..234debcb 100644 --- a/example/qml/page/T_Typography.qml +++ b/example/qml/page/T_Typography.qml @@ -5,11 +5,9 @@ import FluentUI FluContentPage { + property real textScale: 1 + title: "Typography" - property int textSize: FluTheme.textSize - leftPadding:10 - rightPadding:10 - bottomPadding:20 Component.onCompleted: { slider.seek(0) @@ -26,47 +24,49 @@ FluContentPage { paddings: 10 ColumnLayout{ spacing: 0 + scale: textScale + transformOrigin: Item.TopLeft FluText{ + id:text_Display text:"Display" padding: 0 - pixelSize: textSize - fontStyle: FluText.Display + font: FluTextStyle.Display } FluText{ + id:text_TitleLarge text:"Title Large" padding: 0 - pixelSize: textSize - fontStyle: FluText.TitleLarge + font: FluTextStyle.TitleLarge } FluText{ + id:text_Title text:"Title" padding: 0 - pixelSize: textSize - fontStyle: FluText.Title + font: FluTextStyle.Title } FluText{ + id:text_Subtitle text:"Subtitle" padding: 0 - pixelSize: textSize - fontStyle: FluText.SubTitle + font: FluTextStyle.Subtitle } FluText{ + id:text_BodyStrong text:"Body Strong" padding: 0 - pixelSize: textSize - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong } FluText{ + id:text_Body text:"Body" padding: 0 - pixelSize: textSize - fontStyle: FluText.Body + font: FluTextStyle.Body } FluText{ + id:text_Caption text:"Caption" padding: 0 - pixelSize: textSize - fontStyle: FluText.Caption + font: FluTextStyle.Caption } } @@ -80,7 +80,7 @@ FluContentPage { topMargin: 30 } onValueChanged:{ - textSize = value/100*6+FluTheme.textSize + textScale = 1+value/100 } } } diff --git a/example/qml/window/AboutWindow.qml b/example/qml/window/AboutWindow.qml index 2147054e..fd8f3795 100644 --- a/example/qml/window/AboutWindow.qml +++ b/example/qml/window/AboutWindow.qml @@ -34,11 +34,17 @@ FluWindow { spacing: 14 FluText{ text:"FluentUI" - fontStyle: FluText.Title + font: FluTextStyle.Title + MouseArea{ + anchors.fill: parent + onClicked: { + FluApp.navigate("/") + } + } } FluText{ text:"v%1".arg(appInfo.version) - fontStyle: FluText.Body + font: FluTextStyle.Body Layout.alignment: Qt.AlignBottom } } @@ -113,6 +119,7 @@ FluWindow { RowLayout{ spacing: 14 + Layout.topMargin: 20 Layout.leftMargin: 15 FluText{ text:"捐赠:" @@ -124,15 +131,15 @@ FluWindow { Layout.preferredHeight: 252 Row{ anchors.horizontalCenter: parent.horizontalCenter - spacing: 60 + spacing: 30 Image{ - width: 164.55 - height: 224.25 + width: 250 + height: 250 source: "qrc:/example/res/image/qrcode_wx.jpg" } Image{ - width: 162 - height: 252 + width: 250 + height: 250 source: "qrc:/example/res/image/qrcode_zfb.jpg" } } @@ -141,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 ec049836..00000000 --- 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 48eff350..505a445b 100644 --- a/example/qml/window/MainWindow.qml +++ b/example/qml/window/MainWindow.qml @@ -15,6 +15,7 @@ FluWindow { closeDestory:false minimumWidth: 520 minimumHeight: 460 + launchMode: FluWindow.SingleTask closeFunc:function(event){ close_app.open() @@ -47,7 +48,7 @@ FluWindow { MenuItem { text: "退出" onTriggered: { - window.destoryWindow() + window.deleteWindow() FluApp.closeApp() } } @@ -75,7 +76,7 @@ FluWindow { positiveText:"退出" neutralText:"取消" onPositiveClicked:{ - window.destoryWindow() + window.deleteWindow() FluApp.closeApp() } @@ -101,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 00000000..e466a8e3 --- /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/res/image/qrcode_wx.jpg b/example/res/image/qrcode_wx.jpg index 893eaff0..37289743 100644 Binary files a/example/res/image/qrcode_wx.jpg and b/example/res/image/qrcode_wx.jpg differ diff --git a/example/res/image/qrcode_zfb.jpg b/example/res/image/qrcode_zfb.jpg index e7626f2f..598ad93b 100644 Binary files a/example/res/image/qrcode_zfb.jpg and b/example/res/image/qrcode_zfb.jpg differ diff --git a/example/src/controller/ChatController.cpp b/example/src/controller/ChatController.cpp deleted file mode 100644 index 16f59d21..00000000 --- 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 3e5953d4..00000000 --- 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 e76d8b85..8663e40b 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 d7a087ee..55d4588e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,12 +9,11 @@ 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) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/release) -endif() +##设置动态库输出目录 +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_PREFIX_PATH}/bin) + +##设置库文件输出目录 +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_PREFIX_PATH}/lib) #设置版本号 add_definitions(-DVERSION=1,2,9,0) @@ -36,7 +35,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,6 +48,7 @@ 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 @@ -69,3 +69,7 @@ target_link_libraries(fluentui PUBLIC if(WIN32) target_link_libraries(fluentui PRIVATE dwmapi user32) endif() + +#如果是debug,则生成的库文件名后面拼接d +set_target_properties(fluentui PROPERTIES DEBUG_POSTFIX "d") +set_target_properties(fluentuiplugin PROPERTIES DEBUG_POSTFIX "d") diff --git a/src/Def.h b/src/Def.h index 41855239..8a2bf595 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 35568731..0a129f41 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()); } @@ -91,31 +51,28 @@ void FluApp::navigate(const QString& route,const QJsonObject& argument,FluRegist properties.insert("pageRegister",QVariant::fromValue(fluRegister)); } properties.insert("argument",argument); - QQuickWindow *view = qobject_cast(component.createWithInitialProperties(properties)); - int launchMode = view->property("launchMode").toInt(); - if(launchMode==1){ - for (auto& pair : wnds) { - QString r = pair->property("route").toString(); - if(r == route){ - pair->setProperty("argument",argument); - pair->raise(); - pair->requestActivate(); - view->deleteLater(); - return; - } - } - }else if(launchMode==2){ - for (auto& pair : wnds) { - QString r = pair->property("route").toString(); - if(r == route){ - pair->close(); - break; - } + QQuickWindow *view=nullptr; + for (auto& pair : wnds) { + QString r = pair->property("route").toString(); + if(r == route){ + view = pair; + break; } } - if(fluTheme->frameless()){ - view->setFlag(Qt::FramelessWindowHint,true); + if(view){ + //如果窗口存在,则判断启动模式 + int launchMode = view->property("launchMode").toInt(); + if(launchMode == 1){ + view->setProperty("argument",argument); + view->show(); + view->raise(); + view->requestActivate(); + return; + }else if(launchMode == 2){ + view->close(); + } } + view = qobject_cast(component.createWithInitialProperties(properties)); wnds.insert(view->winId(),view); if(fluRegister){ fluRegister->to(view); diff --git a/src/FluApp.h b/src/FluApp.h index 289cae06..dab8e002 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/FluColorSet.h b/src/FluColorSet.h index bb1edbce..08cb3dfd 100644 --- a/src/FluColorSet.h +++ b/src/FluColorSet.h @@ -19,7 +19,6 @@ class FluColorSet : public QObject Q_PROPERTY_AUTO(QString,lightest) public: explicit FluColorSet(QObject *parent = nullptr); - }; #endif // FLUCOLORSET_H diff --git a/src/FluColors.cpp b/src/FluColors.cpp index feaeb78c..46e7536d 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 34b6e56a..9b0ac95a 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 e698f13e..4cc8c6da 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/FluTextStyle.cpp b/src/FluTextStyle.cpp new file mode 100644 index 00000000..5d2aeb1a --- /dev/null +++ b/src/FluTextStyle.cpp @@ -0,0 +1,38 @@ +#include "FluTextStyle.h" + +FluTextStyle::FluTextStyle(QObject *parent) + : QObject{parent} +{ + QFont caption; + caption.setPixelSize(12); + Caption(caption); + + QFont body; + body.setPixelSize(14); + Body(body); + + QFont bodyStrong; + bodyStrong.setPixelSize(14); + bodyStrong.setBold(true); + BodyStrong(bodyStrong); + + QFont subtitle; + subtitle.setPixelSize(20); + subtitle.setBold(true); + Subtitle(subtitle); + + QFont title; + title.setPixelSize(28); + title.setBold(true); + Title(title); + + QFont titleLarge; + titleLarge.setPixelSize(40); + titleLarge.setBold(true); + TitleLarge(titleLarge); + + QFont display; + display.setPixelSize(68); + display.setBold(true); + Display(display); +} diff --git a/src/FluTextStyle.h b/src/FluTextStyle.h new file mode 100644 index 00000000..07f4458f --- /dev/null +++ b/src/FluTextStyle.h @@ -0,0 +1,27 @@ +#ifndef FLUTEXTSTYLE_H +#define FLUTEXTSTYLE_H + +#include +#include +#include +#include "stdafx.h" + +class FluTextStyle : public QObject +{ + Q_OBJECT +public: + explicit FluTextStyle(QObject *parent = nullptr); + Q_PROPERTY_AUTO(QFont,Caption); + Q_PROPERTY_AUTO(QFont,Body); + Q_PROPERTY_AUTO(QFont,BodyStrong); + Q_PROPERTY_AUTO(QFont,Subtitle); + Q_PROPERTY_AUTO(QFont,Title); + Q_PROPERTY_AUTO(QFont,TitleLarge); + Q_PROPERTY_AUTO(QFont,Display); + QML_NAMED_ELEMENT(FluTextStyle) + QML_SINGLETON +signals: + +}; + +#endif // FLUTEXTSTYLE_H diff --git a/src/FluTheme.cpp b/src/FluTheme.cpp index 13497b88..d4c1ab4e 100644 --- a/src/FluTheme.cpp +++ b/src/FluTheme.cpp @@ -5,16 +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()); - textSize(13); + 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 78e03fe8..1c602918 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 */ @@ -37,15 +32,17 @@ class FluTheme : public QObject */ Q_PROPERTY_AUTO(bool,nativeText); - /** - * @brief textSize 文字大小 - */ - Q_PROPERTY_AUTO(int,textSize); - 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 16b24dfe..8307a639 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 01a634f9..5264a860 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 6966cbf7..00000000 --- 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 3b604550..00000000 --- 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 e72cf59a..6e1f7ee3 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 0e60c518..075a9b35 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 9fd26fb6..c530c84c 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 @@ -55,9 +55,6 @@ Rectangle{ leftMargin: 10 } color:root.textColor - fontStyle: FluText.Title - font.pixelSize: 14 - font.bold: true } RowLayout{ diff --git a/src/imports/FluentUI/Controls/FluButton.qml b/src/imports/FluentUI/Controls/FluButton.qml index a15fcf1f..7d172955 100644 --- a/src/imports/FluentUI/Controls/FluButton.qml +++ b/src/imports/FluentUI/Controls/FluButton.qml @@ -18,6 +18,7 @@ Button { enabled: !disabled focusPolicy:Qt.TabFocus Keys.onSpacePressed: control.visualFocus&&clicked() + font:FluTextStyle.Body background: Rectangle{ border.color: FluTheme.dark ? "#505050" : "#DFDFDF" @@ -38,6 +39,7 @@ Button { text: control.text horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter + font: control.font color: { if(FluTheme.dark){ if(disabled){ diff --git a/src/imports/FluentUI/Controls/FluContentDialog.qml b/src/imports/FluentUI/Controls/FluContentDialog.qml index 0f8955a0..6e69ae8d 100644 --- a/src/imports/FluentUI/Controls/FluContentDialog.qml +++ b/src/imports/FluentUI/Controls/FluContentDialog.qml @@ -65,7 +65,7 @@ Popup { FluText{ id:text_title - fontStyle: FluText.TitleLarge + font: FluTextStyle.TitleLarge text:title topPadding: 20 leftPadding: 20 @@ -80,7 +80,7 @@ Popup { FluText{ id:text_message - fontStyle: FluText.Body + font: FluTextStyle.Body wrapMode: Text.WrapAnywhere text:message topPadding: 14 diff --git a/src/imports/FluentUI/Controls/FluContentPage.qml b/src/imports/FluentUI/Controls/FluContentPage.qml index 691c037d..4f3ac993 100644 --- a/src/imports/FluentUI/Controls/FluContentPage.qml +++ b/src/imports/FluentUI/Controls/FluContentPage.qml @@ -17,7 +17,7 @@ Item { FluText{ id:text_title - fontStyle: FluText.TitleLarge + font: FluTextStyle.TitleLarge anchors{ top: parent.top topMargin: control.topPadding diff --git a/src/imports/FluentUI/Controls/FluCopyableText.qml b/src/imports/FluentUI/Controls/FluCopyableText.qml new file mode 100644 index 00000000..677dfe04 --- /dev/null +++ b/src/imports/FluentUI/Controls/FluCopyableText.qml @@ -0,0 +1,38 @@ +import QtQuick +import QtQuick.Controls +import FluentUI + +TextField { + + property color textColor: FluTheme.dark ? FluColors.White : FluColors.Grey220 + + id:control + color: textColor + readOnly: true + renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering + padding: 0 + leftPadding: 0 + rightPadding: 0 + topPadding: 0 + bottomPadding: 0 + selectionColor: FluTheme.primaryColor.lightest + TextMetrics { + id: text_metrics + font:control.font + text: control.text + } + background: Item{ + implicitWidth: text_metrics.width+10 + implicitHeight: text_metrics.height + } + font:FluTextStyle.Body + TapHandler { + acceptedButtons: Qt.RightButton + onTapped: control.echoMode !== TextInput.Password && menu.popup() + } + FluTextBoxMenu{ + id:menu + inputItem: control + } + +} diff --git a/src/imports/FluentUI/Controls/FluFilledButton.qml b/src/imports/FluentUI/Controls/FluFilledButton.qml index b20b0d21..0bb953b3 100644 --- a/src/imports/FluentUI/Controls/FluFilledButton.qml +++ b/src/imports/FluentUI/Controls/FluFilledButton.qml @@ -19,6 +19,7 @@ Button { rightPadding:15 Keys.onSpacePressed: control.visualFocus&&clicked() focusPolicy:Qt.TabFocus + font:FluTextStyle.Body background: Rectangle{ radius: 4 FluFocusRectangle{ @@ -37,6 +38,7 @@ Button { } contentItem: FluText { text: control.text + font: control.font horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: { diff --git a/src/imports/FluentUI/Controls/FluMultilineTextBox.qml b/src/imports/FluentUI/Controls/FluMultilineTextBox.qml index 504c42c0..d551834f 100644 --- a/src/imports/FluentUI/Controls/FluMultilineTextBox.qml +++ b/src/imports/FluentUI/Controls/FluMultilineTextBox.qml @@ -5,8 +5,6 @@ import FluentUI TextArea{ - property int fontStyle: FluText.Body - property int pixelSize : FluTheme.textSize property bool disabled: false property color normalColor: FluTheme.dark ? Qt.rgba(255/255,255/255,255/255,1) : Qt.rgba(27/255,27/255,27/255,1) property color disableColor: FluTheme.dark ? Qt.rgba(131/255,131/255,131/255,1) : Qt.rgba(160/255,160/255,160/255,1) @@ -23,6 +21,7 @@ TextArea{ } return normalColor } + font:FluTextStyle.Body wrapMode: Text.WrapAnywhere renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering selectionColor: FluTheme.primaryColor.lightest @@ -35,46 +34,6 @@ TextArea{ } return placeholderNormalColor } - font.bold: { - switch (fontStyle) { - case FluText.Display: - return true - case FluText.TitleLarge: - return true - case FluText.Title: - return true - case FluText.SubTitle: - return true - case FluText.BodyStrong: - return true - case FluText.Body: - return false - case FluText.Caption: - return false - default: - return false - } - } - font.pixelSize: { - switch (fontStyle) { - case FluText.Display: - return text.pixelSize * 4.857 - case FluText.TitleLarge: - return text.pixelSize * 2.857 - case FluText.Title: - return text.pixelSize * 2 - case FluText.SubTitle: - return text.pixelSize * 1.428 - case FluText.Body: - return text.pixelSize * 1.0 - case FluText.BodyStrong: - return text.pixelSize * 1.0 - case FluText.Caption: - return text.pixelSize * 0.857 - default: - return text.pixelSize * 1.0 - } - } selectByMouse: true background: FluTextBoxBackground{ inputItem: control } TapHandler { diff --git a/src/imports/FluentUI/Controls/FluNavigationView.qml b/src/imports/FluentUI/Controls/FluNavigationView.qml index f1f463d1..2f951438 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 @@ -148,7 +144,7 @@ Item { width: layout_list.width FluText{ text:model.title - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong anchors{ bottom: parent.bottom left:parent.left @@ -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,13 +499,13 @@ 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 } - visible: Layout.preferredWidth !== 0 + visible: d.isMinimal Behavior on Layout.preferredWidth{ NumberAnimation{ duration: 167 @@ -529,13 +525,30 @@ Item { } return 5 } + sourceSize: Qt.size(40,40) Layout.alignment: Qt.AlignVCenter } FluText{ Layout.alignment: Qt.AlignVCenter text:control.title Layout.leftMargin: 12 - fontStyle: FluText.Body + 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 } } } @@ -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/FluPasswordBox.qml b/src/imports/FluentUI/Controls/FluPasswordBox.qml index 7e5cacec..ab0335ea 100644 --- a/src/imports/FluentUI/Controls/FluPasswordBox.qml +++ b/src/imports/FluentUI/Controls/FluPasswordBox.qml @@ -5,8 +5,6 @@ import FluentUI TextField{ - property int fontStyle: FluText.Body - property int pixelSize : FluTheme.textSize property bool disabled: false property int iconSource: 0 property color normalColor: FluTheme.dark ? Qt.rgba(255/255,255/255,255/255,1) : Qt.rgba(27/255,27/255,27/255,1) @@ -24,6 +22,7 @@ TextField{ } return normalColor } + font:FluTextStyle.Body echoMode:btn_reveal.pressed ? TextField.Normal : TextField.Password renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering selectionColor: FluTheme.primaryColor.lightest @@ -36,46 +35,6 @@ TextField{ } return placeholderNormalColor } - font.bold: { - switch (fontStyle) { - case FluText.Display: - return true - case FluText.TitleLarge: - return true - case FluText.Title: - return true - case FluText.SubTitle: - return true - case FluText.BodyStrong: - return true - case FluText.Body: - return false - case FluText.Caption: - return false - default: - return false - } - } - font.pixelSize: { - switch (fontStyle) { - case FluText.Display: - return text.pixelSize * 4.857 - case FluText.TitleLarge: - return text.pixelSize * 2.857 - case FluText.Title: - return text.pixelSize * 2 - case FluText.SubTitle: - return text.pixelSize * 1.428 - case FluText.Body: - return text.pixelSize * 1.0 - case FluText.BodyStrong: - return text.pixelSize * 1.0 - case FluText.Caption: - return text.pixelSize * 0.857 - default: - return text.pixelSize * 1.0 - } - } selectByMouse: true rightPadding: icon_end.visible ? 50 : 30 background: FluTextBoxBackground{ diff --git a/src/imports/FluentUI/Controls/FluPivot.qml b/src/imports/FluentUI/Controls/FluPivot.qml index d18958ed..4a929533 100644 --- a/src/imports/FluentUI/Controls/FluPivot.qml +++ b/src/imports/FluentUI/Controls/FluPivot.qml @@ -57,8 +57,7 @@ Item { contentItem: Item{ FluText { id:item_title - fontStyle: FluText.Title - font.bold: false + font: FluTextStyle.Title text: modelData.title anchors.centerIn: parent color: { diff --git a/src/imports/FluentUI/Controls/FluRadioButton.qml b/src/imports/FluentUI/Controls/FluRadioButton.qml index 3751ba26..7979cd09 100644 --- a/src/imports/FluentUI/Controls/FluRadioButton.qml +++ b/src/imports/FluentUI/Controls/FluRadioButton.qml @@ -18,6 +18,7 @@ Button { visible: control.visualFocus } } + font:FluTextStyle.Body Keys.onSpacePressed: control.visualFocus&&clicked() contentItem: RowLayout{ Rectangle{ @@ -97,6 +98,7 @@ Button { FluText{ text: control.text Layout.alignment: Qt.AlignVCenter + font: control.font } } } diff --git a/src/imports/FluentUI/Controls/FluScrollablePage.qml b/src/imports/FluentUI/Controls/FluScrollablePage.qml index f4c3fa2c..f71b85c6 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 - fontStyle: FluText.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 bee9dd9d..00000000 --- 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/FluStatusView.qml b/src/imports/FluentUI/Controls/FluStatusView.qml index 04008030..f56c703f 100644 --- a/src/imports/FluentUI/Controls/FluStatusView.qml +++ b/src/imports/FluentUI/Controls/FluStatusView.qml @@ -58,7 +58,7 @@ Item{ visible: statusMode === FluStatusView.Empty FluText{ text:"空空如也" - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong Layout.alignment: Qt.AlignHCenter } } @@ -77,7 +77,7 @@ Item{ anchors.centerIn: parent FluText{ text:"页面出错了..." - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong Layout.alignment: Qt.AlignHCenter } FluFilledButton{ diff --git a/src/imports/FluentUI/Controls/FluTableView.qml b/src/imports/FluentUI/Controls/FluTableView.qml index 82174b22..ff8df19d 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 @@ -11,6 +12,7 @@ Item { property int itemCount: 1000 property int pageCount: 10 property int itemHeight: 56 + property bool pageVisible: true signal requestPage(int page,int count) id:control @@ -59,6 +61,7 @@ Item { right: parent.right } contentWidth: layout_table.width + clip:true ScrollBar.horizontal: FluScrollBar { } Rectangle{ @@ -97,14 +100,14 @@ Item { left: parent.left leftMargin: 14 } - fontStyle: FluText.BodyStrong + font: FluTextStyle.BodyStrong } FluDivider{ width: 1 height: 40 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - visible: index !== list_coumns.count-1 + visible: index !== model_coumns.count-1 } } } @@ -112,12 +115,14 @@ Item { } footer: Item{ - height: 50 - width: layout_table.width + height: pageVisible ? 50 : 0 + clip: true + width: layout_table.width FluPagination{ id:pagination height: 40 pageCurrent: control.pageCurrent + onPageCurrentChanged: control.pageCurrent = pageCurrent itemCount: control.itemCount pageCount: control.pageCount onRequestPage: @@ -128,15 +133,34 @@ Item { top: parent.top right: parent.right } + Connections{ + target: control + function onPageCurrentChanged(){ + if (control.pageCurrent!==pagination.pageCurrent) + { + pagination.calcNewPage(control.pageCurrent) + } + } + } } } 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 @@ -176,23 +200,16 @@ Item { } } } - - } Component{ id:com_text Item{ - MouseArea{ - id:item_mouse - hoverEnabled: true - anchors.fill: parent - } - FluText{ + FluCopyableText{ id:table_value text:String(model.itemData) - width: parent.width - 14 + width: Math.min(parent.width - 14,implicitWidth) wrapMode: Text.WordWrap onImplicitHeightChanged: parent.parent.parent.height = Math.max(implicitHeight + 20,itemHeight) anchors{ @@ -200,6 +217,13 @@ Item { left: parent.left leftMargin: 14 } + MouseArea{ + id:item_mouse + hoverEnabled: true + anchors.fill: parent + cursorShape: Qt.IBeamCursor + acceptedButtons: Qt.NoButton + } FluTooltip{ visible: item_mouse.containsMouse text:parent.text diff --git a/src/imports/FluentUI/Controls/FluText.qml b/src/imports/FluentUI/Controls/FluText.qml index 7cb2a28e..f85aa904 100644 --- a/src/imports/FluentUI/Controls/FluText.qml +++ b/src/imports/FluentUI/Controls/FluText.qml @@ -4,62 +4,11 @@ import FluentUI Text { - enum FontStyle { - Display, - TitleLarge, - Title, - SubTitle, - BodyStrong, - Body, - Caption - } - - property int fontStyle: FluText.Body property color textColor: FluTheme.dark ? FluColors.White : FluColors.Grey220 - property int pixelSize : FluTheme.textSize id:text color: textColor renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering - font.bold: { - switch (fontStyle) { - case FluText.Display: - return true - case FluText.TitleLarge: - return true - case FluText.Title: - return true - case FluText.SubTitle: - return true - case FluText.BodyStrong: - return true - case FluText.Body: - return false - case FluText.Caption: - return false - default: - return false - } - } - font.pixelSize: { - switch (fontStyle) { - case FluText.Display: - return text.pixelSize * 4.857 - case FluText.TitleLarge: - return text.pixelSize * 2.857 - case FluText.Title: - return text.pixelSize * 2 - case FluText.SubTitle: - return text.pixelSize * 1.428 - case FluText.Body: - return text.pixelSize * 1.0 - case FluText.BodyStrong: - return text.pixelSize * 1.0 - case FluText.Caption: - return text.pixelSize * 0.857 - default: - return text.pixelSize * 1.0 - } - } + font: FluTextStyle.Body } diff --git a/src/imports/FluentUI/Controls/FluTextBox.qml b/src/imports/FluentUI/Controls/FluTextBox.qml index 859500ba..d049d0f2 100644 --- a/src/imports/FluentUI/Controls/FluTextBox.qml +++ b/src/imports/FluentUI/Controls/FluTextBox.qml @@ -5,8 +5,6 @@ import FluentUI TextField{ - property int fontStyle: FluText.Body - property int pixelSize : FluTheme.textSize property bool disabled: false property int iconSource: 0 property color normalColor: FluTheme.dark ? Qt.rgba(255/255,255/255,255/255,1) : Qt.rgba(27/255,27/255,27/255,1) @@ -24,6 +22,7 @@ TextField{ } return normalColor } + font:FluTextStyle.Body renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering selectionColor: FluTheme.primaryColor.lightest placeholderTextColor: { @@ -35,46 +34,6 @@ TextField{ } return placeholderNormalColor } - font.bold: { - switch (fontStyle) { - case FluText.Display: - return true - case FluText.TitleLarge: - return true - case FluText.Title: - return true - case FluText.SubTitle: - return true - case FluText.BodyStrong: - return true - case FluText.Body: - return false - case FluText.Caption: - return false - default: - return false - } - } - font.pixelSize: { - switch (fontStyle) { - case FluText.Display: - return text.pixelSize * 4.857 - case FluText.TitleLarge: - return text.pixelSize * 2.857 - case FluText.Title: - return text.pixelSize * 2 - case FluText.SubTitle: - return text.pixelSize * 1.428 - case FluText.Body: - return text.pixelSize * 1.0 - case FluText.BodyStrong: - return text.pixelSize * 1.0 - case FluText.Caption: - return text.pixelSize * 0.857 - default: - return text.pixelSize * 1.0 - } - } selectByMouse: true rightPadding: icon_end.visible ? 50 : 30 background: FluTextBoxBackground{ diff --git a/src/imports/FluentUI/Controls/FluTextBoxMenu.qml b/src/imports/FluentUI/Controls/FluTextBoxMenu.qml index 4355547e..707f22e4 100644 --- a/src/imports/FluentUI/Controls/FluTextBoxMenu.qml +++ b/src/imports/FluentUI/Controls/FluTextBoxMenu.qml @@ -14,6 +14,12 @@ FluMenu{ focus:false enableAnimation:false + onVisibleChanged: { + if(visible){ + inputItem.forceActiveFocus() + } + } + Connections{ target: inputItem function onTextChanged() { diff --git a/src/imports/FluentUI/Controls/FluTooltip.qml b/src/imports/FluentUI/Controls/FluTooltip.qml index 5d189fdc..e128057a 100644 --- a/src/imports/FluentUI/Controls/FluTooltip.qml +++ b/src/imports/FluentUI/Controls/FluTooltip.qml @@ -6,10 +6,11 @@ ToolTip { id:tool_tip +// property var font: FluTextStyle.Body + contentItem: FluText { text: tool_tip.text - font: tool_tip.font - fontStyle: FluText.Body +// font: tool_tip.font padding: 4 wrapMode: Text.WrapAnywhere } diff --git a/src/imports/FluentUI/Controls/FluTreeView.qml b/src/imports/FluentUI/Controls/FluTreeView.qml index 45425665..906381b2 100644 --- a/src/imports/FluentUI/Controls/FluTreeView.qml +++ b/src/imports/FluentUI/Controls/FluTreeView.qml @@ -141,6 +141,7 @@ Item { currentParentElement = item_layout.parent.itemModel } } + itemClicked(model) } if(selectionMode === FluTreeView.Multiple){ @@ -300,8 +301,8 @@ Item { return result } - function createItem(text="Title",expanded=true,items=[]){ - return {text:text,expanded:expanded,items:items,key:uniqueRandom(),multipSelected:false,multipIndex:0,multipParentKey:""}; + function createItem(text="",expanded=true,items=[],data={}){ + return {text:text,expanded:expanded,items:items,key:uniqueRandom(),multipSelected:false,multipIndex:0,multipParentKey:"",data:data}; } function uniqueRandom() { diff --git a/src/imports/FluentUI/Controls/FluWindow.qml b/src/imports/FluentUI/Controls/FluWindow.qml index ce7f0e12..2c8453eb 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 00000000..c3a4f548 --- /dev/null +++ b/src/imports/FluentUI/designer/fluentui.metainfo @@ -0,0 +1,33 @@ +MetaInfo { + Type { + name: "FluentUI.Controls.FluButton" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "FluButton" + category: "FluentUI - Controls" + libraryIcon: "images/button-icon.png" + version: "1.0" + requiredImport: "FluentUI" + toolTip: qsTr("A button with text.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" } + } + } + + Type { + name: "FluentUI.Controls.FluText" + icon: "images/label-icon16.png" + + ItemLibraryEntry { + name: "FluText" + category: "FluentUI - Controls" + libraryIcon: "images/label-icon.png" + version: "1.0" + requiredImport: "FluentUI" + toolTip: qsTr("A text.") + + Property { name: "text"; type: "binding"; value: "qsTr(\"Text\")" } + } + } +} 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 00000000..666d1ed9 Binary files /dev/null and b/src/imports/FluentUI/designer/images/busyindicator-icon.png differ diff --git a/src/imports/FluentUI/designer/images/busyindicator-icon16.png b/src/imports/FluentUI/designer/images/busyindicator-icon16.png new file mode 100644 index 00000000..5aa57d7f Binary files /dev/null and b/src/imports/FluentUI/designer/images/busyindicator-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/busyindicator-icon@2x.png b/src/imports/FluentUI/designer/images/busyindicator-icon@2x.png new file mode 100644 index 00000000..bb2278ff Binary files /dev/null and b/src/imports/FluentUI/designer/images/busyindicator-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/button-icon.png b/src/imports/FluentUI/designer/images/button-icon.png new file mode 100644 index 00000000..c44909f6 Binary files /dev/null and b/src/imports/FluentUI/designer/images/button-icon.png differ diff --git a/src/imports/FluentUI/designer/images/button-icon16.png b/src/imports/FluentUI/designer/images/button-icon16.png new file mode 100644 index 00000000..5c921deb Binary files /dev/null and b/src/imports/FluentUI/designer/images/button-icon16.png differ 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 00000000..f90a1ba7 Binary files /dev/null and b/src/imports/FluentUI/designer/images/button-icon@2x.png differ 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 00000000..ee669b3a Binary files /dev/null and b/src/imports/FluentUI/designer/images/checkbox-icon.png differ 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 00000000..8d89eab8 Binary files /dev/null and b/src/imports/FluentUI/designer/images/checkbox-icon16.png differ 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 00000000..51c5601d Binary files /dev/null and b/src/imports/FluentUI/designer/images/checkbox-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/combobox-icon.png b/src/imports/FluentUI/designer/images/combobox-icon.png new file mode 100644 index 00000000..2d31b17c Binary files /dev/null and b/src/imports/FluentUI/designer/images/combobox-icon.png differ 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 00000000..15fc3505 Binary files /dev/null and b/src/imports/FluentUI/designer/images/combobox-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/combobox-icon@2x.png b/src/imports/FluentUI/designer/images/combobox-icon@2x.png new file mode 100644 index 00000000..5f823905 Binary files /dev/null and b/src/imports/FluentUI/designer/images/combobox-icon@2x.png differ 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 00000000..fd9e4e8f Binary files /dev/null and b/src/imports/FluentUI/designer/images/control-icon.png differ diff --git a/src/imports/FluentUI/designer/images/control-icon16.png b/src/imports/FluentUI/designer/images/control-icon16.png new file mode 100644 index 00000000..31c76548 Binary files /dev/null and b/src/imports/FluentUI/designer/images/control-icon16.png differ 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 00000000..22604d24 Binary files /dev/null and b/src/imports/FluentUI/designer/images/control-icon@2x.png differ 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 00000000..5a55bd9f Binary files /dev/null and b/src/imports/FluentUI/designer/images/delaybutton-icon.png differ diff --git a/src/imports/FluentUI/designer/images/delaybutton-icon16.png b/src/imports/FluentUI/designer/images/delaybutton-icon16.png new file mode 100644 index 00000000..cd21394e Binary files /dev/null and b/src/imports/FluentUI/designer/images/delaybutton-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/delaybutton-icon@2x.png b/src/imports/FluentUI/designer/images/delaybutton-icon@2x.png new file mode 100644 index 00000000..7beee2fa Binary files /dev/null and b/src/imports/FluentUI/designer/images/delaybutton-icon@2x.png differ 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 00000000..b3b63e35 Binary files /dev/null and b/src/imports/FluentUI/designer/images/dial-icon.png differ 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 00000000..8d8c7c09 Binary files /dev/null and b/src/imports/FluentUI/designer/images/dial-icon16.png differ 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 00000000..22547a16 Binary files /dev/null and b/src/imports/FluentUI/designer/images/dial-icon@2x.png differ 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 00000000..32abc8bf Binary files /dev/null and b/src/imports/FluentUI/designer/images/frame-icon.png differ 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 00000000..e5b65ad5 Binary files /dev/null and b/src/imports/FluentUI/designer/images/frame-icon16.png differ 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 00000000..8b876f38 Binary files /dev/null and b/src/imports/FluentUI/designer/images/frame-icon@2x.png differ 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 00000000..5542ecf8 Binary files /dev/null and b/src/imports/FluentUI/designer/images/groupbox-icon.png differ diff --git a/src/imports/FluentUI/designer/images/groupbox-icon16.png b/src/imports/FluentUI/designer/images/groupbox-icon16.png new file mode 100644 index 00000000..9cf43248 Binary files /dev/null and b/src/imports/FluentUI/designer/images/groupbox-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/groupbox-icon@2x.png b/src/imports/FluentUI/designer/images/groupbox-icon@2x.png new file mode 100644 index 00000000..80dab3c7 Binary files /dev/null and b/src/imports/FluentUI/designer/images/groupbox-icon@2x.png differ 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 00000000..822cf3e7 Binary files /dev/null and b/src/imports/FluentUI/designer/images/itemdelegate-icon.png differ diff --git a/src/imports/FluentUI/designer/images/itemdelegate-icon16.png b/src/imports/FluentUI/designer/images/itemdelegate-icon16.png new file mode 100644 index 00000000..b3ed007a Binary files /dev/null and b/src/imports/FluentUI/designer/images/itemdelegate-icon16.png differ 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 00000000..cb81308f Binary files /dev/null and b/src/imports/FluentUI/designer/images/itemdelegate-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/label-icon.png b/src/imports/FluentUI/designer/images/label-icon.png new file mode 100644 index 00000000..788bef07 Binary files /dev/null and b/src/imports/FluentUI/designer/images/label-icon.png differ 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 00000000..b68d3845 Binary files /dev/null and b/src/imports/FluentUI/designer/images/label-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/label-icon@2x.png b/src/imports/FluentUI/designer/images/label-icon@2x.png new file mode 100644 index 00000000..7001413d Binary files /dev/null and b/src/imports/FluentUI/designer/images/label-icon@2x.png differ 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 00000000..b5ac87e8 Binary files /dev/null and b/src/imports/FluentUI/designer/images/page-icon.png differ 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 00000000..bc6810b6 Binary files /dev/null and b/src/imports/FluentUI/designer/images/page-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/page-icon@2x.png b/src/imports/FluentUI/designer/images/page-icon@2x.png new file mode 100644 index 00000000..23db032f Binary files /dev/null and b/src/imports/FluentUI/designer/images/page-icon@2x.png differ 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 00000000..edb6b377 Binary files /dev/null and b/src/imports/FluentUI/designer/images/pageindicator-icon.png differ diff --git a/src/imports/FluentUI/designer/images/pageindicator-icon16.png b/src/imports/FluentUI/designer/images/pageindicator-icon16.png new file mode 100644 index 00000000..0fb89675 Binary files /dev/null and b/src/imports/FluentUI/designer/images/pageindicator-icon16.png differ 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 00000000..7be0ee81 Binary files /dev/null and b/src/imports/FluentUI/designer/images/pageindicator-icon@2x.png differ 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 00000000..62ebe487 Binary files /dev/null and b/src/imports/FluentUI/designer/images/pane-icon.png differ 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 00000000..2b804844 Binary files /dev/null and b/src/imports/FluentUI/designer/images/pane-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/pane-icon@2x.png b/src/imports/FluentUI/designer/images/pane-icon@2x.png new file mode 100644 index 00000000..55bb116a Binary files /dev/null and b/src/imports/FluentUI/designer/images/pane-icon@2x.png differ 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 00000000..a023f73c Binary files /dev/null and b/src/imports/FluentUI/designer/images/progressbar-icon.png differ 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 00000000..6fede21d Binary files /dev/null and b/src/imports/FluentUI/designer/images/progressbar-icon16.png differ 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 00000000..00694003 Binary files /dev/null and b/src/imports/FluentUI/designer/images/progressbar-icon@2x.png differ 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 00000000..d38170e2 Binary files /dev/null and b/src/imports/FluentUI/designer/images/radiobutton-icon.png differ diff --git a/src/imports/FluentUI/designer/images/radiobutton-icon16.png b/src/imports/FluentUI/designer/images/radiobutton-icon16.png new file mode 100644 index 00000000..07b46a8a Binary files /dev/null and b/src/imports/FluentUI/designer/images/radiobutton-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/radiobutton-icon@2x.png b/src/imports/FluentUI/designer/images/radiobutton-icon@2x.png new file mode 100644 index 00000000..4bbddda4 Binary files /dev/null and b/src/imports/FluentUI/designer/images/radiobutton-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/rangeslider-icon.png b/src/imports/FluentUI/designer/images/rangeslider-icon.png new file mode 100644 index 00000000..1c4c7b29 Binary files /dev/null and b/src/imports/FluentUI/designer/images/rangeslider-icon.png differ diff --git a/src/imports/FluentUI/designer/images/rangeslider-icon16.png b/src/imports/FluentUI/designer/images/rangeslider-icon16.png new file mode 100644 index 00000000..3be4624d Binary files /dev/null and b/src/imports/FluentUI/designer/images/rangeslider-icon16.png differ 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 00000000..aee69b33 Binary files /dev/null and b/src/imports/FluentUI/designer/images/rangeslider-icon@2x.png differ 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 00000000..d4b470dc Binary files /dev/null and b/src/imports/FluentUI/designer/images/roundbutton-icon.png differ diff --git a/src/imports/FluentUI/designer/images/roundbutton-icon16.png b/src/imports/FluentUI/designer/images/roundbutton-icon16.png new file mode 100644 index 00000000..f6f36666 Binary files /dev/null and b/src/imports/FluentUI/designer/images/roundbutton-icon16.png differ 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 00000000..4553e165 Binary files /dev/null and b/src/imports/FluentUI/designer/images/roundbutton-icon@2x.png differ 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 00000000..5ef73ff1 Binary files /dev/null and b/src/imports/FluentUI/designer/images/scrollview-icon.png differ 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 00000000..f8ca7a36 Binary files /dev/null and b/src/imports/FluentUI/designer/images/scrollview-icon16.png differ 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 00000000..0eb7f966 Binary files /dev/null and b/src/imports/FluentUI/designer/images/scrollview-icon@2x.png differ 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 00000000..bd0a9729 Binary files /dev/null and b/src/imports/FluentUI/designer/images/slider-icon.png differ 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 00000000..a08622df Binary files /dev/null and b/src/imports/FluentUI/designer/images/slider-icon16.png differ 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 00000000..93842e4c Binary files /dev/null and b/src/imports/FluentUI/designer/images/slider-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/spinbox-icon.png b/src/imports/FluentUI/designer/images/spinbox-icon.png new file mode 100644 index 00000000..37277c5e Binary files /dev/null and b/src/imports/FluentUI/designer/images/spinbox-icon.png differ 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 00000000..f88711dd Binary files /dev/null and b/src/imports/FluentUI/designer/images/spinbox-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/spinbox-icon@2x.png b/src/imports/FluentUI/designer/images/spinbox-icon@2x.png new file mode 100644 index 00000000..b62a3bad Binary files /dev/null and b/src/imports/FluentUI/designer/images/spinbox-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/stackview-icon.png b/src/imports/FluentUI/designer/images/stackview-icon.png new file mode 100644 index 00000000..a6ced349 Binary files /dev/null and b/src/imports/FluentUI/designer/images/stackview-icon.png differ 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 00000000..0f19d0ef Binary files /dev/null and b/src/imports/FluentUI/designer/images/stackview-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/stackview-icon@2x.png b/src/imports/FluentUI/designer/images/stackview-icon@2x.png new file mode 100644 index 00000000..9b5ef951 Binary files /dev/null and b/src/imports/FluentUI/designer/images/stackview-icon@2x.png differ 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 00000000..031cb27c Binary files /dev/null and b/src/imports/FluentUI/designer/images/swipeview-icon.png differ diff --git a/src/imports/FluentUI/designer/images/swipeview-icon16.png b/src/imports/FluentUI/designer/images/swipeview-icon16.png new file mode 100644 index 00000000..446c4696 Binary files /dev/null and b/src/imports/FluentUI/designer/images/swipeview-icon16.png differ 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 00000000..0ccb978c Binary files /dev/null and b/src/imports/FluentUI/designer/images/swipeview-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/switch-icon.png b/src/imports/FluentUI/designer/images/switch-icon.png new file mode 100644 index 00000000..e0181592 Binary files /dev/null and b/src/imports/FluentUI/designer/images/switch-icon.png differ 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 00000000..9abd2756 Binary files /dev/null and b/src/imports/FluentUI/designer/images/switch-icon16.png differ diff --git a/src/imports/FluentUI/designer/images/switch-icon@2x.png b/src/imports/FluentUI/designer/images/switch-icon@2x.png new file mode 100644 index 00000000..787f54ca Binary files /dev/null and b/src/imports/FluentUI/designer/images/switch-icon@2x.png differ 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 00000000..f1b2dc0f Binary files /dev/null and b/src/imports/FluentUI/designer/images/textarea-icon.png differ 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 00000000..4afc1fba Binary files /dev/null and b/src/imports/FluentUI/designer/images/textarea-icon16.png differ 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 00000000..c32ecc71 Binary files /dev/null and b/src/imports/FluentUI/designer/images/textarea-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/textfield-icon.png b/src/imports/FluentUI/designer/images/textfield-icon.png new file mode 100644 index 00000000..ba5537ac Binary files /dev/null and b/src/imports/FluentUI/designer/images/textfield-icon.png differ 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 00000000..c4a62a65 Binary files /dev/null and b/src/imports/FluentUI/designer/images/textfield-icon16.png differ 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 00000000..e05fd41b Binary files /dev/null and b/src/imports/FluentUI/designer/images/textfield-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/toolbar-icon.png b/src/imports/FluentUI/designer/images/toolbar-icon.png new file mode 100644 index 00000000..5cb5b2e1 Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolbar-icon.png differ 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 00000000..569373af Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolbar-icon16.png differ 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 00000000..fd9e6cee Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolbar-icon@2x.png differ diff --git a/src/imports/FluentUI/designer/images/toolbutton-icon.png b/src/imports/FluentUI/designer/images/toolbutton-icon.png new file mode 100644 index 00000000..3298f695 Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolbutton-icon.png differ 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 00000000..9ab7861c Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolbutton-icon16.png differ 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 00000000..e5958cde Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolbutton-icon@2x.png differ 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 00000000..5e99f06f Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolseparator-icon.png differ diff --git a/src/imports/FluentUI/designer/images/toolseparator-icon16.png b/src/imports/FluentUI/designer/images/toolseparator-icon16.png new file mode 100644 index 00000000..68f22c5d Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolseparator-icon16.png differ 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 00000000..549c11c6 Binary files /dev/null and b/src/imports/FluentUI/designer/images/toolseparator-icon@2x.png differ 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 00000000..98eb8232 Binary files /dev/null and b/src/imports/FluentUI/designer/images/tumbler-icon.png differ 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 00000000..ff5f95cf Binary files /dev/null and b/src/imports/FluentUI/designer/images/tumbler-icon16.png differ 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 00000000..236abf0c Binary files /dev/null and b/src/imports/FluentUI/designer/images/tumbler-icon@2x.png differ