Merge lp:~nataliabidart/ubuntuone-control-panel/ui-misc-beautification into lp:ubuntuone-control-panel
- ui-misc-beautification
- Merge into trunk
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Natalia Bidart | ||||
Approved revision: | 57 | ||||
Merged at revision: | 53 | ||||
Proposed branch: | lp:~nataliabidart/ubuntuone-control-panel/ui-misc-beautification | ||||
Merge into: | lp:ubuntuone-control-panel | ||||
Diff against target: |
1500 lines (+499/-317) 9 files modified
data/dashboard.ui (+134/-126) data/device.ui (+117/-101) data/devices.ui (+7/-5) data/install.ui (+1/-1) data/management.ui (+52/-4) data/overview.ui (+77/-49) data/services.ui (+1/-1) ubuntuone/controlpanel/gtk/gui.py (+43/-10) ubuntuone/controlpanel/gtk/tests/test_gui.py (+67/-20) |
||||
To merge this branch: | bzr merge lp:~nataliabidart/ubuntuone-control-panel/ui-misc-beautification | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Martin Albisetti (community) | Approve | ||
Roman Yepishev (community) | fieldtest | Approve | |
Eric Casteleijn (community) | Approve | ||
Review via email: mp+47121@code.launchpad.net |
Commit message
- Misc visual improvemnts (LP: #692772):
* devices are now expading horizontally and each odd row has a different
color.
* account tab was re-arranged and upgrade and support buttons were renamed.
* quota information in the progress bar is filled with at least 5% if the
usages is less than that (but higher than 0).
Description of the change
To try IRL, open 2 terminals pointing to this branch and run:
terminal 1: DEBUG=True PYTHONPATH=. ./bin/ubuntuone
terminal 2: DEBUG=True PYTHONPATH=. ./bin/ubuntuone
Natalia Bidart (nataliabidart) wrote : | # |
> It all works and looks good.
>
> Observations:
>
> On the account tab, one button is centered (Get Support) and one is not (Buy
> more storage and new plans)
Yes, this is intentional in the sense that the buy storage is directly related to the plan description. I'm adding a couple of frames to make this looks better.
> "Buy more storage and new plans" is poorly worded. I don't think one "buys"
> plans exactly. Maybe "Buy additional storage/Sign up for new plans" or
> something similar.
Cristian will be reviewing all the string from the entire app next week, so he may be giving the final output about that. I'll raise this concern.
> It appears that there is no keybinding to close the window. I don't know what
> gnome guidelines have to say about this, but most applications do offer ALT+F4
> or CTRL+q (or CTRL+w for one of multiple windows.)
ALT+F4 definitely works (I use it every time). If it's not working for you, maybe there is an issue with your window manager? Let me know!
Thanks!
Roman Yepishev (rye) wrote : | # |
Beautifications are beautiful.
Opened LP:706824 for the issue with device loading which does not appear to be related to this branch.
Martin Albisetti (beuno) wrote : | # |
Looks great \o/
The only place where it seems to be a bit dodgy is in Devices, where, for me at least, each row seems to be too large, creating an unnecessary horizontal scroll bar.
See: http://
This is probably a side effect of so much text on the remove button (which I'd push Cristian and/or Ivanka to smallify!)
It may be an issue with my set up (although I don't have anything beyond a stock Maverick install), happy to approve if it is.
Martin Albisetti (beuno) wrote : | # |
Fixed! Thank you.
One last non-blocking comment, the content seems a bit too close to the borders, some padding there would help a bit.
I'll leave it to you to see if you can cheaply sneak that into any subsequent branch.
Natalia Bidart (nataliabidart) wrote : | # |
There are additional revisions which have not been approved in review. Please seek review and approval of these new revisions.
- 57. By Natalia Bidart
-
Merged trunk in.
Preview Diff
1 | === modified file 'data/banner.png' |
2 | Binary files data/banner.png 2011-01-21 15:26:51 +0000 and data/banner.png 2011-01-24 14:12:22 +0000 differ |
3 | === modified file 'data/dashboard.ui' |
4 | --- data/dashboard.ui 2011-01-21 15:26:51 +0000 |
5 | +++ data/dashboard.ui 2011-01-24 14:12:22 +0000 |
6 | @@ -1,96 +1,41 @@ |
7 | <?xml version="1.0" encoding="UTF-8"?> |
8 | <interface> |
9 | - <requires lib="gtk+" version="2.16"/> |
10 | + <requires lib="gtk+" version="2.22"/> |
11 | <!-- interface-naming-policy project-wide --> |
12 | <object class="GtkVBox" id="itself"> |
13 | <property name="visible">True</property> |
14 | <property name="border_width">10</property> |
15 | <property name="spacing">10</property> |
16 | <child> |
17 | - <object class="GtkHBox" id="hbox1"> |
18 | + <object class="GtkHBox" id="account"> |
19 | <property name="visible">True</property> |
20 | <property name="spacing">10</property> |
21 | <child> |
22 | - <object class="GtkVBox" id="account"> |
23 | + <object class="GtkFrame" id="frame2"> |
24 | <property name="visible">True</property> |
25 | - <property name="spacing">10</property> |
26 | + <property name="label_xalign">0</property> |
27 | + <property name="shadow_type">in</property> |
28 | <child> |
29 | - <object class="GtkVBox" id="data"> |
30 | + <object class="GtkAlignment" id="alignment2"> |
31 | <property name="visible">True</property> |
32 | - <property name="spacing">10</property> |
33 | + <property name="xscale">0</property> |
34 | + <property name="top_padding">10</property> |
35 | + <property name="bottom_padding">10</property> |
36 | + <property name="left_padding">12</property> |
37 | + <property name="right_padding">10</property> |
38 | <child> |
39 | - <object class="GtkVBox" id="vbox1"> |
40 | + <object class="GtkVBox" id="vbox5"> |
41 | <property name="visible">True</property> |
42 | - <child> |
43 | - <object class="GtkLabel" id="label1"> |
44 | - <property name="visible">True</property> |
45 | - <property name="xalign">0</property> |
46 | - <property name="label" translatable="yes"><b>Name:</b></property> |
47 | - <property name="use_markup">True</property> |
48 | - </object> |
49 | - <packing> |
50 | - <property name="position">0</property> |
51 | - </packing> |
52 | - </child> |
53 | + <property name="spacing">10</property> |
54 | <child> |
55 | <object class="GtkLabel" id="name_label"> |
56 | <property name="visible">True</property> |
57 | <property name="xalign">0</property> |
58 | - <property name="xpad">12</property> |
59 | <property name="label">tester name</property> |
60 | <property name="use_markup">True</property> |
61 | </object> |
62 | <packing> |
63 | <property name="expand">False</property> |
64 | - <property name="position">1</property> |
65 | - </packing> |
66 | - </child> |
67 | - </object> |
68 | - <packing> |
69 | - <property name="position">0</property> |
70 | - </packing> |
71 | - </child> |
72 | - <child> |
73 | - <object class="GtkVBox" id="vbox2"> |
74 | - <property name="visible">True</property> |
75 | - <child> |
76 | - <object class="GtkLabel" id="label3"> |
77 | - <property name="visible">True</property> |
78 | - <property name="xalign">0</property> |
79 | - <property name="label" translatable="yes"><b>Account type:</b></property> |
80 | - <property name="use_markup">True</property> |
81 | - </object> |
82 | - <packing> |
83 | - <property name="position">0</property> |
84 | - </packing> |
85 | - </child> |
86 | - <child> |
87 | - <object class="GtkLabel" id="type_label"> |
88 | - <property name="visible">True</property> |
89 | - <property name="xalign">0</property> |
90 | - <property name="xpad">12</property> |
91 | - <property name="label">22GB awesomeness</property> |
92 | - </object> |
93 | - <packing> |
94 | - <property name="position">1</property> |
95 | - </packing> |
96 | - </child> |
97 | - </object> |
98 | - <packing> |
99 | - <property name="position">1</property> |
100 | - </packing> |
101 | - </child> |
102 | - <child> |
103 | - <object class="GtkVBox" id="vbox3"> |
104 | - <property name="visible">True</property> |
105 | - <child> |
106 | - <object class="GtkLabel" id="label2"> |
107 | - <property name="visible">True</property> |
108 | - <property name="xalign">0</property> |
109 | - <property name="label" translatable="yes"><b>Email address:</b></property> |
110 | - <property name="use_markup">True</property> |
111 | - </object> |
112 | - <packing> |
113 | <property name="position">0</property> |
114 | </packing> |
115 | </child> |
116 | @@ -98,46 +43,51 @@ |
117 | <object class="GtkLabel" id="email_label"> |
118 | <property name="visible">True</property> |
119 | <property name="xalign">0</property> |
120 | - <property name="xpad">12</property> |
121 | <property name="label">a@example.com</property> |
122 | </object> |
123 | <packing> |
124 | + <property name="expand">False</property> |
125 | <property name="position">1</property> |
126 | </packing> |
127 | </child> |
128 | + <child> |
129 | + <object class="GtkHButtonBox" id="hbuttonbox1"> |
130 | + <property name="visible">True</property> |
131 | + <property name="layout_style">center</property> |
132 | + <child> |
133 | + <object class="GtkLinkButton" id="linkbutton3"> |
134 | + <property name="label" translatable="yes">Edit</property> |
135 | + <property name="visible">True</property> |
136 | + <property name="can_focus">True</property> |
137 | + <property name="receives_default">True</property> |
138 | + <property name="has_tooltip">True</property> |
139 | + <property name="relief">none</property> |
140 | + <property name="uri">http://login.ubuntu.com</property> |
141 | + </object> |
142 | + <packing> |
143 | + <property name="expand">False</property> |
144 | + <property name="fill">False</property> |
145 | + <property name="position">0</property> |
146 | + </packing> |
147 | + </child> |
148 | + </object> |
149 | + <packing> |
150 | + <property name="expand">False</property> |
151 | + <property name="padding">10</property> |
152 | + <property name="pack_type">end</property> |
153 | + <property name="position">2</property> |
154 | + </packing> |
155 | + </child> |
156 | </object> |
157 | - <packing> |
158 | - <property name="position">2</property> |
159 | - </packing> |
160 | </child> |
161 | </object> |
162 | - <packing> |
163 | - <property name="expand">False</property> |
164 | - <property name="position">0</property> |
165 | - </packing> |
166 | </child> |
167 | - <child> |
168 | - <object class="GtkHButtonBox" id="hbuttonbox1"> |
169 | - <property name="layout_style">center</property> |
170 | - <child> |
171 | - <object class="GtkButton" id="change_password_button"> |
172 | - <property name="label" translatable="yes">Change Password</property> |
173 | - <property name="visible">True</property> |
174 | - <property name="can_focus">True</property> |
175 | - <property name="receives_default">True</property> |
176 | - </object> |
177 | - <packing> |
178 | - <property name="expand">False</property> |
179 | - <property name="fill">False</property> |
180 | - <property name="position">0</property> |
181 | - </packing> |
182 | - </child> |
183 | + <child type="label"> |
184 | + <object class="GtkLabel" id="label1"> |
185 | + <property name="visible">True</property> |
186 | + <property name="label" translatable="yes"><b>Personal details</b></property> |
187 | + <property name="use_markup">True</property> |
188 | </object> |
189 | - <packing> |
190 | - <property name="expand">False</property> |
191 | - <property name="pack_type">end</property> |
192 | - <property name="position">1</property> |
193 | - </packing> |
194 | </child> |
195 | </object> |
196 | <packing> |
197 | @@ -145,51 +95,109 @@ |
198 | </packing> |
199 | </child> |
200 | <child> |
201 | - <object class="GtkVButtonBox" id="vbuttonbox1"> |
202 | + <object class="GtkFrame" id="frame1"> |
203 | <property name="visible">True</property> |
204 | - <property name="spacing">10</property> |
205 | - <property name="layout_style">center</property> |
206 | + <property name="label_xalign">0</property> |
207 | + <property name="shadow_type">in</property> |
208 | <child> |
209 | - <object class="GtkLinkButton" id="linkbutton1"> |
210 | - <property name="label" translatable="yes">Upgrade subscription</property> |
211 | + <object class="GtkAlignment" id="alignment1"> |
212 | <property name="visible">True</property> |
213 | - <property name="can_focus">True</property> |
214 | - <property name="receives_default">True</property> |
215 | - <property name="relief">none</property> |
216 | - <property name="xalign">0</property> |
217 | - <property name="uri">https://one.ubuntu.com/plans/</property> |
218 | + <property name="xscale">0</property> |
219 | + <property name="top_padding">10</property> |
220 | + <property name="bottom_padding">10</property> |
221 | + <property name="left_padding">12</property> |
222 | + <property name="right_padding">10</property> |
223 | + <child> |
224 | + <object class="GtkVBox" id="vbox4"> |
225 | + <property name="visible">True</property> |
226 | + <property name="spacing">10</property> |
227 | + <child> |
228 | + <object class="GtkLabel" id="type_label"> |
229 | + <property name="visible">True</property> |
230 | + <property name="xalign">0</property> |
231 | + <property name="label">Ubuntu One Basic (2 GB) |
232 | +22GB of awesomeness |
233 | +This is great!</property> |
234 | + </object> |
235 | + <packing> |
236 | + <property name="expand">False</property> |
237 | + <property name="position">0</property> |
238 | + </packing> |
239 | + </child> |
240 | + <child> |
241 | + <object class="GtkHButtonBox" id="hbuttonbox2"> |
242 | + <property name="visible">True</property> |
243 | + <property name="layout_style">center</property> |
244 | + <child> |
245 | + <object class="GtkLinkButton" id="linkbutton1"> |
246 | + <property name="label" translatable="yes">Buy more storage and new plans</property> |
247 | + <property name="visible">True</property> |
248 | + <property name="can_focus">True</property> |
249 | + <property name="receives_default">True</property> |
250 | + <property name="relief">none</property> |
251 | + <property name="uri">https://one.ubuntu.com/plans/</property> |
252 | + </object> |
253 | + <packing> |
254 | + <property name="expand">False</property> |
255 | + <property name="fill">False</property> |
256 | + <property name="position">0</property> |
257 | + </packing> |
258 | + </child> |
259 | + </object> |
260 | + <packing> |
261 | + <property name="expand">False</property> |
262 | + <property name="padding">10</property> |
263 | + <property name="pack_type">end</property> |
264 | + <property name="position">1</property> |
265 | + </packing> |
266 | + </child> |
267 | + </object> |
268 | + </child> |
269 | </object> |
270 | - <packing> |
271 | - <property name="expand">False</property> |
272 | - <property name="fill">False</property> |
273 | - <property name="position">0</property> |
274 | - </packing> |
275 | </child> |
276 | - <child> |
277 | - <object class="GtkLinkButton" id="linkbutton2"> |
278 | - <property name="label" translatable="yes">Support options</property> |
279 | + <child type="label"> |
280 | + <object class="GtkLabel" id="label3"> |
281 | <property name="visible">True</property> |
282 | - <property name="can_focus">True</property> |
283 | - <property name="receives_default">True</property> |
284 | - <property name="relief">none</property> |
285 | - <property name="xalign">0</property> |
286 | - <property name="uri">https://one.ubuntu.com/support/</property> |
287 | + <property name="label" translatable="yes"><b>Your services</b></property> |
288 | + <property name="use_markup">True</property> |
289 | </object> |
290 | - <packing> |
291 | - <property name="expand">False</property> |
292 | - <property name="fill">False</property> |
293 | - <property name="position">1</property> |
294 | - </packing> |
295 | </child> |
296 | </object> |
297 | <packing> |
298 | - <property name="expand">False</property> |
299 | <property name="pack_type">end</property> |
300 | <property name="position">1</property> |
301 | </packing> |
302 | </child> |
303 | </object> |
304 | <packing> |
305 | + <property name="expand">False</property> |
306 | + <property name="position">0</property> |
307 | + </packing> |
308 | + </child> |
309 | + <child> |
310 | + <object class="GtkHButtonBox" id="hbuttonbox3"> |
311 | + <property name="visible">True</property> |
312 | + <property name="layout_style">center</property> |
313 | + <child> |
314 | + <object class="GtkLinkButton" id="linkbutton2"> |
315 | + <property name="label" translatable="yes">Get support!</property> |
316 | + <property name="visible">True</property> |
317 | + <property name="can_focus">True</property> |
318 | + <property name="receives_default">True</property> |
319 | + <property name="relief">none</property> |
320 | + <property name="xalign">0</property> |
321 | + <property name="uri">https://one.ubuntu.com/support/</property> |
322 | + </object> |
323 | + <packing> |
324 | + <property name="expand">False</property> |
325 | + <property name="fill">False</property> |
326 | + <property name="position">0</property> |
327 | + </packing> |
328 | + </child> |
329 | + </object> |
330 | + <packing> |
331 | + <property name="expand">False</property> |
332 | + <property name="pack_type">end</property> |
333 | <property name="position">1</property> |
334 | </packing> |
335 | </child> |
336 | |
337 | === modified file 'data/device.ui' |
338 | --- data/device.ui 2010-12-17 20:12:01 +0000 |
339 | +++ data/device.ui 2011-01-24 14:12:22 +0000 |
340 | @@ -1,174 +1,185 @@ |
341 | <?xml version="1.0" encoding="UTF-8"?> |
342 | <interface> |
343 | - <requires lib="gtk+" version="2.16"/> |
344 | + <requires lib="gtk+" version="2.22"/> |
345 | <!-- interface-naming-policy project-wide --> |
346 | + <object class="GtkAdjustment" id="adjustment1"> |
347 | + <property name="upper">10000</property> |
348 | + <property name="step_increment">1</property> |
349 | + </object> |
350 | <object class="GtkAdjustment" id="adjustment2"> |
351 | <property name="upper">10000</property> |
352 | <property name="step_increment">1</property> |
353 | </object> |
354 | - <object class="GtkAdjustment" id="adjustment1"> |
355 | - <property name="upper">10000</property> |
356 | - <property name="step_increment">1</property> |
357 | - </object> |
358 | <object class="GtkVBox" id="itself"> |
359 | <property name="visible">True</property> |
360 | + <property name="can_focus">False</property> |
361 | <property name="spacing">5</property> |
362 | <child> |
363 | <object class="GtkHBox" id="hbox1"> |
364 | <property name="visible">True</property> |
365 | + <property name="can_focus">False</property> |
366 | <property name="spacing">15</property> |
367 | <child> |
368 | <object class="GtkVBox" id="vbox1"> |
369 | <property name="visible">True</property> |
370 | + <property name="can_focus">False</property> |
371 | <property name="spacing">5</property> |
372 | <child> |
373 | <object class="GtkHBox" id="hbox2"> |
374 | <property name="visible">True</property> |
375 | + <property name="can_focus">False</property> |
376 | <child> |
377 | <object class="GtkImage" id="device_type"> |
378 | <property name="visible">True</property> |
379 | + <property name="can_focus">False</property> |
380 | <property name="icon_name">computer</property> |
381 | </object> |
382 | <packing> |
383 | <property name="expand">False</property> |
384 | + <property name="fill">True</property> |
385 | <property name="position">0</property> |
386 | </packing> |
387 | </child> |
388 | <child> |
389 | <object class="GtkLabel" id="device_name"> |
390 | <property name="visible">True</property> |
391 | + <property name="can_focus">False</property> |
392 | <property name="xalign">0</property> |
393 | <property name="xpad">5</property> |
394 | <property name="label">My Laptop</property> |
395 | + <property name="wrap">True</property> |
396 | </object> |
397 | <packing> |
398 | + <property name="expand">True</property> |
399 | + <property name="fill">True</property> |
400 | <property name="position">1</property> |
401 | </packing> |
402 | </child> |
403 | - <child> |
404 | - <object class="GtkLabel" id="device_id"> |
405 | - <property name="label" translatable="yes">device id (hidden)</property> |
406 | - </object> |
407 | - <packing> |
408 | - <property name="expand">False</property> |
409 | - <property name="position">2</property> |
410 | - </packing> |
411 | - </child> |
412 | - <child> |
413 | - <object class="GtkLabel" id="date_added"> |
414 | - <property name="label">30.02.09</property> |
415 | - </object> |
416 | - <packing> |
417 | - <property name="expand">False</property> |
418 | - <property name="position">3</property> |
419 | - </packing> |
420 | - </child> |
421 | </object> |
422 | <packing> |
423 | + <property name="expand">True</property> |
424 | + <property name="fill">True</property> |
425 | <property name="position">0</property> |
426 | </packing> |
427 | </child> |
428 | <child> |
429 | - <object class="GtkTable" id="throttling"> |
430 | + <object class="GtkAlignment" id="alignment1"> |
431 | <property name="visible">True</property> |
432 | - <property name="n_rows">3</property> |
433 | - <property name="n_columns">2</property> |
434 | - <property name="column_spacing">3</property> |
435 | - <property name="row_spacing">3</property> |
436 | - <child> |
437 | - <object class="GtkCheckButton" id="limit_bandwidth"> |
438 | - <property name="label" translatable="yes">Limit bandwidth usage</property> |
439 | - <property name="visible">True</property> |
440 | - <property name="can_focus">True</property> |
441 | - <property name="receives_default">False</property> |
442 | - <property name="draw_indicator">True</property> |
443 | - <signal name="toggled" handler="on_limit_bandwidth_toggled" swapped="no"/> |
444 | - </object> |
445 | - </child> |
446 | - <child> |
447 | - <object class="GtkLabel" id="max_upload_speed_label"> |
448 | - <property name="visible">True</property> |
449 | - <property name="xalign">1</property> |
450 | - <property name="xpad">5</property> |
451 | - <property name="label" translatable="yes">Max upload speed (KiB/s)</property> |
452 | - </object> |
453 | - <packing> |
454 | - <property name="top_attach">1</property> |
455 | - <property name="bottom_attach">2</property> |
456 | - </packing> |
457 | - </child> |
458 | - <child> |
459 | - <object class="GtkLabel" id="max_download_speed_label"> |
460 | - <property name="visible">True</property> |
461 | - <property name="xalign">1</property> |
462 | - <property name="xpad">5</property> |
463 | - <property name="label" translatable="yes">Max download speed (KiB/s)</property> |
464 | - </object> |
465 | - <packing> |
466 | - <property name="top_attach">2</property> |
467 | - <property name="bottom_attach">3</property> |
468 | - </packing> |
469 | - </child> |
470 | - <child> |
471 | - <object class="GtkSpinButton" id="max_upload_speed"> |
472 | - <property name="visible">True</property> |
473 | - <property name="can_focus">True</property> |
474 | - <property name="invisible_char">•</property> |
475 | - <property name="activates_default">True</property> |
476 | - <property name="adjustment">adjustment1</property> |
477 | - <signal name="value-changed" handler="on_max_upload_speed_value_changed" swapped="no"/> |
478 | - </object> |
479 | - <packing> |
480 | - <property name="left_attach">1</property> |
481 | - <property name="right_attach">2</property> |
482 | - <property name="top_attach">1</property> |
483 | - <property name="bottom_attach">2</property> |
484 | - <property name="x_options">GTK_FILL</property> |
485 | - <property name="y_options">GTK_FILL</property> |
486 | - </packing> |
487 | - </child> |
488 | - <child> |
489 | - <object class="GtkSpinButton" id="max_download_speed"> |
490 | - <property name="visible">True</property> |
491 | - <property name="can_focus">True</property> |
492 | - <property name="invisible_char">•</property> |
493 | - <property name="activates_default">True</property> |
494 | - <property name="adjustment">adjustment2</property> |
495 | - <signal name="value-changed" handler="on_max_download_speed_value_changed" swapped="no"/> |
496 | - </object> |
497 | - <packing> |
498 | - <property name="left_attach">1</property> |
499 | - <property name="right_attach">2</property> |
500 | - <property name="top_attach">2</property> |
501 | - <property name="bottom_attach">3</property> |
502 | - </packing> |
503 | - </child> |
504 | - <child> |
505 | - <placeholder/> |
506 | + <property name="can_focus">False</property> |
507 | + <property name="left_padding">25</property> |
508 | + <child> |
509 | + <object class="GtkTable" id="throttling"> |
510 | + <property name="visible">True</property> |
511 | + <property name="can_focus">False</property> |
512 | + <property name="n_rows">3</property> |
513 | + <property name="n_columns">2</property> |
514 | + <property name="column_spacing">3</property> |
515 | + <property name="row_spacing">3</property> |
516 | + <child> |
517 | + <object class="GtkCheckButton" id="limit_bandwidth"> |
518 | + <property name="label" translatable="yes">Limit bandwidth usage</property> |
519 | + <property name="visible">True</property> |
520 | + <property name="can_focus">True</property> |
521 | + <property name="receives_default">False</property> |
522 | + <property name="use_action_appearance">False</property> |
523 | + <property name="draw_indicator">True</property> |
524 | + <signal name="toggled" handler="on_limit_bandwidth_toggled" swapped="no"/> |
525 | + </object> |
526 | + </child> |
527 | + <child> |
528 | + <object class="GtkLabel" id="max_upload_speed_label"> |
529 | + <property name="visible">True</property> |
530 | + <property name="can_focus">False</property> |
531 | + <property name="xalign">1</property> |
532 | + <property name="xpad">5</property> |
533 | + <property name="label" translatable="yes">Max upload speed (KiB/s)</property> |
534 | + <property name="track_visited_links">False</property> |
535 | + </object> |
536 | + <packing> |
537 | + <property name="top_attach">1</property> |
538 | + <property name="bottom_attach">2</property> |
539 | + </packing> |
540 | + </child> |
541 | + <child> |
542 | + <object class="GtkLabel" id="max_download_speed_label"> |
543 | + <property name="visible">True</property> |
544 | + <property name="can_focus">False</property> |
545 | + <property name="xalign">1</property> |
546 | + <property name="xpad">5</property> |
547 | + <property name="label" translatable="yes">Max download speed (KiB/s)</property> |
548 | + </object> |
549 | + <packing> |
550 | + <property name="top_attach">2</property> |
551 | + <property name="bottom_attach">3</property> |
552 | + </packing> |
553 | + </child> |
554 | + <child> |
555 | + <object class="GtkSpinButton" id="max_upload_speed"> |
556 | + <property name="visible">True</property> |
557 | + <property name="can_focus">True</property> |
558 | + <property name="invisible_char">•</property> |
559 | + <property name="activates_default">True</property> |
560 | + <property name="invisible_char_set">True</property> |
561 | + <property name="adjustment">adjustment1</property> |
562 | + <signal name="value-changed" handler="on_max_upload_speed_value_changed" swapped="no"/> |
563 | + </object> |
564 | + <packing> |
565 | + <property name="left_attach">1</property> |
566 | + <property name="right_attach">2</property> |
567 | + <property name="top_attach">1</property> |
568 | + <property name="bottom_attach">2</property> |
569 | + <property name="x_options">GTK_FILL</property> |
570 | + <property name="y_options">GTK_FILL</property> |
571 | + </packing> |
572 | + </child> |
573 | + <child> |
574 | + <object class="GtkSpinButton" id="max_download_speed"> |
575 | + <property name="visible">True</property> |
576 | + <property name="can_focus">True</property> |
577 | + <property name="invisible_char">•</property> |
578 | + <property name="activates_default">True</property> |
579 | + <property name="invisible_char_set">True</property> |
580 | + <property name="adjustment">adjustment2</property> |
581 | + <signal name="value-changed" handler="on_max_download_speed_value_changed" swapped="no"/> |
582 | + </object> |
583 | + <packing> |
584 | + <property name="left_attach">1</property> |
585 | + <property name="right_attach">2</property> |
586 | + <property name="top_attach">2</property> |
587 | + <property name="bottom_attach">3</property> |
588 | + </packing> |
589 | + </child> |
590 | + <child> |
591 | + <placeholder/> |
592 | + </child> |
593 | + </object> |
594 | </child> |
595 | </object> |
596 | <packing> |
597 | <property name="expand">False</property> |
598 | + <property name="fill">True</property> |
599 | <property name="position">1</property> |
600 | </packing> |
601 | </child> |
602 | </object> |
603 | <packing> |
604 | <property name="expand">False</property> |
605 | + <property name="fill">True</property> |
606 | <property name="position">0</property> |
607 | </packing> |
608 | </child> |
609 | <child> |
610 | <object class="GtkVButtonBox" id="vbuttonbox1"> |
611 | <property name="visible">True</property> |
612 | - <property name="layout_style">start</property> |
613 | + <property name="can_focus">False</property> |
614 | + <property name="layout_style">center</property> |
615 | <child> |
616 | <object class="GtkButton" id="remove"> |
617 | - <property name="label">gtk-remove</property> |
618 | + <property name="label" translatable="yes">Remove from my personal cloud</property> |
619 | <property name="visible">True</property> |
620 | <property name="can_focus">True</property> |
621 | <property name="receives_default">True</property> |
622 | - <property name="use_stock">True</property> |
623 | + <property name="use_action_appearance">False</property> |
624 | <signal name="activate" handler="on_remove_clicked" swapped="no"/> |
625 | <signal name="clicked" handler="on_remove_clicked" swapped="no"/> |
626 | </object> |
627 | @@ -181,6 +192,7 @@ |
628 | </object> |
629 | <packing> |
630 | <property name="expand">False</property> |
631 | + <property name="fill">True</property> |
632 | <property name="pack_type">end</property> |
633 | <property name="position">1</property> |
634 | </packing> |
635 | @@ -188,14 +200,18 @@ |
636 | </object> |
637 | <packing> |
638 | <property name="expand">False</property> |
639 | + <property name="fill">True</property> |
640 | <property name="position">0</property> |
641 | </packing> |
642 | </child> |
643 | <child> |
644 | <object class="GtkLabel" id="warning_label"> |
645 | <property name="visible">True</property> |
646 | + <property name="can_focus">False</property> |
647 | </object> |
648 | <packing> |
649 | + <property name="expand">True</property> |
650 | + <property name="fill">True</property> |
651 | <property name="position">1</property> |
652 | </packing> |
653 | </child> |
654 | |
655 | === modified file 'data/devices.ui' |
656 | --- data/devices.ui 2010-12-16 15:14:22 +0000 |
657 | +++ data/devices.ui 2011-01-24 14:12:22 +0000 |
658 | @@ -1,11 +1,10 @@ |
659 | <?xml version="1.0" encoding="UTF-8"?> |
660 | <interface> |
661 | - <requires lib="gtk+" version="2.16"/> |
662 | + <requires lib="gtk+" version="2.22"/> |
663 | <!-- interface-naming-policy project-wide --> |
664 | <object class="GtkVBox" id="itself"> |
665 | <property name="visible">True</property> |
666 | - <property name="border_width">10</property> |
667 | - <property name="spacing">10</property> |
668 | + <property name="can_focus">False</property> |
669 | <child> |
670 | <object class="GtkScrolledWindow" id="scrolledwindow1"> |
671 | <property name="visible">True</property> |
672 | @@ -15,16 +14,17 @@ |
673 | <child> |
674 | <object class="GtkViewport" id="viewport1"> |
675 | <property name="visible">True</property> |
676 | + <property name="can_focus">False</property> |
677 | <property name="resize_mode">queue</property> |
678 | <property name="shadow_type">none</property> |
679 | <child> |
680 | <object class="GtkAlignment" id="alignment1"> |
681 | <property name="visible">True</property> |
682 | - <property name="xscale">0</property> |
683 | - <property name="yscale">0</property> |
684 | + <property name="can_focus">False</property> |
685 | <child> |
686 | <object class="GtkVBox" id="devices"> |
687 | <property name="visible">True</property> |
688 | + <property name="can_focus">False</property> |
689 | <child> |
690 | <placeholder/> |
691 | </child> |
692 | @@ -36,6 +36,8 @@ |
693 | </child> |
694 | </object> |
695 | <packing> |
696 | + <property name="expand">True</property> |
697 | + <property name="fill">True</property> |
698 | <property name="position">0</property> |
699 | </packing> |
700 | </child> |
701 | |
702 | === modified file 'data/install.ui' |
703 | --- data/install.ui 2011-01-06 19:47:25 +0000 |
704 | +++ data/install.ui 2011-01-24 14:12:22 +0000 |
705 | @@ -1,6 +1,6 @@ |
706 | <?xml version="1.0" encoding="UTF-8"?> |
707 | <interface> |
708 | - <requires lib="gtk+" version="2.16"/> |
709 | + <requires lib="gtk+" version="2.22"/> |
710 | <!-- interface-naming-policy project-wide --> |
711 | <object class="GtkVBox" id="itself"> |
712 | <property name="visible">True</property> |
713 | |
714 | === modified file 'data/management.ui' |
715 | --- data/management.ui 2011-01-21 15:26:51 +0000 |
716 | +++ data/management.ui 2011-01-24 14:12:22 +0000 |
717 | @@ -1,74 +1,92 @@ |
718 | <?xml version="1.0" encoding="UTF-8"?> |
719 | <interface> |
720 | - <requires lib="gtk+" version="2.16"/> |
721 | + <requires lib="gtk+" version="2.22"/> |
722 | <!-- interface-naming-policy project-wide --> |
723 | <object class="GtkVBox" id="itself"> |
724 | <property name="visible">True</property> |
725 | + <property name="can_focus">False</property> |
726 | <child> |
727 | <object class="GtkEventBox" id="header"> |
728 | <property name="visible">True</property> |
729 | + <property name="can_focus">False</property> |
730 | <child> |
731 | <object class="GtkVBox" id="vbox2"> |
732 | <property name="visible">True</property> |
733 | + <property name="can_focus">False</property> |
734 | <child> |
735 | <object class="GtkHBox" id="status_box"> |
736 | <property name="visible">True</property> |
737 | + <property name="can_focus">False</property> |
738 | <property name="border_width">10</property> |
739 | <property name="spacing">10</property> |
740 | <child> |
741 | <object class="GtkHBox" id="quota_box"> |
742 | <property name="visible">True</property> |
743 | + <property name="can_focus">False</property> |
744 | <child> |
745 | <object class="GtkAlignment" id="alignment1"> |
746 | <property name="visible">True</property> |
747 | + <property name="can_focus">False</property> |
748 | <property name="xscale">0</property> |
749 | <property name="yscale">0</property> |
750 | <child> |
751 | <object class="GtkProgressBar" id="quota_progressbar"> |
752 | <property name="visible">True</property> |
753 | + <property name="can_focus">False</property> |
754 | </object> |
755 | </child> |
756 | </object> |
757 | <packing> |
758 | + <property name="expand">True</property> |
759 | + <property name="fill">True</property> |
760 | <property name="position">0</property> |
761 | </packing> |
762 | </child> |
763 | </object> |
764 | <packing> |
765 | <property name="expand">False</property> |
766 | + <property name="fill">True</property> |
767 | <property name="position">0</property> |
768 | </packing> |
769 | </child> |
770 | </object> |
771 | <packing> |
772 | <property name="expand">False</property> |
773 | + <property name="fill">True</property> |
774 | <property name="position">0</property> |
775 | </packing> |
776 | </child> |
777 | <child> |
778 | <object class="GtkVBox" id="vbox1"> |
779 | <property name="visible">True</property> |
780 | + <property name="can_focus">False</property> |
781 | <child> |
782 | <object class="GtkHBox" id="hbox2"> |
783 | <property name="visible">True</property> |
784 | + <property name="can_focus">False</property> |
785 | <child> |
786 | <object class="GtkHSeparator" id="hseparator1"> |
787 | <property name="visible">True</property> |
788 | + <property name="can_focus">False</property> |
789 | </object> |
790 | <packing> |
791 | + <property name="expand">True</property> |
792 | + <property name="fill">True</property> |
793 | <property name="position">0</property> |
794 | </packing> |
795 | </child> |
796 | <child> |
797 | <object class="GtkHButtonBox" id="hbuttonbox1"> |
798 | <property name="visible">True</property> |
799 | + <property name="can_focus">False</property> |
800 | <property name="layout_style">center</property> |
801 | <child> |
802 | <object class="GtkRadioButton" id="dashboard_button"> |
803 | - <property name="label" translatable="yes">Dashboard</property> |
804 | + <property name="label" translatable="yes">Account</property> |
805 | <property name="visible">True</property> |
806 | <property name="can_focus">True</property> |
807 | <property name="receives_default">False</property> |
808 | + <property name="use_action_appearance">False</property> |
809 | <property name="active">True</property> |
810 | <property name="draw_indicator">False</property> |
811 | </object> |
812 | @@ -84,6 +102,7 @@ |
813 | <property name="visible">True</property> |
814 | <property name="can_focus">True</property> |
815 | <property name="receives_default">False</property> |
816 | + <property name="use_action_appearance">False</property> |
817 | <property name="draw_indicator">False</property> |
818 | <property name="group">dashboard_button</property> |
819 | </object> |
820 | @@ -94,18 +113,34 @@ |
821 | </packing> |
822 | </child> |
823 | <child> |
824 | + <object class="GtkRadioButton" id="shares_button"> |
825 | + <property name="label" translatable="yes">Shares</property> |
826 | + <property name="can_focus">True</property> |
827 | + <property name="receives_default">False</property> |
828 | + <property name="use_action_appearance">False</property> |
829 | + <property name="draw_indicator">False</property> |
830 | + <property name="group">dashboard_button</property> |
831 | + </object> |
832 | + <packing> |
833 | + <property name="expand">False</property> |
834 | + <property name="fill">False</property> |
835 | + <property name="position">2</property> |
836 | + </packing> |
837 | + </child> |
838 | + <child> |
839 | <object class="GtkRadioButton" id="devices_button"> |
840 | <property name="label" translatable="yes">Devices</property> |
841 | <property name="visible">True</property> |
842 | <property name="can_focus">True</property> |
843 | <property name="receives_default">False</property> |
844 | + <property name="use_action_appearance">False</property> |
845 | <property name="draw_indicator">False</property> |
846 | <property name="group">dashboard_button</property> |
847 | </object> |
848 | <packing> |
849 | <property name="expand">False</property> |
850 | <property name="fill">False</property> |
851 | - <property name="position">2</property> |
852 | + <property name="position">3</property> |
853 | </packing> |
854 | </child> |
855 | <child> |
856 | @@ -114,48 +149,57 @@ |
857 | <property name="visible">True</property> |
858 | <property name="can_focus">True</property> |
859 | <property name="receives_default">False</property> |
860 | + <property name="use_action_appearance">False</property> |
861 | <property name="draw_indicator">False</property> |
862 | <property name="group">dashboard_button</property> |
863 | </object> |
864 | <packing> |
865 | <property name="expand">False</property> |
866 | <property name="fill">False</property> |
867 | - <property name="position">3</property> |
868 | + <property name="position">4</property> |
869 | </packing> |
870 | </child> |
871 | </object> |
872 | <packing> |
873 | <property name="expand">False</property> |
874 | + <property name="fill">True</property> |
875 | <property name="position">1</property> |
876 | </packing> |
877 | </child> |
878 | <child> |
879 | <object class="GtkHSeparator" id="hseparator2"> |
880 | <property name="visible">True</property> |
881 | + <property name="can_focus">False</property> |
882 | </object> |
883 | <packing> |
884 | + <property name="expand">True</property> |
885 | + <property name="fill">True</property> |
886 | <property name="position">2</property> |
887 | </packing> |
888 | </child> |
889 | </object> |
890 | <packing> |
891 | <property name="expand">False</property> |
892 | + <property name="fill">True</property> |
893 | <property name="position">0</property> |
894 | </packing> |
895 | </child> |
896 | <child> |
897 | <object class="GtkImage" id="image1"> |
898 | <property name="visible">True</property> |
899 | + <property name="can_focus">False</property> |
900 | <property name="pixbuf">banner.png</property> |
901 | </object> |
902 | <packing> |
903 | <property name="expand">False</property> |
904 | + <property name="fill">True</property> |
905 | <property name="position">1</property> |
906 | </packing> |
907 | </child> |
908 | </object> |
909 | <packing> |
910 | <property name="expand">False</property> |
911 | + <property name="fill">True</property> |
912 | <property name="position">1</property> |
913 | </packing> |
914 | </child> |
915 | @@ -164,17 +208,21 @@ |
916 | </object> |
917 | <packing> |
918 | <property name="expand">False</property> |
919 | + <property name="fill">True</property> |
920 | <property name="position">0</property> |
921 | </packing> |
922 | </child> |
923 | <child> |
924 | <object class="GtkNotebook" id="notebook"> |
925 | <property name="visible">True</property> |
926 | + <property name="can_focus">False</property> |
927 | <property name="show_tabs">False</property> |
928 | <property name="show_border">False</property> |
929 | <property name="homogeneous">True</property> |
930 | </object> |
931 | <packing> |
932 | + <property name="expand">True</property> |
933 | + <property name="fill">True</property> |
934 | <property name="position">1</property> |
935 | </packing> |
936 | </child> |
937 | |
938 | === modified file 'data/overview.ui' |
939 | --- data/overview.ui 2011-01-21 15:26:51 +0000 |
940 | +++ data/overview.ui 2011-01-24 14:12:22 +0000 |
941 | @@ -1,104 +1,132 @@ |
942 | <?xml version="1.0" encoding="UTF-8"?> |
943 | <interface> |
944 | - <requires lib="gtk+" version="2.16"/> |
945 | + <requires lib="gtk+" version="2.22"/> |
946 | <!-- interface-naming-policy project-wide --> |
947 | <object class="GtkVBox" id="itself"> |
948 | <property name="visible">True</property> |
949 | + <property name="can_focus">False</property> |
950 | <child> |
951 | <object class="GtkImage" id="image"> |
952 | <property name="visible">True</property> |
953 | + <property name="can_focus">False</property> |
954 | <property name="pixbuf">overview.png</property> |
955 | </object> |
956 | <packing> |
957 | <property name="expand">False</property> |
958 | + <property name="fill">True</property> |
959 | <property name="position">0</property> |
960 | </packing> |
961 | </child> |
962 | <child> |
963 | - <object class="GtkHBox" id="hbox1"> |
964 | + <object class="GtkAlignment" id="alignment1"> |
965 | <property name="visible">True</property> |
966 | - <property name="border_width">20</property> |
967 | - <property name="spacing">5</property> |
968 | + <property name="can_focus">False</property> |
969 | + <property name="yscale">0</property> |
970 | <child> |
971 | - <object class="GtkVBox" id="messages"> |
972 | + <object class="GtkHBox" id="hbox1"> |
973 | <property name="visible">True</property> |
974 | + <property name="can_focus">False</property> |
975 | + <property name="border_width">20</property> |
976 | <property name="spacing">5</property> |
977 | <child> |
978 | - <placeholder/> |
979 | + <object class="GtkVBox" id="messages"> |
980 | + <property name="visible">True</property> |
981 | + <property name="can_focus">False</property> |
982 | + <property name="spacing">10</property> |
983 | + <child> |
984 | + <placeholder/> |
985 | + </child> |
986 | + </object> |
987 | + <packing> |
988 | + <property name="expand">True</property> |
989 | + <property name="fill">True</property> |
990 | + <property name="position">0</property> |
991 | + </packing> |
992 | </child> |
993 | - </object> |
994 | - <packing> |
995 | - <property name="position">0</property> |
996 | - </packing> |
997 | - </child> |
998 | - <child> |
999 | - <object class="GtkAlignment" id="alignment2"> |
1000 | - <property name="visible">True</property> |
1001 | - <property name="xscale">0</property> |
1002 | - <property name="yscale">0</property> |
1003 | <child> |
1004 | - <object class="GtkVBox" id="vbox2"> |
1005 | + <object class="GtkAlignment" id="alignment2"> |
1006 | <property name="visible">True</property> |
1007 | + <property name="can_focus">False</property> |
1008 | + <property name="xscale">0</property> |
1009 | + <property name="yscale">0</property> |
1010 | <child> |
1011 | - <object class="GtkHButtonBox" id="hbuttonbox1"> |
1012 | + <object class="GtkVBox" id="vbox2"> |
1013 | <property name="visible">True</property> |
1014 | - <child> |
1015 | - <object class="GtkButton" id="join_now_button"> |
1016 | - <property name="label" translatable="yes"> Join Now</property> |
1017 | + <property name="can_focus">False</property> |
1018 | + <property name="spacing">10</property> |
1019 | + <child> |
1020 | + <object class="GtkHButtonBox" id="hbuttonbox1"> |
1021 | + <property name="visible">True</property> |
1022 | + <property name="can_focus">False</property> |
1023 | + <child> |
1024 | + <object class="GtkButton" id="join_now_button"> |
1025 | + <property name="label" translatable="yes"> Join Now</property> |
1026 | + <property name="width_request">150</property> |
1027 | + <property name="height_request">50</property> |
1028 | + <property name="visible">True</property> |
1029 | + <property name="can_focus">True</property> |
1030 | + <property name="can_default">True</property> |
1031 | + <property name="receives_default">True</property> |
1032 | + <property name="use_action_appearance">False</property> |
1033 | + <signal name="clicked" handler="on_join_now_button_clicked" swapped="no"/> |
1034 | + </object> |
1035 | + <packing> |
1036 | + <property name="expand">False</property> |
1037 | + <property name="fill">False</property> |
1038 | + <property name="position">0</property> |
1039 | + </packing> |
1040 | + </child> |
1041 | + </object> |
1042 | + <packing> |
1043 | + <property name="expand">True</property> |
1044 | + <property name="fill">True</property> |
1045 | + <property name="position">0</property> |
1046 | + </packing> |
1047 | + </child> |
1048 | + <child> |
1049 | + <object class="GtkLinkButton" id="connect_button"> |
1050 | + <property name="label" translatable="yes">I already have an account!</property> |
1051 | <property name="visible">True</property> |
1052 | <property name="can_focus">True</property> |
1053 | - <property name="can_default">True</property> |
1054 | <property name="receives_default">True</property> |
1055 | - <signal name="clicked" handler="on_join_now_button_clicked"/> |
1056 | + <property name="use_action_appearance">False</property> |
1057 | + <property name="relief">none</property> |
1058 | + <signal name="clicked" handler="on_connect_button_clicked" swapped="no"/> |
1059 | </object> |
1060 | <packing> |
1061 | <property name="expand">False</property> |
1062 | <property name="fill">False</property> |
1063 | - <property name="position">0</property> |
1064 | + <property name="position">1</property> |
1065 | </packing> |
1066 | </child> |
1067 | </object> |
1068 | - <packing> |
1069 | - <property name="position">0</property> |
1070 | - </packing> |
1071 | - </child> |
1072 | - <child> |
1073 | - <object class="GtkLinkButton" id="connect_button"> |
1074 | - <property name="label" translatable="yes">I already have an account - connect |
1075 | -this computer to Ubuntu One</property> |
1076 | - <property name="visible">True</property> |
1077 | - <property name="can_focus">True</property> |
1078 | - <property name="receives_default">True</property> |
1079 | - <property name="relief">none</property> |
1080 | - <property name="uri">http://glade.gnome.org</property> |
1081 | - <signal name="clicked" handler="on_connect_button_clicked"/> |
1082 | - </object> |
1083 | - <packing> |
1084 | - <property name="expand">False</property> |
1085 | - <property name="fill">False</property> |
1086 | - <property name="position">1</property> |
1087 | - </packing> |
1088 | </child> |
1089 | </object> |
1090 | + <packing> |
1091 | + <property name="expand">False</property> |
1092 | + <property name="fill">True</property> |
1093 | + <property name="position">1</property> |
1094 | + </packing> |
1095 | </child> |
1096 | </object> |
1097 | - <packing> |
1098 | - <property name="expand">False</property> |
1099 | - <property name="position">1</property> |
1100 | - </packing> |
1101 | </child> |
1102 | </object> |
1103 | <packing> |
1104 | - <property name="expand">False</property> |
1105 | + <property name="expand">True</property> |
1106 | + <property name="fill">True</property> |
1107 | <property name="position">1</property> |
1108 | </packing> |
1109 | </child> |
1110 | <child> |
1111 | <object class="GtkLabel" id="warning_label"> |
1112 | <property name="visible">True</property> |
1113 | + <property name="can_focus">False</property> |
1114 | <property name="wrap">True</property> |
1115 | + <property name="ellipsize">end</property> |
1116 | </object> |
1117 | <packing> |
1118 | + <property name="expand">False</property> |
1119 | + <property name="fill">True</property> |
1120 | <property name="position">2</property> |
1121 | </packing> |
1122 | </child> |
1123 | |
1124 | === modified file 'data/services.ui' |
1125 | --- data/services.ui 2010-12-23 20:49:21 +0000 |
1126 | +++ data/services.ui 2011-01-24 14:12:22 +0000 |
1127 | @@ -1,6 +1,6 @@ |
1128 | <?xml version="1.0" encoding="UTF-8"?> |
1129 | <interface> |
1130 | - <requires lib="gtk+" version="2.16"/> |
1131 | + <requires lib="gtk+" version="2.22"/> |
1132 | <!-- interface-naming-policy project-wide --> |
1133 | <object class="GtkVBox" id="itself"> |
1134 | <property name="visible">True</property> |
1135 | |
1136 | === modified file 'ubuntuone/controlpanel/gtk/gui.py' |
1137 | --- ubuntuone/controlpanel/gtk/gui.py 2011-01-24 13:11:51 +0000 |
1138 | +++ ubuntuone/controlpanel/gtk/gui.py 2011-01-24 14:12:22 +0000 |
1139 | @@ -169,7 +169,7 @@ |
1140 | class ControlPanelWindow(gtk.Window): |
1141 | """The main window for the Ubuntu One control panel.""" |
1142 | |
1143 | - TITLE = _('My %(app_name)s Dashboard') |
1144 | + TITLE = _('%(app_name)s Dashboard') |
1145 | |
1146 | def __init__(self, switch_to=None): |
1147 | super(ControlPanelWindow, self).__init__() |
1148 | @@ -307,6 +307,7 @@ |
1149 | class OverviewPanel(GreyableBin, ControlPanelMixin): |
1150 | """The overview panel. Introduces Ubuntu One to the not logged user.""" |
1151 | |
1152 | + JOIN_NOW = _('Join now') |
1153 | CREDENTIALS_ERROR = _('There was a problem while retrieving the ' |
1154 | 'credentials.') |
1155 | AUTHORIZATION_DENIED = _('The authentication was cancelled. Please either ' |
1156 | @@ -327,6 +328,8 @@ |
1157 | self.warning_label.set_property('xalign', 0.5) |
1158 | self.connect('size-allocate', on_size_allocate, self.warning_label) |
1159 | |
1160 | + label = '<span font_size="xx-large">%s</span>' % self.JOIN_NOW |
1161 | + self.join_now_button.get_child().set_markup(label) |
1162 | self.connect_button.set_uri(self.CONNECT) |
1163 | |
1164 | self._credentials_are_new = False |
1165 | @@ -479,6 +482,8 @@ |
1166 | self.add(self.itself) |
1167 | self.show() |
1168 | |
1169 | + self.is_processing = True |
1170 | + |
1171 | self.backend.connect_to_signal('AccountInfoReady', |
1172 | self.on_account_info_ready) |
1173 | self.backend.connect_to_signal('AccountInfoError', |
1174 | @@ -495,10 +500,13 @@ |
1175 | label.set_markup('%s' % (info[i])) |
1176 | self.account.show() |
1177 | |
1178 | + self.is_processing = False |
1179 | + |
1180 | @log_call(logger.error) |
1181 | def on_account_info_error(self, error_dict=None): |
1182 | """Backend notifies of an error when fetching account info.""" |
1183 | self.on_error() |
1184 | + self.is_processing = False |
1185 | |
1186 | |
1187 | class VolumesPanel(UbuntuOneBin, ControlPanelMixin): |
1188 | @@ -587,6 +595,7 @@ |
1189 | |
1190 | self.volumes_view.expand_row(0, True) |
1191 | self.volumes_view.show_all() |
1192 | + |
1193 | self.is_processing = False |
1194 | |
1195 | @log_call(logger.error) |
1196 | @@ -625,7 +634,19 @@ |
1197 | self.is_processing = True |
1198 | |
1199 | |
1200 | -class Device(gtk.VBox, ControlPanelMixin): |
1201 | +class SharesPanel(UbuntuOneBin, ControlPanelMixin): |
1202 | + """The shares panel - NOT IMPLEMENTED YET.""" |
1203 | + |
1204 | + TITLE = _('Manage permissions for shares made to other users.') |
1205 | + |
1206 | + def __init__(self): |
1207 | + UbuntuOneBin.__init__(self) |
1208 | + ControlPanelMixin.__init__(self) |
1209 | + self.show_all() |
1210 | + self.on_success('Not implemented yet.') |
1211 | + |
1212 | + |
1213 | +class Device(gtk.EventBox, ControlPanelMixin): |
1214 | """The device widget.""" |
1215 | |
1216 | DEVICE_CHANGE_ERROR = _('The settings could not be changed,\n' |
1217 | @@ -633,7 +654,7 @@ |
1218 | DEVICE_REMOVAL_ERROR = _('The device could not be removed.') |
1219 | |
1220 | def __init__(self): |
1221 | - gtk.VBox.__init__(self) |
1222 | + gtk.EventBox.__init__(self) |
1223 | ControlPanelMixin.__init__(self, filename='device.ui') |
1224 | |
1225 | self._updating = False |
1226 | @@ -717,13 +738,14 @@ |
1227 | self.id = kwargs['device_id'] |
1228 | |
1229 | if 'device_name' in kwargs: |
1230 | - self.device_name.set_markup('<b>%s</b>' % kwargs['device_name']) |
1231 | + name = '<span font_size="large"><b>%s</b></span>' |
1232 | + self.device_name.set_markup(name % kwargs['device_name']) |
1233 | |
1234 | if 'device_type' in kwargs: |
1235 | dtype = kwargs['device_type'] |
1236 | if dtype in (DEVICE_TYPE_COMPUTER, DEVICE_TYPE_PHONE): |
1237 | self.device_type.set_from_icon_name(dtype.lower(), |
1238 | - gtk.ICON_SIZE_BUTTON) |
1239 | + gtk.ICON_SIZE_LARGE_TOOLBAR) |
1240 | |
1241 | if 'is_local' in kwargs: |
1242 | self.is_local = bool(kwargs['is_local']) |
1243 | @@ -796,8 +818,7 @@ |
1244 | class DevicesPanel(UbuntuOneBin, ControlPanelMixin): |
1245 | """The devices panel.""" |
1246 | |
1247 | - TITLE = _('The devices connected with your personal cloud network are ' |
1248 | - 'listed below:') |
1249 | + TITLE = _('The devices in your personal cloud are listed below.') |
1250 | NO_DEVICES = _('No devices to show.') |
1251 | |
1252 | def __init__(self): |
1253 | @@ -826,19 +847,27 @@ |
1254 | else: |
1255 | self.on_success() |
1256 | |
1257 | - for device_info in info: |
1258 | + odd_row_color = self.message.style.bg[gtk.STATE_NORMAL] |
1259 | + for i, device_info in enumerate(info): |
1260 | device = Device() |
1261 | device_info['device_name'] = device_info.pop('name', '') |
1262 | device_info['device_type'] = device_info.pop('type', |
1263 | DEVICE_TYPE_COMPUTER) |
1264 | device.update(**device_info) |
1265 | + |
1266 | + if i % 2 == 1: |
1267 | + device.modify_bg(gtk.STATE_NORMAL, odd_row_color) |
1268 | + |
1269 | self.devices.pack_start(device) |
1270 | self._devices[device.id] = device |
1271 | |
1272 | + self.is_processing = False |
1273 | + |
1274 | @log_call(logger.error) |
1275 | def on_devices_info_error(self, error_dict=None): |
1276 | """Backend notifies of an error when fetching volumes info.""" |
1277 | self.on_error() |
1278 | + self.is_processing = False |
1279 | |
1280 | @log_call(logger.warning) |
1281 | def on_device_removed(self, device_id): |
1282 | @@ -854,7 +883,7 @@ |
1283 | """Load the device list.""" |
1284 | self.backend.devices_info(reply_handler=NO_OP, |
1285 | error_handler=error_handler) |
1286 | - self.message.start() |
1287 | + self.is_processing = True |
1288 | |
1289 | |
1290 | class InstallPackage(gtk.VBox, ControlPanelMixin): |
1291 | @@ -1326,11 +1355,13 @@ |
1292 | |
1293 | self.dashboard = DashboardPanel() |
1294 | self.volumes = VolumesPanel() |
1295 | + self.shares = SharesPanel() |
1296 | self.devices = DevicesPanel() |
1297 | self.services = ServicesPanel() |
1298 | |
1299 | cb = lambda button, page_num: self.notebook.set_current_page(page_num) |
1300 | - self.tabs = (u'dashboard', u'volumes', u'devices', u'services') |
1301 | + self.tabs = (u'dashboard', u'volumes', u'shares', |
1302 | + u'devices', u'services') |
1303 | for page_num, tab in enumerate(self.tabs): |
1304 | setattr(self, ('%s_page' % tab).upper(), page_num) |
1305 | button = getattr(self, '%s_button' % tab) |
1306 | @@ -1354,6 +1385,8 @@ |
1307 | fraction = 0.0 |
1308 | if data is not None: |
1309 | fraction = data.get('percentage', 0.0) / 100 |
1310 | + if fraction > 0 and fraction < 0.05: |
1311 | + fraction = 0.05 |
1312 | self.quota_progressbar.set_fraction(fraction) |
1313 | |
1314 | def load(self): |
1315 | |
1316 | === modified file 'ubuntuone/controlpanel/gtk/tests/test_gui.py' |
1317 | --- ubuntuone/controlpanel/gtk/tests/test_gui.py 2011-01-21 19:22:05 +0000 |
1318 | +++ ubuntuone/controlpanel/gtk/tests/test_gui.py 2011-01-24 14:12:22 +0000 |
1319 | @@ -725,19 +725,34 @@ |
1320 | self.assertEqual(self.ui.backend._signals['AccountInfoError'], |
1321 | [self.ui.on_account_info_error]) |
1322 | |
1323 | + def test_is_processing_at_startup(self): |
1324 | + """The ui is processing when info is being loaded.""" |
1325 | + self.assertTrue(self.ui.is_processing) |
1326 | + |
1327 | + def test_is_not_processing_on_info_ready(self): |
1328 | + """The ui is not processing when info is ready.""" |
1329 | + self.ui.on_account_info_ready(FAKE_ACCOUNT_INFO) |
1330 | + |
1331 | + self.assertFalse(self.ui.is_processing) |
1332 | + |
1333 | def test_on_account_info_ready(self): |
1334 | """The account info is processed when ready.""" |
1335 | self.ui.on_account_info_ready(FAKE_ACCOUNT_INFO) |
1336 | + |
1337 | self.assert_account_info_correct(FAKE_ACCOUNT_INFO) |
1338 | self.assertTrue(self.ui.account.get_visible()) |
1339 | - self.assertFalse(self.ui.message.active) |
1340 | - self.assertEqual(self.ui.message.get_label(), '') |
1341 | + |
1342 | + def test_is_not_processing_on_info_error(self): |
1343 | + """The ui is not processing when info is ready.""" |
1344 | + self.ui.on_account_info_error() |
1345 | + |
1346 | + self.assertFalse(self.ui.is_processing) |
1347 | |
1348 | def test_on_account_info_error(self): |
1349 | """The account info couldn't be retrieved.""" |
1350 | self.ui.on_account_info_error() |
1351 | + |
1352 | self.assertFalse(self.ui.account.get_visible()) |
1353 | - self.assertFalse(self.ui.message.active) |
1354 | self.assert_warning_correct(self.ui.message, gui.VALUE_ERROR) |
1355 | |
1356 | |
1357 | @@ -986,9 +1001,9 @@ |
1358 | new_val = self.ui.max_download_speed.get_value_as_int() + 1 |
1359 | self.ui.max_download_speed.set_value(new_val) |
1360 | |
1361 | - def test_is_a_vbox(self): |
1362 | - """Inherits from VBox.""" |
1363 | - self.assertIsInstance(self.ui, gui.gtk.VBox) |
1364 | + def test_is_a_container(self): |
1365 | + """Inherits from a container class.""" |
1366 | + self.assertIsInstance(self.ui, gui.gtk.Bin) |
1367 | |
1368 | def test_inner_widget_is_packed(self): |
1369 | """The 'itself' vbox is packed into the widget.""" |
1370 | @@ -1038,14 +1053,14 @@ |
1371 | """A device can be updated from a dict.""" |
1372 | dtype = gui.DEVICE_TYPE_COMPUTER |
1373 | self.ui.update(device_type=dtype) |
1374 | - self.assertEqual((dtype.lower(), gui.gtk.ICON_SIZE_BUTTON), |
1375 | + self.assertEqual((dtype.lower(), gui.gtk.ICON_SIZE_LARGE_TOOLBAR), |
1376 | self.ui.device_type.get_icon_name()) |
1377 | |
1378 | def test_update_device_type_phone(self): |
1379 | """A device can be updated from a dict.""" |
1380 | dtype = gui.DEVICE_TYPE_PHONE |
1381 | self.ui.update(device_type=dtype) |
1382 | - self.assertEqual((dtype.lower(), gui.gtk.ICON_SIZE_BUTTON), |
1383 | + self.assertEqual((dtype.lower(), gui.gtk.ICON_SIZE_LARGE_TOOLBAR), |
1384 | self.ui.device_type.get_icon_name()) |
1385 | |
1386 | def test_update_is_not_local(self): |
1387 | @@ -1228,6 +1243,10 @@ |
1388 | klass = gui.DevicesPanel |
1389 | ui_filename = 'devices.ui' |
1390 | |
1391 | + def setUp(self): |
1392 | + super(DevicesTestCase, self).setUp() |
1393 | + self.ui.load() |
1394 | + |
1395 | def test_is_an_ubuntuone_bin(self): |
1396 | """Inherits from UbuntuOneBin.""" |
1397 | self.assertIsInstance(self.ui, gui.UbuntuOneBin) |
1398 | @@ -1257,24 +1276,29 @@ |
1399 | |
1400 | self.assert_backend_called('devices_info', ()) |
1401 | |
1402 | - def test_message_after_load(self): |
1403 | - """The devices label is active when contents are load.""" |
1404 | + def test_is_processing_after_load(self): |
1405 | + """The ui is processing when contents are load.""" |
1406 | self.ui.on_devices_info_ready(FAKE_DEVICES_INFO) |
1407 | self.ui.load() |
1408 | |
1409 | - self.assertTrue(self.ui.message.active) |
1410 | + self.assertTrue(self.ui.is_processing) |
1411 | |
1412 | - def test_message_after_non_empty_devices_info_ready(self): |
1413 | - """The devices label is a LabelLoading.""" |
1414 | + def test_is_not_processing_after_non_empty_devices_info_ready(self): |
1415 | + """The ui is no longer processing after a non empty device list.""" |
1416 | self.ui.on_devices_info_ready(FAKE_DEVICES_INFO) |
1417 | |
1418 | - self.assertFalse(self.ui.message.active) |
1419 | - |
1420 | - def test_message_after_empty_devices_info_ready(self): |
1421 | + self.assertFalse(self.ui.is_processing) |
1422 | + |
1423 | + def test_is_not_processing_after_empty_devices_info_ready(self): |
1424 | + """The ui is no longer processing after a empty device list.""" |
1425 | + self.ui.on_devices_info_ready([]) |
1426 | + |
1427 | + self.assertFalse(self.ui.is_processing) |
1428 | + |
1429 | + def test_show_message_after_empty_devices_info_ready(self): |
1430 | """When there are no devices, a notification is shown.""" |
1431 | self.ui.on_devices_info_ready([]) |
1432 | |
1433 | - self.assertFalse(self.ui.message.active) |
1434 | self.assertEqual(self.ui.message.get_text(), self.ui.NO_DEVICES) |
1435 | |
1436 | def test_on_devices_info_ready(self): |
1437 | @@ -1327,13 +1351,18 @@ |
1438 | self.ui.on_devices_info_ready([]) |
1439 | self.assertEqual(len(self.ui.devices.get_children()), 0) |
1440 | |
1441 | + def test_is_not_processing_after_on_devices_info_error(self): |
1442 | + """The ui is no longer processing on devices info error.""" |
1443 | + self.ui.on_devices_info_error() |
1444 | + |
1445 | + self.assertFalse(self.ui.is_processing) |
1446 | + |
1447 | def test_on_devices_info_error(self): |
1448 | """The devices info couldn't be retrieved.""" |
1449 | self.ui.on_devices_info_error() |
1450 | |
1451 | self.assert_warning_correct(warning=self.ui.message, |
1452 | text=gui.VALUE_ERROR) |
1453 | - self.assertFalse(self.ui.message.active) |
1454 | |
1455 | def test_on_devices_info_error_after_success(self): |
1456 | """The devices info couldn't be retrieved after a prior success.""" |
1457 | @@ -2096,7 +2125,7 @@ |
1458 | klass = gui.ManagementPanel |
1459 | ui_filename = 'management.ui' |
1460 | |
1461 | - def assert_account_info_correct(self, info): |
1462 | + def assert_account_info_correct(self, info, progressbar_fraction=None): |
1463 | """Check that the displayed account info matches 'info'.""" |
1464 | used = int(info['quota_used']) |
1465 | total = int(info['quota_total']) |
1466 | @@ -2106,8 +2135,11 @@ |
1467 | 'percentage': percentage} |
1468 | self.assertEqual(self.ui.quota_label.get_text(), |
1469 | self.ui.QUOTA_LABEL % expected) |
1470 | + |
1471 | + if progressbar_fraction is None: |
1472 | + progressbar_fraction = percentage / 100 |
1473 | self.assertEqual(self.ui.quota_progressbar.get_fraction(), |
1474 | - percentage / 100) |
1475 | + progressbar_fraction) |
1476 | |
1477 | def test_is_a_vbox(self): |
1478 | """Inherits from gtk.VBox.""" |
1479 | @@ -2235,6 +2267,21 @@ |
1480 | self.assert_warning_correct(widget, gui.VALUE_ERROR) |
1481 | self.assertFalse(widget.active) |
1482 | |
1483 | + def test_on_account_info_ready_quota_unused(self): |
1484 | + """The used quota is correct when unused.""" |
1485 | + info = FAKE_ACCOUNT_INFO.copy() |
1486 | + info['quota_used'] = '0' |
1487 | + self.ui.on_account_info_ready(FAKE_ACCOUNT_INFO) |
1488 | + self.assert_account_info_correct(FAKE_ACCOUNT_INFO) |
1489 | + |
1490 | + def test_on_account_info_ready_quota_little_used(self): |
1491 | + """The used quota shows a minimun when little is used.""" |
1492 | + info = FAKE_ACCOUNT_INFO.copy() |
1493 | + info['quota_used'] = '10' |
1494 | + self.ui.on_account_info_ready(info) |
1495 | + |
1496 | + self.assert_account_info_correct(info, progressbar_fraction=0.05) |
1497 | + |
1498 | def test_file_sync_status(self): |
1499 | """The file sync status is shown correctly.""" |
1500 | self.assertIsInstance(self.ui.status_label, gui.FileSyncStatus) |
It all works and looks good.
Observations:
On the account tab, one button is centered (Get Support) and one is not (Buy more storage and new plans)
"Buy more storage and new plans" is poorly worded. I don't think one "buys" plans exactly. Maybe "Buy additional storage/Sign up for new plans" or something similar.
It appears that there is no keybinding to close the window. I don't know what gnome guidelines have to say about this, but most applications do offer ALT+F4 or CTRL+q (or CTRL+w for one of multiple windows.)
Other than that, it looks great