on xenial help sign in
Allow searching in mocked models
a0a7e1fMichal Hruby
Dash/Apps/AppsAvailableForDownloadModel.qml+60−12
@@ -17,17 +17,65 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import "../../Applications"
18import "../../Applications"
19
19
20−DesktopFileModel {
21− baseModel: desktopModel
22−
23− ListModel {
20+ListModel {
24− id: desktopModel
21+ ListElement {
25−
22+ uri: "application://evernote.desktop"
23+ icon: "../../graphics/applicationIcons/evernote.png"
24+ category: 0
25+ mimetype: "application/x-desktop"
26+ title: "Evernote"
27+ comment: ""
26− ListElement { desktopFile: "/usr/share/applications/evernote.desktop"; }
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: ""
27− ListElement { desktopFile: "/usr/share/applications/map.desktop"; }
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: ""
28− ListElement { desktopFile: "/usr/share/applications/pinterest.desktop"; }
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: ""
29− ListElement { desktopFile: "/usr/share/applications/soundcloud.desktop"; }
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: ""
30− ListElement { desktopFile: "/usr/share/applications/wikipedia.desktop"; }
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: ""
31− ListElement { desktopFile: "/usr/share/applications/youtube.desktop"; }
78+ dndUri: "file:///usr/share/applications/youtube.desktop"
79+ metadata: ""
32 }
80 }
33}
81}
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 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18
18
19−DesktopFileModel {
20− baseModel: desktopModel
21−
22− ListModel {
19+ListModel {
23− id: desktopModel
20+ ListElement {
24−
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 {
25− ListElement { desktopFile: "/usr/share/applications/camera-app.desktop"; }
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: ""
26− ListElement { desktopFile: "/usr/share/applications/phone-app.desktop"; }
57+ dndUri: "file:///usr/share/applications/facebook-webapp.desktop"
58+ metadata: ""
59+ }
60+ ListElement {
27− ListElement { desktopFile: "/usr/share/applications/gallery-app.desktop"; }
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: ""
28− ListElement { desktopFile: "/usr/share/applications/facebook-webapp.desktop"; }
67+ dndUri: "file:///usr/share/applications/webbrowser-app.desktop"
68+ metadata: ""
69+ }
70+ ListElement {
29− ListElement { desktopFile: "/usr/share/applications/webbrowser-app.desktop"; }
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: ""
30− ListElement { desktopFile: "/usr/share/applications/gmail-webapp.desktop"; }
77+ dndUri: "file:///usr/share/applications/gmail-webapp.desktop"
78+ metadata: ""
31 }
79 }
32}
80}
Dash/DashApps.qml+8−4
@@ -29,8 +29,13 @@ GenericScopeView {
29 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
29 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
30 property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
30 property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
31
31
32− FrequentlyUsedAppsModel { id: frequentlyUsedAppsModel }
32+ SearchableResultModel {
33+ id: appsAvailableForDownloadModel
34+
33− AppsAvailableForDownloadModel { id: appsAvailableForDownloadModel }
35+ model: AppsAvailableForDownloadModel {}
36+ filterRole: 3
37+ searchQuery: scopeView.scope.searchQuery
38+ }
34
39
35 ListModel {
40 ListModel {
36 id: dummyVisibilityModifier
41 id: dummyVisibilityModifier
@@ -53,8 +58,7 @@ GenericScopeView {
53 }
58 }
54
59
55 onScopeChanged: {
60 onScopeChanged: {
56− scopeView.scope.categories.overrideResults("recently-used", frequentlyUsedAppsModel.model);
57 scopeView.scope.categories.overrideResults("recent", runningApplicationsModel);
61 scopeView.scope.categories.overrideResults("recent", runningApplicationsModel);
58− scopeView.scope.categories.overrideResults("more", appsAvailableForDownloadModel.model);
62+ scopeView.scope.categories.overrideResults("more", appsAvailableForDownloadModel);
59 }
63 }
60}
64}
Dash/DashHome.qml+8−2
@@ -25,9 +25,15 @@ GenericScopeView {
25 id: root
25 id: root
26 objectName: "DashHome"
26 objectName: "DashHome"
27
27
28+ SearchableResultModel {
28− FrequentlyUsedAppsModel { id: appsModel }
29+ id: appsModel
30+
31+ model: FrequentlyUsedAppsModel {}
32+ filterRole: 3
33+ searchQuery: root.scope.searchQuery
34+ }
29
35
30 onScopeChanged: {
36 onScopeChanged: {
31− root.scope.categories.overrideResults("applications.scope", appsModel.model);
37+ root.scope.categories.overrideResults("applications.scope", appsModel);
32 }
38 }
33}
39}
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+}