diff options
| author | Aleix Pol <aleixpol@kde.org> | 2015-09-15 11:41:23 (GMT) |
|---|---|---|
| committer | Aleix Pol <aleixpol@kde.org> | 2015-09-15 11:41:23 (GMT) |
| commit | 05e92b76b666b776a441beecf9e9878b1f55b93b (patch) | |
| tree | 6d815233aab45640b847c016d09404337f647222 | |
| parent | fca72f85e49c27b63748b54749461983a0a64ad1 (diff) | |
Reorient page creation
Just use the logic from StackView rather than creating our own.
Makes the Breadcrumbs component reusable and the code easier to understand.
| -rw-r--r-- | discover/qml/ApplicationPage.qml | 3 | ||||
| -rw-r--r-- | discover/qml/ApplicationsListPage.qml | 2 | ||||
| -rw-r--r-- | discover/qml/Breadcrumbs.qml | 50 | ||||
| -rw-r--r-- | discover/qml/CategoryPage.qml | 2 | ||||
| -rw-r--r-- | discover/qml/InstalledPage.qml | 3 | ||||
| -rw-r--r-- | discover/qml/Main.qml | 29 | ||||
| -rw-r--r-- | discover/qml/MuonToolbar.qml | 6 | ||||
| -rw-r--r-- | discover/qml/PresentUpdatesPage.qml | 2 | ||||
| -rw-r--r-- | discover/qml/ReviewsPage.qml | 2 | ||||
| -rw-r--r-- | discover/qml/SourcesPage.qml | 2 | ||||
| -rw-r--r-- | discover/qml/UpdateProgressPage.qml | 2 | ||||
| -rw-r--r-- | discover/qml/navigation.js | 29 |
12 files changed, 56 insertions, 76 deletions
diff --git a/discover/qml/ApplicationPage.qml b/discover/qml/ApplicationPage.qml index 0903f36..5266cb1 100644 --- a/discover/qml/ApplicationPage.qml +++ b/discover/qml/ApplicationPage.qml @@ -27,6 +27,9 @@ Item { property QtObject application: null clip: true + property var icon: application.icon + property string title: application.name + ConditionalLoader { anchors.fill: parent condition: app.isCompact diff --git a/discover/qml/ApplicationsListPage.qml b/discover/qml/ApplicationsListPage.qml index c76d33f..6dfaedd 100644 --- a/discover/qml/ApplicationsListPage.qml +++ b/discover/qml/ApplicationsListPage.qml @@ -41,6 +41,8 @@ Item { readonly property real proposedMargin: (width-app.actualWidth)/2 property Component header: category==null ? null : categoryHeaderComponent property Component extendedToolBar: null + property var icon: category ? category.icon : "go-home" + property string title: category ? category.name : "" clip: true onSearchChanged: appsModel.sortOrder = Qt.AscendingOrder diff --git a/discover/qml/Breadcrumbs.qml b/discover/qml/Breadcrumbs.qml index ab90ab7..cbb09c3 100644 --- a/discover/qml/Breadcrumbs.qml +++ b/discover/qml/Breadcrumbs.qml @@ -23,39 +23,14 @@ import QtQuick.Layouts 1.0 Item { id: bread - property alias count: items.count - property Item pageStack: null + readonly property int count: pageStack.depth+1 + property StackView pageStack: null Layout.minimumHeight: theLayout.Layout.minimumHeight - signal poppedPages - - function currentItem() { - return items.count=="" ? null : items.get(items.count-1).display - } - - function pushItem(icon, text) { - items.append({"decoration": icon, "display": text}) - } - - function popItem(last) { - items.remove(items.count-1) - var page = pageStack.pop(undefined, last) - page.destroy(1000) - - if(last) - poppedPages() - } function doClick(index) { - var pos = items.count-index-1 - for(; pos>0; --pos) { - bread.popItem(pos>1) - } - } - - function removeAllItems() { - var pos = items.count-1 - for(; pos>0; --pos) { - items.remove(items.count-1) + var pos = bread.pageStack.depth + for(; pos>index; --pos) { + bread.pageStack.pop(pos>index) } } @@ -68,22 +43,19 @@ Item { } Repeater { - id: view - - model: ListModel { id: items } + model: bread.pageStack.depth delegate: Button { Layout.fillHeight: true Layout.minimumWidth: height //workaround bug in the plasma style - iconName: decoration + property var currentPage: bread.pageStack.get(modelData, false) + + iconName: currentPage.icon onClicked: doClick(index) - text: display - enabled: items.count-index>1 + text: currentPage.title + enabled: bread.pageStack.depth!=(modelData+1) checkable: checked } - -//TODO: make sure the right-most button is visible -// onCountChanged: view.positionViewAtEnd() } } } diff --git a/discover/qml/CategoryPage.qml b/discover/qml/CategoryPage.qml index f4996a2..67f5b03 100644 --- a/discover/qml/CategoryPage.qml +++ b/discover/qml/CategoryPage.qml @@ -29,6 +29,8 @@ Item { id: page property QtObject category property alias categories: categoryModel + property var icon: category ? category.icon : "go-home" + property string title: category ? category.name : "" function searchFor(text) { if(text == "") diff --git a/discover/qml/InstalledPage.qml b/discover/qml/InstalledPage.qml index 4f43297..8dc7217 100644 --- a/discover/qml/InstalledPage.qml +++ b/discover/qml/InstalledPage.qml @@ -11,4 +11,7 @@ ApplicationsListPage { Component.onCompleted: { page.changeSorting("canUpgrade", Qt.AscendingOrder, "canUpgrade") } + + property var icon: "applications-other" + property string title: i18n("Installed") } diff --git a/discover/qml/Main.qml b/discover/qml/Main.qml index 3873d3b..12bad4e 100644 --- a/discover/qml/Main.qml +++ b/discover/qml/Main.qml @@ -54,7 +54,7 @@ Rectangle running: false repeat: false interval: 200 - onTriggered: { pageStack.currentItem.searchFor(toolbar.search.text) } + onTriggered: { stackView.currentItem.searchFor(toolbar.search.text) } } Component { @@ -75,23 +75,23 @@ Rectangle if(currentTopLevel.status==Component.Error) { console.log("status error: "+currentTopLevel.errorString()) } - while(pageStack.depth>1) { - var obj = pageStack.pop() + while(stackView.depth>1) { + var obj = stackView.pop() if(obj) obj.destroy(2000) } - if(pageStack.currentItem) { - pageStack.currentItem.destroy(100) + if(stackView.currentItem) { + stackView.currentItem.destroy(100) } var page; try { - page = currentTopLevel.createObject(pageStack) -// console.log("created ", currentTopLevel, Navigation.rootPagesCache[currentTopLevel]) + page = currentTopLevel.createObject(stackView) +// console.log("created ", currentTopLevel) } catch (e) { console.log("error: "+e) console.log("comp error: "+currentTopLevel.errorString()) } - pageStack.replace(page, {}, window.status!=Component.Ready) + stackView.replace(page, {}, window.status!=Component.Ready) } property list<DiscoverAction> awesome: [ @@ -180,10 +180,7 @@ Rectangle rightMargin: pageToolBar.visible ? 10 : 0 } - pageStack: pageStack - onPoppedPages: window.clearSearch() - Component.onCompleted: breadcrumbsItem.pushItem("go-home", "") -// Behavior on height { NumberAnimation { duration: 250 } } + pageStack: stackView } ToolBar { @@ -200,7 +197,7 @@ Rectangle Loader { id: toolbarLoader - sourceComponent: pageStack.currentItem ? pageStack.currentItem.tools : null + sourceComponent: stackView.currentItem ? stackView.currentItem.tools : null } Behavior on width { NumberAnimation { duration: 250 } } @@ -208,14 +205,12 @@ Rectangle } StackView { - id: pageStack + id: stackView Layout.fillWidth: true Layout.fillHeight: true onDepthChanged: { - if(depth==1) { - breadcrumbsItem.removeAllItems() - } + window.clearSearch() } } diff --git a/discover/qml/MuonToolbar.qml b/discover/qml/MuonToolbar.qml index 7fbeef7..6105da5 100644 --- a/discover/qml/MuonToolbar.qml +++ b/discover/qml/MuonToolbar.qml @@ -44,9 +44,9 @@ ToolBar action: Action { shortcut: "Alt+Up" iconName: "go-previous" - enabled: window.navigationEnabled && breadcrumbsItem.count>1 + enabled: window.navigationEnabled && stackView.depth>1 tooltip: i18n("Back") - onTriggered: { breadcrumbsItem.popItem(false) } + onTriggered: { stackView.pop() } } } @@ -98,7 +98,7 @@ ToolBar Layout.fillWidth: app.isCompact placeholderText: i18n("Search...") focus: true - enabled: pageStack.currentItem!=null && pageStack.currentItem.searchFor!=null + enabled: stackView.currentItem!=null && stackView.currentItem.searchFor!=null onTextChanged: searchTimer.running = true onEditingFinished: if(searchWidget.text == "" && backAction.enabled) { diff --git a/discover/qml/PresentUpdatesPage.qml b/discover/qml/PresentUpdatesPage.qml index 39bd1b7..bffb0a5 100644 --- a/discover/qml/PresentUpdatesPage.qml +++ b/discover/qml/PresentUpdatesPage.qml @@ -18,6 +18,8 @@ ScrollView } } } + property var icon: "system-updates" + property string title: i18n("Updates (%1)", updateModel.updatesCount) Component { id: updatesPage diff --git a/discover/qml/ReviewsPage.qml b/discover/qml/ReviewsPage.qml index d4b90d6..5982246 100644 --- a/discover/qml/ReviewsPage.qml +++ b/discover/qml/ReviewsPage.qml @@ -26,6 +26,8 @@ ScrollView { id: page property alias model: reviewsView.model readonly property real proposedMargin: (width-app.actualWidth)/2 + property var icon + property string title ListView { id: reviewsView diff --git a/discover/qml/SourcesPage.qml b/discover/qml/SourcesPage.qml index 84d5cd6..f6837a8 100644 --- a/discover/qml/SourcesPage.qml +++ b/discover/qml/SourcesPage.qml @@ -9,6 +9,8 @@ Item { id: page clip: true readonly property real proposedMargin: (width-app.actualWidth)/2 + readonly property string title: i18n("Sources") + readonly property string icon: "view-filter" Menu { id: sourcesMenu diff --git a/discover/qml/UpdateProgressPage.qml b/discover/qml/UpdateProgressPage.qml index 61c2556..e037d4e 100644 --- a/discover/qml/UpdateProgressPage.qml +++ b/discover/qml/UpdateProgressPage.qml @@ -6,6 +6,8 @@ Item { id: page readonly property real proposedMargin: (width-app.actualWidth)/2 + readonly property string title: i18n("Updating...") + readonly property string icon: "system-software-update" function start() { updatesModel.prepare() diff --git a/discover/qml/navigation.js b/discover/qml/navigation.js index 3f7a4e8..72191d9 100644 --- a/discover/qml/navigation.js +++ b/discover/qml/navigation.js @@ -17,48 +17,43 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -function openApplicationList(icon, name, cat, search) { - openPage(icon, name, applicationListComp, { category: cat, search: search, preferList: search!="" }) +function openApplicationList(cat, search) { + openPage(applicationListComp, { category: cat, search: search, preferList: search!="" }) } function openApplicationListSource(origin) { - openPage("view-filter", origin, applicationListComp, { originFilter: origin, preferList: true }) + openPage(applicationListComp, { originFilter: origin, preferList: true, title: origin, icon: "view-filter" }) } function openApplicationMime(mime) { - openPage("document-open-data", i18n("Resources for '%1'", mime), applicationListComp, { mimeTypeFilter: mime }) + openPage(applicationListComp, { mimeTypeFilter: mime , icon: "document-open-data", title: i18n("Resources for '%1'", mime) }) } function openCategoryByName(catname) { currentTopLevel = topBrowsingComp - openCategory(pageStack.currentItem.categories.findCategoryByName(catname)) + openCategory(stackView.currentItem.categories.findCategoryByName(catname)) } function openCategory(cat) { if(cat.hasSubCategories) - openPage(cat.icon, cat.name, categoryComp, { category: cat }) + openPage(categoryComp, { category: cat }) else - openApplicationList(cat.icon, cat.name, cat, "") + openApplicationList(cat, "") } function openApplication(app) { - openPage(app.icon, app.name, applicationComp, { application: app }) + openPage(applicationComp, { application: app }) } function openReviews(app, reviews) { - openPage("rating", i18n("Ratings for %1", app.name), reviewsComp, { model: reviews }) + openPage(reviewsComp, { model: reviews, title: i18n("Ratings for %1", app.name), icon: "rating" }) } -function openPage(icon, name, component, props) { - if(breadcrumbsItem.currentItem()==name) - return +function openPage(component, props) { var obj try { - console.assert(typeof name === 'string', "wrong page name"); - - obj = component.createObject(pageStack.currentItem, props) - pageStack.push(obj); - breadcrumbsItem.pushItem(icon, name) + obj = component.createObject(stackView.currentItem, props) + stackView.push(obj); if (!obj) console.log("error opening", name, obj, component.errorString()) } catch (e) { |
