Merge lp:~nicolas-doffay/unity8/filter-selector into lp:unity8

Proposed by Nicolas d'Offay
Status: Rejected
Rejected by: Michael Zanetti
Proposed branch: lp:~nicolas-doffay/unity8/filter-selector
Merge into: lp:unity8
Diff against target: 564 lines (+295/-24)
9 files modified
Components/PageHeader.qml (+252/-19)
Components/Stage.qml (+1/-1)
Dash/Dash.qml (+3/-0)
Dash/DashContent.qml (+9/-1)
Dash/GenericScopeView.qml (+5/-0)
Dash/ScopeListView.qml (+3/-0)
Shell.qml (+3/-3)
plugins/Unity/plugin.cpp (+2/-0)
tests/qmltests/Components/tst_PageHeader.qml (+17/-0)
To merge this branch: bzr merge lp:~nicolas-doffay/unity8/filter-selector
Reviewer Review Type Date Requested Status
Michał Sawicz Disapprove
PS Jenkins bot (community) continuous-integration Needs Fixing
Michael Zanetti Pending
Review via email: mp+191145@code.launchpad.net

Commit message

Added filters drop down.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
274. By Nicolas d'Offay

Attempt to fix bad whitespace.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:274
http://jenkins.qa.ubuntu.com/job/unity8-ci/1460/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-saucy/5115
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-touch/3109/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-saucy/2332
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-saucy-amd64-ci/483
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-saucy-armhf-ci/1464
        deb: http://jenkins.qa.ubuntu.com/job/unity8-saucy-armhf-ci/1464/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-saucy-i386-ci/1459
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-saucy/1279
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-saucy-amd64/990
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-saucy-amd64/990/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-saucy-armhf/3111
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-saucy-armhf/3111/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-maguro/2596/console
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-mako/2648/console
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/222
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/225

Click here to trigger a rebuild:
http://10.97.0.26:8080/job/unity8-ci/1460/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michał Sawicz (saviq) wrote :

Looking at https://docs.google.com/a/canonical.com/presentation/d/1X3_G6reCpcFJxzxn1Xtv9wK5n3-wOW-6z2l0qSZ8-sg/present#slide=id.gefa49ee0_021 for reference:

The first option seems to always be selected, be it "All" or something else.

The filter icon is too close to the right edge.

The filter button doesn't change to orange when active.

I can expand two filters at the same time - please confirm that's the desired behaviour.

There's no way to cancel a selection - shouldn't tapping outside of the expanded selector collapse it - please confirm the desired behaviour.

The expanded height is hardcoded, so when you make the window smaller, you can't scroll the filters any more. We should really look into fixing bug #1169258 first - and use it here.

The overlay is transparent to input at the 2GU margin between the crop line and the filter panel's edge.

review: Needs Fixing
Revision history for this message
Nicolas d'Offay (nicolas-doffay) wrote :

There will most likely have to be another option added to the backend to get past this issue. I don't think it's a good solution changing the design of the SDK component to cater for one use case.

I think it's apparent that an SDK expansion pattern will have to be done if this branch is to land. I'll bring this up with the SDK team.

275. By Nicolas d'Offay

Fixed transparent input zone and moved drop down to the left.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
276. By Nicolas d'Offay

Added Orange rect to filter icon with Ubuntu shape.

277. By Nicolas d'Offay

Added black Ubuntu shape to filters.

278. By Nicolas d'Offay

Added coloured filters icon which changes with expansion of fliters.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:278
http://jenkins.qa.ubuntu.com/job/unity8-ci/1495/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty/102/console
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty-touch/96/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-trusty/19
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-amd64-ci/19
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/19
        deb: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/19/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-i386-ci/19
    FAILURE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-trusty/95/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/102
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/102/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/96
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/96/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-maguro/2723/console
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-mako/2774/console
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/494
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/473

Click here to trigger a rebuild:
http://10.97.0.26:8080/job/unity8-ci/1495/rebuild

review: Needs Fixing (continuous-integration)
279. By Nicolas d'Offay

