summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleix Pol <aleixpol@kde.org>2015-09-15 11:41:23 (GMT)
committerAleix Pol <aleixpol@kde.org>2015-09-15 11:41:23 (GMT)
commit05e92b76b666b776a441beecf9e9878b1f55b93b (patch)
tree6d815233aab45640b847c016d09404337f647222
parentfca72f85e49c27b63748b54749461983a0a64ad1 (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.qml3
-rw-r--r--discover/qml/ApplicationsListPage.qml2
-rw-r--r--discover/qml/Breadcrumbs.qml50
-rw-r--r--discover/qml/CategoryPage.qml2
-rw-r--r--discover/qml/InstalledPage.qml3
-rw-r--r--discover/qml/Main.qml29
-rw-r--r--discover/qml/MuonToolbar.qml6
-rw-r--r--discover/qml/PresentUpdatesPage.qml2
-rw-r--r--discover/qml/ReviewsPage.qml2
-rw-r--r--discover/qml/SourcesPage.qml2
-rw-r--r--discover/qml/UpdateProgressPage.qml2
-rw-r--r--discover/qml/navigation.js29
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) {