Merge lp:~ubuntu-weather-dev/ubuntu-weather-app/reboot-finish-listitem-migration into lp:ubuntu-weather-app
- reboot-finish-listitem-migration
- Merge into reboot
Status: | Superseded |
---|---|
Proposed branch: | lp:~ubuntu-weather-dev/ubuntu-weather-app/reboot-finish-listitem-migration |
Merge into: | lp:ubuntu-weather-app |
Diff against target: |
1214 lines (+96/-946) 12 files modified
app/components/CMakeLists.txt (+0/-2) app/components/ListItemActions/CMakeLists.txt (+0/-5) app/components/ListItemActions/CheckBox.qml (+0/-25) app/components/ListItemActions/Remove.qml (+0/-27) app/components/ListItemReorderComponent.qml (+0/-106) app/components/ListItemWithActions.qml (+0/-496) app/components/MultiSelectHeadState.qml (+0/-72) app/components/MultiSelectListView.qml (+27/-8) app/components/WeatherListItem.qml (+0/-138) app/components/WeatherListView.qml (+1/-2) app/ui/LocationsPage.qml (+63/-48) po/com.ubuntu.weather.pot (+5/-17) |
To merge this branch: | bzr merge lp:~ubuntu-weather-dev/ubuntu-weather-app/reboot-finish-listitem-migration |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jenkins Bot | continuous-integration | Approve | |
Ubuntu Phone Apps Jenkins Bot | continuous-integration | Approve | |
Andrew Hayzen | Needs Fixing | ||
Review via email: mp+266981@code.launchpad.net |
This proposal has been superseded by a proposal from 2015-11-20.
Commit message
* Finish the migration to the new SDK list items
* Lock weather app in the Portrait orientation until we get some landscape designs
* Make the page with bottom edge animation less jarring when it reaches the top by adding a fake header (similar to what the clock app does)
Description of the change
* Finished the migration to the new SDK list items
* Locked weather app in the Portrait orientation until we get some landscape designs
* Made the page with bottom edge animation less jarring when it reaches the top by adding a fake header (similar to what the clock app does)
* Buy nik90 a beer for starting this effort
Victor Thompson (vthompson) wrote : | # |
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:70
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Andrew Hayzen (ahayzen) wrote : | # |
A few inline comments, visually ...
1) there appears to be a space between the detected location and the first selected location
2) if you multiselect, select an item, then select delete you are still in multiselect mode, this is weird if you remove the last item in the list as you have to hit back what feels like twice. I suggest when delete is pressed in the header that the multiselect mode is cancelled.
- 71. By Victor Thompson
-
Update for comments
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:71
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
Victor Thompson (vthompson) wrote : | # |
> Should this have // CUSTOM as a note incase we do a pull of upstream and miss that we made changes?
Sure. I added a comment. I think eventually this will be folded into the SDK anyway. They already pulled in a hint component that we should make use of soonish.
> Why was this changed it looks the same just with { } around it?
No reason that I know of. I didn't like it either when I was resolving merge conflicts. Updated.
> Not A->Z
Fixed.
- 72. By Victor Thompson
-
Fix visual issues
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:72
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 73. By Victor Thompson
-
Merge and resolve conflicts
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:73
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 74. By Victor Thompson
-
Merge of trunk
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:74
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 75. By Victor Thompson
-
Merge and resolve conflicts.
- 76. By Victor Thompson
-
fix bad conflict resolution
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:76
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Victor Thompson (vthompson) wrote : | # |
I've been testing this branch a bit. I think many of the list item blockers have been fixed. To aide in testing, could we get a comprehensive list of bugs that we should verify have been fixed?
Andrew Hayzen (ahayzen) wrote : | # |
Its the same set of bugs that are blocking the music one [0]
bug 1469471 (causes checkbox to not update in selectMode)
bug 1468100 (swiping can break selectMode)
bug 1486008 (swipe remove button is too small on mako)
IIRC it was only the last bug that was not fixed, which I think is now fixed in rc-proposed?
0 - https:/
Victor Thompson (vthompson) wrote : | # |
Agreed, bug 1486008 appears to be fixed in rc-proposed.
- 77. By Victor Thompson
-
Merge of trunk and resolve conflicts.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:77
http://
Executed test runs:
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 78. By Victor Thompson
-
Removed bad FakeHeader
- 79. By Victor Thompson
-
Fix pot file
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:79
http://
Executed test runs:
SUCCESS: http://
Click here to trigger a rebuild:
http://
Andrew Hayzen (ahayzen) wrote : | # |
We will need to bump to uc1.3 for this as well, I'll make a branch that this can rebase onto.
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:79
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
- 80. By Victor Thompson
-
Merge of trunk
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:80
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
- 81. By Victor Thompson
-
rebase on UC1.3 branch
- 82. By Victor Thompson
-
Merge trunk, resolve conflicts, and add changelog entry
Unmerged revisions
- 82. By Victor Thompson
-
Merge trunk, resolve conflicts, and add changelog entry
- 81. By Victor Thompson
-
rebase on UC1.3 branch
- 80. By Victor Thompson
-
Merge of trunk
- 79. By Victor Thompson
-
Fix pot file
- 78. By Victor Thompson
-
Removed bad FakeHeader
- 77. By Victor Thompson
-
Merge of trunk and resolve conflicts.
- 76. By Victor Thompson
-
fix bad conflict resolution
- 75. By Victor Thompson
-
Merge and resolve conflicts.
- 74. By Victor Thompson
-
Merge of trunk
- 73. By Victor Thompson
-
Merge and resolve conflicts
Preview Diff
1 | === modified file 'app/components/CMakeLists.txt' |
2 | --- app/components/CMakeLists.txt 2015-03-03 18:37:59 +0000 |
3 | +++ app/components/CMakeLists.txt 2015-11-20 19:29:18 +0000 |
4 | @@ -1,5 +1,3 @@ |
5 | -add_subdirectory(ListItemActions) |
6 | - |
7 | file(GLOB COMPONENTS_QML_JS_FILES *.qml *.js) |
8 | |
9 | add_custom_target(ubuntu-weather-app_components_QMlFiles ALL SOURCES ${COMPONENTS_QML_JS_FILES}) |
10 | |
11 | === removed directory 'app/components/ListItemActions' |
12 | === removed file 'app/components/ListItemActions/CMakeLists.txt' |
13 | --- app/components/ListItemActions/CMakeLists.txt 2015-03-03 18:37:59 +0000 |
14 | +++ app/components/ListItemActions/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
15 | @@ -1,5 +0,0 @@ |
16 | -file(GLOB LISTITEMACTIONS_QML_JS_FILES *.qml *.js) |
17 | - |
18 | -add_custom_target(ubuntu-weather-app_listitemactions_QMlFiles ALL SOURCES ${LISTITEMACTIONS_QML_JS_FILES}) |
19 | - |
20 | -install(FILES ${LISTITEMACTIONS_QML_JS_FILES} DESTINATION ${UBUNTU-WEATHER_APP_DIR}/components/ListItemActions) |
21 | |
22 | === removed file 'app/components/ListItemActions/CheckBox.qml' |
23 | --- app/components/ListItemActions/CheckBox.qml 2015-06-18 01:45:57 +0000 |
24 | +++ app/components/ListItemActions/CheckBox.qml 1970-01-01 00:00:00 +0000 |
25 | @@ -1,25 +0,0 @@ |
26 | -/* |
27 | - * Copyright (C) 2012-2014, 2015 Canonical, Ltd. |
28 | - * |
29 | - * This program is free software; you can redistribute it and/or modify |
30 | - * it under the terms of the GNU General Public License as published by |
31 | - * the Free Software Foundation; version 3. |
32 | - * |
33 | - * This program is distributed in the hope that it will be useful, |
34 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
35 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
36 | - * GNU General Public License for more details. |
37 | - * |
38 | - * You should have received a copy of the GNU General Public License |
39 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
40 | - */ |
41 | - |
42 | -import QtQuick 2.4 |
43 | -import Ubuntu.Components 1.2 |
44 | - |
45 | -CheckBox { |
46 | - checked: root.selected |
47 | - width: implicitWidth |
48 | - // disable item mouse area to avoid conflicts with parent mouse area |
49 | - __mouseArea.enabled: false |
50 | -} |
51 | |
52 | === removed file 'app/components/ListItemActions/Remove.qml' |
53 | --- app/components/ListItemActions/Remove.qml 2015-06-18 01:42:03 +0000 |
54 | +++ app/components/ListItemActions/Remove.qml 1970-01-01 00:00:00 +0000 |
55 | @@ -1,27 +0,0 @@ |
56 | -/* |
57 | - * Copyright (C) 2014, 2015 Andrew Hayzen <ahayzen@gmail.com> |
58 | - * Daniel Holm <d.holmen@gmail.com> |
59 | - * Victor Thompson <victor.thompson@gmail.com> |
60 | - * |
61 | - * This program is free software; you can redistribute it and/or modify |
62 | - * it under the terms of the GNU General Public License as published by |
63 | - * the Free Software Foundation; version 3. |
64 | - * |
65 | - * This program is distributed in the hope that it will be useful, |
66 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
67 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
68 | - * GNU General Public License for more details. |
69 | - * |
70 | - * You should have received a copy of the GNU General Public License |
71 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
72 | - */ |
73 | - |
74 | -import QtQuick 2.4 |
75 | -import Ubuntu.Components 1.2 |
76 | - |
77 | -Action { |
78 | - id: removeAction |
79 | - iconName: "delete" |
80 | - objectName: "swipeDeleteAction" |
81 | - text: i18n.tr("Remove") |
82 | -} |
83 | |
84 | === removed file 'app/components/ListItemReorderComponent.qml' |
85 | --- app/components/ListItemReorderComponent.qml 2015-06-18 01:42:03 +0000 |
86 | +++ app/components/ListItemReorderComponent.qml 1970-01-01 00:00:00 +0000 |
87 | @@ -1,106 +0,0 @@ |
88 | -/* |
89 | - * Copyright (C) 2013, 2014, 2015 |
90 | - * Andrew Hayzen <ahayzen@gmail.com> |
91 | - * Nekhelesh Ramananthan <krnekhelesh@gmail.com> |
92 | - * Victor Thompson <victor.thompson@gmail.com> |
93 | - * |
94 | - * This program is free software; you can redistribute it and/or modify |
95 | - * it under the terms of the GNU General Public License as published by |
96 | - * the Free Software Foundation; version 3. |
97 | - * |
98 | - * This program is distributed in the hope that it will be useful, |
99 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
100 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
101 | - * GNU General Public License for more details. |
102 | - * |
103 | - * You should have received a copy of the GNU General Public License |
104 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
105 | - */ |
106 | - |
107 | -import QtQuick 2.4 |
108 | -import Ubuntu.Components 1.2 |
109 | - |
110 | - |
111 | -Item { |
112 | - id: actionReorder |
113 | - width: units.gu(4) |
114 | - |
115 | - Icon { |
116 | - anchors { |
117 | - horizontalCenter: parent.horizontalCenter |
118 | - verticalCenter: parent.verticalCenter |
119 | - } |
120 | - name: "navigation-menu" // TODO: use proper image |
121 | - height: width |
122 | - width: units.gu(3) |
123 | - } |
124 | - |
125 | - MouseArea { |
126 | - id: actionReorderMouseArea |
127 | - anchors { |
128 | - fill: parent |
129 | - } |
130 | - property int startY: 0 |
131 | - property int startContentY: 0 |
132 | - |
133 | - onPressed: { |
134 | - root.parent.parent.interactive = false; // stop scrolling of listview |
135 | - startY = root.y; |
136 | - startContentY = root.parent.parent.contentY; |
137 | - root.z += 10; // force ontop of other elements |
138 | - |
139 | - console.debug("Reorder listitem pressed", root.y) |
140 | - } |
141 | - onMouseYChanged: root.y += mouse.y - (root.height / 2); |
142 | - onReleased: { |
143 | - console.debug("Reorder diff by position", getDiff()); |
144 | - |
145 | - var diff = getDiff(); |
146 | - |
147 | - // Remove the height of the actual item if moved down |
148 | - if (diff > 0) { |
149 | - diff -= 1; |
150 | - } |
151 | - |
152 | - root.parent.parent.interactive = true; // reenable scrolling |
153 | - |
154 | - if (diff === 0) { |
155 | - // Nothing has changed so reset the item |
156 | - // z index is restored after animation |
157 | - resetListItemYAnimation.start(); |
158 | - } |
159 | - else { |
160 | - var newIndex = index + diff; |
161 | - |
162 | - if (newIndex < 0) { |
163 | - newIndex = 0; |
164 | - } |
165 | - else if (newIndex > root.parent.parent.count - 1) { |
166 | - newIndex = root.parent.parent.count - 1; |
167 | - } |
168 | - |
169 | - root.z -= 10; // restore z index |
170 | - reorder(index, newIndex) |
171 | - } |
172 | - } |
173 | - |
174 | - function getDiff() { |
175 | - // Get the amount of items that have been passed over (by centre) |
176 | - return Math.round((((root.y - startY) + (root.parent.parent.contentY - startContentY)) / root.height) + 0.5); |
177 | - } |
178 | - } |
179 | - |
180 | - SequentialAnimation { |
181 | - id: resetListItemYAnimation |
182 | - UbuntuNumberAnimation { |
183 | - target: root; |
184 | - property: "y"; |
185 | - to: actionReorderMouseArea.startY |
186 | - } |
187 | - ScriptAction { |
188 | - script: { |
189 | - root.z -= 10; // restore z index |
190 | - } |
191 | - } |
192 | - } |
193 | -} |
194 | |
195 | === removed file 'app/components/ListItemWithActions.qml' |
196 | --- app/components/ListItemWithActions.qml 2015-06-18 01:42:03 +0000 |
197 | +++ app/components/ListItemWithActions.qml 1970-01-01 00:00:00 +0000 |
198 | @@ -1,496 +0,0 @@ |
199 | -/* |
200 | - * Copyright (C) 2012-2015 Canonical, Ltd. |
201 | - * |
202 | - * This program is free software; you can redistribute it and/or modify |
203 | - * it under the terms of the GNU General Public License as published by |
204 | - * the Free Software Foundation; version 3. |
205 | - * |
206 | - * This program is distributed in the hope that it will be useful, |
207 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
208 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
209 | - * GNU General Public License for more details. |
210 | - * |
211 | - * You should have received a copy of the GNU General Public License |
212 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
213 | - */ |
214 | - |
215 | -import QtQuick 2.4 |
216 | -import Ubuntu.Components 1.2 |
217 | -import Ubuntu.Components.ListItems 1.0 as ListItem |
218 | - |
219 | - |
220 | -Item { |
221 | - id: root |
222 | - width: parent.width |
223 | - |
224 | - property Action leftSideAction: null |
225 | - property list<Action> rightSideActions |
226 | - property double defaultHeight: units.gu(8) |
227 | - property bool locked: false |
228 | - property Action activeAction: null |
229 | - property var activeItem: null |
230 | - property bool triggerActionOnMouseRelease: false |
231 | - property color color: Theme.palette.normal.background |
232 | - property color selectedColor: "#E6E6E6" |
233 | - property bool selected: false |
234 | - property bool selectionMode: false |
235 | - property alias internalAnchors: mainContents.anchors |
236 | - default property alias contents: mainContents.children |
237 | - |
238 | - readonly property double actionWidth: units.gu(4) |
239 | - readonly property double leftActionWidth: units.gu(10) |
240 | - readonly property double actionThreshold: actionWidth * 0.4 |
241 | - readonly property double threshold: 0.4 |
242 | - readonly property string swipeState: main.x == 0 ? "Normal" : main.x > 0 ? "LeftToRight" : "RightToLeft" |
243 | - readonly property alias swipping: mainItemMoving.running |
244 | - readonly property bool _showActions: mouseArea.pressed || swipeState != "Normal" || swipping |
245 | - |
246 | - property alias _main: main // CUSTOM |
247 | - property alias pressed: mouseArea.pressed // CUSTOM |
248 | - |
249 | - /* internal */ |
250 | - property var _visibleRightSideActions: filterVisibleActions(rightSideActions) |
251 | - |
252 | - signal itemClicked(var mouse) |
253 | - signal itemPressAndHold(var mouse) |
254 | - |
255 | - function returnToBoundsRTL(direction) |
256 | - { |
257 | - var actionFullWidth = actionWidth + units.gu(2) |
258 | - |
259 | - // go back to normal state if swipping reverse |
260 | - if (direction === "LTR") { |
261 | - updatePosition(0) |
262 | - return |
263 | - } else if (!triggerActionOnMouseRelease) { |
264 | - updatePosition(-rightActionsView.width + units.gu(2)) |
265 | - return |
266 | - } |
267 | - |
268 | - var xOffset = Math.abs(main.x) |
269 | - var index = Math.min(Math.floor(xOffset / actionFullWidth), _visibleRightSideActions.length) |
270 | - var newX = 0 |
271 | - |
272 | - if (index === _visibleRightSideActions.length) { |
273 | - newX = -(rightActionsView.width - units.gu(2)) |
274 | - } else if (index >= 1) { |
275 | - newX = -(actionFullWidth * index) |
276 | - } |
277 | - |
278 | - updatePosition(newX) |
279 | - } |
280 | - |
281 | - function returnToBoundsLTR(direction) |
282 | - { |
283 | - var finalX = leftActionWidth |
284 | - if ((direction === "RTL") || (main.x <= (finalX * root.threshold))) |
285 | - finalX = 0 |
286 | - updatePosition(finalX) |
287 | - } |
288 | - |
289 | - function returnToBounds(direction) |
290 | - { |
291 | - if (main.x < 0) { |
292 | - returnToBoundsRTL(direction) |
293 | - } else if (main.x > 0) { |
294 | - returnToBoundsLTR(direction) |
295 | - } else { |
296 | - updatePosition(0) |
297 | - } |
298 | - } |
299 | - |
300 | - function contains(item, point, marginX) |
301 | - { |
302 | - var itemStartX = item.x - marginX |
303 | - var itemEndX = item.x + item.width + marginX |
304 | - return (point.x >= itemStartX) && (point.x <= itemEndX) && |
305 | - (point.y >= item.y) && (point.y <= (item.y + item.height)); |
306 | - } |
307 | - |
308 | - function getActionAt(point) |
309 | - { |
310 | - if (leftSideAction && contains(leftActionViewLoader.item, point, 0)) { |
311 | - return leftSideAction |
312 | - } else if (contains(rightActionsView, point, 0)) { |
313 | - var newPoint = root.mapToItem(rightActionsView, point.x, point.y) |
314 | - for (var i = 0; i < rightActionsRepeater.count; i++) { |
315 | - var child = rightActionsRepeater.itemAt(i) |
316 | - if (contains(child, newPoint, units.gu(1))) { |
317 | - return i |
318 | - } |
319 | - } |
320 | - } |
321 | - return -1 |
322 | - } |
323 | - |
324 | - function updateActiveAction() |
325 | - { |
326 | - if (triggerActionOnMouseRelease && |
327 | - (main.x <= -(root.actionWidth + units.gu(2))) && |
328 | - (main.x > -(rightActionsView.width - units.gu(2)))) { |
329 | - var actionFullWidth = actionWidth + units.gu(2) |
330 | - var xOffset = Math.abs(main.x) |
331 | - var index = Math.min(Math.floor(xOffset / actionFullWidth), _visibleRightSideActions.length) |
332 | - index = index - 1 |
333 | - if (index > -1) { |
334 | - root.activeItem = rightActionsRepeater.itemAt(index) |
335 | - root.activeAction = root._visibleRightSideActions[index] |
336 | - } |
337 | - } else { |
338 | - root.activeAction = null |
339 | - } |
340 | - } |
341 | - |
342 | - function resetSwipe() |
343 | - { |
344 | - updatePosition(0) |
345 | - } |
346 | - |
347 | - function filterVisibleActions(actions) |
348 | - { |
349 | - var visibleActions = [] |
350 | - for(var i = 0; i < actions.length; i++) { |
351 | - var action = actions[i] |
352 | - if (action.visible) { |
353 | - visibleActions.push(action) |
354 | - } |
355 | - } |
356 | - return visibleActions |
357 | - } |
358 | - |
359 | - function updatePosition(pos) |
360 | - { |
361 | - if (!root.triggerActionOnMouseRelease && (pos !== 0)) { |
362 | - mouseArea.state = pos > 0 ? "RightToLeft" : "LeftToRight" |
363 | - } else { |
364 | - mouseArea.state = "" |
365 | - } |
366 | - main.x = pos |
367 | - } |
368 | - |
369 | - // CUSTOM remove animation |
370 | - SequentialAnimation { |
371 | - id: removeAnimation |
372 | - |
373 | - property var action |
374 | - |
375 | - UbuntuNumberAnimation { |
376 | - target: root |
377 | - duration: UbuntuAnimation.BriskDuration |
378 | - property: "height"; |
379 | - to: 0 |
380 | - } |
381 | - ScriptAction { |
382 | - script: removeAnimation.action.trigger() |
383 | - } |
384 | - } |
385 | - |
386 | - states: [ |
387 | - State { |
388 | - name: "select" |
389 | - when: selectionMode || selected |
390 | - PropertyChanges { |
391 | - target: selectionIcon |
392 | - source: Qt.resolvedUrl("ListItemActions/CheckBox.qml") |
393 | - anchors.leftMargin: units.gu(2) |
394 | - } |
395 | - PropertyChanges { |
396 | - target: root |
397 | - locked: true |
398 | - } |
399 | - PropertyChanges { |
400 | - target: main |
401 | - x: 0 |
402 | - } |
403 | - } |
404 | - ] |
405 | - |
406 | - height: defaultHeight |
407 | - //clip: height !== defaultHeight // CUSTOM |
408 | - |
409 | - Loader { // CUSTOM |
410 | - id: leftActionViewLoader |
411 | - anchors { |
412 | - top: parent.top |
413 | - bottom: parent.bottom |
414 | - right: main.left |
415 | - } |
416 | - asynchronous: true |
417 | - sourceComponent: leftSideAction ? leftActionViewComponent : undefined |
418 | - } |
419 | - |
420 | - Component { // CUSTOM |
421 | - id: leftActionViewComponent |
422 | - |
423 | - Rectangle { |
424 | - id: leftActionView |
425 | - width: root.leftActionWidth + actionThreshold |
426 | - color: UbuntuColors.red |
427 | - |
428 | - Icon { |
429 | - id: leftActionIcon |
430 | - anchors { |
431 | - centerIn: parent |
432 | - horizontalCenterOffset: actionThreshold / 2 |
433 | - } |
434 | - objectName: "swipeDeleteAction" // CUSTOM |
435 | - name: leftSideAction && _showActions ? leftSideAction.iconName : "" |
436 | - color: Theme.palette.selected.field |
437 | - height: units.gu(3) |
438 | - width: units.gu(3) |
439 | - } |
440 | - } |
441 | - } |
442 | - |
443 | - //Rectangle { |
444 | - Item { // CUSTOM |
445 | - id: rightActionsView |
446 | - |
447 | - anchors { |
448 | - top: main.top |
449 | - left: main.right |
450 | - bottom: main.bottom |
451 | - } |
452 | - visible: _visibleRightSideActions.length > 0 |
453 | - width: rightActionsRepeater.count > 0 ? rightActionsRepeater.count * (root.actionWidth + units.gu(2)) + root.actionThreshold + units.gu(2) : 0 |
454 | - // color: "white" // CUSTOM |
455 | - |
456 | - Row { |
457 | - anchors{ |
458 | - top: parent.top |
459 | - left: parent.left |
460 | - leftMargin: units.gu(2) |
461 | - right: parent.right |
462 | - rightMargin: units.gu(2) |
463 | - bottom: parent.bottom |
464 | - } |
465 | - spacing: units.gu(2) |
466 | - Repeater { |
467 | - id: rightActionsRepeater |
468 | - |
469 | - model: _showActions ? _visibleRightSideActions : [] |
470 | - Item { |
471 | - property alias image: img |
472 | - |
473 | - height: rightActionsView.height |
474 | - width: root.actionWidth |
475 | - |
476 | - Icon { |
477 | - id: img |
478 | - |
479 | - anchors.centerIn: parent |
480 | - objectName: rightSideActions[index].objectName // CUSTOM |
481 | - width: units.gu(3) |
482 | - height: units.gu(3) |
483 | - name: modelData.iconName |
484 | - color: root.activeAction === modelData ? UbuntuColors.orange : UbuntuColors.coolGrey // CUSTOM |
485 | - } |
486 | - } |
487 | - } |
488 | - } |
489 | - } |
490 | - |
491 | - Rectangle { |
492 | - id: main |
493 | - objectName: "mainItem" |
494 | - |
495 | - anchors { |
496 | - top: parent.top |
497 | - bottom: parent.bottom |
498 | - } |
499 | - |
500 | - width: parent.width |
501 | - color: root.selected ? root.selectedColor : root.color |
502 | - |
503 | - Loader { |
504 | - id: selectionIcon |
505 | - |
506 | - anchors { |
507 | - left: main.left |
508 | - verticalCenter: main.verticalCenter |
509 | - } |
510 | - asynchronous: true // CUSTOM |
511 | - width: (status === Loader.Ready) ? item.implicitWidth : 0 |
512 | - visible: (status === Loader.Ready) && (item.width === item.implicitWidth) |
513 | - |
514 | - Behavior on width { |
515 | - NumberAnimation { |
516 | - duration: UbuntuAnimation.SnapDuration |
517 | - } |
518 | - } |
519 | - } |
520 | - |
521 | - Item { |
522 | - id: mainContents |
523 | - |
524 | - anchors { |
525 | - left: selectionIcon.right |
526 | - //leftMargin: units.gu(2) // CUSTOM |
527 | - top: parent.top |
528 | - //topMargin: units.gu(1) // CUSTOM |
529 | - right: parent.right |
530 | - //rightMargin: units.gu(2) // CUSTOM |
531 | - bottom: parent.bottom |
532 | - //bottomMargin: units.gu(1) // CUSTOM |
533 | - } |
534 | - } |
535 | - |
536 | - Behavior on x { |
537 | - UbuntuNumberAnimation { |
538 | - id: mainItemMoving |
539 | - |
540 | - easing.type: Easing.OutElastic |
541 | - duration: UbuntuAnimation.SlowDuration |
542 | - } |
543 | - } |
544 | - } |
545 | - |
546 | - SequentialAnimation { |
547 | - id: triggerAction |
548 | - |
549 | - property var currentItem: root.activeItem ? root.activeItem.image : null |
550 | - |
551 | - running: false |
552 | - ParallelAnimation { |
553 | - UbuntuNumberAnimation { |
554 | - target: triggerAction.currentItem |
555 | - property: "opacity" |
556 | - from: 1.0 |
557 | - to: 0.0 |
558 | - duration: UbuntuAnimation.SlowDuration |
559 | - easing {type: Easing.InOutBack; } |
560 | - } |
561 | - UbuntuNumberAnimation { |
562 | - target: triggerAction.currentItem |
563 | - properties: "width, height" |
564 | - from: units.gu(3) |
565 | - to: root.actionWidth |
566 | - duration: UbuntuAnimation.SlowDuration |
567 | - easing {type: Easing.InOutBack; } |
568 | - } |
569 | - } |
570 | - PropertyAction { |
571 | - target: triggerAction.currentItem |
572 | - properties: "width, height" |
573 | - value: units.gu(3) |
574 | - } |
575 | - PropertyAction { |
576 | - target: triggerAction.currentItem |
577 | - properties: "opacity" |
578 | - value: 1.0 |
579 | - } |
580 | - ScriptAction { |
581 | - script: { |
582 | - root.activeAction.triggered(root) |
583 | - mouseArea.state = "" |
584 | - } |
585 | - } |
586 | - PauseAnimation { |
587 | - duration: 500 |
588 | - } |
589 | - UbuntuNumberAnimation { |
590 | - target: main |
591 | - property: "x" |
592 | - to: 0 |
593 | - } |
594 | - } |
595 | - |
596 | - MouseArea { |
597 | - id: mouseArea |
598 | - |
599 | - property bool locked: root.locked || ((root.leftSideAction === null) && (root._visibleRightSideActions.count === 0)) // CUSTOM |
600 | - property bool manual: false |
601 | - property string direction: "None" |
602 | - property real lastX: -1 |
603 | - |
604 | - anchors.fill: parent |
605 | - drag { |
606 | - target: locked ? null : main |
607 | - axis: Drag.XAxis |
608 | - minimumX: rightActionsView.visible ? -(rightActionsView.width) : 0 |
609 | - maximumX: leftSideAction ? leftActionViewLoader.item.width : 0 |
610 | - threshold: root.actionThreshold |
611 | - } |
612 | - |
613 | - states: [ |
614 | - State { |
615 | - name: "LeftToRight" |
616 | - PropertyChanges { |
617 | - target: mouseArea |
618 | - drag.maximumX: 0 |
619 | - } |
620 | - }, |
621 | - State { |
622 | - name: "RightToLeft" |
623 | - PropertyChanges { |
624 | - target: mouseArea |
625 | - drag.minimumX: 0 |
626 | - } |
627 | - } |
628 | - ] |
629 | - |
630 | - onMouseXChanged: { |
631 | - var offset = (lastX - mouseX) |
632 | - if (Math.abs(offset) <= root.actionThreshold) { |
633 | - return |
634 | - } |
635 | - lastX = mouseX |
636 | - direction = offset > 0 ? "RTL" : "LTR"; |
637 | - } |
638 | - |
639 | - onPressed: { |
640 | - lastX = mouse.x |
641 | - } |
642 | - |
643 | - onReleased: { |
644 | - if (root.triggerActionOnMouseRelease && root.activeAction) { |
645 | - triggerAction.start() |
646 | - } else { |
647 | - root.returnToBounds() |
648 | - root.activeAction = null |
649 | - } |
650 | - lastX = -1 |
651 | - direction = "None" |
652 | - } |
653 | - onClicked: { |
654 | - if (selectionMode) { // CUSTOM - selecting a listitem should toggle selection if in selectionMode |
655 | - selected = !selected |
656 | - return |
657 | - } else if (main.x === 0) { |
658 | - root.itemClicked(mouse) |
659 | - } else if (main.x > 0) { |
660 | - var action = getActionAt(Qt.point(mouse.x, mouse.y)) |
661 | - if (action && action !== -1) { |
662 | - //action.triggered(root) |
663 | - removeAnimation.action = action // CUSTOM - use our animation instead |
664 | - removeAnimation.start() // CUSTOM |
665 | - } |
666 | - } else { |
667 | - var actionIndex = getActionAt(Qt.point(mouse.x, mouse.y)) |
668 | - |
669 | - if (actionIndex !== -1 && actionIndex !== leftSideAction) { // CUSTOM - can be leftAction |
670 | - root.activeItem = rightActionsRepeater.itemAt(actionIndex) |
671 | - root.activeAction = root.rightSideActions[actionIndex] |
672 | - triggerAction.start() |
673 | - return |
674 | - } |
675 | - } |
676 | - root.resetSwipe() |
677 | - } |
678 | - |
679 | - onPositionChanged: { |
680 | - if (mouseArea.pressed) { |
681 | - updateActiveAction() |
682 | - |
683 | - listItemSwiping(index) // CUSTOM - tells other listitems to dismiss any swipe |
684 | - } |
685 | - } |
686 | - onPressAndHold: { |
687 | - if (main.x === 0) { |
688 | - root.itemPressAndHold(mouse) |
689 | - } |
690 | - } |
691 | - |
692 | - z: -1 |
693 | - } |
694 | -} |
695 | |
696 | === removed file 'app/components/MultiSelectHeadState.qml' |
697 | --- app/components/MultiSelectHeadState.qml 2015-06-18 01:42:03 +0000 |
698 | +++ app/components/MultiSelectHeadState.qml 1970-01-01 00:00:00 +0000 |
699 | @@ -1,72 +0,0 @@ |
700 | -/* |
701 | - * Copyright (C) 2015 |
702 | - * Andrew Hayzen <ahayzen@gmail.com> |
703 | - * Victor Thompson <victor.thompson@gmail.com> |
704 | - * |
705 | - * This program is free software; you can redistribute it and/or modify |
706 | - * it under the terms of the GNU General Public License as published by |
707 | - * the Free Software Foundation; version 3. |
708 | - * |
709 | - * This program is distributed in the hope that it will be useful, |
710 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
711 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
712 | - * GNU General Public License for more details. |
713 | - * |
714 | - * You should have received a copy of the GNU General Public License |
715 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
716 | - */ |
717 | - |
718 | -import QtQuick 2.4 |
719 | -import Ubuntu.Components 1.2 |
720 | - |
721 | -PageHeadState { |
722 | - id: selectionState |
723 | - actions: [ |
724 | - Action { |
725 | - iconName: "select" |
726 | - text: i18n.tr("Select All") |
727 | - onTriggered: { |
728 | - if (listview.selectedItems.length === listview.model.count) { |
729 | - listview.clearSelection() |
730 | - } else { |
731 | - listview.selectAll() |
732 | - } |
733 | - } |
734 | - }, |
735 | - Action { |
736 | - enabled: listview.selectedItems.length > 0 |
737 | - iconName: "delete" |
738 | - text: i18n.tr("Delete") |
739 | - visible: removable |
740 | - |
741 | - onTriggered: { |
742 | - removed(listview.selectedItems) |
743 | - |
744 | - listview.closeSelection() |
745 | - } |
746 | - } |
747 | - |
748 | - ] |
749 | - backAction: Action { |
750 | - text: i18n.tr("Cancel selection") |
751 | - iconName: "back" |
752 | - onTriggered: { |
753 | - listview.clearSelection() |
754 | - listview.state = "normal" |
755 | - } |
756 | - } |
757 | - head: thisPage.head |
758 | - name: "selection" |
759 | - |
760 | - PropertyChanges { |
761 | - target: thisPage.head |
762 | - backAction: selectionState.backAction |
763 | - actions: selectionState.actions |
764 | - } |
765 | - |
766 | - property ListView listview |
767 | - property bool removable: false |
768 | - property Page thisPage |
769 | - |
770 | - signal removed(var selectedItems) |
771 | -} |
772 | |
773 | === modified file 'app/components/MultiSelectListView.qml' |
774 | --- app/components/MultiSelectListView.qml 2015-06-18 01:42:03 +0000 |
775 | +++ app/components/MultiSelectListView.qml 2015-11-20 19:29:18 +0000 |
776 | @@ -20,21 +20,24 @@ |
777 | import QtQuick 2.4 |
778 | import Ubuntu.Components 1.2 |
779 | |
780 | - |
781 | WeatherListView { |
782 | - property var selectedItems: [] |
783 | - |
784 | signal clearSelection() |
785 | signal closeSelection() |
786 | signal selectAll() |
787 | - |
788 | - onClearSelection: selectedItems = [] |
789 | + signal reorder(int from, int to) |
790 | + |
791 | + onClearSelection: { |
792 | + ViewItems.selectedIndices = [] |
793 | + } |
794 | + |
795 | onCloseSelection: { |
796 | clearSelection() |
797 | - state = "normal" |
798 | + ViewItems.selectMode = false |
799 | + ViewItems.dragMode = false |
800 | } |
801 | + |
802 | onSelectAll: { |
803 | - var tmp = selectedItems |
804 | + var tmp = [] |
805 | |
806 | for (var i=0; i < model.count; i++) { |
807 | if (tmp.indexOf(i) === -1) { |
808 | @@ -42,11 +45,27 @@ |
809 | } |
810 | } |
811 | |
812 | - selectedItems = tmp |
813 | + ViewItems.selectedIndices = tmp |
814 | } |
815 | + |
816 | onVisibleChanged: { |
817 | if (!visible) { |
818 | closeSelection() |
819 | } |
820 | } |
821 | + |
822 | + moveDisplaced: Transition { |
823 | + UbuntuNumberAnimation { |
824 | + property: "y" |
825 | + } |
826 | + } |
827 | + |
828 | + ViewItems.onDragUpdated: { |
829 | + if (event.status === ListItemDrag.Moving) { |
830 | + event.accept = false |
831 | + } else if (event.status === ListItemDrag.Dropped) { |
832 | + model.move(event.from, event.to, 1) |
833 | + reorder(event.from, event.to) |
834 | + } |
835 | + } |
836 | } |
837 | |
838 | === removed file 'app/components/WeatherListItem.qml' |
839 | --- app/components/WeatherListItem.qml 2015-09-29 16:09:21 +0000 |
840 | +++ app/components/WeatherListItem.qml 1970-01-01 00:00:00 +0000 |
841 | @@ -1,138 +0,0 @@ |
842 | -/* |
843 | - * Copyright (C) 2013, 2014, 2015 |
844 | - * Andrew Hayzen <ahayzen@gmail.com> |
845 | - * Nekhelesh Ramananthan <krnekhelesh@gmail.com> |
846 | - * Victor Thompson <victor.thompson@gmail.com> |
847 | - * |
848 | - * This program is free software; you can redistribute it and/or modify |
849 | - * it under the terms of the GNU General Public License as published by |
850 | - * the Free Software Foundation; version 3. |
851 | - * |
852 | - * This program is distributed in the hope that it will be useful, |
853 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
854 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
855 | - * GNU General Public License for more details. |
856 | - * |
857 | - * You should have received a copy of the GNU General Public License |
858 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
859 | - */ |
860 | - |
861 | -import QtQuick 2.4 |
862 | -import Ubuntu.Components 1.2 |
863 | - |
864 | -ListItemWithActions { |
865 | - id: root |
866 | - color: "transparent" |
867 | - |
868 | - property int listItemIndex: index |
869 | - property bool multiselectable: false |
870 | - property int previousListItemIndex: -1 |
871 | - property bool reorderable: false |
872 | - |
873 | - signal reorder(int from, int to) |
874 | - |
875 | - onItemPressAndHold: { |
876 | - if (multiselectable) { |
877 | - selectionMode = true |
878 | - } |
879 | - } |
880 | - |
881 | - onListItemIndexChanged: { |
882 | - var i = parent.parent.selectedItems.lastIndexOf(previousListItemIndex) |
883 | - |
884 | - if (i !== -1) { |
885 | - parent.parent.selectedItems[i] = listItemIndex |
886 | - } |
887 | - |
888 | - previousListItemIndex = listItemIndex |
889 | - } |
890 | - |
891 | - onSelectedChanged: { |
892 | - if (selectionMode) { |
893 | - var tmp = parent.parent.selectedItems |
894 | - |
895 | - if (selected) { |
896 | - if (parent.parent.selectedItems.indexOf(listItemIndex) === -1) { |
897 | - tmp.push(listItemIndex) |
898 | - parent.parent.selectedItems = tmp |
899 | - } |
900 | - } else { |
901 | - tmp.splice(parent.parent.selectedItems.indexOf(listItemIndex), 1) |
902 | - parent.parent.selectedItems = tmp |
903 | - } |
904 | - } |
905 | - } |
906 | - |
907 | - onSelectionModeChanged: { |
908 | - if (reorderable && selectionMode) { |
909 | - resetSwipe() |
910 | - } |
911 | - |
912 | - for (var j=0; j < _main.children.length; j++) { |
913 | - if (_main.children[j] !== actionReorderLoader) { |
914 | - _main.children[j].anchors.rightMargin = reorderable && selectionMode ? actionReorderLoader.width + units.gu(2) : 0 |
915 | - } |
916 | - } |
917 | - |
918 | - parent.parent.state = selectionMode ? "multiselectable" : "normal" |
919 | - |
920 | - if (!selectionMode) { |
921 | - selected = false |
922 | - } |
923 | - } |
924 | - |
925 | - /* Highlight the listitem on press */ |
926 | - Rectangle { |
927 | - id: listItemBrighten |
928 | - color: root.pressed ? UbuntuColors.coolGrey : "transparent" |
929 | - opacity: 0.1 |
930 | - height: root.height |
931 | - x: root.x - parent.x // -parent.x due to selectionIcon in ListItemWithActions |
932 | - width: root.width |
933 | - } |
934 | - |
935 | - /* Reorder Component */ |
936 | - Loader { |
937 | - id: actionReorderLoader |
938 | - active: reorderable && selectionMode && root.parent.parent.selectedItems.length === 0 |
939 | - anchors { |
940 | - bottom: parent.bottom |
941 | - right: parent.right |
942 | - rightMargin: units.gu(1) |
943 | - top: parent.top |
944 | - } |
945 | - asynchronous: true |
946 | - source: "ListItemReorderComponent.qml" |
947 | - } |
948 | - |
949 | - Item { |
950 | - Connections { // Only allow one ListItem to be swiping at any time |
951 | - target: weatherApp |
952 | - onListItemSwiping: { |
953 | - if (i !== index) { |
954 | - root.resetSwipe(); |
955 | - } |
956 | - } |
957 | - } |
958 | - |
959 | - Connections { // Connections from signals in the ListView |
960 | - target: root.parent.parent |
961 | - onClearSelection: selected = false |
962 | - onFlickingChanged: { |
963 | - if (root.parent.parent.flicking) { |
964 | - root.resetSwipe() |
965 | - } |
966 | - } |
967 | - onSelectAll: selected = true |
968 | - onStateChanged: selectionMode = root.parent.parent.state === "multiselectable" |
969 | - } |
970 | - } |
971 | - |
972 | - Component.onCompleted: { // reload settings as delegates are destroyed |
973 | - if (parent.parent.selectedItems.indexOf(index) !== -1) { |
974 | - selected = true |
975 | - } |
976 | - |
977 | - selectionMode = root.parent.parent.state === "multiselectable" |
978 | - } |
979 | -} |
980 | |
981 | === modified file 'app/components/WeatherListView.qml' |
982 | --- app/components/WeatherListView.qml 2015-06-18 01:42:03 +0000 |
983 | +++ app/components/WeatherListView.qml 2015-11-20 19:29:18 +0000 |
984 | @@ -20,8 +20,7 @@ |
985 | import QtQuick 2.4 |
986 | import Ubuntu.Components 1.2 |
987 | |
988 | - |
989 | -ListView { |
990 | +UbuntuListView { |
991 | Component.onCompleted: { |
992 | // FIXME: workaround for qtubuntu not returning values depending on the grid unit definition |
993 | // for Flickable.maximumFlickVelocity and Flickable.flickDeceleration |
994 | |
995 | === modified file 'app/ui/LocationsPage.qml' |
996 | --- app/ui/LocationsPage.qml 2015-10-22 12:49:35 +0000 |
997 | +++ app/ui/LocationsPage.qml 2015-11-20 19:29:18 +0000 |
998 | @@ -18,22 +18,19 @@ |
999 | |
1000 | import QtQuick 2.4 |
1001 | import Ubuntu.Components 1.2 |
1002 | -import Ubuntu.Components.ListItems 0.1 as ListItem |
1003 | +import Ubuntu.Components.ListItems 1.0 as ListItems |
1004 | import "../components" |
1005 | -import "../components/ListItemActions" |
1006 | - |
1007 | |
1008 | Page { |
1009 | id: locationsPage |
1010 | objectName: "locationsPage" |
1011 | title: i18n.tr("Locations") |
1012 | |
1013 | - state: locationsListView.state === "multiselectable" ? "selection" : "default" |
1014 | + state: "default" |
1015 | states: [ |
1016 | PageHeadState { |
1017 | - id: defaultState |
1018 | - head: locationsPage.head |
1019 | name: "default" |
1020 | + head: locationsPage.head |
1021 | actions: [ |
1022 | Action { |
1023 | iconName: "add" |
1024 | @@ -48,12 +45,28 @@ |
1025 | } |
1026 | } |
1027 | }, |
1028 | - MultiSelectHeadState { |
1029 | - listview: locationsListView |
1030 | - removable: true |
1031 | - thisPage: locationsPage |
1032 | - |
1033 | - onRemoved: storage.removeMultiLocations(selectedItems.slice()); |
1034 | + PageHeadState { |
1035 | + name: "selection" |
1036 | + head: locationsPage.head |
1037 | + when: locationsListView.ViewItems.selectMode |
1038 | + backAction: Action { |
1039 | + iconName: "back" |
1040 | + onTriggered: { |
1041 | + locationsListView.closeSelection() |
1042 | + locationsPage.state = "default" |
1043 | + } |
1044 | + } |
1045 | + actions: [ |
1046 | + Action { |
1047 | + iconName: "delete" |
1048 | + enabled: locationsListView.ViewItems.selectedIndices.length !== 0 |
1049 | + onTriggered: { |
1050 | + storage.removeMultiLocations(locationsListView.ViewItems.selectedIndices) |
1051 | + locationsListView.closeSelection() |
1052 | + locationsPage.state = "default" |
1053 | + } |
1054 | + } |
1055 | + ] |
1056 | } |
1057 | ] |
1058 | |
1059 | @@ -73,17 +86,16 @@ |
1060 | } |
1061 | header: MultiSelectListView { |
1062 | id: currentLocationListView |
1063 | - anchors { |
1064 | - left: parent.left |
1065 | - right: parent.right |
1066 | - } |
1067 | - height: settings.addedCurrentLocation && settings.detectCurrentLocation ? units.gu(8) : units.gu(0) |
1068 | + |
1069 | + height: settings.addedCurrentLocation && settings.detectCurrentLocation ? units.gu(7) : units.gu(0) |
1070 | interactive: false |
1071 | model: currentLocationModel |
1072 | - delegate: WeatherListItem { |
1073 | + width: parent.width |
1074 | + |
1075 | + delegate: ListItem { |
1076 | id: currentLocationListItem |
1077 | |
1078 | - onItemClicked: { |
1079 | + onClicked: { |
1080 | settings.current = index; |
1081 | pageStack.pop() |
1082 | } |
1083 | @@ -154,39 +166,48 @@ |
1084 | horizontalAlignment: Text.AlignRight |
1085 | text: temp + settings.tempScale |
1086 | } |
1087 | + |
1088 | + ListItems.ThinDivider { anchors.bottom: parent.bottom } |
1089 | } |
1090 | } |
1091 | |
1092 | - delegate: WeatherListItem { |
1093 | + // Added a thindivider to the listview since by default the last listitem does not show |
1094 | + // a thindivider which does not follow design specs. |
1095 | + footer: ListItems.ThinDivider { |
1096 | + visible: locationsModel.count !== 0 |
1097 | + } |
1098 | + |
1099 | + onReorder: { |
1100 | + console.debug("Move: ", from, to); |
1101 | + storage.moveLocation(from, to); |
1102 | + } |
1103 | + |
1104 | + delegate: ListItem { |
1105 | id: locationsListItem |
1106 | objectName: "location" + index |
1107 | - leftSideAction: Remove { |
1108 | - onTriggered: storage.removeLocation(index) |
1109 | - } |
1110 | - multiselectable: true |
1111 | - reorderable: true |
1112 | - |
1113 | - onItemClicked: { |
1114 | - if (settings.addedCurrentLocation && settings.detectCurrentLocation) { |
1115 | + |
1116 | + leadingActions: ListItemActions { |
1117 | + actions: [ |
1118 | + Action { |
1119 | + iconName: 'delete' |
1120 | + onTriggered: storage.removeLocation(index) |
1121 | + } |
1122 | + ] |
1123 | + } |
1124 | + |
1125 | + onPressAndHold: { |
1126 | + ListView.view.ViewItems.selectMode = !ListView.view.ViewItems.selectMode |
1127 | + ListView.view.ViewItems.dragMode = !ListView.view.ViewItems.dragMode |
1128 | + } |
1129 | + |
1130 | + onClicked: { |
1131 | + if (!selectMode) { |
1132 | settings.current = index + 1; |
1133 | - } else { |
1134 | - settings.current = index; |
1135 | + pageStack.pop() |
1136 | } |
1137 | |
1138 | pageStack.pop() |
1139 | } |
1140 | - onReorder: { |
1141 | - console.debug("Move: ", from, to); |
1142 | - |
1143 | - storage.moveLocation(from, to); |
1144 | - } |
1145 | - |
1146 | - ListItem.ThinDivider { |
1147 | - anchors { |
1148 | - top: parent.top |
1149 | - } |
1150 | - visible: index == 0 |
1151 | - } |
1152 | |
1153 | Item { |
1154 | anchors { |
1155 | @@ -252,12 +273,6 @@ |
1156 | visible: locationsPage.state === "default" |
1157 | } |
1158 | } |
1159 | - |
1160 | - ListItem.ThinDivider { |
1161 | - anchors { |
1162 | - bottom: parent.bottom |
1163 | - } |
1164 | - } |
1165 | } |
1166 | } |
1167 | |
1168 | |
1169 | === modified file 'po/com.ubuntu.weather.pot' |
1170 | --- po/com.ubuntu.weather.pot 2015-11-10 02:02:19 +0000 |
1171 | +++ po/com.ubuntu.weather.pot 2015-11-20 19:29:18 +0000 |
1172 | @@ -62,26 +62,10 @@ |
1173 | msgid "Today" |
1174 | msgstr "" |
1175 | |
1176 | -#: ../app/components/ListItemActions/Remove.qml:26 |
1177 | -msgid "Remove" |
1178 | -msgstr "" |
1179 | - |
1180 | #: ../app/components/LocationsPageEmptyStateComponent.qml:36 |
1181 | msgid "No locations found. Tap the plus icon to search for one." |
1182 | msgstr "" |
1183 | |
1184 | -#: ../app/components/MultiSelectHeadState.qml:27 |
1185 | -msgid "Select All" |
1186 | -msgstr "" |
1187 | - |
1188 | -#: ../app/components/MultiSelectHeadState.qml:39 |
1189 | -msgid "Delete" |
1190 | -msgstr "" |
1191 | - |
1192 | -#: ../app/components/MultiSelectHeadState.qml:51 |
1193 | -msgid "Cancel selection" |
1194 | -msgstr "" |
1195 | - |
1196 | #: ../app/components/NetworkErrorStateComponent.qml:48 |
1197 | msgid "Network Error" |
1198 | msgstr "" |
1199 | @@ -136,11 +120,15 @@ |
1200 | msgid "OK" |
1201 | msgstr "" |
1202 | |
1203 | -#: ../app/ui/HomePage.qml:31 ../app/ui/LocationsPage.qml:29 |
1204 | +#: ../app/ui/HomePage.qml:31 ../app/ui/LocationsPage.qml:27 |
1205 | msgid "Locations" |
1206 | msgstr "" |
1207 | |
1208 | +<<<<<<< TREE |
1209 | +#: ../app/ui/LocationsPage.qml:121 |
1210 | +======= |
1211 | #: ../app/ui/LocationsPage.qml:109 |
1212 | +>>>>>>> MERGE-SOURCE |
1213 | msgid "Current Location" |
1214 | msgstr "" |
1215 |
The original MP is here, for reference for remaining issues: https:/ /code.launchpad .net/~nik90/ ubuntu- weather- app/finish- listitem- migration/ +merge/ 263136