From 1f2d0d9b9f62ac974d51c4a5c5dc433d948fdcdc Mon Sep 17 00:00:00 2001 From: zhuzihcu Date: Mon, 10 Apr 2023 18:17:22 +0800 Subject: [PATCH] update --- example/T_Settings.qml | 51 ++ example/global/ItemsFooter.qml | 21 +- example/global/ItemsOriginal.qml | 1 - example/global/MainEvent.qml | 10 + example/global/qmldir | 1 + example/page/MainPage.qml | 12 +- example/qml.qrc | 2 + src/Fluent.cpp | 1 + src/controls/FluAutoSuggestBox.qml | 1 + src/controls/FluNavigationView.qml | 1 + src/controls/FluNavigationView2.qml | 668 ++++++++++++++++++++++++++ src/controls/FluPaneItemEmpty.qml | 7 + src/controls/FluPaneItemExpander.qml | 2 - src/controls/FluPaneItemHeader.qml | 1 - src/controls/FluPaneItemSeparator.qml | 1 - src/res.qrc | 2 + 16 files changed, 764 insertions(+), 18 deletions(-) create mode 100644 example/T_Settings.qml create mode 100644 example/global/MainEvent.qml create mode 100644 src/controls/FluNavigationView2.qml create mode 100644 src/controls/FluPaneItemEmpty.qml diff --git a/example/T_Settings.qml b/example/T_Settings.qml new file mode 100644 index 0000000..dd1ed94 --- /dev/null +++ b/example/T_Settings.qml @@ -0,0 +1,51 @@ +import QtQuick +import QtQuick.Layouts +import QtQuick.Window +import QtQuick.Controls +import FluentUI +import "qrc:///global/" +import "./component" + +FluScrollablePage{ + + title:"Settings" + leftPadding:10 + rightPadding:10 + bottomPadding:20 + spacing: 0 + + FluArea{ + Layout.fillWidth: true + Layout.topMargin: 20 + height: 200 + paddings: 10 + + ColumnLayout{ + spacing: 10 + anchors{ + verticalCenter: parent.verticalCenter + left: parent.left + } + + FluText{ + text:"NavigationView Display Mode" + fontStyle: FluText.BodyStrong + Layout.bottomMargin: 4 + } + + Repeater{ + id:repeater + model: [{title:"Top",mode:FluNavigationView2.Top},{title:"Open",mode:FluNavigationView2.Open},{title:"Compact",mode:FluNavigationView2.Compact},{title:"Minimal",mode:FluNavigationView2.Minimal},{title:"Auto",mode:FluNavigationView2.Auto}] + delegate: FluRadioButton{ + selected : MainEvent.displayMode===modelData.mode + text:modelData.title + onClicked:{ + MainEvent.displayMode = modelData.mode + console.debug(modelData.mode) + } + } + } + } + + } +} diff --git a/example/global/ItemsFooter.qml b/example/global/ItemsFooter.qml index 363a9a9..9e34533 100644 --- a/example/global/ItemsFooter.qml +++ b/example/global/ItemsFooter.qml @@ -5,17 +5,22 @@ import FluentUI FluObject{ id:footer_items + + property var navigationView + FluPaneItemSeparator{} FluPaneItem{ - title:"意见反馈" - onTap:{ - Qt.openUrlExternally("https://github.com/zhuzichu520/FluentUI/issues/new") - } - } - FluPaneItem{ - title:"关于" - onTap:{ + title:"About" + icon:FluentIcons.Contact + tapFunc:function(){ FluApp.navigate("/about") } } + FluPaneItem{ + title:"Settings" + icon:FluentIcons.Settings + onTap:{ + navigationView.push("qrc:/T_Settings.qml") + } + } } diff --git a/example/global/ItemsOriginal.qml b/example/global/ItemsOriginal.qml index fd3b9ec..87bd306 100644 --- a/example/global/ItemsOriginal.qml +++ b/example/global/ItemsOriginal.qml @@ -308,7 +308,6 @@ FluObject{ if(navigationView.getCurrentIndex() === i){ return } - item.tap() navigationView.setCurrentIndex(i) if(item.parent){ item.parent.isExpand = true diff --git a/example/global/MainEvent.qml b/example/global/MainEvent.qml new file mode 100644 index 0000000..aae1ca3 --- /dev/null +++ b/example/global/MainEvent.qml @@ -0,0 +1,10 @@ +pragma Singleton + +import QtQuick +import FluentUI + +QtObject { + + property int displayMode : FluNavigationView2.Open + +} diff --git a/example/global/qmldir b/example/global/qmldir index eb6bfea..a112280 100644 --- a/example/global/qmldir +++ b/example/global/qmldir @@ -1,2 +1,3 @@ singleton ItemsOriginal 1.0 ItemsOriginal.qml singleton ItemsFooter 1.0 ItemsFooter.qml +singleton MainEvent 1.0 MainEvent.qml diff --git a/example/page/MainPage.qml b/example/page/MainPage.qml index a9ca7d0..e312232 100644 --- a/example/page/MainPage.qml +++ b/example/page/MainPage.qml @@ -15,25 +15,27 @@ FluWindow { FluAppBar{ id:appbar - z:10 + z:9 showDark: true width:parent.width + darkText: "Dark Mode" } - FluNavigationView{ + FluNavigationView2{ id:nav_view anchors.fill: parent items: ItemsOriginal footerItems:ItemsFooter + z:11 + displayMode:MainEvent.displayMode logo: "qrc:/res/image/favicon.ico" - z: 11 title:"FluentUI" autoSuggestBox:FluAutoSuggestBox{ width: 280 anchors.centerIn: parent iconSource: FluentIcons.Zoom items: ItemsOriginal.getSearchData() - placeholderText: "查找" + placeholderText: "Search" onItemClicked: (data)=>{ ItemsOriginal.startPageByItem(data) @@ -41,8 +43,8 @@ FluWindow { } Component.onCompleted: { ItemsOriginal.navigationView = nav_view + ItemsFooter.navigationView = nav_view nav_view.setCurrentIndex(0) - nav_view.push("qrc:/T_Home.qml") } } diff --git a/example/qml.qrc b/example/qml.qrc index 672f023..343900b 100644 --- a/example/qml.qrc +++ b/example/qml.qrc @@ -158,5 +158,7 @@ component/CodeExpander.qml T_TableView.qml T_StatusView.qml + T_Settings.qml + global/MainEvent.qml diff --git a/src/Fluent.cpp b/src/Fluent.cpp index 7551241..831160d 100644 --- a/src/Fluent.cpp +++ b/src/Fluent.cpp @@ -33,6 +33,7 @@ void Fluent::registerTypes(const char *uri){ qmlRegisterType(uri,major,minor,"WindowHelper"); qmlRegisterType(uri,major,minor,"FluColorSet"); + qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluNavigationView2.qml"),uri,major,minor,"FluNavigationView2"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluStatusView.qml"),uri,major,minor,"FluStatusView"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluPagination.qml"),uri,major,minor,"FluPagination"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluToggleButton.qml"),uri,major,minor,"FluToggleButton"); diff --git a/src/controls/FluAutoSuggestBox.qml b/src/controls/FluAutoSuggestBox.qml index f633ef0..29ce597 100644 --- a/src/controls/FluAutoSuggestBox.qml +++ b/src/controls/FluAutoSuggestBox.qml @@ -5,6 +5,7 @@ import FluentUI FluTextBox{ property var items:[] property string emptyText: "没有找到结果" + property int autoSuggestBoxReplacement: FluentIcons.Zoom signal itemClicked(var data) signal handleClicked QtObject{ diff --git a/src/controls/FluNavigationView.qml b/src/controls/FluNavigationView.qml index 4c9941b..c39f0ff 100644 --- a/src/controls/FluNavigationView.qml +++ b/src/controls/FluNavigationView.qml @@ -520,6 +520,7 @@ Item { return footerItems.children } } + interactive: false currentIndex: -1 delegate: Loader{ property var model: modelData diff --git a/src/controls/FluNavigationView2.qml b/src/controls/FluNavigationView2.qml new file mode 100644 index 0000000..0108601 --- /dev/null +++ b/src/controls/FluNavigationView2.qml @@ -0,0 +1,668 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts +import FluentUI + +Item { + + enum DisplayMode { + Open, + Top, + Compact, + Minimal, + Auto + } + + property url logo + property string title: "" + property FluObject items + property FluObject footerItems + property int displayMode: FluNavigationView2.Open + property Component autoSuggestBox + property var window : { + if(Window.window == null) + return null + return Window.window + } + + id:control + + QtObject{ + id:d + property bool enableStack: true + property var stackItems: [] + property bool enableNavigationPanel: false + function handleItems(){ + var idx = 0 + var data = [] + if(items){ + for(var i=0;icontrols/FluPagination.qml controls/FluToggleButton.qml controls/FluStatusView.qml + controls/FluNavigationView2.qml + controls/FluPaneItemEmpty.qml