diff --git a/example/qml/window/MainWindow.qml b/example/qml/window/MainWindow.qml index eb9eb1c..7acbf41 100644 --- a/example/qml/window/MainWindow.qml +++ b/example/qml/window/MainWindow.qml @@ -117,7 +117,7 @@ CustomWindow { Component.onCompleted: { ItemsOriginal.navigationView = nav_view ItemsFooter.navigationView = nav_view - nav_view.setCurrentIndex(0) + setCurrentIndex(0) } } } diff --git a/src/FluApp.h b/src/FluApp.h index d116455..ecdbcbf 100644 --- a/src/FluApp.h +++ b/src/FluApp.h @@ -27,7 +27,6 @@ class FluApp : public QObject */ Q_PROPERTY_AUTO(QJsonObject,routes); - QML_FOREIGN(FluApp) QML_NAMED_ELEMENT(FluApp) QML_SINGLETON private: diff --git a/src/imports/FluentUI/Controls/FluContentPage.qml b/src/imports/FluentUI/Controls/FluContentPage.qml index 8a56b3d..ba10e32 100644 --- a/src/imports/FluentUI/Controls/FluContentPage.qml +++ b/src/imports/FluentUI/Controls/FluContentPage.qml @@ -11,7 +11,7 @@ Item { property int topPadding: 0 property int rightPadding: 10 property int bottomPadding: 10 - property int pageMode: FluNavigationView.Standard + property int pageMode: FluNavigationView.SingleTask property string url: '' id:control FluText{ diff --git a/src/imports/FluentUI/Controls/FluNavigationView.qml b/src/imports/FluentUI/Controls/FluNavigationView.qml index 95dea25..f85931a 100644 --- a/src/imports/FluentUI/Controls/FluNavigationView.qml +++ b/src/imports/FluentUI/Controls/FluNavigationView.qml @@ -12,6 +12,10 @@ Item { Minimal, Auto } + enum PageModeFlag{ + Standard = 0, + SingleTask = 1 + } property url logo property string title: "" property FluObject items @@ -21,15 +25,10 @@ Item { property Component autoSuggestBox property Component actionItem property int topPadding: 0 - enum PageModeFlag{ - Standard = 0, - SingleTop = 1, - SingleTask = 2 - } id:control QtObject{ id:d - property bool enableStack: true + property var stackItems: [] property int displayMode: { if(control.displayMode !==FluNavigationView.Auto){ return control.displayMode @@ -42,7 +41,6 @@ Item { return FluNavigationView.Open } } - property var stackItems: [] property bool enableNavigationPanel: false property bool isCompact: d.displayMode === FluNavigationView.Compact property bool isMinimal: d.displayMode === FluNavigationView.Minimal @@ -345,6 +343,7 @@ Item { }else{ nav_list.currentIndex = idx layout_footer.currentIndex = -1 + model.tap() if(d.isMinimal || d.isCompact){ d.enableNavigationPanel = false } @@ -355,6 +354,7 @@ Item { }else{ nav_list.currentIndex = nav_list.count-layout_footer.count+idx layout_footer.currentIndex = idx + model.tap() if(d.isMinimal || d.isCompact){ d.enableNavigationPanel = false } @@ -475,20 +475,18 @@ Item { Layout.preferredWidth: 30 Layout.preferredHeight: 30 Layout.alignment: Qt.AlignVCenter - disabled: nav_swipe.depth === 1 + disabled: nav_swipe.depth <= 1 iconSize: 13 onClicked: { nav_swipe.pop() d.stackItems.pop() var item = d.stackItems[d.stackItems.length-1] - d.enableStack = false if(item.idx<(nav_list.count - layout_footer.count)){ layout_footer.currentIndex = -1 }else{ layout_footer.currentIndex = item.idx-(nav_list.count-layout_footer.count) } nav_list.currentIndex = item.idx - d.enableStack = true } } FluIconButton{ @@ -718,15 +716,6 @@ Item { } } } - onCurrentIndexChanged: { - if(d.enableStack){ - var item = model[currentIndex] - if(item instanceof FluPaneItem){ - item.tap() - d.stackItems.push(item) - } - } - } currentIndex: -1 anchors{ top: layout_header.bottom @@ -771,15 +760,6 @@ Item { return footerItems.children } } - onCurrentIndexChanged: { - if(d.enableStack){ - var item = model[currentIndex] - if(item instanceof FluPaneItem){ - item.tap() - d.stackItems.push(item) - } - } - } highlightMoveDuration: 150 highlight: Item{ clip: true @@ -906,44 +886,43 @@ Item { } function setCurrentIndex(index){ nav_list.currentIndex = index - + var item = nav_list.model[index] + if(item instanceof FluPaneItem){ + item.tap() + } } function getItems(){ return nav_list.model } function push(url,argument={}){ - if (nav_swipe.depth>0) - { - let page = nav_swipe.find(function(item) { - return item.url === url; - }) - if (page) + if(nav_swipe.currentItem && nav_swipe.currentItem.url === url){ + return + } + let page = nav_swipe.find(function(item) { + return item.url === url; + }) + if(page){ + switch(page.pageMode) { - switch(page.pageMode) + case FluNavigationView.SingleTask: + while(nav_swipe.currentItem !== page) { - case FluNavigationView.SingleTask: - while(nav_swipe.currentItem !== page) - { - nav_swipe.pop() - d.stackItems.pop() - } - return - case FluNavigationView.SingleTop: - if (nav_swipe.currentItem.url === url) - return - break - case FluNavigationView.Standard: - default: + nav_swipe.pop() + d.stackItems.pop() } + return + case FluNavigationView.Standard: + default: } } nav_swipe.push(url,Object.assign(argument,{url:url})) + d.stackItems.push(nav_list.model[nav_list.currentIndex]) } function getCurrentIndex(){ return nav_list.currentIndex } function startPageByItem(data){ - var items = getItems(); + var items = getItems() for(var i=0;i