Merge lp:~nataliabidart/ubuntuone-control-panel/ui-misc-beautification into lp:ubuntuone-control-panel

Proposed by Natalia Bidart
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
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-control-panel-backend
terminal 2: DEBUG=True PYTHONPATH=. ./bin/ubuntuone-control-panel-gtk

To post a comment you must log in.
Revision history for this message
Eric Casteleijn (thisfred) 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)

"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

review: Approve
Revision history for this message
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!

Revision history for this message
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.

review: Approve (fieldtest)
Revision history for this message
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://ubuntuone.com/p/Zo8/
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.

review: Needs Fixing (ui)
Revision history for this message
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.

review: Approve
Revision history for this message
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

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'data/banner.png'
2Binary 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">&lt;b&gt;Name:&lt;/b&gt;</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">&lt;b&gt;Account type:&lt;/b&gt;</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">&lt;b&gt;Email address:&lt;/b&gt;</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">&lt;b&gt;Personal details&lt;/b&gt;</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">&lt;b&gt;Your services&lt;/b&gt;</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)

Subscribers

People subscribed via source and target branches