Fixed up clipping regions.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:279
http://jenkins.qa.ubuntu.com/job/unity8-ci/1500/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty/122/console
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty-touch/116/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-trusty/27
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-amd64-ci/24
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/24
        deb: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/24/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-i386-ci/24
    FAILURE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-trusty/116/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/122
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/122/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/116
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/116/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-maguro/2744/console
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-mako/2795/console
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/527
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/528

Click here to trigger a rebuild:
http://10.97.0.26:8080/job/unity8-ci/1500/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
280. By Nicolas d'Offay

Merged trunk.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
281. By Nicolas d'Offay

Fixed apparently bad whitespace.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:281
http://jenkins.qa.ubuntu.com/job/unity8-ci/1584/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty/509/console
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty-touch/497/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-trusty/150
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-amd64-ci/108
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/108
        deb: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/108/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-i386-ci/108
    FAILURE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-trusty/470/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/509
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/509/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/497
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/497/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-mako/3150/console
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/1130

Click here to trigger a rebuild:
http://10.97.0.26:8080/job/unity8-ci/1584/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:281
http://jenkins.qa.ubuntu.com/job/unity8-ci/1587/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty/516
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty-touch/504
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-trusty/153
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-amd64-ci/111
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/111
        deb: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/111/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-i386-ci/111
    SUCCESS: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-trusty/477
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/516
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/516/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/504
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/504/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-mako/3157
    SUCCESS: http://10.97.0.26:8080/job/touch-flash-device/1137

Click here to trigger a rebuild:
http://10.97.0.26:8080/job/unity8-ci/1587/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michał Sawicz (saviq) wrote :

Still to-fix here:

> The first option seems to always be selected, be it "All" or something else.

> The filter button doesn't change to orange when active.

It does now, but oh it looks bad... it's misaligned and rounded on the left-hand side... Better use a PNG instead?

> I can expand two filters at the same time - please confirm that's the desired behaviour.

> There's no way to cancel a selection - shouldn't tapping outside of the expanded selector collapse it - please confirm the desired behaviour.

> The expanded height is hardcoded, so when you make the window smaller, you can't scroll the filters any more. We should really look into fixing bug #1169258 first - and use it here.

review: Needs Fixing
282. By Nicolas d'Offay

Added search dismal when tapping outside filter selector and disabled other filters when currently selected filter dropdown is expanded.

Revision history for this message
Nicolas d'Offay (nicolas-doffay) wrote :

I've addressed every comment aside from the PNG and the hardcoded height. I've made design aware of the icon issue and will most likely get an asset to use on Monday.

283. By Nicolas d'Offay

Removed null assignment.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:283
http://jenkins.qa.ubuntu.com/job/unity8-ci/1646/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty/737
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty-touch/725/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-trusty/248
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-amd64-ci/169
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/170
        deb: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/170/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-i386-ci/169
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-trusty/672
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/737
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/737/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/725
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/725/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-mako/3354/console
    SUCCESS: http://s-jenkins:8080/job/touch-flash-device/1443

Click here to trigger a rebuild:
http://s-jenkins:8080/job/unity8-ci/1646/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:283
http://jenkins.qa.ubuntu.com/job/unity8-ci/1652/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty/758
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-trusty-touch/746/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-trusty/264
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-amd64-ci/175
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/176
        deb: http://jenkins.qa.ubuntu.com/job/unity8-trusty-armhf-ci/176/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-trusty-i386-ci/175
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-trusty/691
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/758
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-amd64/758/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/746
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-trusty-armhf/746/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-runner-mako/3374/console
    SUCCESS: http://s-jenkins:8080/job/touch-flash-device/1464

Click here to trigger a rebuild:
http://s-jenkins:8080/job/unity8-ci/1652/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michał Sawicz (saviq) wrote :

We've decided this will have to wait for the upcoming new scope backend.

Revision history for this message
Michał Sawicz (saviq) wrote :

Aand the design changed completely.

review: Disapprove

Unmerged revisions

