Merge lp:~renatofilho/address-book-app/fix-visuals into lp:address-book-app
- fix-visuals
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Gustavo Pichorim Boiko |
Approved revision: | 107 |
Merged at revision: | 103 |
Proposed branch: | lp:~renatofilho/address-book-app/fix-visuals |
Merge into: | lp:address-book-app |
Diff against target: |
1126 lines (+386/-322) 20 files modified
CMakeLists.txt (+13/-5) debian/qtdeclarative5-ubuntu-contacts0.1.install (+0/-1) src/artwork/CMakeLists.txt (+9/-8) src/artwork/avatar-default.svg (+0/-135) src/imports/ContactEdit/ContactDetailAvatarEditor.qml (+18/-17) src/imports/ContactEdit/ContactDetailGroupWithTypeEditor.qml (+5/-6) src/imports/ContactEdit/ValueSelector.qml (+28/-31) src/imports/ContactList/ContactListPage.qml (+1/-1) src/imports/ContactView/ActionButton.qml (+1/-1) src/imports/ContactView/BasicFieldView.qml (+1/-1) src/imports/ContactView/ContactDetailAvatarView.qml (+2/-3) src/imports/ContactView/ContactDetailPhoneNumberView.qml (+1/-1) src/imports/Ubuntu/Contacts/CMakeLists.txt (+1/-7) src/imports/Ubuntu/Contacts/ContactDelegate.qml (+43/-78) src/imports/Ubuntu/Contacts/ContactListView.qml (+24/-0) src/imports/Ubuntu/Contacts/ContactSimpleListView.qml (+100/-22) src/imports/Ubuntu/Contacts/Contacts.js (+26/-2) src/imports/Ubuntu/Contacts/DialogButtons.qml (+1/-0) src/imports/Ubuntu/Contacts/FavoriteDelegate.qml (+112/-0) src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml (+0/-3) |
To merge this branch: | bzr merge lp:~renatofilho/address-book-app/fix-visuals |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Gustavo Pichorim Boiko (community) | Approve | ||
PS Jenkins bot | continuous-integration | Approve | |
Bill Filler (community) | Approve | ||
Review via email: mp+189999@code.launchpad.net |
Commit message
Replaced default avatar image.
Resized contact delegate height.
Replaced ValueSelector images.
Updated contact favorite delegate visuals.
Description of the change
To correct test this branch you need update address book service from this branch: https:/
PS Jenkins bot (ps-jenkins) wrote : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:100
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:101
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
ABORTED: http://
ABORTED: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:101
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:101
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:101
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:102
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
FAILURE: http://
UNSTABLE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:104
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Gustavo Pichorim Boiko (boiko) wrote : | # |
Looks good!
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
- 105. By Renato Araujo Oliveira Filho
-
Merged mainline.
- 106. By Renato Araujo Oliveira Filho
-
Optimize avatar load for contact list.
- 107. By Renato Araujo Oliveira Filho
-
Optimized FavoriteDelegate image loader.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:107
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Gustavo Pichorim Boiko (boiko) wrote : | # |
Latest changes look good too!
Preview Diff
1 | === modified file 'CMakeLists.txt' |
2 | --- CMakeLists.txt 2013-07-31 22:24:45 +0000 |
3 | +++ CMakeLists.txt 2013-10-11 00:12:33 +0000 |
4 | @@ -27,11 +27,6 @@ |
5 | # Tests |
6 | enable_testing() |
7 | |
8 | -add_subdirectory(data) |
9 | -add_subdirectory(src) |
10 | -add_subdirectory(po) |
11 | -add_subdirectory(tests) |
12 | - |
13 | # uninstall target |
14 | configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" |
15 | "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" |
16 | @@ -43,3 +38,16 @@ |
17 | configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" |
18 | "${CMAKE_CURRENT_BINARY_DIR}/config.h" |
19 | IMMEDIATE @ONLY) |
20 | + |
21 | +# components PATH |
22 | +execute_process( |
23 | + COMMAND qmake -query QT_INSTALL_QML |
24 | + OUTPUT_VARIABLE QT_IMPORTS_DIR |
25 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
26 | +) |
27 | +set(QMLPLUGIN_INSTALL_PREFIX "${QT_IMPORTS_DIR}/Ubuntu/Contacts.${API_VERSION}/") |
28 | + |
29 | +add_subdirectory(data) |
30 | +add_subdirectory(src) |
31 | +add_subdirectory(po) |
32 | +add_subdirectory(tests) |
33 | |
34 | === modified file 'debian/qtdeclarative5-ubuntu-contacts0.1.install' |
35 | --- debian/qtdeclarative5-ubuntu-contacts0.1.install 2013-07-26 22:43:21 +0000 |
36 | +++ debian/qtdeclarative5-ubuntu-contacts0.1.install 2013-10-11 00:12:33 +0000 |
37 | @@ -1,2 +1,1 @@ |
38 | usr/lib/*/qt5/qml/Ubuntu/Contacts* |
39 | -usr/share/icons/hicolor/scalable/emblems/avatar-default.svg |
40 | |
41 | === modified file 'src/artwork/CMakeLists.txt' |
42 | --- src/artwork/CMakeLists.txt 2013-10-09 17:53:41 +0000 |
43 | +++ src/artwork/CMakeLists.txt 2013-10-11 00:12:33 +0000 |
44 | @@ -2,16 +2,21 @@ |
45 | address-book-app.png |
46 | ) |
47 | |
48 | +set(ADDRESS_BOOK_COMPONENTS_ARTWORK |
49 | + contact-default@27.png |
50 | + tick-dark@30.png |
51 | +) |
52 | + |
53 | set(ADDRESS_BOOK_APP_ARTWORK |
54 | action-list.png |
55 | add-detail.svg |
56 | add.png |
57 | address-book-app.png |
58 | address-book-app-preview.png |
59 | - avatar-default.svg |
60 | birthday-cake.svg |
61 | combo-indicator.png |
62 | contact-call.svg |
63 | + contact-default-profile.png |
64 | contact-email.svg |
65 | contact-location.png |
66 | contact-message.svg |
67 | @@ -42,15 +47,11 @@ |
68 | DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/48x48/apps |
69 | ) |
70 | |
71 | -install(FILES avatar-default.svg |
72 | - DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/emblems |
73 | -) |
74 | - |
75 | install(FILES ${ADDRESS_BOOK_APP_ARTWORK} |
76 | DESTINATION ${ADDRESS_BOOK_APP_DIR}/artwork |
77 | ) |
78 | |
79 | - |
80 | - |
81 | - |
82 | +install(FILES ${ADDRESS_BOOK_COMPONENTS_ARTWORK} |
83 | + DESTINATION ${QMLPLUGIN_INSTALL_PREFIX}/artwork |
84 | +) |
85 | |
86 | |
87 | === removed file 'src/artwork/avatar-default.svg' |
88 | --- src/artwork/avatar-default.svg 2013-07-25 20:00:03 +0000 |
89 | +++ src/artwork/avatar-default.svg 1970-01-01 00:00:00 +0000 |
90 | @@ -1,135 +0,0 @@ |
91 | -<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
92 | -<!-- Created with Inkscape (http://www.inkscape.org/) --> |
93 | - |
94 | -<svg |
95 | - xmlns:dc="http://purl.org/dc/elements/1.1/" |
96 | - xmlns:cc="http://creativecommons.org/ns#" |
97 | - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
98 | - xmlns:svg="http://www.w3.org/2000/svg" |
99 | - xmlns="http://www.w3.org/2000/svg" |
100 | - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
101 | - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
102 | - width="90" |
103 | - height="90.000031" |
104 | - id="svg3615" |
105 | - version="1.1" |
106 | - inkscape:version="0.48+devel r12221" |
107 | - sodipodi:docname="contact.svg"> |
108 | - <defs |
109 | - id="defs3617"> |
110 | - <clipPath |
111 | - clipPathUnits="userSpaceOnUse" |
112 | - id="clipPath2995-6"> |
113 | - <path |
114 | - style="color:#000000;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
115 | - d="m 222,818.36215 0,54 126,0 0,-54 -43.875,0 c -0.0316,0.0521 -0.062,0.1043 -0.0937,0.15625 -2.2906,3.75334 -4.87723,7.16686 -7.875,9.875 -2.99777,2.70814 -6.52444,5 -11.125,5 -4.60056,0 -8.12214,-2.29391 -11.125,-5 -3.00286,-2.70609 -5.60728,-6.12218 -7.90625,-9.875 -0.0318,-0.0519 -0.062,-0.1042 -0.0937,-0.15625 L 222.0001,818.36215 Z" |
116 | - id="path2997-4" |
117 | - inkscape:connector-curvature="0" /> |
118 | - </clipPath> |
119 | - </defs> |
120 | - <sodipodi:namedview |
121 | - id="base" |
122 | - pagecolor="#ffffff" |
123 | - bordercolor="#666666" |
124 | - borderopacity="1.0" |
125 | - inkscape:pageopacity="0.0" |
126 | - inkscape:pageshadow="2" |
127 | - inkscape:zoom="7.9580786" |
128 | - inkscape:cx="36.190065" |
129 | - inkscape:cy="48.918863" |
130 | - inkscape:document-units="px" |
131 | - inkscape:current-layer="g4271" |
132 | - showgrid="true" |
133 | - fit-margin-top="0" |
134 | - fit-margin-left="0" |
135 | - fit-margin-right="0" |
136 | - fit-margin-bottom="0" |
137 | - inkscape:window-width="1920" |
138 | - inkscape:window-height="1029" |
139 | - inkscape:window-x="0" |
140 | - inkscape:window-y="24" |
141 | - inkscape:window-maximized="1"> |
142 | - <inkscape:grid |
143 | - type="xygrid" |
144 | - id="grid2986" |
145 | - empspacing="6" |
146 | - visible="true" |
147 | - enabled="true" |
148 | - snapvisiblegridlinesonly="true" |
149 | - originx="0px" |
150 | - originy="2.6171875e-06px" /> |
151 | - </sodipodi:namedview> |
152 | - <metadata |
153 | - id="metadata3620"> |
154 | - <rdf:RDF> |
155 | - <cc:Work |
156 | - rdf:about=""> |
157 | - <dc:format>image/svg+xml</dc:format> |
158 | - <dc:type |
159 | - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
160 | - <dc:title /> |
161 | - </cc:Work> |
162 | - </rdf:RDF> |
163 | - </metadata> |
164 | - <g |
165 | - inkscape:label="Layer 1" |
166 | - inkscape:groupmode="layer" |
167 | - id="layer1" |
168 | - transform="translate(1978.2857,336.49495)"> |
169 | - <g |
170 | - id="g4271" |
171 | - transform="translate(-2218.2857,-1106.8571)"> |
172 | - <path |
173 | - style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
174 | - clip-path="none" |
175 | - d="M 30.21875 54.15625 C 11.057821 55.125058 6 61.297631 6 75 L 6 81 C 6 90 6 90 18 90 L 72 90 C 84 90 84 90 84 81 L 84 75 C 84 61.305107 78.947539 55.130228 59.8125 54.15625 C 58.661142 55.560765 57.451922 56.86076 56.15625 58.03125 C 53.15848 60.73939 49.63181 63.03125 45.03125 63.03125 C 40.43069 63.03125 36.90911 60.73734 33.90625 58.03125 C 32.605846 56.859364 31.377261 55.564123 30.21875 54.15625 z " |
176 | - transform="translate(240,770.36215)" |
177 | - id="rect3461-3-1" /> |
178 | - <rect |
179 | - y="770.36218" |
180 | - x="240" |
181 | - height="90" |
182 | - width="90" |
183 | - id="rect4269" |
184 | - style="color:#000000;fill:none;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
185 | - <path |
186 | - inkscape:transform-center-y="21.408856" |
187 | - inkscape:transform-center-x="-0.0067782248" |
188 | - id="path3447-0-6" |
189 | - d="m 285.00024,770.36215 c -14.99976,-3e-5 -20.99976,6.00003 -20.99976,21.00003 l 0,3 c 0,12 12.03506,33 21.01729,33 8.98223,0 20.98223,-21 20.98223,-33 l 0,-3 c 0,-15 -6,-21 -20.99976,-21.00003 z" |
190 | - style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
191 | - inkscape:connector-curvature="0" |
192 | - sodipodi:nodetypes="zsszssz" /> |
193 | - </g> |
194 | - </g> |
195 | - <g |
196 | - inkscape:groupmode="layer" |
197 | - id="layer2" |
198 | - inkscape:label="Clips" |
199 | - sodipodi:insensitive="true" |
200 | - style="display:none"> |
201 | - <path |
202 | - transform="translate(-240,-770.36215)" |
203 | - style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
204 | - d="m 246,851.36218 c 0,9 0,9 12,9 l 54,0 c 12,0 12,0 12,-9 l 0,-6 c 0,-15 -6,-21 -30,-21 l -18,0 C 252,824.36218 246,830.36218 246,845.36218 Z" |
205 | - id="rect3461-3-1-5" |
206 | - inkscape:connector-curvature="0" |
207 | - sodipodi:nodetypes="csscccccc" |
208 | - clip-path="url(#clipPath2995-6)" /> |
209 | - <rect |
210 | - y="3.2134991e-05" |
211 | - x="0" |
212 | - height="90" |
213 | - width="90" |
214 | - id="rect4269-8" |
215 | - style="color:#000000;fill:none;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
216 | - <path |
217 | - inkscape:transform-center-y="21.408856" |
218 | - inkscape:transform-center-x="-0.0067782248" |
219 | - id="path3447-0-6-9" |
220 | - d="M 45.00024,-4.8230939e-7 C 30.00048,-3.0482196e-5 24.00048,6.0000295 24.00048,21.00003 l 0,3 c 0,12 12.03506,33 21.01729,33 8.98223,0 20.98223,-21 20.98223,-33 l 0,-3 C 66,6.0000295 60,2.9517803e-5 45.00024,-4.8230939e-7 Z" |
221 | - style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
222 | - inkscape:connector-curvature="0" |
223 | - sodipodi:nodetypes="zsszssz" /> |
224 | - </g> |
225 | -</svg> |
226 | |
227 | === added file 'src/artwork/contact-default-profile.png' |
228 | Binary files src/artwork/contact-default-profile.png 1970-01-01 00:00:00 +0000 and src/artwork/contact-default-profile.png 2013-10-11 00:12:33 +0000 differ |
229 | === added file 'src/artwork/contact-default@27.png' |
230 | Binary files src/artwork/contact-default@27.png 1970-01-01 00:00:00 +0000 and src/artwork/contact-default@27.png 2013-10-11 00:12:33 +0000 differ |
231 | === added file 'src/artwork/tick-dark@30.png' |
232 | Binary files src/artwork/tick-dark@30.png 1970-01-01 00:00:00 +0000 and src/artwork/tick-dark@30.png 2013-10-11 00:12:33 +0000 differ |
233 | === modified file 'src/imports/ContactEdit/ContactDetailAvatarEditor.qml' |
234 | --- src/imports/ContactEdit/ContactDetailAvatarEditor.qml 2013-10-09 21:48:18 +0000 |
235 | +++ src/imports/ContactEdit/ContactDetailAvatarEditor.qml 2013-10-11 00:12:33 +0000 |
236 | @@ -25,7 +25,7 @@ |
237 | ContactDetailBase { |
238 | id: root |
239 | |
240 | - readonly property string defaultAvatar: "image://theme/avatar-default" |
241 | + readonly property string defaultAvatar: Qt.resolvedUrl("../../artwork/contact-default-profile.png") |
242 | |
243 | function save() { |
244 | if (avatarImage.source != root.defaultAvatar) { |
245 | @@ -86,28 +86,29 @@ |
246 | } |
247 | } |
248 | |
249 | - AbstractButton { |
250 | - id: changeButton |
251 | - |
252 | - property var activeTransfer |
253 | - property var loadingDialog: null |
254 | - |
255 | + Icon { |
256 | anchors { |
257 | right: parent.right |
258 | + rightMargin: units.gu(1.5) |
259 | bottom: parent.bottom |
260 | - margins: units.gu(1) |
261 | + bottomMargin: units.gu(2) |
262 | } |
263 | - |
264 | width: units.gu(3) |
265 | - height: units.gu(3) |
266 | - |
267 | - Image { |
268 | - anchors.fill: parent |
269 | - source: "artwork:/import-image.svg" |
270 | - fillMode: Image.PreserveAspectFit |
271 | - } |
272 | - |
273 | + height: width |
274 | + name: "import-image" |
275 | + color: "white" |
276 | + } |
277 | + |
278 | + MouseArea { |
279 | + id: changeButton |
280 | + |
281 | + property var activeTransfer |
282 | + property var loadingDialog: null |
283 | + |
284 | + anchors.fill: parent |
285 | onClicked: { |
286 | + // make sure the OSK disappear |
287 | + root.forceActiveFocus() |
288 | if (!changeButton.loadingDialog) { |
289 | changeButton.loadingDialog = PopupUtils.open(loadingDialog, null) |
290 | changeButton.activeTransfer = ContentHub.importContent(ContentType.Pictures, |
291 | |
292 | === modified file 'src/imports/ContactEdit/ContactDetailGroupWithTypeEditor.qml' |
293 | --- src/imports/ContactEdit/ContactDetailGroupWithTypeEditor.qml 2013-10-03 22:48:16 +0000 |
294 | +++ src/imports/ContactEdit/ContactDetailGroupWithTypeEditor.qml 2013-10-11 00:12:33 +0000 |
295 | @@ -88,17 +88,16 @@ |
296 | } |
297 | |
298 | |
299 | - Image { |
300 | + Icon { |
301 | anchors { |
302 | verticalCenter: parent.verticalCenter |
303 | right: parent.right |
304 | rightMargin: units.gu(2) |
305 | } |
306 | - width: units.gu(3) |
307 | - height: units.gu(3) |
308 | - |
309 | - source: "artwork:/add-detail.svg" |
310 | - fillMode: Image.PreserveAspectFit |
311 | + width: units.gu(2) |
312 | + height: units.gu(2) |
313 | + color: "white" |
314 | + name: "add" |
315 | MouseArea { |
316 | anchors.fill: parent |
317 | onClicked: { |
318 | |
319 | === modified file 'src/imports/ContactEdit/ValueSelector.qml' |
320 | --- src/imports/ContactEdit/ValueSelector.qml 2013-09-27 11:32:35 +0000 |
321 | +++ src/imports/ContactEdit/ValueSelector.qml 2013-10-11 00:12:33 +0000 |
322 | @@ -85,21 +85,18 @@ |
323 | color: "#f3f3e7" |
324 | } |
325 | |
326 | - Label { |
327 | - id: arrowIndicator |
328 | + Icon { |
329 | + name: "chevron" |
330 | + color: "white" |
331 | + height: units.gu(1) |
332 | + width: height |
333 | |
334 | anchors { |
335 | verticalCenter: parent.verticalCenter |
336 | + verticalCenterOffset: units.dp(2) |
337 | left: label.right |
338 | + leftMargin: units.gu(0.5) |
339 | } |
340 | - width: units.gu(2) |
341 | - horizontalAlignment: Text.AlignHCenter |
342 | - text: ">" |
343 | - |
344 | - // style |
345 | - fontSize: "medium" |
346 | - color: "#f3f3e7" |
347 | - opacity: 0.2 |
348 | } |
349 | } |
350 | |
351 | @@ -123,39 +120,22 @@ |
352 | top: parent.top |
353 | bottom: parent.bottom |
354 | } |
355 | - width: arrow.width + listLabel.paintedWidth// + units.gu(2) |
356 | + width: arrow.width + listLabel.paintedWidth + units.gu(1) |
357 | + opacity: currentIndex == index ? 1.0 : 0.2 |
358 | |
359 | Label { |
360 | - id: arrow |
361 | + id: listLabel |
362 | |
363 | anchors { |
364 | verticalCenter: parent.verticalCenter |
365 | left: parent.left |
366 | } |
367 | - width: visible ? units.gu(2) : 0 |
368 | - text: ">" |
369 | - horizontalAlignment: Text.AlignHCenter |
370 | - visible: index > 0 |
371 | - |
372 | - // style |
373 | - fontSize: "medium" |
374 | - color: "#f3f3e7" |
375 | - opacity: 0.2 |
376 | - } |
377 | - Label { |
378 | - id: listLabel |
379 | - |
380 | - anchors { |
381 | - verticalCenter: parent.verticalCenter |
382 | - left: arrow.right |
383 | - right: parent.right |
384 | - } |
385 | + width: paintedWidth |
386 | text: modelData |
387 | |
388 | // style |
389 | fontSize: "medium" |
390 | color: "#f3f3e7" |
391 | - opacity: currentIndex == index ? 1.0 : 0.2 |
392 | |
393 | MouseArea { |
394 | width: parent.width + units.gu(0.5) |
395 | @@ -164,6 +144,23 @@ |
396 | onClicked: currentIndex = index |
397 | } |
398 | } |
399 | + |
400 | + Icon { |
401 | + id: arrow |
402 | + |
403 | + name: "chevron" |
404 | + color: "white" |
405 | + height: visible ? units.gu(1) : 0 |
406 | + width: height |
407 | + visible: index < (listView.count - 1) |
408 | + |
409 | + anchors { |
410 | + verticalCenter: listLabel.verticalCenter |
411 | + verticalCenterOffset: units.dp(2) |
412 | + left: listLabel.right |
413 | + leftMargin: units.gu(0.5) |
414 | + } |
415 | + } |
416 | } |
417 | } |
418 | |
419 | |
420 | === modified file 'src/imports/ContactList/ContactListPage.qml' |
421 | --- src/imports/ContactList/ContactListPage.qml 2013-10-07 21:32:52 +0000 |
422 | +++ src/imports/ContactList/ContactListPage.qml 2013-10-11 00:12:33 +0000 |
423 | @@ -65,6 +65,7 @@ |
424 | ContactsUI.ContactListView { |
425 | id: contactList |
426 | |
427 | + showFavoritePhoneLabel: false |
428 | multiSelectionEnabled: true |
429 | anchors { |
430 | // This extra margin is necessary because the toolbar area overlaps the last item in the view |
431 | @@ -74,7 +75,6 @@ |
432 | fill: parent |
433 | } |
434 | onError: PopupUtils.open(dialog, null) |
435 | - defaultAvatarImageUrl: "artwork:/avatar-default.svg" |
436 | swipeToDelete: true |
437 | |
438 | ActivityIndicator { |
439 | |
440 | === modified file 'src/imports/ContactView/ActionButton.qml' |
441 | --- src/imports/ContactView/ActionButton.qml 2013-09-20 12:01:35 +0000 |
442 | +++ src/imports/ContactView/ActionButton.qml 2013-10-11 00:12:33 +0000 |
443 | @@ -29,6 +29,6 @@ |
444 | anchors.centerIn: parent |
445 | height: units.gu(3) |
446 | width: height |
447 | - color: UbuntuColors.warmGrey |
448 | + color: "white" |
449 | } |
450 | } |
451 | |
452 | === modified file 'src/imports/ContactView/BasicFieldView.qml' |
453 | --- src/imports/ContactView/BasicFieldView.qml 2013-10-03 22:48:16 +0000 |
454 | +++ src/imports/ContactView/BasicFieldView.qml 2013-10-11 00:12:33 +0000 |
455 | @@ -47,7 +47,7 @@ |
456 | visible: text != "" |
457 | anchors { |
458 | left: actionIcon.right |
459 | - leftMargin: actionIcon.visible ? units.gu(1) : 0 |
460 | + leftMargin: actionIcon.visible ? units.gu(2) : 0 |
461 | top: parent.top |
462 | topMargin: units.gu(1) |
463 | } |
464 | |
465 | === modified file 'src/imports/ContactView/ContactDetailAvatarView.qml' |
466 | --- src/imports/ContactView/ContactDetailAvatarView.qml 2013-10-04 19:16:48 +0000 |
467 | +++ src/imports/ContactView/ContactDetailAvatarView.qml 2013-10-11 00:12:33 +0000 |
468 | @@ -26,9 +26,8 @@ |
469 | function getAvatar(avatarDetail) |
470 | { |
471 | // use this verbose mode to avoid problems with binding loops |
472 | - var avatarUrl = "image://theme/avatar-default" |
473 | - |
474 | - if (avatarDetail) { |
475 | + var avatarUrl = Qt.resolvedUrl("../../artwork/contact-default-profile.png") |
476 | + if (avatarDetail) { |
477 | var avatarValue = avatarDetail.value(Avatar.ImageUrl) |
478 | if (avatarValue != "") { |
479 | avatarUrl = avatarValue |
480 | |
481 | === modified file 'src/imports/ContactView/ContactDetailPhoneNumberView.qml' |
482 | --- src/imports/ContactView/ContactDetailPhoneNumberView.qml 2013-10-04 21:52:50 +0000 |
483 | +++ src/imports/ContactView/ContactDetailPhoneNumberView.qml 2013-10-11 00:12:33 +0000 |
484 | @@ -76,7 +76,7 @@ |
485 | bottom: parent.bottom |
486 | } |
487 | width: height |
488 | - iconName: "incoming-call" |
489 | + iconName: "call-start" |
490 | onClicked: Qt.openUrlExternally("tel:///" + encodeURIComponent(view.values[0])) |
491 | } |
492 | |
493 | |
494 | === modified file 'src/imports/Ubuntu/Contacts/CMakeLists.txt' |
495 | --- src/imports/Ubuntu/Contacts/CMakeLists.txt 2013-10-03 14:30:11 +0000 |
496 | +++ src/imports/Ubuntu/Contacts/CMakeLists.txt 2013-10-11 00:12:33 +0000 |
497 | @@ -10,6 +10,7 @@ |
498 | ContactSearchListView.qml |
499 | ContactSimpleListView.qml |
500 | DialogButtons.qml |
501 | + FavoriteDelegate.qml |
502 | MultipleSelectionListView.qml |
503 | MultipleSelectionVisualModel.qml |
504 | qmldir |
505 | @@ -21,12 +22,5 @@ |
506 | |
507 | # make the files visible on qtcreator |
508 | add_custom_target(contact_components_QmlFiles ALL SOURCES ${CONTACT_COMPONENTS_QMLS}) |
509 | - |
510 | -execute_process( |
511 | - COMMAND qmake -query QT_INSTALL_QML |
512 | - OUTPUT_VARIABLE QT_IMPORTS_DIR |
513 | - OUTPUT_STRIP_TRAILING_WHITESPACE |
514 | -) |
515 | -set(QMLPLUGIN_INSTALL_PREFIX "${QT_IMPORTS_DIR}/Ubuntu/Contacts.${API_VERSION}/") |
516 | install(FILES ${CONTACT_COMPONENTS_QMLS} DESTINATION ${QMLPLUGIN_INSTALL_PREFIX}) |
517 | |
518 | |
519 | === modified file 'src/imports/Ubuntu/Contacts/ContactDelegate.qml' |
520 | --- src/imports/Ubuntu/Contacts/ContactDelegate.qml 2013-10-09 12:43:14 +0000 |
521 | +++ src/imports/Ubuntu/Contacts/ContactDelegate.qml 2013-10-11 00:12:33 +0000 |
522 | @@ -24,76 +24,63 @@ |
523 | id: item |
524 | |
525 | property int index: -1 |
526 | - property variant itemDelegate: null |
527 | - |
528 | - implicitHeight: delegate.height + (delegate.detailsShown ? pickerLoader.item.height : 0) |
529 | + property bool showAvatar: true |
530 | + property alias selected: delegate.selected |
531 | + property alias removable: delegate.removable |
532 | + property bool selectMode: false |
533 | + property string defaultAvatarUrl: "" |
534 | + property int titleDetail: ContactDetail.Name |
535 | + property variant titleFields: [ Name.FirstName, Name.LastName ] |
536 | + property bool detailsShown: false |
537 | + |
538 | + signal contactClicked(var index, var contact) |
539 | + signal pressAndHold(var index, var contact) |
540 | + |
541 | + implicitHeight: delegate.height + (item.detailsShown ? pickerLoader.item.height : 0) |
542 | width: parent ? parent.width : 0 |
543 | clip: true |
544 | |
545 | - Connections { |
546 | - target: contactListView |
547 | - onCurrentContactExpandedChanged: { |
548 | - if (index != currentContactExpanded) { |
549 | - delegate.detailsShown = false |
550 | - } |
551 | - } |
552 | - } |
553 | - |
554 | ListItem.Empty { |
555 | id: delegate |
556 | |
557 | - property bool detailsShown: false |
558 | - |
559 | - height: units.gu(10) |
560 | + height: units.gu(6) |
561 | showDivider: false |
562 | - selected: contactListView.multiSelectionEnabled && |
563 | - item.itemDelegate && |
564 | - contactListView.isSelected && |
565 | - contactListView.isSelected(item.itemDelegate) |
566 | - removable: contactListView && |
567 | - contactListView.swipeToDelete && |
568 | - !detailsShown && |
569 | - !contactListView.isInSelectionMode |
570 | confirmRemoval: removable |
571 | UbuntuShape { |
572 | id: avatar |
573 | |
574 | - height: units.gu(7) |
575 | - width: contactListView.showAvatar ? units.gu(7) : 0 |
576 | + height: units.gu(4) |
577 | + width: item.showAvatar ? units.gu(4) : 0 |
578 | visible: width > 0 |
579 | + radius: "medium" |
580 | anchors { |
581 | left: parent.left |
582 | leftMargin: units.gu(2) |
583 | verticalCenter: parent.verticalCenter |
584 | } |
585 | image: Image { |
586 | + property bool isDefaultAvatar: (source == item.defaultAvatarUrl) |
587 | fillMode: Image.PreserveAspectCrop |
588 | asynchronous: true |
589 | - source: ContactsJS.getAvatar(contact) |
590 | + source: ContactsJS.getAvatar(contact, item.defaultAvatarUrl) |
591 | + sourceSize.width: isDefaultAvatar ? undefined : width * 1.5 |
592 | + sourceSize.height: isDefaultAvatar ? undefined : height * 1.5 |
593 | } |
594 | } |
595 | |
596 | - Row { |
597 | - spacing: units.gu(1) |
598 | + Label { |
599 | + id: name |
600 | + |
601 | anchors { |
602 | left: avatar.right |
603 | leftMargin: units.gu(2) |
604 | verticalCenter: parent.verticalCenter |
605 | right: selectionMark.left |
606 | } |
607 | - Label { |
608 | - id: name |
609 | - height: paintedHeight |
610 | - text: ContactsJS.formatToDisplay(contact, contactListView.titleDetail, contactListView.titleFields) |
611 | - fontSize: "large" |
612 | - } |
613 | - Label { |
614 | - id: company |
615 | - height: paintedHeight |
616 | - text: ContactsJS.formatToDisplay(contact, contactListView.subTitleDetail, contactListView.subTitleFields) |
617 | - fontSize: "medium" |
618 | - opacity: 0.2 |
619 | - } |
620 | + |
621 | + height: paintedHeight |
622 | + text: ContactsJS.formatToDisplay(contact, item.titleDetail, item.titleFields) |
623 | + fontSize: "medium" |
624 | } |
625 | |
626 | Rectangle { |
627 | @@ -106,46 +93,24 @@ |
628 | } |
629 | |
630 | color: "black" |
631 | - width: delegate.selected ? units.gu(5) : 0 |
632 | + width: item.selectMode ? units.gu(5) : 0 |
633 | visible: width > 0 |
634 | - Icon { |
635 | - name: "select" |
636 | + |
637 | + Behavior on width { |
638 | + UbuntuNumberAnimation { } |
639 | + } |
640 | + |
641 | + Image { |
642 | height: units.gu(3) |
643 | width: height |
644 | anchors.centerIn: parent |
645 | - } |
646 | - } |
647 | - |
648 | - onClicked: { |
649 | - if (contactListView.isInSelectionMode) { |
650 | - if (!contactListView.selectItem(item.itemDelegate)) { |
651 | - contactListView.deselectItem(item.itemDelegate) |
652 | - } |
653 | - return |
654 | - } |
655 | - if (currentContactExpanded == index) { |
656 | - currentContactExpanded = -1 |
657 | - detailsShown = false |
658 | - return |
659 | - // check if we should expand and display the details picker |
660 | - } else if (detailToPick !== 0){ |
661 | - currentContactExpanded = index |
662 | - detailsShown = !detailsShown |
663 | - return |
664 | - } |
665 | - if (priv.currentOperation !== -1) { |
666 | - return |
667 | - } |
668 | - contactListView.currentIndex = index |
669 | - priv.currentOperation = contactsModel.fetchContacts(contact.contactId) |
670 | - } |
671 | - |
672 | - onPressAndHold: { |
673 | - if (contactListView.multiSelectionEnabled) { |
674 | - contactListView.startSelection() |
675 | - contactListView.selectItem(itemDelegate) |
676 | - } |
677 | - } |
678 | + source: Qt.resolvedUrl("./artwork/tick-dark.png") |
679 | + opacity: item.selected ? 1.0 : 0.2 |
680 | + } |
681 | + } |
682 | + |
683 | + onClicked: item.contactClicked(index, contact) |
684 | + onPressAndHold: item.pressAndHold(index, contact) |
685 | |
686 | onItemRemoved: { |
687 | contactsModel.removeContact(contact.contactId) |
688 | @@ -155,7 +120,7 @@ |
689 | Loader { |
690 | id: pickerLoader |
691 | |
692 | - source: delegate.detailsShown ? Qt.resolvedUrl("ContactDetailPickerDelegate.qml") : "" |
693 | + source: item.detailsShown ? Qt.resolvedUrl("ContactDetailPickerDelegate.qml") : "" |
694 | anchors { |
695 | top: delegate.bottom |
696 | left: parent.left |
697 | |
698 | === modified file 'src/imports/Ubuntu/Contacts/ContactListView.qml' |
699 | --- src/imports/Ubuntu/Contacts/ContactListView.qml 2013-10-01 18:42:19 +0000 |
700 | +++ src/imports/Ubuntu/Contacts/ContactListView.qml 2013-10-11 00:12:33 +0000 |
701 | @@ -41,6 +41,14 @@ |
702 | ContactSimpleListView { |
703 | id: root |
704 | |
705 | + /*! |
706 | + \qmlproperty bool showFavoritePhoneLabel |
707 | + |
708 | + This property holds if the phone label should appear on favorite contact or not |
709 | + By default this is set to true. |
710 | + */ |
711 | + property bool showFavoritePhoneLabel: true |
712 | + |
713 | header: Column { |
714 | width: parent.width |
715 | height: favouritesList.count > 0 ? childrenRect.height : 0 |
716 | @@ -57,12 +65,22 @@ |
717 | left: parent.left |
718 | right: parent.right |
719 | } |
720 | + |
721 | height: (count > 0 && !root.isInSelectionMode) ? contentHeight : 0 |
722 | onContactClicked: root.contactClicked(contact) |
723 | defaultAvatarImageUrl: root.defaultAvatarImageUrl |
724 | multiSelectionEnabled: false |
725 | interactive: false |
726 | showSections: false |
727 | + |
728 | + fetchHint: FetchHint { |
729 | + optimizationHints: FetchHint.AllRequired |
730 | + detailTypesHint: [ ContactDetail.Avatar, |
731 | + ContactDetail.Favorite, |
732 | + ContactDetail.Name, |
733 | + ContactDetail.PhoneNumber ] |
734 | + } |
735 | + |
736 | filter: DetailFilter { |
737 | detail: ContactDetail.Favorite |
738 | field: Favorite.Favorite |
739 | @@ -70,6 +88,12 @@ |
740 | matchFlags: DetailFilter.MatchExactly |
741 | } |
742 | |
743 | + listDelegate: FavoriteDelegate { |
744 | + showPhoneLabel: root.showFavoritePhoneLabel |
745 | + defaultAvatarUrl: favouritesList.defaultAvatarImageUrl |
746 | + onContactClicked: _fetchContact(index, contact) |
747 | + } |
748 | + |
749 | Behavior on height { |
750 | UbuntuNumberAnimation {} |
751 | } |
752 | |
753 | === modified file 'src/imports/Ubuntu/Contacts/ContactSimpleListView.qml' |
754 | --- src/imports/Ubuntu/Contacts/ContactSimpleListView.qml 2013-10-09 18:01:00 +0000 |
755 | +++ src/imports/Ubuntu/Contacts/ContactSimpleListView.qml 2013-10-11 00:12:33 +0000 |
756 | @@ -80,20 +80,6 @@ |
757 | */ |
758 | property variant titleFields: [ Name.FirstName, Name.LastName ] |
759 | /*! |
760 | - \qmlproperty int subTitleDetail |
761 | - |
762 | - This property holds the contact detail which will be used to display the contact subtitle in the delegate |
763 | - By default this is set to ContactDetail.Organization |
764 | - */ |
765 | - property int subTitleDetail: ContactDetail.Organization |
766 | - /*! |
767 | - \qmlproperty list<int> subTitleFields |
768 | - |
769 | - This property holds the list of all fields which will be used to display the contact subtitle in the delegate |
770 | - By default this is set to [ Organization.Name ] |
771 | - */ |
772 | - property variant subTitleFields: [ Organization.Name ] |
773 | - /*! |
774 | \qmlproperty list<SortOrder> sortOrders |
775 | |
776 | This property holds a list of sort orders used by the contacts model. |
777 | @@ -129,7 +115,7 @@ |
778 | This property holds the default image url to be used when the current contact does |
779 | not contains a photo |
780 | */ |
781 | - property string defaultAvatarImageUrl: "image://theme/avatar-default" |
782 | + property string defaultAvatarImageUrl: Qt.resolvedUrl("./artwork/contact-default.png") |
783 | /*! |
784 | \qmlproperty bool loading |
785 | |
786 | @@ -208,6 +194,19 @@ |
787 | } |
788 | } |
789 | |
790 | + /*! |
791 | + private |
792 | + Fetch contact and emit contact clicked signal |
793 | + */ |
794 | + function _fetchContact(index, contact) |
795 | + { |
796 | + if (priv.currentOperation !== -1) { |
797 | + return |
798 | + } |
799 | + contactListView.currentIndex = index |
800 | + priv.currentOperation = contactsModel.fetchContacts(contact.contactId) |
801 | + } |
802 | + |
803 | clip: true |
804 | snapMode: ListView.SnapToItem |
805 | section { |
806 | @@ -217,6 +216,7 @@ |
807 | delegate: ListItem.Header { |
808 | id: listHeader |
809 | text: section |
810 | + height: units.gu(4) |
811 | |
812 | Rectangle { |
813 | z: -1 |
814 | @@ -250,9 +250,9 @@ |
815 | property bool loaded: false |
816 | property var contact: model.contact |
817 | property int _index: index |
818 | - property variant loaderDelegate: loaderDelegate |
819 | property int delegateHeight: item ? item.implicitHeight : 0 |
820 | - property int targetHeight: ((currentContactExpanded == index) && detailToPick != 0) ? delegateHeight : units.gu(10) |
821 | + property int targetHeight: ((currentContactExpanded == index) && detailToPick != 0) ? delegateHeight : units.gu(6) |
822 | + property bool detailsShown: false |
823 | |
824 | source: Qt.resolvedUrl("ContactDelegate.qml") |
825 | active: true |
826 | @@ -261,6 +261,15 @@ |
827 | visible: loaderDelegate.status == Loader.Ready |
828 | state: contactListView.expanded ? "" : "collapsed" |
829 | |
830 | + Connections { |
831 | + target: contactListView |
832 | + onCurrentContactExpandedChanged: { |
833 | + if (index != currentContactExpanded) { |
834 | + loaderDelegate.detailsShown = false |
835 | + } |
836 | + } |
837 | + } |
838 | + |
839 | Binding { |
840 | target: loaderDelegate.item |
841 | property: "index" |
842 | @@ -270,9 +279,72 @@ |
843 | |
844 | Binding { |
845 | target: loaderDelegate.item |
846 | - property: "itemDelegate" |
847 | - value: loaderDelegate.loaderDelegate |
848 | - when: (loaderDelegate.status == Loader.Ready) |
849 | + property: "selected" |
850 | + value: contactListView.multiSelectionEnabled && |
851 | + contactListView.isSelected && |
852 | + contactListView.isSelected(loaderDelegate) |
853 | + when: (loaderDelegate.status == Loader.Ready) |
854 | + } |
855 | + |
856 | + Binding { |
857 | + target: loaderDelegate.item |
858 | + property: "removable" |
859 | + value: contactListView && |
860 | + contactListView.swipeToDelete && |
861 | + !detailsShown && |
862 | + !contactListView.isInSelectionMode |
863 | + when: (loaderDelegate.status == Loader.Ready) |
864 | + } |
865 | + |
866 | + Binding { |
867 | + target: loaderDelegate.item |
868 | + property: "defaultAvatarUrl" |
869 | + value: contactListView.defaultAvatarImageUrl |
870 | + when: (loaderDelegate.status == Loader.Ready) |
871 | + } |
872 | + |
873 | + Binding { |
874 | + target: loaderDelegate.item |
875 | + property: "detailsShown" |
876 | + value: loaderDelegate.detailsShown |
877 | + when: (loaderDelegate.status == Loader.Ready) |
878 | + } |
879 | + |
880 | + Binding { |
881 | + target: loaderDelegate.item |
882 | + property: "selectMode" |
883 | + value: contactListView.isInSelectionMode |
884 | + when: (loaderDelegate.status == Loader.Ready) |
885 | + } |
886 | + |
887 | + Connections { |
888 | + target: loaderDelegate.item |
889 | + onContactClicked: { |
890 | + if (contactListView.isInSelectionMode) { |
891 | + if (!contactListView.selectItem(loaderDelegate)) { |
892 | + contactListView.deselectItem(loaderDelegate) |
893 | + } |
894 | + return |
895 | + } |
896 | + if (contactListView.currentContactExpanded == index) { |
897 | + contactListView.currentContactExpanded = -1 |
898 | + loaderDelegate.detailsShown = false |
899 | + return |
900 | + // check if we should expand and display the details picker |
901 | + } else if (detailToPick !== 0) { |
902 | + contactListView.currentContactExpanded = index |
903 | + loaderDelegate.detailsShown = !detailsShown |
904 | + return |
905 | + } |
906 | + |
907 | + contactListView._fetchContact(index, contact) |
908 | + } |
909 | + onPressAndHold: { |
910 | + if (contactListView.multiSelectionEnabled) { |
911 | + contactListView.startSelection() |
912 | + contactListView.selectItem(loaderDelegate) |
913 | + } |
914 | + } |
915 | } |
916 | |
917 | Timer { |
918 | @@ -341,8 +413,14 @@ |
919 | ] |
920 | |
921 | fetchHint: FetchHint { |
922 | - detailTypesHint: root.showAvatar ? [contactListView.titleDetail, contactListView.subTitleDetail, ContactDetail.DisplayLabel, ContactDetail.Avatar] : |
923 | - [contactListView.titleDetail, contactListView.subTitleDetail, ContactDetail.DisplayLabel] |
924 | + detailTypesHint: { |
925 | + var hints = [ contactListView.titleDetail, ContactDetail.Tag, ContactDetail.DisplayLabel ] |
926 | + |
927 | + if (contactListView.showAvatar) { |
928 | + hints.push(ContactDetail.Avatar) |
929 | + } |
930 | + return hints |
931 | + } |
932 | } |
933 | |
934 | onErrorChanged: { |
935 | |
936 | === modified file 'src/imports/Ubuntu/Contacts/Contacts.js' |
937 | --- src/imports/Ubuntu/Contacts/Contacts.js 2013-10-05 00:09:51 +0000 |
938 | +++ src/imports/Ubuntu/Contacts/Contacts.js 2013-10-11 00:12:33 +0000 |
939 | @@ -1,3 +1,6 @@ |
940 | + |
941 | +var phoneTypeModel = null |
942 | + |
943 | // Format contact name to be displayed |
944 | function formatToDisplay(contact, contactDetail, detailFields, detail) { |
945 | if (!contact) { |
946 | @@ -24,10 +27,10 @@ |
947 | return values |
948 | } |
949 | |
950 | -function getAvatar(contact) |
951 | +function getAvatar(contact, defaultValue) |
952 | { |
953 | // use this verbose mode to avoid problems with binding loops |
954 | - var avatarUrl = contactListView.defaultAvatarImageUrl |
955 | + var avatarUrl = defaultValue |
956 | |
957 | if (!contact) { |
958 | return avatarUrl |
959 | @@ -42,3 +45,24 @@ |
960 | } |
961 | return avatarUrl |
962 | } |
963 | + |
964 | +function getFavoritePhoneLabel(contact, defaultValue) |
965 | +{ |
966 | + var phoneLabel = defaultValue |
967 | + if (!contact) { |
968 | + return phoneLabel |
969 | + } |
970 | + |
971 | + if (!phoneTypeModel) { |
972 | + phoneTypeModel = Qt.createQmlObject("import Ubuntu.Contacts 0.1; ContactDetailPhoneNumberTypeModel {}", |
973 | + parent, |
974 | + "getFavoritePhoneLabel") |
975 | + |
976 | + } |
977 | + |
978 | + var prefDetail = contact.preferredDetail("TEL") |
979 | + if (prefDetail) { |
980 | + phoneLabel = phoneTypeModel.get(phoneTypeModel.getTypeIndex(prefDetail)).label |
981 | + } |
982 | + return phoneLabel |
983 | +} |
984 | |
985 | === modified file 'src/imports/Ubuntu/Contacts/DialogButtons.qml' |
986 | --- src/imports/Ubuntu/Contacts/DialogButtons.qml 2013-07-26 18:09:18 +0000 |
987 | +++ src/imports/Ubuntu/Contacts/DialogButtons.qml 2013-10-11 00:12:33 +0000 |
988 | @@ -40,6 +40,7 @@ |
989 | leftMargin: units.gu(1) |
990 | verticalCenter: parent.verticalCenter |
991 | } |
992 | + color: UbuntuColors.warmGrey |
993 | onClicked: root.reject() |
994 | } |
995 | |
996 | |
997 | === added file 'src/imports/Ubuntu/Contacts/FavoriteDelegate.qml' |
998 | --- src/imports/Ubuntu/Contacts/FavoriteDelegate.qml 1970-01-01 00:00:00 +0000 |
999 | +++ src/imports/Ubuntu/Contacts/FavoriteDelegate.qml 2013-10-11 00:12:33 +0000 |
1000 | @@ -0,0 +1,112 @@ |
1001 | +/* |
1002 | + * Copyright (C) 2012-2013 Canonical, Ltd. |
1003 | + * |
1004 | + * This program is free software; you can redistribute it and/or modify |
1005 | + * it under the terms of the GNU General Public License as published by |
1006 | + * the Free Software Foundation; version 3. |
1007 | + * |
1008 | + * This program is distributed in the hope that it will be useful, |
1009 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1010 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1011 | + * GNU General Public License for more details. |
1012 | + * |
1013 | + * You should have received a copy of the GNU General Public License |
1014 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1015 | + */ |
1016 | + |
1017 | +import QtQuick 2.0 |
1018 | +import Ubuntu.Components 0.1 |
1019 | +import Ubuntu.Components.ListItems 0.1 as ListItem |
1020 | +import QtContacts 5.0 |
1021 | +import "Contacts.js" as ContactsJS |
1022 | + |
1023 | +ListItem.Empty { |
1024 | + id: favoriteItem |
1025 | + |
1026 | + property int index: -1 |
1027 | + property bool showAvatar: true |
1028 | + property string defaultAvatarUrl: "" |
1029 | + property int titleDetail: ContactDetail.Name |
1030 | + property variant titleFields: [ Name.FirstName, Name.LastName ] |
1031 | + property bool showPhoneLabel: true |
1032 | + |
1033 | + signal contactClicked(var index, var contact) |
1034 | + |
1035 | + implicitHeight: units.gu(8) |
1036 | + width: parent ? parent.width : 0 |
1037 | + |
1038 | + Rectangle { |
1039 | + anchors { |
1040 | + fill: parent |
1041 | + bottomMargin: units.dp(1) |
1042 | + } |
1043 | + color: UbuntuColors.warmGrey |
1044 | + opacity: 0.07 |
1045 | + } |
1046 | + |
1047 | + UbuntuShape { |
1048 | + id: avatar |
1049 | + |
1050 | + anchors { |
1051 | + left: parent.left |
1052 | + leftMargin: units.gu(2) |
1053 | + top: parent.top |
1054 | + topMargin: units.gu(1) |
1055 | + bottom: parent.bottom |
1056 | + bottomMargin: units.gu(1) |
1057 | + } |
1058 | + width: favoriteItem.showAvatar ? height : 0 |
1059 | + visible: favoriteItem.showAvatar |
1060 | + radius: "medium" |
1061 | + image: Image { |
1062 | + property bool isDefaultAvatar: (source == favoriteItem.defaultAvatarUrl) |
1063 | + |
1064 | + fillMode: Image.PreserveAspectCrop |
1065 | + asynchronous: true |
1066 | + source: ContactsJS.getAvatar(contact, favoriteItem.defaultAvatarUrl) |
1067 | + sourceSize.width: isDefaultAvatar ? undefined : width * 1.5 |
1068 | + sourceSize.height: isDefaultAvatar ? undefined : height * 1.5 |
1069 | + } |
1070 | + } |
1071 | + |
1072 | + Column { |
1073 | + anchors { |
1074 | + top: parent.top |
1075 | + topMargin: units.gu(2) |
1076 | + left: avatar.right |
1077 | + leftMargin: units.gu(2) |
1078 | + right: parent.right |
1079 | + bottom: parent.bottom |
1080 | + } |
1081 | + |
1082 | + Label { |
1083 | + id: name |
1084 | + |
1085 | + anchors { |
1086 | + left: parent.left |
1087 | + right: parent.right |
1088 | + } |
1089 | + |
1090 | + height: favoriteItem.showPhoneLabel ? paintedHeight : paintedHeight * 2 |
1091 | + verticalAlignment: Text.AlignVCenter |
1092 | + text: ContactsJS.formatToDisplay(contact, favoriteItem.titleDetail, favoriteItem.titleFields) |
1093 | + fontSize: "medium" |
1094 | + } |
1095 | + |
1096 | + Label { |
1097 | + id: label |
1098 | + |
1099 | + anchors { |
1100 | + left: parent.left |
1101 | + right: parent.right |
1102 | + } |
1103 | + |
1104 | + opacity: 0.2 |
1105 | + height: favoriteItem.showPhoneLabel ? paintedHeight : 0 |
1106 | + text: favoriteItem.showPhoneLabel && contact.phoneNumbers ? ContactsJS.getFavoritePhoneLabel(contact, "") : "" |
1107 | + fontSize: "medium" |
1108 | + } |
1109 | + } |
1110 | + |
1111 | + onClicked: favoriteItem.contactClicked(index, contact) |
1112 | +} |
1113 | |
1114 | === modified file 'src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml' |
1115 | --- src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml 2013-10-04 19:16:48 +0000 |
1116 | +++ src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml 2013-10-11 00:12:33 +0000 |
1117 | @@ -148,9 +148,6 @@ |
1118 | item.VisualDataModel.inSelected = false |
1119 | result = true |
1120 | } |
1121 | - if (selectedItems.count == 0) { |
1122 | - cancelSelection() |
1123 | - } |
1124 | return result |
1125 | } |
1126 | /*! |
FAILED: Continuous integration, rev:98 jenkins. qa.ubuntu. com/job/ address- book-app- ci/263/ jenkins. qa.ubuntu. com/job/ address- book-app- saucy-amd64- ci/263/ console jenkins. qa.ubuntu. com/job/ address- book-app- saucy-armhf- ci/264/ console jenkins. qa.ubuntu. com/job/ address- book-app- saucy-i386- ci/263/ console jenkins. qa.ubuntu. com/job/ generic- mediumtests- saucy/4809/ console jenkins. qa.ubuntu. com/job/ generic- mediumtests- touch/2652/ console jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- saucy-amd64/ 684/console jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- saucy-armhf/ 2654/console
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild: 10.97.0. 26:8080/ job/address- book-app- ci/263/ rebuild
http://