on xenial help sign in
Allow searching in mocked models
commita0a7e1f7f17a5b0a9ca33c9d6e36425606b7f549 authorMichal Hruby <michal.mhr@gmail.com> dateSun 11 Aug 2013, 23:21 (13 years ago) parent7850c20
6 files changed+179−81
Dash/Apps/AppsAvailableForDownloadModel.qml+60−12 Dash/Apps/DesktopFileModel.qml−51 Dash/Apps/FrequentlyUsedAppsModel.qml+60−12 Dash/DashApps.qml+8−4 Dash/DashHome.qml+8−2 Dash/SearchableResultModel.qml+43
Dash/Apps/AppsAvailableForDownloadModel.qml+60−12
@@ -17,17 +17,65 @@
1717import QtQuick 2.0
1818import "../../Applications"
1919
20−DesktopFileModel {
21− baseModel: desktopModel
22−
23− ListModel {
24− id: desktopModel
25−
26− ListElement { desktopFile: "/usr/share/applications/evernote.desktop"; }
27− ListElement { desktopFile: "/usr/share/applications/map.desktop"; }
28− ListElement { desktopFile: "/usr/share/applications/pinterest.desktop"; }
29− ListElement { desktopFile: "/usr/share/applications/soundcloud.desktop"; }
30− ListElement { desktopFile: "/usr/share/applications/wikipedia.desktop"; }
31− ListElement { desktopFile: "/usr/share/applications/youtube.desktop"; }
20+ListModel {
21+ ListElement {
22+ uri: "application://evernote.desktop"
23+ icon: "../../graphics/applicationIcons/evernote.png"
24+ category: 0
25+ mimetype: "application/x-desktop"
26+ title: "Evernote"
27+ comment: ""
28+ dndUri: "file:///usr/share/applications/evernote.desktop"
29+ metadata: ""
30+ }
31+ ListElement {
32+ uri: "application://map.desktop"
33+ icon: "../../graphics/applicationIcons/map.png"
34+ category: 0
35+ mimetype: "application/x-desktop"
36+ title: "Map"
37+ comment: ""
38+ dndUri: "file:///usr/share/applications/map.desktop"
39+ metadata: ""
40+ }
41+ ListElement {
42+ uri: "application://pinterest.desktop"
43+ icon: "../../graphics/applicationIcons/pinterest.png"
44+ category: 0
45+ mimetype: "application/x-desktop"
46+ title: "Pinterest"
47+ comment: ""
48+ dndUri: "file:///usr/share/applications/pinterest.desktop"
49+ metadata: ""
50+ }
51+ ListElement {
52+ uri: "application://soundcloud.desktop"
53+ icon: "../../graphics/applicationIcons/soundcloud.png"
54+ category: 0
55+ mimetype: "application/x-desktop"
56+ title: "Soundcloud"
57+ comment: ""
58+ dndUri: "file:///usr/share/applications/soundcloud.desktop"
59+ metadata: ""
60+ }
61+ ListElement {
62+ uri: "application://wikipedia.desktop"
63+ icon: "../../graphics/applicationIcons/wikipedia.png"
64+ category: 0
65+ mimetype: "application/x-desktop"
66+ title: "Wikipedia"
67+ comment: ""
68+ dndUri: "file:///usr/share/applications/wikipedia.desktop"
69+ metadata: ""
70+ }
71+ ListElement {
72+ uri: "application://youtube.desktop"
73+ icon: "../../graphics/applicationIcons/youtube.png"
74+ category: 0
75+ mimetype: "application/x-desktop"
76+ title: "Youtube"
77+ comment: ""
78+ dndUri: "file:///usr/share/applications/youtube.desktop"
79+ metadata: ""
3280 }
3381}
Dash/Apps/DesktopFileModel.qmldeleted−51
@@ -1,51 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import "../../Applications"
19−
20−Item {
21− id: root
22−
23− property var model: null
24− property var baseModel: null
25−
26− ListModel {
27− id: list
28−
29− Component.onCompleted: { root.model = list; }
30− }
31−
32− Repeater {
33− model: baseModel
34− delegate: Item {
35− Application {
36− id: application
37− desktopFile: model.desktopFile
38− }
39− Component.onCompleted: {
40− list.append({"uri": "application://" + model.desktopFile.replace(/.*\//, ''),
41− "icon": "../../graphics/applicationIcons/" + application.icon + ".png",
42− "category": 0,
43− "mimetype": "application/x-desktop",
44− "title": application.name,
45− "comment": "",
46− "dndUri": model.desktopFile,
47− "metadata": {}});
48− }
49− }
50− }
51−}
Dash/Apps/FrequentlyUsedAppsModel.qml+60−12
@@ -16,17 +16,65 @@
1616
1717import QtQuick 2.0
1818
19−DesktopFileModel {
20− baseModel: desktopModel
21−
22− ListModel {
23− id: desktopModel
24−
25− ListElement { desktopFile: "/usr/share/applications/camera-app.desktop"; }
26− ListElement { desktopFile: "/usr/share/applications/phone-app.desktop"; }
27− ListElement { desktopFile: "/usr/share/applications/gallery-app.desktop"; }
28− ListElement { desktopFile: "/usr/share/applications/facebook-webapp.desktop"; }
29− ListElement { desktopFile: "/usr/share/applications/webbrowser-app.desktop"; }
30− ListElement { desktopFile: "/usr/share/applications/gmail-webapp.desktop"; }
19+ListModel {
20+ ListElement {
21+ uri: "application:///usr/share/applications/camera-app.desktop"
22+ icon: "../../graphics/applicationIcons/camera.png"
23+ category: 0
24+ mimetype: "application/x-desktop"
25+ title: "Camera"
26+ comment: ""
27+ dndUri: "file:///usr/share/applications/camera-app.desktop"
28+ metadata: ""
29+ }
30+ ListElement {
31+ uri: "application:///usr/share/applications/phone-app.desktop"
32+ icon: "../../graphics/applicationIcons/phone-app.png"
33+ category: 0
34+ mimetype: "application/x-desktop"
35+ title: "Phone"
36+ comment: ""
37+ dndUri: "file:///usr/share/applications/phone-app.desktop"
38+ metadata: ""
39+ }
40+ ListElement {
41+ uri: "application:///usr/share/applications/galery-app.desktop"
42+ icon: "../../graphics/applicationIcons/gallery.png"
43+ category: 0
44+ mimetype: "application/x-desktop"
45+ title: "Gallery"
46+ comment: ""
47+ dndUri: "file:///usr/share/applications/gallery.desktop"
48+ metadata: ""
49+ }
50+ ListElement {
51+ uri: "application:///usr/share/applications/facebook-webapp.desktop"
52+ icon: "../../graphics/applicationIcons/facebook.png"
53+ category: 0
54+ mimetype: "application/x-desktop"
55+ title: "Facebook"
56+ comment: ""
57+ dndUri: "file:///usr/share/applications/facebook-webapp.desktop"
58+ metadata: ""
59+ }
60+ ListElement {
61+ uri: "application:///usr/share/applications/webbrowser-app.desktop"
62+ icon: "../../graphics/applicationIcons/browser.png"
63+ category: 0
64+ mimetype: "application/x-desktop"
65+ title: "Browser"
66+ comment: ""
67+ dndUri: "file:///usr/share/applications/webbrowser-app.desktop"
68+ metadata: ""
69+ }
70+ ListElement {
71+ uri: "application:///usr/share/applications/gmail-webapp.desktop"
72+ icon: "../../graphics/applicationIcons/gmail.png"
73+ category: 0
74+ mimetype: "application/x-desktop"
75+ title: "GMail"
76+ comment: ""
77+ dndUri: "file:///usr/share/applications/gmail-webapp.desktop"
78+ metadata: ""
3179 }
3280}
Dash/DashApps.qml+8−4
@@ -29,8 +29,13 @@ GenericScopeView {
2929 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
3030 property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
3131
32− FrequentlyUsedAppsModel { id: frequentlyUsedAppsModel }
33− AppsAvailableForDownloadModel { id: appsAvailableForDownloadModel }
32+ SearchableResultModel {
33+ id: appsAvailableForDownloadModel
34+
35+ model: AppsAvailableForDownloadModel {}
36+ filterRole: 3
37+ searchQuery: scopeView.scope.searchQuery
38+ }
3439
3540 ListModel {
3641 id: dummyVisibilityModifier
@@ -53,8 +58,7 @@ GenericScopeView {
5358 }
5459
5560 onScopeChanged: {
56− scopeView.scope.categories.overrideResults("recently-used", frequentlyUsedAppsModel.model);
5761 scopeView.scope.categories.overrideResults("recent", runningApplicationsModel);
58− scopeView.scope.categories.overrideResults("more", appsAvailableForDownloadModel.model);
62+ scopeView.scope.categories.overrideResults("more", appsAvailableForDownloadModel);
5963 }
6064}
Dash/DashHome.qml+8−2
@@ -25,9 +25,15 @@ GenericScopeView {
2525 id: root
2626 objectName: "DashHome"
2727
28− FrequentlyUsedAppsModel { id: appsModel }
28+ SearchableResultModel {
29+ id: appsModel
30+
31+ model: FrequentlyUsedAppsModel {}
32+ filterRole: 3
33+ searchQuery: root.scope.searchQuery
34+ }
2935
3036 onScopeChanged: {
31− root.scope.categories.overrideResults("applications.scope", appsModel.model);
37+ root.scope.categories.overrideResults("applications.scope", appsModel);
3238 }
3339}
Dash/SearchableResultModel.qmlnew file+43
@@ -0,0 +1,43 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import Utils 0.1
20+import Unity 0.1
21+import "../Components"
22+
23+SortFilterProxyModel {
24+ id: root
25+
26+ property string searchQuery: ""
27+ property bool hideOnSearch: false
28+
29+ filterRole: CategoryResults.RoleTitle
30+
31+ onSearchQueryChanged: {
32+ if (searchQuery.length == 0) {
33+ filterRegExp = RegExp("");
34+ filterCaseSensitivity = Qt.CaseInsensitive;
35+ } else if (!hideOnSearch) {
36+ setFilterWildcard(searchQuery);
37+ filterCaseSensitivity = Qt.CaseInsensitive;
38+ } else {
39+ filterRegExp = /^$/;
40+ filterCaseSensitivity = Qt.CaseInsensitive;
41+ }
42+ }
43+}