283. By Nicolas d'Offay

Removed null assignment.

282. By Nicolas d'Offay

Added search dismal when tapping outside filter selector and disabled other filters when currently selected filter dropdown is expanded.

281. By Nicolas d'Offay

Fixed apparently bad whitespace.

280. By Nicolas d'Offay

Merged trunk.

279. By Nicolas d'Offay

Fixed up clipping regions.

278. By Nicolas d'Offay

Added coloured filters icon which changes with expansion of fliters.

277. By Nicolas d'Offay

Added black Ubuntu shape to filters.

276. By Nicolas d'Offay

Added Orange rect to filter icon with Ubuntu shape.

275. By Nicolas d'Offay

Fixed transparent input zone and moved drop down to the left.

274. By Nicolas d'Offay

Attempt to fix bad whitespace.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Components/PageHeader.qml'
2--- Components/PageHeader.qml 2013-10-18 09:12:39 +0000
3+++ Components/PageHeader.qml 2013-11-15 17:29:44 +0000
4@@ -31,7 +31,13 @@
5 property bool searchEntryEnabled: false
6 property alias searchQuery: searchField.text
7 property ListModel searchHistory: SearchHistoryModel {}
8+ property bool filterSelectorVisible: filterSelector.state === "expanded"
9 property Scope scope
10+ property real filterSelectorHeight
11+ property real filterBottomSpace
12+ property bool launcherShown
13+
14+ onLauncherShownChanged: if (launcherShown) filterSelector.state = "collapsed"
15
16 height: units.gu(8.5)
17 implicitHeight: units.gu(8.5)
18@@ -59,13 +65,16 @@
19
20 Flickable {
21 id: header
22+ objectName: "searchHeader"
23+
24 anchors {
25 left: parent.left
26 right: parent.right
27 top: parent.top
28 }
29+
30+ z: 2
31 height: units.gu(6.5)
32-
33 interactive: false
34 contentHeight: headerContainer.height
35 clip: true
36@@ -78,8 +87,10 @@
37 Item {
38 id: headerContainer
39
40- width: parent.width
41- height: childrenRect.height
42+ anchors {
43+ left: parent.left
44+ right: parent.right
45+ }
46
47 Item {
48 id: textContainer
49@@ -114,7 +125,6 @@
50 visible: searchEntryEnabled
51
52 property bool narrowMode: parent.width < label.contentWidth + units.gu(50)
53-
54 property bool active: searchField.text != "" || searchField.activeFocus
55 property var popover: null
56
57@@ -140,7 +150,8 @@
58 }
59
60 function closePopover() {
61- if (searchContainer.popover) PopupUtils.close(searchContainer.popover)
62+ if (searchContainer.popover)
63+ PopupUtils.close(searchContainer.popover)
64 }
65
66 onActiveFocusChanged: if (!activeFocus) { searchHistory.addQuery(searchField.text) }
67@@ -148,8 +159,10 @@
68 TextField {
69 id: searchField
70
71- anchors.fill: parent
72- anchors.margins: units.gu(1)
73+ anchors {
74+ fill: parent
75+ margins: units.gu(1)
76+ }
77
78 hasClearButton: false
79
80@@ -198,6 +211,48 @@
81 }
82 }
83
84+ secondaryItem: UbuntuShapeForItem {
85+ id: ubuntuShape
86+ width: units.gu(4)
87+
88+ anchors {
89+ rightMargin: units.dp(-5)
90+ right: parent.right
91+ top: parent.top
92+ }
93+
94+ image: Rectangle {
95+ width: ubuntuShape.width
96+ height: ubuntuShape.height
97+ color: filterSelector.state === "expanded" ? "#DD4814" : "white"
98+ }
99+
100+ Icon {
101+ id: filterIcon
102+ objectName: "filterIcon"
103+
104+ width: units.gu(4)
105+ height: units.gu(4)
106+ name: "filter"
107+ color: filterSelector.state === "expanded" ? "white" : "#AEA79F"
108+
109+ anchors.centerIn: parent
110+
111+ MouseArea {
112+ id: filterClick
113+
114+ anchors.fill: parent
115+ onPressed: {
116+ if (filterSelector.state === "expanded") {
117+ filterSelector.state = "collapsed"
118+ } else {
119+ filterSelector.state = "expanded"
120+ }
121+ }
122+ }
123+ }
124+ }
125+
126 onTextChanged: {
127 if (text != "") searchContainer.closePopover()
128 else if (text == "" && activeFocus) searchContainer.openPopover()
129@@ -360,26 +415,204 @@
130 }
131 }
132 }
133-
134- InverseMouseArea {
135- enabled: searchField.activeFocus
136-
137+ }
138+ }
139+ }
140+
141+ Rectangle {
142+ id: filterSelector
143+ objectName: "filterSelector"
144+
145+ opacity: 0.9
146+ color: Theme.palette.normal.background
147+ clip: true
148+ state: "collapsed"
149+ z: 1
150+ anchors {
151+ left: parent.left
152+ right: parent.right
153+ }
154+ states: [
155+ State {
156+ name: "expanded"
157+ PropertyChanges {
158+ target: selectors
159+ opacity: 1
160+ }
161+ PropertyChanges {
162+ target: filterSelector
163+ height: filterSelectorHeight - filterBottomSpace
164+ }
165+ },
166+ State {
167+ name: "collapsed"
168+ PropertyChanges {
169+ target: selectors
170+ opacity: 0
171+ }
172+ PropertyChanges {
173+ target: filterSelector
174+ height: 0
175+ }
176+ }
177+ ]
178+
179+ Behavior on height {
180+ UbuntuNumberAnimation {
181+ properties: "height"
182+ duration: UbuntuAnimation.BriskDuration
183+ }
184+ }
185+
186+ MouseArea {
187+ clip: true
188+
189+ anchors {
190+ fill: parent
191+ topMargin: units.gu(9)
192+ bottomMargin: units.gu(2)
193+ }
194+
195+ ListView {
196+ id: selectors
197+ objectName: "selectors"
198+
199+ property QtObject activeSelector: null
200+ property bool filterExpanded: false
201+
202+ spacing: units.gu(1)
203+ model: scope ? scope.filters : null
204+ delegate: optionSelector
205+ anchors {
206+ fill: parent
207+ leftMargin: units.gu(2)
208+ rightMargin: units.gu(2)
209+ bottomMargin: units.gu(2)
210+ }
211+
212+ Behavior on opacity {
213+ UbuntuNumberAnimation {
214+ properties: "opacity"
215+ duration: UbuntuAnimation.BriskDuration
216+ }
217+ }
218+
219+ Behavior on contentY {
220+ UbuntuNumberAnimation {
221+ properties: "contentY"
222+ duration: UbuntuAnimation.BriskDuration
223+ }
224+ }
225+ }
226+
227+ Component {
228+ id: optionSelector
229+
230+ Column {
231+ spacing: units.gu(2)
232 anchors {
233- top: parent.top
234 left: parent.left
235 right: parent.right
236 }
237-
238- height: searchContainer.popover ? parent.height + searchContainer.popover.contentHeight + units.gu(2) : parent.height
239-
240- onPressed: searchField.focus = false
241- }
242- }
243- }
244+ InverseMouseArea {
245+ id: dismissalArea
246+ anchors {
247+ left: parent.left
248+ right: parent.right
249+ }
250+ height: childrenRect.height
251+ enabled: selector.currentlyExpanded
252+
253+ onPressed: selector.currentlyExpanded = false;
254+ ListItem.ItemSelector {
255+ id: selector
256+
257+ property real collapsedHeight
258+ property real expandedHeight
259+
260+ text: name
261+ containerHeight: units.gu(38)
262+ model: options
263+ ubuntuShapeBackground: true
264+ delegate: ListItem.ItemSelectorDelegate { text: name }
265+ enabled: selectors.activeSelector === selector || !selectors.filterExpanded
266+ onCurrentlyExpandedChanged: {
267+ if (currentlyExpanded) {
268+ selectors.activeSelector = selector;
269+ selectors.filterExpanded = true;
270+ } else {
271+ selectors.filterExpanded = false;
272+ }
273+ }
274+ onDelegateClicked: {
275+ options.setActive(selectedIndex, !active);
276+ options.setActive(index, active);
277+ }
278+
279+ onExpandedChanged: {
280+ collapsedHeight = height;
281+ }
282+
283+ onExpansionCompleted: {
284+ expandedHeight = height;
285+
286+ var delta = expandedHeight - collapsedHeight;
287+
288+ if (!selectors.atYBeginning) {
289+ selectors.contentY += delta;
290+ }
291+ }
292+ }
293+ }
294+ ListItem.ThinDivider {
295+ visible: index !== selectors.count - 1
296+ anchors {
297+ leftMargin: units.gu(-2)
298+ rightMargin: units.gu(-2)
299+ }
300+ }
301+ }
302+ }
303+ }
304+
305+ MouseArea {
306+ id: bottomDividers
307+
308+ height: units.gu(2)
309+ anchors {
310+ left: parent.left
311+ right: parent.right
312+ bottom: parent.bottom
313+ }
314+ ListItem.ThinDivider {
315+ anchors {
316+ bottom: parent.bottom
317+ }
318+ }
319+ ListItem.ThinDivider {
320+ anchors {
321+ top: parent.top
322+ }
323+ }
324+ }
325+ }
326+
327+ MouseArea {
328+ objectName: "mouseArea"
329+
330+ height: filterBottomSpace
331+ anchors {
332+ left: parent.left
333+ right: parent.right
334+ top: filterSelector.bottom
335+ }
336+ enabled: filterSelector.state === "expanded"
337+ onPressed: filterSelector.state = "collapsed"
338 }
339
340 BorderImage {
341 id: bottomBorder
342+
343 anchors {
344 top: header.bottom
345 left: parent.left
346
347=== modified file 'Components/Stage.qml'
348--- Components/Stage.qml 2013-10-22 15:56:37 +0000
349+++ Components/Stage.qml 2013-11-15 17:29:44 +0000
350@@ -451,7 +451,7 @@
351 enabled: {
352 if (status == DirectionalDragArea.WaitingForTouch) {
353 return switchToApplicationAnimationController.completed
354- && stage.applications.count > 0 && stage.rightEdgeEnabled
355+ && stage.applications.count > 0 || stage.rightEdgeEnabled
356 && !delayedHideScreenshots.running
357 } else {
358 return true
359
360=== modified file 'Dash/Dash.qml'
361--- Dash/Dash.qml 2013-10-25 11:24:50 +0000
362+++ Dash/Dash.qml 2013-11-15 17:29:44 +0000
363@@ -29,6 +29,8 @@
364 property alias contentProgress: dashContent.contentProgress
365 property string showScopeOnLoaded: "home.scope"
366 property real contentScale: 1.0
367+ property bool launcherShown
368+ property alias filterSelectorShown: dashContent.filterSelectorShown
369
370 function setCurrentScope(scopeId, animate, reset) {
371 var scopeIndex = filteredScopes.findFirst(Scopes.RoleId, scopeId)
372@@ -63,6 +65,7 @@
373 anchors.fill: parent
374 model: filteredScopes
375 scopes: scopes
376+ launcherShown: dash.launcherShown
377 onMovementStarted: dashbar.startNavigation()
378 onMovementEnded: dashbar.stopNavigation()
379 onContentFlickStarted: dashbar.finishNavigation()
380
381=== modified file 'Dash/DashContent.qml'
382--- Dash/DashContent.qml 2013-10-21 08:15:28 +0000
383+++ Dash/DashContent.qml 2013-11-15 17:29:44 +0000
384@@ -25,6 +25,8 @@
385 property var scopes: null
386 property real contentProgress: Math.max(0, Math.min(dashContentList.contentX / (dashContentList.contentWidth - dashContentList.width), units.dp(1)))
387 property alias currentIndex: dashContentList.currentIndex
388+ property bool launcherShown
389+ property bool filterSelectorShown
390
391 property ScopeDelegateMapper scopeMapper : ScopeDelegateMapper {}
392
393@@ -83,7 +85,7 @@
394 id: dashContentList
395 objectName: "dashContentList"
396
397- interactive: dashContent.scopes.loaded && !currentItem.previewShown && !currentItem.moving
398+ interactive: dashContent.scopes.loaded && !currentItem.previewShown && !currentItem.moving && !filterSelectorShown
399
400 anchors.fill: parent
401 model: dashContent.model
402@@ -119,6 +121,8 @@
403 readonly property bool previewShown: item ? item.previewShown : false
404 readonly property bool moving: item ? item.moving : false
405
406+ property bool launcherShown: dashContent.launcherShown
407+
408 // these are needed for autopilot tests
409 readonly property string scopeId: scope.id
410 readonly property bool isCurrent: ListView.isCurrentItem
411@@ -132,10 +136,14 @@
412 dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
413 dashContent.scopeLoaded(item.scope.id)
414 }
415+
416+ onLauncherShownChanged: item !== null? item.launcherShown = launcherShown : false
417+
418 Connections {
419 target: item
420 ignoreUnknownSignals: true
421 onEndReached: contentEndReached()
422+ onFilterSelectorVisibleChanged: filterSelectorShown = item.filterSelectorVisible
423 onPreviewShownChanged: {
424 if (item.previewShown) {
425 dashContent.previewShown()
426
427=== modified file 'Dash/GenericScopeView.qml'
428--- Dash/GenericScopeView.qml 2013-11-08 03:10:09 +0000
429+++ Dash/GenericScopeView.qml 2013-11-15 17:29:44 +0000
430@@ -22,6 +22,8 @@
431 ScopeView {
432 id: scopeView
433 readonly property alias previewShown: previewListView.onScreen
434+ property bool launcherShown
435+ property alias filterSelectorVisible: pageHeader.filterSelectorVisible
436 property bool enableHeightBehaviorOnNextCreation: false
437
438 moving: categoryView.moving
439@@ -248,6 +250,9 @@
440 text: scopeView.scope.name
441 searchEntryEnabled: true
442 scope: scopeView.scope
443+ filterSelectorHeight: scopeView.height
444+ filterBottomSpace: units.gu(8)
445+ launcherShown: scopeView.launcherShown
446 }
447 }
448
449
450=== modified file 'Dash/ScopeListView.qml'
451--- Dash/ScopeListView.qml 2013-10-11 11:41:27 +0000
452+++ Dash/ScopeListView.qml 2013-11-15 17:29:44 +0000
453@@ -18,8 +18,11 @@
454 import ListViewWithPageHeader 0.1
455
456 ListViewWithPageHeader {
457+ id: listView
458+
459 maximumFlickVelocity: height * 10
460 flickDeceleration: height * 2
461+ interactive: !pageHeader.filterSelectorVisible
462
463 Connections {
464 target: greeter
465
466=== modified file 'Shell.qml'
467--- Shell.qml 2013-11-08 08:48:11 +0000
468+++ Shell.qml 2013-11-15 17:29:44 +0000
469@@ -199,6 +199,7 @@
470 hides: [stages, launcher, panel.indicators]
471 shown: disappearingAnimationProgress !== 1.0
472 enabled: disappearingAnimationProgress === 0.0 && edgeDemo.dashEnabled
473+ launcherShown: launcher.shown
474 // FIXME: unfocus all applications when going back to the dash
475 onEnabledChanged: {
476 if (enabled) {
477@@ -298,8 +299,7 @@
478 fullyShown: stages.fullyShown
479 fullyHidden: stages.fullyHidden
480 shouldUseScreenshots: !fullyShown
481- rightEdgeEnabled: !sideStage.enabled
482-
483+ rightEdgeEnabled: !sideStage.enabled && !dash.filterSelectorShown
484 applicationManager: shell.applicationManager
485 rightEdgeDraggingAreaWidth: shell.edgeSize
486 normalApplicationY: shell.panelHeight
487@@ -389,7 +389,7 @@
488
489 width: shell.edgeSize
490 direction: Direction.Leftwards
491- enabled: greeter.showProgress == 0 && edgeDemo.dashEnabled
492+ enabled: greeter.showProgress == 0 && edgeDemo.dashEnabled && !dash.filterSelectorShown
493 property bool haveApps: mainStage.applications.count > 0 || sideStage.applications.count > 0
494
495 maxTotalDragDistance: haveApps ? parent.width : parent.width * 0.7
496
497=== modified file 'plugins/Unity/plugin.cpp'
498--- plugins/Unity/plugin.cpp 2013-09-24 12:52:55 +0000
499+++ plugins/Unity/plugin.cpp 2013-11-15 17:29:44 +0000
500@@ -25,6 +25,7 @@
501 #include "plugin.h"
502
503 // local
504+#include "genericoptionsmodel.h"
505 #include "preview.h"
506 #include "previewaction.h"
507 #include "previewinfohint.h"
508@@ -50,6 +51,7 @@
509 qmlRegisterUncreatableType<PreviewAction>(uri, 0, 1, "PreviewAction", "Can't create PreviewAction object in QML.");
510 qmlRegisterUncreatableType<PreviewInfoHint>(uri, 0, 1, "PreviewInfoHint", "Can't create PreviewInfoHint object in QML.");
511 qmlRegisterUncreatableType<SocialPreviewComment>(uri, 0, 1, "SocialPreviewComment", "Can't create SocialPreviewComment object in QML.");
512+ qmlRegisterUncreatableType<Filters>(uri, 0, 1, "Filters", "Can't create filters object in QML.");
513 qmlRegisterUncreatableType<GenericOptionsModel>(uri, 0, 1, "GenericOptionsModel", "Can't create options model in QML.");
514 qmlRegisterUncreatableType<Result>(uri, 0, 1, "Result", "Can't create result object in QML.");
515 qmlRegisterType<Scope>(uri, 0, 1, "Scope");
516
517=== modified file 'tests/qmltests/Components/tst_PageHeader.qml'
518--- tests/qmltests/Components/tst_PageHeader.qml 2013-10-07 08:24:34 +0000
519+++ tests/qmltests/Components/tst_PageHeader.qml 2013-11-15 17:29:44 +0000
520@@ -21,6 +21,7 @@
521 import Ubuntu.Components 0.1
522 import Unity 0.1
523 import Unity.Test 0.1 as UT
524+import Unity 0.1
525
526 Item {
527 width: units.gu(110)
528@@ -138,6 +139,20 @@
529 compare(pageHeader.searchHistory.get(0).query, "humppa4")
530 }
531
532+ function test_filter_overlay() {
533+ var filterIcon = findChild(pageHeader, "filterIcon");
534+ var filterSelector = findChild(pageHeader, "filterSelector");
535+ var mouseArea = findChild(pageHeader, "mouseArea");
536+ var searchHeader = findChild(pageHeader, "searchHeader");
537+
538+ pageHeader.triggerSearch();
539+ tryCompare(searchHeader, "contentY", 0);
540+
541+ mouseClick(filterIcon, 2, 2);
542+ compare(filterSelector.state, "expanded", "Filter selector did not expand.");
543+ }
544+
545+
546 function test_search_indicator() {
547 var searchIndicator = findChild(pageHeader, "searchIndicator")
548 var primaryImage = findChild(pageHeader, "primaryImage")
549@@ -158,6 +173,7 @@
550 function cleanup() {
551 scopeMock.searchInProgress = false
552 }
553+
554 }
555
556 Column {
557@@ -175,6 +191,7 @@
558
559 searchEntryEnabled: true
560 text: "%^$%^%^&%^&%^$%GHR%"
561+ filterSelectorHeight: units.gu(30)
562 }
563
564 Row {

Subscribers

People subscribed via source and target branches