Merge lp:~elachuni/software-center/pep8-test-part4 into lp:software-center
- pep8-test-part4
- Merge into trunk
Proposed by
Anthony Lenton
Status: | Merged |
---|---|
Merged at revision: | 2838 |
Proposed branch: | lp:~elachuni/software-center/pep8-test-part4 |
Merge into: | lp:software-center |
Diff against target: |
1180 lines (+218/-210) 6 files modified
softwarecenter/ui/gtk3/widgets/reviews.py (+148/-130) softwarecenter/ui/gtk3/widgets/searchaid.py (+22/-38) softwarecenter/ui/gtk3/widgets/searchentry.py (+14/-12) softwarecenter/ui/gtk3/widgets/sections.py (+15/-13) softwarecenter/ui/gtk3/widgets/spinner.py (+18/-15) test/test_pep8.py (+1/-2) |
To merge this branch: | bzr merge lp:~elachuni/software-center/pep8-test-part4 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
software-store-developers | Pending | ||
Review via email:
|
Commit message
Description of the change
More pep8 goodness.
I'm not sure about the specific format for comments to Translators, please check that I didn't break anything on lines 635 and 780 of the diff.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'softwarecenter/ui/gtk3/widgets/reviews.py' | |||
2 | --- softwarecenter/ui/gtk3/widgets/reviews.py 2012-01-18 18:21:04 +0000 | |||
3 | +++ softwarecenter/ui/gtk3/widgets/reviews.py 2012-03-08 22:37:21 +0000 | |||
4 | @@ -32,21 +32,27 @@ | |||
5 | 32 | from stars import Star | 32 | from stars import Star |
6 | 33 | from softwarecenter.utils import ( | 33 | from softwarecenter.utils import ( |
7 | 34 | get_person_from_config, | 34 | get_person_from_config, |
10 | 35 | get_nice_date_string, | 35 | get_nice_date_string, |
11 | 36 | upstream_version_compare, | 36 | upstream_version_compare, |
12 | 37 | upstream_version, | 37 | upstream_version, |
13 | 38 | utf8, | 38 | utf8, |
14 | 39 | ) | 39 | ) |
15 | 40 | 40 | ||
16 | 41 | 41 | ||
18 | 42 | from softwarecenter.i18n import get_languages, langcode_to_name | 42 | from softwarecenter.i18n import ( |
19 | 43 | get_languages, | ||
20 | 44 | langcode_to_name, | ||
21 | 45 | ) | ||
22 | 43 | 46 | ||
24 | 44 | from softwarecenter.netstatus import network_state_is_connected, get_network_watcher | 47 | from softwarecenter.netstatus import ( |
25 | 48 | network_state_is_connected, | ||
26 | 49 | get_network_watcher, | ||
27 | 50 | ) | ||
28 | 45 | from softwarecenter.enums import ( | 51 | from softwarecenter.enums import ( |
30 | 46 | PkgStates, | 52 | PkgStates, |
31 | 47 | ReviewSortMethods, | 53 | ReviewSortMethods, |
32 | 48 | ) | 54 | ) |
34 | 49 | 55 | ||
35 | 50 | from softwarecenter.backend.reviews import UsefulnessCache | 56 | from softwarecenter.backend.reviews import UsefulnessCache |
36 | 51 | 57 | ||
37 | 52 | from softwarecenter.ui.gtk3.em import StockEms | 58 | from softwarecenter.ui.gtk3.em import StockEms |
38 | @@ -58,33 +64,34 @@ | |||
39 | 58 | (COL_LANGNAME, | 64 | (COL_LANGNAME, |
40 | 59 | COL_LANGCODE) = range(2) | 65 | COL_LANGCODE) = range(2) |
41 | 60 | 66 | ||
42 | 67 | |||
43 | 61 | class UIReviewsList(Gtk.VBox): | 68 | class UIReviewsList(Gtk.VBox): |
44 | 62 | 69 | ||
45 | 63 | __gsignals__ = { | 70 | __gsignals__ = { |
47 | 64 | 'new-review':(GObject.SignalFlags.RUN_FIRST, | 71 | 'new-review': (GObject.SignalFlags.RUN_FIRST, |
48 | 65 | None, | 72 | None, |
49 | 66 | ()), | 73 | ()), |
51 | 67 | 'report-abuse':(GObject.SignalFlags.RUN_FIRST, | 74 | 'report-abuse': (GObject.SignalFlags.RUN_FIRST, |
52 | 68 | None, | 75 | None, |
53 | 69 | (GObject.TYPE_PYOBJECT,)), | 76 | (GObject.TYPE_PYOBJECT,)), |
55 | 70 | 'submit-usefulness':(GObject.SignalFlags.RUN_FIRST, | 77 | 'submit-usefulness': (GObject.SignalFlags.RUN_FIRST, |
56 | 71 | None, | 78 | None, |
57 | 72 | (GObject.TYPE_PYOBJECT, bool)), | 79 | (GObject.TYPE_PYOBJECT, bool)), |
65 | 73 | 'modify-review':(GObject.SignalFlags.RUN_FIRST, | 80 | 'modify-review': (GObject.SignalFlags.RUN_FIRST, |
66 | 74 | None, | 81 | None, |
67 | 75 | (GObject.TYPE_PYOBJECT,)), | 82 | (GObject.TYPE_PYOBJECT,)), |
68 | 76 | 'delete-review':(GObject.SignalFlags.RUN_FIRST, | 83 | 'delete-review': (GObject.SignalFlags.RUN_FIRST, |
69 | 77 | None, | 84 | None, |
70 | 78 | (GObject.TYPE_PYOBJECT,)), | 85 | (GObject.TYPE_PYOBJECT,)), |
71 | 79 | 'more-reviews-clicked':(GObject.SignalFlags.RUN_FIRST, | 86 | 'more-reviews-clicked': (GObject.SignalFlags.RUN_FIRST, |
72 | 80 | None, | 87 | None, |
75 | 81 | () ), | 88 | ()), |
76 | 82 | 'different-review-language-clicked':(GObject.SignalFlags.RUN_FIRST, | 89 | 'different-review-language-clicked': (GObject.SignalFlags.RUN_FIRST, |
77 | 83 | None, | 90 | None, |
80 | 84 | (GObject.TYPE_STRING,) ), | 91 | (GObject.TYPE_STRING,)), |
81 | 85 | 'review-sort-changed':(GObject.SignalFlags.RUN_FIRST, | 92 | 'review-sort-changed': (GObject.SignalFlags.RUN_FIRST, |
82 | 86 | None, | 93 | None, |
84 | 87 | (GObject.TYPE_INT,) ), | 94 | (GObject.TYPE_INT,)), |
85 | 88 | } | 95 | } |
86 | 89 | 96 | ||
87 | 90 | def __init__(self, parent): | 97 | def __init__(self, parent): |
88 | @@ -109,7 +116,7 @@ | |||
89 | 109 | label.set_alignment(0, 0.5) | 116 | label.set_alignment(0, 0.5) |
90 | 110 | self.pack_start(label, False, False, 0) | 117 | self.pack_start(label, False, False, 0) |
91 | 111 | 118 | ||
93 | 112 | # header | 119 | # header |
94 | 113 | self.header = Gtk.HBox() | 120 | self.header = Gtk.HBox() |
95 | 114 | self.header.set_spacing(StockEms.MEDIUM) | 121 | self.header.set_spacing(StockEms.MEDIUM) |
96 | 115 | 122 | ||
97 | @@ -136,8 +143,8 @@ | |||
98 | 136 | self.review_language.add_attribute(cell, "text", COL_LANGNAME) | 143 | self.review_language.add_attribute(cell, "text", COL_LANGNAME) |
99 | 137 | self.review_language_model = Gtk.ListStore(str, str) | 144 | self.review_language_model = Gtk.ListStore(str, str) |
100 | 138 | for lang in get_languages(): | 145 | for lang in get_languages(): |
103 | 139 | self.review_language_model.append( (langcode_to_name(lang), lang) ) | 146 | self.review_language_model.append((langcode_to_name(lang), lang)) |
104 | 140 | self.review_language_model.append( (_('Any language'), 'any') ) | 147 | self.review_language_model.append((_('Any language'), 'any')) |
105 | 141 | self.review_language.set_model(self.review_language_model) | 148 | self.review_language.set_model(self.review_language_model) |
106 | 142 | self.review_language.set_active(0) | 149 | self.review_language.set_active(0) |
107 | 143 | self.review_language.connect( | 150 | self.review_language.connect( |
108 | @@ -153,10 +160,9 @@ | |||
109 | 153 | self.no_network_msg = None | 160 | self.no_network_msg = None |
110 | 154 | watcher = get_network_watcher() | 161 | watcher = get_network_watcher() |
111 | 155 | watcher.connect( | 162 | watcher.connect( |
113 | 156 | "changed", lambda w,s: self._on_network_state_change()) | 163 | "changed", lambda w, s: self._on_network_state_change()) |
114 | 157 | 164 | ||
115 | 158 | self.show_all() | 165 | self.show_all() |
116 | 159 | return | ||
117 | 160 | 166 | ||
118 | 161 | def _on_network_state_change(self): | 167 | def _on_network_state_change(self): |
119 | 162 | is_connected = network_state_is_connected() | 168 | is_connected = network_state_is_connected() |
120 | @@ -171,7 +177,7 @@ | |||
121 | 171 | 177 | ||
122 | 172 | def _on_button_new_clicked(self, button): | 178 | def _on_button_new_clicked(self, button): |
123 | 173 | self.emit("new-review") | 179 | self.emit("new-review") |
125 | 174 | 180 | ||
126 | 175 | def _on_sort_method_changed(self, cb): | 181 | def _on_sort_method_changed(self, cb): |
127 | 176 | selection = self.sort_combo.get_active() | 182 | selection = self.sort_combo.get_active() |
128 | 177 | if selection == self._current_sort: | 183 | if selection == self._current_sort: |
129 | @@ -179,7 +185,7 @@ | |||
130 | 179 | else: | 185 | else: |
131 | 180 | self._current_sort = selection | 186 | self._current_sort = selection |
132 | 181 | self.emit("review-sort-changed", selection) | 187 | self.emit("review-sort-changed", selection) |
134 | 182 | 188 | ||
135 | 183 | def update_useful_votes(self, my_votes): | 189 | def update_useful_votes(self, my_votes): |
136 | 184 | self.useful_votes = my_votes | 190 | self.useful_votes = my_votes |
137 | 185 | 191 | ||
138 | @@ -191,26 +197,25 @@ | |||
139 | 191 | if self.reviews: | 197 | if self.reviews: |
140 | 192 | for r in self.reviews: | 198 | for r in self.reviews: |
141 | 193 | pkgversion = self._parent.app_details.version | 199 | pkgversion = self._parent.app_details.version |
143 | 194 | review = UIReview(r, pkgversion, self.logged_in_person, self.useful_votes) | 200 | review = UIReview(r, pkgversion, self.logged_in_person, |
144 | 201 | self.useful_votes) | ||
145 | 195 | self.vbox.pack_start(review, True, True, 0) | 202 | self.vbox.pack_start(review, True, True, 0) |
146 | 196 | return | ||
147 | 197 | 203 | ||
148 | 198 | def _be_the_first_to_review(self): | 204 | def _be_the_first_to_review(self): |
149 | 199 | s = _('Be the first to review it') | 205 | s = _('Be the first to review it') |
150 | 200 | self.new_review.set_label(s) | 206 | self.new_review.set_label(s) |
151 | 201 | self.vbox.pack_start(NoReviewYetWriteOne(), True, True, 0) | 207 | self.vbox.pack_start(NoReviewYetWriteOne(), True, True, 0) |
152 | 202 | self.vbox.show_all() | 208 | self.vbox.show_all() |
153 | 203 | return | ||
154 | 204 | 209 | ||
155 | 205 | def _install_to_review(self): | 210 | def _install_to_review(self): |
157 | 206 | s = '<small>%s</small>' % _("You need to install this before you can review it") | 211 | s = ('<small>%s</small>' % |
158 | 212 | _("You need to install this before you can review it")) | ||
159 | 207 | self.install_first_label = Gtk.Label(label=s) | 213 | self.install_first_label = Gtk.Label(label=s) |
160 | 208 | self.install_first_label.set_use_markup(True) | 214 | self.install_first_label.set_use_markup(True) |
161 | 209 | self.install_first_label.set_alignment(1.0, 0.5) | 215 | self.install_first_label.set_alignment(1.0, 0.5) |
162 | 210 | self.header.pack_start(self.install_first_label, False, False, 0) | 216 | self.header.pack_start(self.install_first_label, False, False, 0) |
163 | 211 | self.install_first_label.show() | 217 | self.install_first_label.show() |
166 | 212 | return | 218 | |
165 | 213 | |||
167 | 214 | # FIXME: this needs to be smarter in the future as we will | 219 | # FIXME: this needs to be smarter in the future as we will |
168 | 215 | # not allow multiple reviews for the same software version | 220 | # not allow multiple reviews for the same software version |
169 | 216 | def _any_reviews_current_user(self): | 221 | def _any_reviews_current_user(self): |
170 | @@ -225,14 +230,14 @@ | |||
171 | 225 | m = EmbeddedMessage(title, msg, 'network-offline') | 230 | m = EmbeddedMessage(title, msg, 'network-offline') |
172 | 226 | self.vbox.pack_start(m, True, True, 0) | 231 | self.vbox.pack_start(m, True, True, 0) |
173 | 227 | return m | 232 | return m |
175 | 228 | 233 | ||
176 | 229 | def _clear_vbox(self, vbox): | 234 | def _clear_vbox(self, vbox): |
177 | 230 | children = vbox.get_children() | 235 | children = vbox.get_children() |
178 | 231 | for child in children: | 236 | for child in children: |
179 | 232 | child.destroy() | 237 | child.destroy() |
180 | 233 | 238 | ||
183 | 234 | # FIXME: instead of clear/add_reviews/configure_reviews_ui we should provide | 239 | # FIXME: instead of clear/add_reviews/configure_reviews_ui we should |
184 | 235 | # a single show_reviews(reviews_data_list) | 240 | # provide a single show_reviews(reviews_data_list) |
185 | 236 | def configure_reviews_ui(self): | 241 | def configure_reviews_ui(self): |
186 | 237 | """ this needs to be called after add_reviews, it will actually | 242 | """ this needs to be called after add_reviews, it will actually |
187 | 238 | show the reviews | 243 | show the reviews |
188 | @@ -243,7 +248,7 @@ | |||
189 | 243 | self.install_first_label.hide() | 248 | self.install_first_label.hide() |
190 | 244 | except AttributeError: | 249 | except AttributeError: |
191 | 245 | pass | 250 | pass |
193 | 246 | 251 | ||
194 | 247 | self._clear_vbox(self.vbox) | 252 | self._clear_vbox(self.vbox) |
195 | 248 | 253 | ||
196 | 249 | # network sensitive stuff, only show write_review if connected, | 254 | # network sensitive stuff, only show write_review if connected, |
197 | @@ -253,14 +258,14 @@ | |||
198 | 253 | 258 | ||
199 | 254 | # only show new_review for installed stuff | 259 | # only show new_review for installed stuff |
200 | 255 | is_installed = (self._parent.app_details and | 260 | is_installed = (self._parent.app_details and |
202 | 256 | self._parent.app_details.pkg_state == PkgStates.INSTALLED) | 261 | self._parent.app_details.pkg_state == PkgStates.INSTALLED) |
203 | 257 | 262 | ||
204 | 258 | # show/hide new review button | 263 | # show/hide new review button |
205 | 259 | if is_installed: | 264 | if is_installed: |
206 | 260 | self.new_review.show() | 265 | self.new_review.show() |
207 | 261 | else: | 266 | else: |
208 | 262 | self.new_review.hide() | 267 | self.new_review.hide() |
210 | 263 | # if there are no reviews, the install to review text appears | 268 | # if there are no reviews, the install to review text appears |
211 | 264 | # where the reviews usually are (LP #823255) | 269 | # where the reviews usually are (LP #823255) |
212 | 265 | if self.reviews: | 270 | if self.reviews: |
213 | 266 | self._install_to_review() | 271 | self._install_to_review() |
214 | @@ -301,7 +306,6 @@ | |||
215 | 301 | # always run this here to make update the current ui based on the | 306 | # always run this here to make update the current ui based on the |
216 | 302 | # network state | 307 | # network state |
217 | 303 | self._on_network_state_change() | 308 | self._on_network_state_change() |
218 | 304 | return | ||
219 | 305 | 309 | ||
220 | 306 | def _on_more_reviews_clicked(self, button): | 310 | def _on_more_reviews_clicked(self, button): |
221 | 307 | # remove buttn and emit signal | 311 | # remove buttn and emit signal |
222 | @@ -323,11 +327,10 @@ | |||
223 | 323 | ids = [] | 327 | ids = [] |
224 | 324 | for review in self.reviews: | 328 | for review in self.reviews: |
225 | 325 | ids.append(review.id) | 329 | ids.append(review.id) |
227 | 326 | return ids | 330 | return ids |
228 | 327 | 331 | ||
229 | 328 | def add_review(self, review): | 332 | def add_review(self, review): |
230 | 329 | self.reviews.append(review) | 333 | self.reviews.append(review) |
231 | 330 | return | ||
232 | 331 | 334 | ||
233 | 332 | def replace_review(self, review): | 335 | def replace_review(self, review): |
234 | 333 | for r in self.reviews: | 336 | for r in self.reviews: |
235 | @@ -336,14 +339,12 @@ | |||
236 | 336 | self.reviews.remove(r) | 339 | self.reviews.remove(r) |
237 | 337 | self.reviews.insert(pos, review) | 340 | self.reviews.insert(pos, review) |
238 | 338 | break | 341 | break |
239 | 339 | return | ||
240 | 340 | 342 | ||
241 | 341 | def remove_review(self, review): | 343 | def remove_review(self, review): |
242 | 342 | for r in self.reviews: | 344 | for r in self.reviews: |
243 | 343 | if r.id == review.id: | 345 | if r.id == review.id: |
244 | 344 | self.reviews.remove(r) | 346 | self.reviews.remove(r) |
245 | 345 | break | 347 | break |
246 | 346 | return | ||
247 | 347 | 348 | ||
248 | 348 | def clear(self): | 349 | def clear(self): |
249 | 349 | self.reviews = [] | 350 | self.reviews = [] |
250 | @@ -358,7 +359,7 @@ | |||
251 | 358 | self.install_first_label.hide() | 359 | self.install_first_label.hide() |
252 | 359 | except AttributeError: | 360 | except AttributeError: |
253 | 360 | pass | 361 | pass |
255 | 361 | 362 | ||
256 | 362 | a = Gtk.Alignment.new(0.5, 0.5, 1.0, 1.0) | 363 | a = Gtk.Alignment.new(0.5, 0.5, 1.0, 1.0) |
257 | 363 | hb = Gtk.HBox(spacing=12) | 364 | hb = Gtk.HBox(spacing=12) |
258 | 364 | hb.show() | 365 | hb.show() |
259 | @@ -380,26 +381,23 @@ | |||
260 | 380 | 381 | ||
261 | 381 | self.vbox.pack_start(a, False, False, 0) | 382 | self.vbox.pack_start(a, False, False, 0) |
262 | 382 | self.vbox.show() | 383 | self.vbox.show() |
263 | 383 | return | ||
264 | 384 | 384 | ||
265 | 385 | def hide_spinner(self): | 385 | def hide_spinner(self): |
266 | 386 | for child in self.vbox.get_children(): | 386 | for child in self.vbox.get_children(): |
267 | 387 | if isinstance(child, Gtk.Alignment): | 387 | if isinstance(child, Gtk.Alignment): |
268 | 388 | child.destroy() | 388 | child.destroy() |
269 | 389 | return | ||
270 | 390 | 389 | ||
271 | 391 | def draw(self, cr, a): | 390 | def draw(self, cr, a): |
272 | 392 | for r in self.vbox: | 391 | for r in self.vbox: |
273 | 393 | if isinstance(r, (UIReview)): | 392 | if isinstance(r, (UIReview)): |
274 | 394 | r.draw(cr, r.get_allocation()) | 393 | r.draw(cr, r.get_allocation()) |
275 | 395 | return | ||
276 | 396 | 394 | ||
277 | 397 | 395 | ||
278 | 398 | class UIReview(Gtk.VBox): | 396 | class UIReview(Gtk.VBox): |
279 | 399 | """ the UI for a individual review including all button to mark | 397 | """ the UI for a individual review including all button to mark |
280 | 400 | useful/inappropriate etc | 398 | useful/inappropriate etc |
281 | 401 | """ | 399 | """ |
283 | 402 | def __init__(self, review_data=None, app_version=None, | 400 | def __init__(self, review_data=None, app_version=None, |
284 | 403 | logged_in_person=None, useful_votes=None): | 401 | logged_in_person=None, useful_votes=None): |
285 | 404 | GObject.GObject.__init__(self) | 402 | GObject.GObject.__init__(self) |
286 | 405 | self.set_spacing(StockEms.SMALL) | 403 | self.set_spacing(StockEms.SMALL) |
287 | @@ -420,15 +418,15 @@ | |||
288 | 420 | self.delete_error_img = Gtk.Image() | 418 | self.delete_error_img = Gtk.Image() |
289 | 421 | self.delete_error_img.set_from_stock( | 419 | self.delete_error_img.set_from_stock( |
290 | 422 | Gtk.STOCK_DIALOG_ERROR, | 420 | Gtk.STOCK_DIALOG_ERROR, |
292 | 423 | Gtk.IconSize.SMALL_TOOLBAR) | 421 | Gtk.IconSize.SMALL_TOOLBAR) |
293 | 424 | self.submit_error_img = Gtk.Image() | 422 | self.submit_error_img = Gtk.Image() |
294 | 425 | self.submit_error_img.set_from_stock( | 423 | self.submit_error_img.set_from_stock( |
295 | 426 | Gtk.STOCK_DIALOG_ERROR, | 424 | Gtk.STOCK_DIALOG_ERROR, |
296 | 427 | Gtk.IconSize.SMALL_TOOLBAR) | 425 | Gtk.IconSize.SMALL_TOOLBAR) |
297 | 428 | self.submit_status_spinner = Gtk.Spinner() | 426 | self.submit_status_spinner = Gtk.Spinner() |
299 | 429 | self.submit_status_spinner.set_size_request(12,12) | 427 | self.submit_status_spinner.set_size_request(12, 12) |
300 | 430 | self.delete_status_spinner = Gtk.Spinner() | 428 | self.delete_status_spinner = Gtk.Spinner() |
302 | 431 | self.delete_status_spinner.set_size_request(12,12) | 429 | self.delete_status_spinner.set_size_request(12, 12) |
303 | 432 | self.acknowledge_error = Gtk.Button() | 430 | self.acknowledge_error = Gtk.Button() |
304 | 433 | label = Gtk.Label() | 431 | label = Gtk.Label() |
305 | 434 | label.set_markup('<small>%s</small>' % _("OK")) | 432 | label.set_markup('<small>%s</small>' % _("OK")) |
306 | @@ -465,7 +463,6 @@ | |||
307 | 465 | 463 | ||
308 | 466 | def _on_realize(self, widget, *content): | 464 | def _on_realize(self, widget, *content): |
309 | 467 | self._build(*content) | 465 | self._build(*content) |
310 | 468 | return | ||
311 | 469 | 466 | ||
312 | 470 | def _on_report_abuse_clicked(self, button): | 467 | def _on_report_abuse_clicked(self, button): |
313 | 471 | reviews = self.get_ancestor(UIReviewsList) | 468 | reviews = self.get_ancestor(UIReviewsList) |
314 | @@ -476,46 +473,54 @@ | |||
315 | 476 | reviews = self.get_ancestor(UIReviewsList) | 473 | reviews = self.get_ancestor(UIReviewsList) |
316 | 477 | if reviews: | 474 | if reviews: |
317 | 478 | reviews.emit("modify-review", self.id) | 475 | reviews.emit("modify-review", self.id) |
319 | 479 | 476 | ||
320 | 480 | def _on_useful_clicked(self, btn, is_useful): | 477 | def _on_useful_clicked(self, btn, is_useful): |
321 | 481 | reviews = self.get_ancestor(UIReviewsList) | 478 | reviews = self.get_ancestor(UIReviewsList) |
322 | 482 | if reviews: | 479 | if reviews: |
323 | 483 | self._usefulness_ui_update('progress') | 480 | self._usefulness_ui_update('progress') |
324 | 484 | reviews.emit("submit-usefulness", self.id, is_useful) | 481 | reviews.emit("submit-usefulness", self.id, is_useful) |
327 | 485 | 482 | ||
328 | 486 | def _on_error_acknowledged(self, button, current_user_reviewer, useful_total, useful_favorable): | 483 | def _on_error_acknowledged(self, button, current_user_reviewer, |
329 | 484 | useful_total, useful_favorable): | ||
330 | 487 | self.usefulness_error = False | 485 | self.usefulness_error = False |
334 | 488 | self._usefulness_ui_update('renew', current_user_reviewer, useful_total, useful_favorable) | 486 | self._usefulness_ui_update('renew', current_user_reviewer, |
335 | 489 | 487 | useful_total, useful_favorable) | |
336 | 490 | def _usefulness_ui_update(self, type, current_user_reviewer=False, useful_total=0, useful_favorable=0): | 488 | |
337 | 489 | def _usefulness_ui_update(self, type, current_user_reviewer=False, | ||
338 | 490 | useful_total=0, useful_favorable=0): | ||
339 | 491 | self._hide_usefulness_elements() | 491 | self._hide_usefulness_elements() |
340 | 492 | #print "_usefulness_ui_update: %s" % type | 492 | #print "_usefulness_ui_update: %s" % type |
341 | 493 | if type == 'renew': | 493 | if type == 'renew': |
343 | 494 | self._build_usefulness_ui(current_user_reviewer, useful_total, useful_favorable, self.useful_votes) | 494 | self._build_usefulness_ui(current_user_reviewer, useful_total, |
344 | 495 | useful_favorable, self.useful_votes) | ||
345 | 495 | return | 496 | return |
346 | 496 | if type == 'progress': | 497 | if type == 'progress': |
348 | 497 | self.status_label = Gtk.Label.new("<small>%s</small>" % _(u"Submitting now\u2026")) | 498 | self.status_label = Gtk.Label.new( |
349 | 499 | "<small>%s</small>" % _(u"Submitting now\u2026")) | ||
350 | 498 | self.status_label.set_use_markup(True) | 500 | self.status_label.set_use_markup(True) |
352 | 499 | self.status_box.pack_start(self.submit_status_spinner, False, False, 0) | 501 | self.status_box.pack_start(self.submit_status_spinner, False, |
353 | 502 | False, 0) | ||
354 | 500 | self.submit_status_spinner.show() | 503 | self.submit_status_spinner.show() |
355 | 501 | self.submit_status_spinner.start() | 504 | self.submit_status_spinner.start() |
357 | 502 | self.status_label.set_padding(2,0) | 505 | self.status_label.set_padding(2, 0) |
358 | 503 | self.status_box.pack_start(self.status_label, False, False, 0) | 506 | self.status_box.pack_start(self.status_label, False, False, 0) |
359 | 504 | self.status_label.show() | 507 | self.status_label.show() |
360 | 505 | if type == 'error': | 508 | if type == 'error': |
361 | 506 | self.submit_error_img.show() | 509 | self.submit_error_img.show() |
363 | 507 | self.status_label = Gtk.Label.new("<small>%s</small>" % _("Error submitting usefulness")) | 510 | self.status_label = Gtk.Label.new( |
364 | 511 | "<small>%s</small>" % _("Error submitting usefulness")) | ||
365 | 508 | self.status_label.set_use_markup(True) | 512 | self.status_label.set_use_markup(True) |
366 | 509 | self.status_box.pack_start(self.submit_error_img, False, False, 0) | 513 | self.status_box.pack_start(self.submit_error_img, False, False, 0) |
368 | 510 | self.status_label.set_padding(2,0) | 514 | self.status_label.set_padding(2, 0) |
369 | 511 | self.status_box.pack_start(self.status_label, False, False, 0) | 515 | self.status_box.pack_start(self.status_label, False, False, 0) |
370 | 512 | self.status_label.show() | 516 | self.status_label.show() |
371 | 513 | self.acknowledge_error.show() | 517 | self.acknowledge_error.show() |
372 | 514 | self.status_box.pack_start(self.acknowledge_error, False, False, 0) | 518 | self.status_box.pack_start(self.acknowledge_error, False, False, 0) |
374 | 515 | self.acknowledge_error.connect('clicked', self._on_error_acknowledged, current_user_reviewer, useful_total, useful_favorable) | 519 | self.acknowledge_error.connect('clicked', |
375 | 520 | self._on_error_acknowledged, current_user_reviewer, | ||
376 | 521 | useful_total, useful_favorable) | ||
377 | 516 | self.status_box.show() | 522 | self.status_box.show() |
378 | 517 | self.footer.pack_start(self.status_box, False, False, 0) | 523 | self.footer.pack_start(self.status_box, False, False, 0) |
379 | 518 | return | ||
380 | 519 | 524 | ||
381 | 520 | def _hide_usefulness_elements(self): | 525 | def _hide_usefulness_elements(self): |
382 | 521 | """ hide all usefulness elements """ | 526 | """ hide all usefulness elements """ |
383 | @@ -526,13 +531,13 @@ | |||
384 | 526 | widget = getattr(self, attr, None) | 531 | widget = getattr(self, attr, None) |
385 | 527 | if widget: | 532 | if widget: |
386 | 528 | widget.hide() | 533 | widget.hide() |
387 | 529 | return | ||
388 | 530 | 534 | ||
389 | 531 | def _get_datetime_from_review_date(self, raw_date_str): | 535 | def _get_datetime_from_review_date(self, raw_date_str): |
390 | 532 | # example raw_date str format: 2011-01-28 19:15:21 | 536 | # example raw_date str format: 2011-01-28 19:15:21 |
391 | 533 | return datetime.datetime.strptime(raw_date_str, '%Y-%m-%d %H:%M:%S') | 537 | return datetime.datetime.strptime(raw_date_str, '%Y-%m-%d %H:%M:%S') |
392 | 534 | 538 | ||
394 | 535 | def _delete_ui_update(self, type, current_user_reviewer=False, action=None): | 539 | def _delete_ui_update(self, type, current_user_reviewer=False, |
395 | 540 | action=None): | ||
396 | 536 | self._hide_delete_elements() | 541 | self._hide_delete_elements() |
397 | 537 | if type == 'renew': | 542 | if type == 'renew': |
398 | 538 | self._build_delete_flag_ui(current_user_reviewer) | 543 | self._build_delete_flag_ui(current_user_reviewer) |
399 | @@ -540,35 +545,42 @@ | |||
400 | 540 | if type == 'progress': | 545 | if type == 'progress': |
401 | 541 | self.delete_status_spinner.start() | 546 | self.delete_status_spinner.start() |
402 | 542 | self.delete_status_spinner.show() | 547 | self.delete_status_spinner.show() |
405 | 543 | self.delete_status_label = Gtk.Label("<small><b>%s</b></small>" % _(u"Deleting now\u2026")) | 548 | self.delete_status_label = Gtk.Label( |
406 | 544 | self.delete_status_box.pack_start(self.delete_status_spinner, False, False, 0) | 549 | "<small><b>%s</b></small>" % _(u"Deleting now\u2026")) |
407 | 550 | self.delete_status_box.pack_start(self.delete_status_spinner, | ||
408 | 551 | False, False, 0) | ||
409 | 545 | self.delete_status_label.set_use_markup(True) | 552 | self.delete_status_label.set_use_markup(True) |
412 | 546 | self.delete_status_label.set_padding(2,0) | 553 | self.delete_status_label.set_padding(2, 0) |
413 | 547 | self.delete_status_box.pack_start(self.delete_status_label, False, False, 0) | 554 | self.delete_status_box.pack_start(self.delete_status_label, False, |
414 | 555 | False, 0) | ||
415 | 548 | self.delete_status_label.show() | 556 | self.delete_status_label.show() |
416 | 549 | if type == 'error': | 557 | if type == 'error': |
417 | 550 | self.delete_error_img.show() | 558 | self.delete_error_img.show() |
419 | 551 | # build full strings for easier i18n | 559 | # build full strings for easier i18n |
420 | 552 | if action == 'deleting': | 560 | if action == 'deleting': |
421 | 553 | s = _("Error deleting review") | 561 | s = _("Error deleting review") |
422 | 554 | elif action == 'modifying': | 562 | elif action == 'modifying': |
423 | 555 | s = _("Error modifying review") | 563 | s = _("Error modifying review") |
424 | 556 | else: | 564 | else: |
426 | 557 | # or unknown error, but we are in string freeze, | 565 | # or unknown error, but we are in string freeze, |
427 | 558 | # should never happen anyway | 566 | # should never happen anyway |
428 | 559 | s = _("Internal Error") | 567 | s = _("Internal Error") |
431 | 560 | self.delete_status_label = Gtk.Label("<small><b>%s</b></small>" % s) | 568 | self.delete_status_label = Gtk.Label( |
432 | 561 | self.delete_status_box.pack_start(self.delete_error_img, False, False, 0) | 569 | "<small><b>%s</b></small>" % s) |
433 | 570 | self.delete_status_box.pack_start(self.delete_error_img, | ||
434 | 571 | False, False, 0) | ||
435 | 562 | self.delete_status_label.set_use_markup(True) | 572 | self.delete_status_label.set_use_markup(True) |
438 | 563 | self.delete_status_label.set_padding(2,0) | 573 | self.delete_status_label.set_padding(2, 0) |
439 | 564 | self.delete_status_box.pack_start(self.delete_status_label, False, False, 0) | 574 | self.delete_status_box.pack_start(self.delete_status_label, |
440 | 575 | False, False, 0) | ||
441 | 565 | self.delete_status_label.show() | 576 | self.delete_status_label.show() |
442 | 566 | self.delete_acknowledge_error.show() | 577 | self.delete_acknowledge_error.show() |
445 | 567 | self.delete_status_box.pack_start(self.delete_acknowledge_error, False, False, 0) | 578 | self.delete_status_box.pack_start(self.delete_acknowledge_error, |
446 | 568 | self.delete_acknowledge_error.connect('clicked', self._on_delete_error_acknowledged, current_user_reviewer) | 579 | False, False, 0) |
447 | 580 | self.delete_acknowledge_error.connect('clicked', | ||
448 | 581 | self._on_delete_error_acknowledged, current_user_reviewer) | ||
449 | 569 | self.delete_status_box.show() | 582 | self.delete_status_box.show() |
450 | 570 | self.footer.pack_end(self.delete_status_box, False, False, 0) | 583 | self.footer.pack_end(self.delete_status_box, False, False, 0) |
451 | 571 | return | ||
452 | 572 | 584 | ||
453 | 573 | def _on_delete_clicked(self, btn): | 585 | def _on_delete_clicked(self, btn): |
454 | 574 | reviews = self.get_ancestor(UIReviewsList) | 586 | reviews = self.get_ancestor(UIReviewsList) |
455 | @@ -583,16 +595,16 @@ | |||
456 | 583 | def _hide_delete_elements(self): | 595 | def _hide_delete_elements(self): |
457 | 584 | """ hide all delete elements """ | 596 | """ hide all delete elements """ |
458 | 585 | for attr in ["complain", "edit", "delete", "delete_status_spinner", | 597 | for attr in ["complain", "edit", "delete", "delete_status_spinner", |
461 | 586 | "delete_error_img", "delete_status_box", "delete_status_label", | 598 | "delete_error_img", "delete_status_box", |
462 | 587 | "delete_acknowledge_error", "flagbox" | 599 | "delete_status_label", "delete_acknowledge_error", |
463 | 600 | "flagbox" | ||
464 | 588 | ]: | 601 | ]: |
465 | 589 | o = getattr(self, attr, None) | 602 | o = getattr(self, attr, None) |
466 | 590 | if o: | 603 | if o: |
467 | 591 | o.hide() | 604 | o.hide() |
468 | 592 | return | ||
469 | 593 | 605 | ||
470 | 594 | def _build(self, review_data, app_version, logged_in_person, useful_votes): | 606 | def _build(self, review_data, app_version, logged_in_person, useful_votes): |
472 | 595 | # all the attributes of review_data may need markup escape, | 607 | # all the attributes of review_data may need markup escape, |
473 | 596 | # depening on if they are used as text or markup | 608 | # depening on if they are used as text or markup |
474 | 597 | self.id = review_data.id | 609 | self.id = review_data.id |
475 | 598 | self.person = review_data.reviewer_username | 610 | self.person = review_data.reviewer_username |
476 | @@ -610,15 +622,15 @@ | |||
477 | 610 | # upstream version | 622 | # upstream version |
478 | 611 | version = GObject.markup_escape_text(upstream_version(review_version)) | 623 | version = GObject.markup_escape_text(upstream_version(review_version)) |
479 | 612 | # default string | 624 | # default string |
482 | 613 | version_string = _("For version %(version)s") % { | 625 | version_string = _("For version %(version)s") % { |
483 | 614 | 'version' : version, | 626 | 'version': version, |
484 | 615 | } | 627 | } |
485 | 616 | # If its for the same version, show it as such | 628 | # If its for the same version, show it as such |
486 | 617 | if (review_version and | 629 | if (review_version and |
487 | 618 | app_version and | 630 | app_version and |
488 | 619 | upstream_version_compare(review_version, app_version) == 0): | 631 | upstream_version_compare(review_version, app_version) == 0): |
491 | 620 | version_string = _("For this version (%(version)s)") % { | 632 | version_string = _("For this version (%(version)s)") % { |
492 | 621 | 'version' : version, | 633 | 'version': version, |
493 | 622 | } | 634 | } |
494 | 623 | 635 | ||
495 | 624 | m = '<small>%s</small>' | 636 | m = '<small>%s</small>' |
496 | @@ -663,31 +675,34 @@ | |||
497 | 663 | current_user_reviewer = True | 675 | current_user_reviewer = True |
498 | 664 | 676 | ||
499 | 665 | self._build_usefulness_ui(current_user_reviewer, useful_total, | 677 | self._build_usefulness_ui(current_user_reviewer, useful_total, |
501 | 666 | useful_favorable, useful_votes, useful_submit_error) | 678 | useful_favorable, useful_votes, |
502 | 679 | useful_submit_error) | ||
503 | 667 | 680 | ||
504 | 668 | self.flagbox = Gtk.HBox() | 681 | self.flagbox = Gtk.HBox() |
505 | 669 | self.flagbox.set_spacing(4) | 682 | self.flagbox.set_spacing(4) |
507 | 670 | self._build_delete_flag_ui(current_user_reviewer, delete_error, modify_error) | 683 | self._build_delete_flag_ui(current_user_reviewer, delete_error, |
508 | 684 | modify_error) | ||
509 | 671 | self.footer.pack_end(self.flagbox, False, False, 0) | 685 | self.footer.pack_end(self.flagbox, False, False, 0) |
510 | 672 | 686 | ||
511 | 673 | # connect network signals | 687 | # connect network signals |
512 | 674 | self.connect("realize", lambda w: self._on_network_state_change()) | 688 | self.connect("realize", lambda w: self._on_network_state_change()) |
513 | 675 | watcher = get_network_watcher() | 689 | watcher = get_network_watcher() |
514 | 676 | watcher.connect( | 690 | watcher.connect( |
520 | 677 | "changed", lambda w,s: self._on_network_state_change()) | 691 | "changed", lambda w, s: self._on_network_state_change()) |
521 | 678 | return | 692 | |
522 | 679 | 693 | def _build_usefulness_ui(self, current_user_reviewer, useful_total, | |
523 | 680 | def _build_usefulness_ui(self, current_user_reviewer, useful_total, | 694 | useful_favorable, useful_votes, |
524 | 681 | useful_favorable, useful_votes, usefulness_submit_error=False): | 695 | usefulness_submit_error=False): |
525 | 682 | if usefulness_submit_error: | 696 | if usefulness_submit_error: |
527 | 683 | self._usefulness_ui_update('error', current_user_reviewer, | 697 | self._usefulness_ui_update('error', current_user_reviewer, |
528 | 684 | useful_total, useful_favorable) | 698 | useful_total, useful_favorable) |
529 | 685 | else: | 699 | else: |
530 | 686 | already_voted = useful_votes.check_for_usefulness(self.id) | 700 | already_voted = useful_votes.check_for_usefulness(self.id) |
532 | 687 | #get correct label based on retrieved usefulness totals and | 701 | #get correct label based on retrieved usefulness totals and |
533 | 688 | # if user is reviewer | 702 | # if user is reviewer |
534 | 689 | self.useful = self._get_usefulness_label( | 703 | self.useful = self._get_usefulness_label( |
536 | 690 | current_user_reviewer, useful_total, useful_favorable, already_voted) | 704 | current_user_reviewer, useful_total, useful_favorable, |
537 | 705 | already_voted) | ||
538 | 691 | self.useful.set_use_markup(True) | 706 | self.useful.set_use_markup(True) |
539 | 692 | #vertically centre so it lines up with the Yes and No buttons | 707 | #vertically centre so it lines up with the Yes and No buttons |
540 | 693 | self.useful.set_alignment(0, 0.5) | 708 | self.useful.set_alignment(0, 0.5) |
541 | @@ -714,7 +729,6 @@ | |||
542 | 714 | self.likebox.pack_start(self.yes_no_separator, False, False, 0) | 729 | self.likebox.pack_start(self.yes_no_separator, False, False, 0) |
543 | 715 | self.likebox.pack_start(self.no_like, False, False, 0) | 730 | self.likebox.pack_start(self.no_like, False, False, 0) |
544 | 716 | self.footer.pack_start(self.likebox, False, False, 0) | 731 | self.footer.pack_start(self.likebox, False, False, 0) |
545 | 717 | return | ||
546 | 718 | 732 | ||
547 | 719 | def _on_network_state_change(self): | 733 | def _on_network_state_change(self): |
548 | 720 | """ show/hide widgets based on network connection state """ | 734 | """ show/hide widgets based on network connection state """ |
549 | @@ -732,10 +746,10 @@ | |||
550 | 732 | # actually submit anything without network | 746 | # actually submit anything without network |
551 | 733 | self.useful.hide() | 747 | self.useful.hide() |
552 | 734 | self.complain.hide() | 748 | self.complain.hide() |
557 | 735 | 749 | ||
558 | 736 | def _get_usefulness_label(self, current_user_reviewer, | 750 | def _get_usefulness_label(self, current_user_reviewer, |
559 | 737 | useful_total, useful_favorable, already_voted): | 751 | useful_total, useful_favorable, already_voted): |
560 | 738 | '''returns Gtk.Label() to be used as usefulness label depending | 752 | '''returns Gtk.Label() to be used as usefulness label depending |
561 | 739 | on passed in parameters | 753 | on passed in parameters |
562 | 740 | ''' | 754 | ''' |
563 | 741 | if already_voted == None: | 755 | if already_voted == None: |
564 | @@ -751,9 +765,10 @@ | |||
565 | 751 | "found this review helpful.", | 765 | "found this review helpful.", |
566 | 752 | "%(useful_favorable)s of %(useful_total)s people " | 766 | "%(useful_favorable)s of %(useful_total)s people " |
567 | 753 | "found this review helpful.", | 767 | "found this review helpful.", |
571 | 754 | useful_total) % { 'useful_total' : useful_total, | 768 | useful_total) % { |
572 | 755 | 'useful_favorable' : useful_favorable, | 769 | 'useful_total': useful_total, |
573 | 756 | } | 770 | 'useful_favorable': useful_favorable, |
574 | 771 | } | ||
575 | 757 | else: | 772 | else: |
576 | 758 | # user has not already voted for the review | 773 | # user has not already voted for the review |
577 | 759 | s = gettext.ngettext( | 774 | s = gettext.ngettext( |
578 | @@ -761,9 +776,10 @@ | |||
579 | 761 | "found this review helpful. Did you?", | 776 | "found this review helpful. Did you?", |
580 | 762 | "%(useful_favorable)s of %(useful_total)s people " | 777 | "%(useful_favorable)s of %(useful_total)s people " |
581 | 763 | "found this review helpful. Did you?", | 778 | "found this review helpful. Did you?", |
585 | 764 | useful_total) % { 'useful_total' : useful_total, | 779 | useful_total) % { |
586 | 765 | 'useful_favorable' : useful_favorable, | 780 | 'useful_total': useful_total, |
587 | 766 | } | 781 | 'useful_favorable': useful_favorable, |
588 | 782 | } | ||
589 | 767 | else: | 783 | else: |
590 | 768 | #only display these special strings if the user voted either way | 784 | #only display these special strings if the user voted either way |
591 | 769 | if already_voted: | 785 | if already_voted: |
592 | @@ -775,9 +791,10 @@ | |||
593 | 775 | "found this review helpful, including you", | 791 | "found this review helpful, including you", |
594 | 776 | "%(useful_favorable)s of %(useful_total)s people " | 792 | "%(useful_favorable)s of %(useful_total)s people " |
595 | 777 | "found this review helpful, including you.", | 793 | "found this review helpful, including you.", |
599 | 778 | useful_total) % { 'useful_total' : useful_total, | 794 | useful_total) % { |
600 | 779 | 'useful_favorable' : useful_favorable, | 795 | 'useful_total': useful_total, |
601 | 780 | } | 796 | 'useful_favorable': useful_favorable, |
602 | 797 | } | ||
603 | 781 | else: | 798 | else: |
604 | 782 | if useful_total == 1: | 799 | if useful_total == 1: |
605 | 783 | s = _("You found this review unhelpful.") | 800 | s = _("You found this review unhelpful.") |
606 | @@ -787,17 +804,19 @@ | |||
607 | 787 | "found this review helpful; you did not.", | 804 | "found this review helpful; you did not.", |
608 | 788 | "%(useful_favorable)s of %(useful_total)s people " | 805 | "%(useful_favorable)s of %(useful_total)s people " |
609 | 789 | "found this review helpful; you did not.", | 806 | "found this review helpful; you did not.", |
613 | 790 | useful_total) % { 'useful_total' : useful_total, | 807 | useful_total) % { |
614 | 791 | 'useful_favorable' : useful_favorable, | 808 | 'useful_total': useful_total, |
615 | 792 | } | 809 | 'useful_favorable': useful_favorable, |
616 | 810 | } | ||
617 | 793 | 811 | ||
618 | 794 | m = '<small>%s</small>' | 812 | m = '<small>%s</small>' |
619 | 795 | label = Gtk.Label() | 813 | label = Gtk.Label() |
620 | 796 | label.set_name("subtle-label") | 814 | label.set_name("subtle-label") |
621 | 797 | label.set_markup(m % s) | 815 | label.set_markup(m % s) |
622 | 798 | return label | 816 | return label |
625 | 799 | 817 | ||
626 | 800 | def _build_delete_flag_ui(self, current_user_reviewer, delete_error=False, modify_error=False): | 818 | def _build_delete_flag_ui(self, current_user_reviewer, delete_error=False, |
627 | 819 | modify_error=False): | ||
628 | 801 | if delete_error: | 820 | if delete_error: |
629 | 802 | self._delete_ui_update('error', current_user_reviewer, 'deleting') | 821 | self._delete_ui_update('error', current_user_reviewer, 'deleting') |
630 | 803 | elif modify_error: | 822 | elif modify_error: |
631 | @@ -814,16 +833,16 @@ | |||
632 | 814 | self.edit.connect('clicked', self._on_modify_clicked) | 833 | self.edit.connect('clicked', self._on_modify_clicked) |
633 | 815 | self.delete.connect('clicked', self._on_delete_clicked) | 834 | self.delete.connect('clicked', self._on_delete_clicked) |
634 | 816 | else: | 835 | else: |
638 | 817 | # Translators: This link is for flagging a review as inappropriate. | 836 | # Translators: This link is for flagging a review as |
639 | 818 | # To minimize repetition, if at all possible, keep it to a single word. | 837 | # inappropriate. To minimize repetition, if at all possible, |
640 | 819 | # If your language has an obvious verb, it won't need a question mark. | 838 | # keep it to a single word. If your language has an obvious |
641 | 839 | # verb, it won't need a question mark. | ||
642 | 820 | self.complain = Link(m % _('Inappropriate?')) | 840 | self.complain = Link(m % _('Inappropriate?')) |
643 | 821 | self.complain.set_name("subtle-label") | 841 | self.complain.set_name("subtle-label") |
644 | 822 | self.complain.set_sensitive(network_state_is_connected()) | 842 | self.complain.set_sensitive(network_state_is_connected()) |
645 | 823 | self.flagbox.pack_start(self.complain, False, False, 0) | 843 | self.flagbox.pack_start(self.complain, False, False, 0) |
646 | 824 | self.complain.connect('clicked', self._on_report_abuse_clicked) | 844 | self.complain.connect('clicked', self._on_report_abuse_clicked) |
647 | 825 | self.flagbox.show_all() | 845 | self.flagbox.show_all() |
648 | 826 | return | ||
649 | 827 | 846 | ||
650 | 828 | def _whom_when_markup(self, person, displayname, cur_t): | 847 | def _whom_when_markup(self, person, displayname, cur_t): |
651 | 829 | nice_date = get_nice_date_string(cur_t) | 848 | nice_date = get_nice_date_string(cur_t) |
652 | @@ -851,7 +870,7 @@ | |||
653 | 851 | return m | 870 | return m |
654 | 852 | 871 | ||
655 | 853 | def draw(self, widget, cr): | 872 | def draw(self, widget, cr): |
657 | 854 | return | 873 | pass |
658 | 855 | 874 | ||
659 | 856 | 875 | ||
660 | 857 | class EmbeddedMessage(UIReview): | 876 | class EmbeddedMessage(UIReview): |
661 | @@ -860,7 +879,7 @@ | |||
662 | 860 | UIReview.__init__(self) | 879 | UIReview.__init__(self) |
663 | 861 | self.label = None | 880 | self.label = None |
664 | 862 | self.image = None | 881 | self.image = None |
666 | 863 | 882 | ||
667 | 864 | a = Gtk.Alignment.new(0.5, 0.5, 1.0, 1.0) | 883 | a = Gtk.Alignment.new(0.5, 0.5, 1.0, 1.0) |
668 | 865 | self.body.pack_start(a, False, False, 0) | 884 | self.body.pack_start(a, False, False, 0) |
669 | 866 | 885 | ||
670 | @@ -878,16 +897,16 @@ | |||
671 | 878 | self.label.set_alignment(0, 0.5) | 897 | self.label.set_alignment(0, 0.5) |
672 | 879 | 898 | ||
673 | 880 | if title: | 899 | if title: |
675 | 881 | self.label.set_markup('<b><big>%s</big></b>\n%s' % (title, message)) | 900 | self.label.set_markup('<b><big>%s</big></b>\n%s' % |
676 | 901 | (title, message)) | ||
677 | 882 | else: | 902 | else: |
678 | 883 | self.label.set_markup(message) | 903 | self.label.set_markup(message) |
679 | 884 | 904 | ||
680 | 885 | hb.pack_start(self.label, True, True, 0) | 905 | hb.pack_start(self.label, True, True, 0) |
681 | 886 | self.show_all() | 906 | self.show_all() |
682 | 887 | return | ||
683 | 888 | 907 | ||
684 | 889 | def draw(self, cr, a): | 908 | def draw(self, cr, a): |
686 | 890 | return | 909 | pass |
687 | 891 | 910 | ||
688 | 892 | 911 | ||
689 | 893 | class NoReviewRelaxLanguage(EmbeddedMessage): | 912 | class NoReviewRelaxLanguage(EmbeddedMessage): |
690 | @@ -922,7 +941,6 @@ | |||
691 | 922 | msg = _('Be the first to contribute a review for this application') | 941 | msg = _('Be the first to contribute a review for this application') |
692 | 923 | 942 | ||
693 | 924 | EmbeddedMessage.__init__(self, title, msg, 'text-editor') | 943 | EmbeddedMessage.__init__(self, title, msg, 'text-editor') |
694 | 925 | return | ||
695 | 926 | 944 | ||
696 | 927 | 945 | ||
697 | 928 | def get_test_reviews_window(): | 946 | def get_test_reviews_window(): |
698 | 929 | 947 | ||
699 | === modified file 'softwarecenter/ui/gtk3/widgets/searchaid.py' | |||
700 | --- softwarecenter/ui/gtk3/widgets/searchaid.py 2011-10-08 17:22:54 +0000 | |||
701 | +++ softwarecenter/ui/gtk3/widgets/searchaid.py 2012-03-08 22:37:21 +0000 | |||
702 | @@ -10,10 +10,10 @@ | |||
703 | 10 | class Suggestions(Gtk.VBox): | 10 | class Suggestions(Gtk.VBox): |
704 | 11 | 11 | ||
705 | 12 | __gsignals__ = { | 12 | __gsignals__ = { |
710 | 13 | "activate-link" : (GObject.SignalFlags.RUN_LAST, | 13 | "activate-link": (GObject.SignalFlags.RUN_LAST, |
711 | 14 | None, | 14 | None, |
712 | 15 | (GObject.TYPE_PYOBJECT, str), | 15 | (GObject.TYPE_PYOBJECT, str), |
713 | 16 | ), | 16 | ), |
714 | 17 | } | 17 | } |
715 | 18 | 18 | ||
716 | 19 | def __init__(self): | 19 | def __init__(self): |
717 | @@ -29,28 +29,24 @@ | |||
718 | 29 | 29 | ||
719 | 30 | self._labels = [] | 30 | self._labels = [] |
720 | 31 | self._handlers = [] | 31 | self._handlers = [] |
721 | 32 | return | ||
722 | 33 | 32 | ||
723 | 34 | def on_link_activate(self, widget, uri): | 33 | def on_link_activate(self, widget, uri): |
724 | 35 | self.reset_all() | 34 | self.reset_all() |
725 | 36 | self.emit("activate-link", widget, uri) | 35 | self.emit("activate-link", widget, uri) |
727 | 37 | return True #silences the gtk-warning | 36 | return True # silences the gtk-warning |
728 | 38 | 37 | ||
729 | 39 | def foreach(self, label_func, *args): | 38 | def foreach(self, label_func, *args): |
731 | 40 | for label in [self.title,] + self._labels: | 39 | for label in [self.title] + self._labels: |
732 | 41 | label_func(label, *args) | 40 | label_func(label, *args) |
733 | 42 | return | ||
734 | 43 | 41 | ||
735 | 44 | def set_alignment(self, xalign, yalign): | 42 | def set_alignment(self, xalign, yalign): |
736 | 45 | self.xalign = xalign | 43 | self.xalign = xalign |
737 | 46 | self.yalign = yalign | 44 | self.yalign = yalign |
738 | 47 | 45 | ||
739 | 48 | self.foreach(Gtk.Label.set_alignment, xalign, yalign) | 46 | self.foreach(Gtk.Label.set_alignment, xalign, yalign) |
740 | 49 | return | ||
741 | 50 | 47 | ||
742 | 51 | def set_title(self, title_markup): | 48 | def set_title(self, title_markup): |
743 | 52 | self.title.set_markup(title_markup) | 49 | self.title.set_markup(title_markup) |
744 | 53 | return | ||
745 | 54 | 50 | ||
746 | 55 | def append_suggestion(self, suggestion_markup): | 51 | def append_suggestion(self, suggestion_markup): |
747 | 56 | label = Gtk.Label() | 52 | label = Gtk.Label() |
748 | @@ -62,13 +58,12 @@ | |||
749 | 62 | self._handlers.append( | 58 | self._handlers.append( |
750 | 63 | label.connect("activate-link", self.on_link_activate)) | 59 | label.connect("activate-link", self.on_link_activate)) |
751 | 64 | self._labels.append(label) | 60 | self._labels.append(label) |
752 | 65 | return | ||
753 | 66 | 61 | ||
754 | 67 | def set_suggestions(self, suggestions): | 62 | def set_suggestions(self, suggestions): |
756 | 68 | if self._labels: self.reset() | 63 | if self._labels: |
757 | 64 | self.reset() | ||
758 | 69 | for s in suggestions: | 65 | for s in suggestions: |
759 | 70 | self.append_suggestion(s) | 66 | self.append_suggestion(s) |
760 | 71 | return | ||
761 | 72 | 67 | ||
762 | 73 | def reset(self): | 68 | def reset(self): |
763 | 74 | for label, handler in zip(self._labels, self._handlers): | 69 | for label, handler in zip(self._labels, self._handlers): |
764 | @@ -77,26 +72,24 @@ | |||
765 | 77 | 72 | ||
766 | 78 | self._labels = [] | 73 | self._labels = [] |
767 | 79 | self._handlers = [] | 74 | self._handlers = [] |
768 | 80 | return | ||
769 | 81 | 75 | ||
770 | 82 | def reset_all(self): | 76 | def reset_all(self): |
771 | 83 | self.title.set_text('') | 77 | self.title.set_text('') |
772 | 84 | self.reset() | 78 | self.reset() |
773 | 85 | return | ||
774 | 86 | 79 | ||
775 | 87 | 80 | ||
776 | 88 | class SearchAidLogic(object): | 81 | class SearchAidLogic(object): |
777 | 89 | 82 | ||
778 | 90 | HEADER_ICON_NAME = "face-sad" | 83 | HEADER_ICON_NAME = "face-sad" |
779 | 91 | HEADER_MARKUP = '<b><big>%s</big></b>' | 84 | HEADER_MARKUP = '<b><big>%s</big></b>' |
781 | 92 | #TRANSLATORS: this is the layout of an indented line starting with a bullet point | 85 | #TRANSLATORS: this is the layout of an indented |
782 | 86 | # line starting with a bullet point | ||
783 | 93 | BULLET = unicode(_("\t• %s"), 'utf8').encode('utf8') | 87 | BULLET = unicode(_("\t• %s"), 'utf8').encode('utf8') |
784 | 94 | 88 | ||
785 | 95 | def __init__(self, pane): | 89 | def __init__(self, pane): |
786 | 96 | self.pane = pane | 90 | self.pane = pane |
787 | 97 | self.db = pane.db | 91 | self.db = pane.db |
788 | 98 | self.enquirer = pane.enquirer | 92 | self.enquirer = pane.enquirer |
789 | 99 | return | ||
790 | 100 | 93 | ||
791 | 101 | def is_search_aid_required(self, state): | 94 | def is_search_aid_required(self, state): |
792 | 102 | return (state.search_term and | 95 | return (state.search_term and |
793 | @@ -115,7 +108,7 @@ | |||
794 | 115 | return category.name | 108 | return category.name |
795 | 116 | plain_text = _("%(category_name)s → %(subcategory_name)s") | 109 | plain_text = _("%(category_name)s → %(subcategory_name)s") |
796 | 117 | usable_text = unicode(plain_text, 'utf8').encode('utf8') | 110 | usable_text = unicode(plain_text, 'utf8').encode('utf8') |
798 | 118 | return usable_text % {'category_name': category.name, | 111 | return usable_text % {'category_name': category.name, |
799 | 119 | 'subcategory_name': state.subcategory.name} | 112 | 'subcategory_name': state.subcategory.name} |
800 | 120 | 113 | ||
801 | 121 | if not category: | 114 | if not category: |
802 | @@ -172,7 +165,8 @@ | |||
803 | 172 | "suggestions that may aid you in your search") | 165 | "suggestions that may aid you in your search") |
804 | 173 | 166 | ||
805 | 174 | def get_include_parent_suggestion_text(self, term, category, state): | 167 | def get_include_parent_suggestion_text(self, term, category, state): |
807 | 175 | if not state.subcategory: return None | 168 | if not state.subcategory: |
808 | 169 | return | ||
809 | 176 | 170 | ||
810 | 177 | enq = self.enquirer | 171 | enq = self.enquirer |
811 | 178 | query = self.db.get_query_list_from_search_entry( | 172 | query = self.db.get_query_list_from_search_entry( |
812 | @@ -195,14 +189,13 @@ | |||
813 | 195 | n=enq.nr_apps) % \ | 189 | n=enq.nr_apps) % \ |
814 | 196 | {'category': category.name, 'n': enq.nr_apps} | 190 | {'category': category.name, 'n': enq.nr_apps} |
815 | 197 | return text | 191 | return text |
816 | 198 | return None | ||
817 | 199 | 192 | ||
818 | 200 | def get_unsupported_suggestion_text(self, term, category, state): | 193 | def get_unsupported_suggestion_text(self, term, category, state): |
819 | 201 | if state.filter is None: | 194 | if state.filter is None: |
821 | 202 | return None | 195 | return |
822 | 203 | supported_only = state.filter.get_supported_only() | 196 | supported_only = state.filter.get_supported_only() |
823 | 204 | if not supported_only: | 197 | if not supported_only: |
825 | 205 | return None | 198 | return |
826 | 206 | 199 | ||
827 | 207 | state.filter.set_supported_only(False) | 200 | state.filter.set_supported_only(False) |
828 | 208 | 201 | ||
829 | @@ -224,12 +217,11 @@ | |||
830 | 224 | if enq.nr_apps > 0: | 217 | if enq.nr_apps > 0: |
831 | 225 | text = self.BULLET % gettext.ngettext("Try " | 218 | text = self.BULLET % gettext.ngettext("Try " |
832 | 226 | "<a href=\"search-unsupported:\">the %(amount)d item " | 219 | "<a href=\"search-unsupported:\">the %(amount)d item " |
834 | 227 | "that matches</a> in software not maintained by Canonical", | 220 | "that matches</a> in software not maintained by Canonical", |
835 | 228 | "Try <a href=\"search-unsupported:\">the %(amount)d items " | 221 | "Try <a href=\"search-unsupported:\">the %(amount)d items " |
836 | 229 | "that match</a> in software not maintained by Canonical", | 222 | "that match</a> in software not maintained by Canonical", |
837 | 230 | enq.nr_apps) % {'amount': enq.nr_apps} | 223 | enq.nr_apps) % {'amount': enq.nr_apps} |
838 | 231 | return text | 224 | return text |
839 | 232 | return None | ||
840 | 233 | 225 | ||
841 | 234 | def update_search_help(self, state): | 226 | def update_search_help(self, state): |
842 | 235 | # do any non toolkit logic here | 227 | # do any non toolkit logic here |
843 | @@ -238,12 +230,10 @@ | |||
844 | 238 | # do toolkit stuff here | 230 | # do toolkit stuff here |
845 | 239 | if hasattr(self, 'on_update_search_help'): | 231 | if hasattr(self, 'on_update_search_help'): |
846 | 240 | self.on_update_search_help(state) | 232 | self.on_update_search_help(state) |
847 | 241 | return | ||
848 | 242 | 233 | ||
849 | 243 | def reset(self): | 234 | def reset(self): |
850 | 244 | if hasattr(self, 'on_reset'): | 235 | if hasattr(self, 'on_reset'): |
851 | 245 | self.on_reset() | 236 | self.on_reset() |
852 | 246 | return | ||
853 | 247 | 237 | ||
854 | 248 | 238 | ||
855 | 249 | class SearchAid(Gtk.Table, SearchAidLogic): | 239 | class SearchAid(Gtk.Table, SearchAidLogic): |
856 | @@ -259,8 +249,8 @@ | |||
857 | 259 | image = Gtk.Image.new_from_icon_name(self.HEADER_ICON_NAME, | 249 | image = Gtk.Image.new_from_icon_name(self.HEADER_ICON_NAME, |
858 | 260 | Gtk.IconSize.DIALOG) | 250 | Gtk.IconSize.DIALOG) |
859 | 261 | self.attach(image, | 251 | self.attach(image, |
862 | 262 | 0, 1, # left_attach, right_attach | 252 | 0, 1, # left_attach, right_attach |
863 | 263 | 0, 1, # top_attach, bottom_attach | 253 | 0, 1, # top_attach, bottom_attach |
864 | 264 | Gtk.AttachOptions.SHRINK, | 254 | Gtk.AttachOptions.SHRINK, |
865 | 265 | Gtk.AttachOptions.SHRINK, | 255 | Gtk.AttachOptions.SHRINK, |
866 | 266 | StockEms.LARGE, 0) | 256 | StockEms.LARGE, 0) |
867 | @@ -270,8 +260,8 @@ | |||
868 | 270 | self.title.set_use_markup(True) | 260 | self.title.set_use_markup(True) |
869 | 271 | self.title.set_alignment(0.0, 0.5) | 261 | self.title.set_alignment(0.0, 0.5) |
870 | 272 | self.attach(self.title, | 262 | self.attach(self.title, |
873 | 273 | 1, 2, # left_attach, right_attach | 263 | 1, 2, # left_attach, right_attach |
874 | 274 | 0, 1, # top_attach, bottom_attach | 264 | 0, 1, # top_attach, bottom_attach |
875 | 275 | Gtk.AttachOptions.FILL, | 265 | Gtk.AttachOptions.FILL, |
876 | 276 | Gtk.AttachOptions.FILL, | 266 | Gtk.AttachOptions.FILL, |
877 | 277 | StockEms.MEDIUM, 0) | 267 | StockEms.MEDIUM, 0) |
878 | @@ -280,17 +270,15 @@ | |||
879 | 280 | self.suggestion = Suggestions() | 270 | self.suggestion = Suggestions() |
880 | 281 | self.suggestion.set_alignment(0.0, 0.5) | 271 | self.suggestion.set_alignment(0.0, 0.5) |
881 | 282 | self.attach(self.suggestion, | 272 | self.attach(self.suggestion, |
884 | 283 | 1, 2, # left_attach, right_attach | 273 | 1, 2, # left_attach, right_attach |
885 | 284 | 1, 2, # top_attach, bottom_attach | 274 | 1, 2, # top_attach, bottom_attach |
886 | 285 | Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, | 275 | Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, |
887 | 286 | Gtk.AttachOptions.FILL, | 276 | Gtk.AttachOptions.FILL, |
888 | 287 | StockEms.MEDIUM, StockEms.MEDIUM) | 277 | StockEms.MEDIUM, StockEms.MEDIUM) |
889 | 288 | 278 | ||
890 | 289 | self.suggestion.connect("activate-link", self.on_link_activate) | 279 | self.suggestion.connect("activate-link", self.on_link_activate) |
891 | 290 | return | ||
892 | 291 | 280 | ||
893 | 292 | def on_update_search_help(self, state): | 281 | def on_update_search_help(self, state): |
894 | 293 | |||
895 | 294 | if not self.is_search_aid_required(state): | 282 | if not self.is_search_aid_required(state): |
896 | 295 | # catchall | 283 | # catchall |
897 | 296 | self.pane.app_view.set_visible(True) | 284 | self.pane.app_view.set_visible(True) |
898 | @@ -311,17 +299,14 @@ | |||
899 | 311 | suggestions_title = self.get_suggestion_title_text(suggestions) | 299 | suggestions_title = self.get_suggestion_title_text(suggestions) |
900 | 312 | self.suggestion.set_title(suggestions_title) | 300 | self.suggestion.set_title(suggestions_title) |
901 | 313 | self.suggestion.set_suggestions(suggestions) | 301 | self.suggestion.set_suggestions(suggestions) |
902 | 314 | return | ||
903 | 315 | 302 | ||
904 | 316 | def on_reset(self): | 303 | def on_reset(self): |
905 | 317 | self.suggestion.reset_all() | 304 | self.suggestion.reset_all() |
906 | 318 | return | ||
907 | 319 | 305 | ||
908 | 320 | def on_link_activate(self, suggestions, link, uri): | 306 | def on_link_activate(self, suggestions, link, uri): |
909 | 321 | markup = self.HEADER_MARKUP % _('Trying suggestion ...') | 307 | markup = self.HEADER_MARKUP % _('Trying suggestion ...') |
910 | 322 | self.title.set_markup(markup) | 308 | self.title.set_markup(markup) |
911 | 323 | GObject.timeout_add(750, self._handle_suggestion_action, uri) | 309 | GObject.timeout_add(750, self._handle_suggestion_action, uri) |
912 | 324 | return | ||
913 | 325 | 310 | ||
914 | 326 | def _handle_suggestion_action(self, uri): | 311 | def _handle_suggestion_action(self, uri): |
915 | 327 | self = self.pane | 312 | self = self.pane |
916 | @@ -339,4 +324,3 @@ | |||
917 | 339 | # FIXME: add ability to remove categories restriction here | 324 | # FIXME: add ability to remove categories restriction here |
918 | 340 | # True stops event propergation | 325 | # True stops event propergation |
919 | 341 | return False | 326 | return False |
920 | 342 | |||
921 | 343 | 327 | ||
922 | === modified file 'softwarecenter/ui/gtk3/widgets/searchentry.py' | |||
923 | --- softwarecenter/ui/gtk3/widgets/searchentry.py 2011-09-27 11:35:12 +0000 | |||
924 | +++ softwarecenter/ui/gtk3/widgets/searchentry.py 2012-03-08 22:37:21 +0000 | |||
925 | @@ -30,13 +30,12 @@ | |||
926 | 30 | class SearchEntry(Gtk.Entry): | 30 | class SearchEntry(Gtk.Entry): |
927 | 31 | 31 | ||
928 | 32 | # FIMXE: we need "can-undo", "can-redo" signals | 32 | # FIMXE: we need "can-undo", "can-redo" signals |
932 | 33 | __gsignals__ = {'terms-changed':(GObject.SignalFlags.RUN_FIRST, | 33 | __gsignals__ = {'terms-changed': (GObject.SignalFlags.RUN_FIRST, |
933 | 34 | None, | 34 | None, |
934 | 35 | (GObject.TYPE_STRING,))} | 35 | (GObject.TYPE_STRING,))} |
935 | 36 | 36 | ||
936 | 37 | SEARCH_TIMEOUT = 600 | 37 | SEARCH_TIMEOUT = 600 |
937 | 38 | 38 | ||
938 | 39 | |||
939 | 40 | def __init__(self, icon_theme=None): | 39 | def __init__(self, icon_theme=None): |
940 | 41 | """ | 40 | """ |
941 | 42 | Creates an enhanced IconEntry that triggers a timeout when typing | 41 | Creates an enhanced IconEntry that triggers a timeout when typing |
942 | @@ -52,7 +51,8 @@ | |||
943 | 52 | 51 | ||
944 | 53 | self.connect("icon-press", self._on_icon_pressed) | 52 | self.connect("icon-press", self._on_icon_pressed) |
945 | 54 | 53 | ||
947 | 55 | self.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, 'edit-find-symbolic') | 54 | self.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, |
948 | 55 | 'edit-find-symbolic') | ||
949 | 56 | self.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, None) | 56 | self.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, None) |
950 | 57 | 57 | ||
951 | 58 | # set sensible atk name | 58 | # set sensible atk name |
952 | @@ -90,7 +90,7 @@ | |||
953 | 90 | text = self._undo_stack.pop() | 90 | text = self._undo_stack.pop() |
954 | 91 | self.set_text(text) | 91 | self.set_text(text) |
955 | 92 | self.set_position(-1) | 92 | self.set_position(-1) |
957 | 93 | 93 | ||
958 | 94 | def redo(self): | 94 | def redo(self): |
959 | 95 | if not self._redo_stack: | 95 | if not self._redo_stack: |
960 | 96 | return | 96 | return |
961 | @@ -106,7 +106,6 @@ | |||
962 | 106 | def set_text(self, text, cursor_to_end=True): | 106 | def set_text(self, text, cursor_to_end=True): |
963 | 107 | Gtk.Entry.set_text(self, text) | 107 | Gtk.Entry.set_text(self, text) |
964 | 108 | self.emit("move-cursor", Gtk.MovementStep.BUFFER_ENDS, 1, False) | 108 | self.emit("move-cursor", Gtk.MovementStep.BUFFER_ENDS, 1, False) |
965 | 109 | return | ||
966 | 110 | 109 | ||
967 | 111 | def set_text_with_no_signal(self, text): | 110 | def set_text_with_no_signal(self, text): |
968 | 112 | """Clear and do not send a term-changed signal""" | 111 | """Clear and do not send a term-changed signal""" |
969 | @@ -143,17 +142,21 @@ | |||
970 | 143 | Show the clear icon whenever the field is not empty | 142 | Show the clear icon whenever the field is not empty |
971 | 144 | """ | 143 | """ |
972 | 145 | if self.get_text() != "": | 144 | if self.get_text() != "": |
974 | 146 | self.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, Gtk.STOCK_CLEAR) | 145 | self.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, |
975 | 146 | Gtk.STOCK_CLEAR) | ||
976 | 147 | # reverse the icon if we are in an rtl environment | 147 | # reverse the icon if we are in an rtl environment |
977 | 148 | if self.get_direction() == Gtk.TextDirection.RTL: | 148 | if self.get_direction() == Gtk.TextDirection.RTL: |
979 | 149 | pb = self.get_icon_pixbuf(Gtk.EntryIconPosition.SECONDARY).flip(True) | 149 | pb = self.get_icon_pixbuf( |
980 | 150 | Gtk.EntryIconPosition.SECONDARY).flip(True) | ||
981 | 150 | self.set_icon_from_pixbuf(Gtk.EntryIconPosition.SECONDARY, pb) | 151 | self.set_icon_from_pixbuf(Gtk.EntryIconPosition.SECONDARY, pb) |
982 | 151 | else: | 152 | else: |
983 | 152 | self.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, None) | 153 | self.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, None) |
984 | 153 | 154 | ||
985 | 155 | |||
986 | 154 | def on_entry_changed(self, terms): | 156 | def on_entry_changed(self, terms): |
987 | 155 | print(terms) | 157 | print(terms) |
988 | 156 | 158 | ||
989 | 159 | |||
990 | 157 | def get_test_searchentry_window(): | 160 | def get_test_searchentry_window(): |
991 | 158 | icons = Gtk.IconTheme.get_default() | 161 | icons = Gtk.IconTheme.get_default() |
992 | 159 | entry = SearchEntry(icons) | 162 | entry = SearchEntry(icons) |
993 | @@ -162,12 +165,11 @@ | |||
994 | 162 | win = Gtk.Window() | 165 | win = Gtk.Window() |
995 | 163 | win.connect("destroy", Gtk.main_quit) | 166 | win.connect("destroy", Gtk.main_quit) |
996 | 164 | win.add(entry) | 167 | win.add(entry) |
998 | 165 | win.set_size_request(400,400) | 168 | win.set_size_request(400, 400) |
999 | 166 | win.show_all() | 169 | win.show_all() |
1000 | 167 | win.entry = entry | 170 | win.entry = entry |
1001 | 168 | return win | 171 | return win |
1003 | 169 | 172 | ||
1004 | 170 | if __name__ == "__main__": | 173 | if __name__ == "__main__": |
1005 | 171 | win = get_test_searchentry_window() | 174 | win = get_test_searchentry_window() |
1006 | 172 | Gtk.main() | 175 | Gtk.main() |
1007 | 173 | |||
1008 | 174 | 176 | ||
1009 | === modified file 'softwarecenter/ui/gtk3/widgets/sections.py' | |||
1010 | --- softwarecenter/ui/gtk3/widgets/sections.py 2011-08-09 08:47:43 +0000 | |||
1011 | +++ softwarecenter/ui/gtk3/widgets/sections.py 2012-03-08 22:37:21 +0000 | |||
1012 | @@ -1,30 +1,32 @@ | |||
1013 | 1 | #from gi.repository import Gtk | 1 | #from gi.repository import Gtk |
1014 | 2 | 2 | ||
1016 | 3 | import cairo, os | 3 | import cairo |
1017 | 4 | import os | ||
1018 | 4 | 5 | ||
1019 | 5 | from softwarecenter.enums import ViewPages | 6 | from softwarecenter.enums import ViewPages |
1020 | 6 | from softwarecenter.paths import datadir | 7 | from softwarecenter.paths import datadir |
1021 | 7 | from mkit import floats_from_string | 8 | from mkit import floats_from_string |
1022 | 8 | 9 | ||
1023 | 10 | |||
1024 | 9 | class SectionPainter(object): | 11 | class SectionPainter(object): |
1031 | 10 | 12 | ||
1032 | 11 | # specify background overlay image and color mappings for available and installed view ids | 13 | # specify background overlay image and color mappings for available and |
1033 | 12 | BACKGROUND_IMAGES = {ViewPages.AVAILABLE : cairo.ImageSurface.create_from_png( | 14 | # installed view ids |
1034 | 13 | os.path.join(datadir, 'images/clouds.png')), | 15 | BACKGROUND_IMAGES = { |
1035 | 14 | ViewPages.INSTALLED : cairo.ImageSurface.create_from_png( | 16 | ViewPages.AVAILABLE: cairo.ImageSurface.create_from_png( |
1036 | 15 | os.path.join(datadir, 'images/arrows.png')), | 17 | os.path.join(datadir, 'images/clouds.png')), |
1037 | 18 | ViewPages.INSTALLED: cairo.ImageSurface.create_from_png( | ||
1038 | 19 | os.path.join(datadir, 'images/arrows.png')), | ||
1039 | 16 | } | 20 | } |
1042 | 17 | BACKGROUND_COLORS = {ViewPages.AVAILABLE : floats_from_string('#0769BC'), | 21 | BACKGROUND_COLORS = {ViewPages.AVAILABLE: floats_from_string('#0769BC'), |
1043 | 18 | ViewPages.INSTALLED : floats_from_string('#aea79f'), | 22 | ViewPages.INSTALLED: floats_from_string('#aea79f'), |
1044 | 19 | } | 23 | } |
1045 | 20 | 24 | ||
1046 | 21 | def __init__(self): | 25 | def __init__(self): |
1047 | 22 | self._view_id = None | 26 | self._view_id = None |
1050 | 23 | return | 27 | |
1049 | 24 | |||
1051 | 25 | def set_view_id(self, id): | 28 | def set_view_id(self, id): |
1052 | 26 | self._view_id = id | 29 | self._view_id = id |
1053 | 27 | return | ||
1054 | 28 | 30 | ||
1055 | 29 | def draw(self, widget, cr): | 31 | def draw(self, widget, cr): |
1056 | 30 | # sky | 32 | # sky |
1057 | @@ -43,7 +45,7 @@ | |||
1058 | 43 | # cr.set_source_surface(s, a.x, 0) | 45 | # cr.set_source_surface(s, a.x, 0) |
1059 | 44 | 46 | ||
1060 | 45 | #cr.paint() | 47 | #cr.paint() |
1062 | 46 | return | 48 | pass |
1063 | 47 | 49 | ||
1064 | 48 | def get_background_color(self): | 50 | def get_background_color(self): |
1065 | 49 | return self.BACKGROUND_COLORS[self._view_id] | 51 | return self.BACKGROUND_COLORS[self._view_id] |
1066 | 50 | 52 | ||
1067 | === modified file 'softwarecenter/ui/gtk3/widgets/spinner.py' | |||
1068 | --- softwarecenter/ui/gtk3/widgets/spinner.py 2012-03-01 11:32:37 +0000 | |||
1069 | +++ softwarecenter/ui/gtk3/widgets/spinner.py 2012-03-08 22:37:21 +0000 | |||
1070 | @@ -22,6 +22,7 @@ | |||
1071 | 22 | 22 | ||
1072 | 23 | from gi.repository import Gtk, GObject | 23 | from gi.repository import Gtk, GObject |
1073 | 24 | 24 | ||
1074 | 25 | |||
1075 | 25 | class SpinnerView(Gtk.Viewport): | 26 | class SpinnerView(Gtk.Viewport): |
1076 | 26 | """ | 27 | """ |
1077 | 27 | a panel that contains a spinner preset to a standard size and centered | 28 | a panel that contains a spinner preset to a standard size and centered |
1078 | @@ -31,7 +32,7 @@ | |||
1079 | 31 | Gtk.Viewport.__init__(self) | 32 | Gtk.Viewport.__init__(self) |
1080 | 32 | self.spinner = Gtk.Spinner() | 33 | self.spinner = Gtk.Spinner() |
1081 | 33 | self.spinner.set_size_request(48, 48) | 34 | self.spinner.set_size_request(48, 48) |
1083 | 34 | 35 | ||
1084 | 35 | # use a table for the spinner (otherwise the spinner is massive!) | 36 | # use a table for the spinner (otherwise the spinner is massive!) |
1085 | 36 | spinner_table = Gtk.Table(3, 3, False) | 37 | spinner_table = Gtk.Table(3, 3, False) |
1086 | 37 | self.spinner_label = Gtk.Label() | 38 | self.spinner_label = Gtk.Label() |
1087 | @@ -39,39 +40,40 @@ | |||
1088 | 39 | spinner_vbox = Gtk.VBox() | 40 | spinner_vbox = Gtk.VBox() |
1089 | 40 | spinner_vbox.pack_start(self.spinner, True, True, 0) | 41 | spinner_vbox.pack_start(self.spinner, True, True, 0) |
1090 | 41 | spinner_vbox.pack_start(self.spinner_label, True, True, 10) | 42 | spinner_vbox.pack_start(self.spinner_label, True, True, 10) |
1093 | 42 | spinner_table.attach(spinner_vbox, 1, 2, 1, 2, Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.EXPAND) | 43 | spinner_table.attach(spinner_vbox, 1, 2, 1, 2, |
1094 | 43 | 44 | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.EXPAND) | |
1095 | 45 | |||
1096 | 44 | #~ self.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(1.0, 1.0, 1.0)) | 46 | #~ self.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(1.0, 1.0, 1.0)) |
1097 | 45 | self.add(spinner_table) | 47 | self.add(spinner_table) |
1098 | 46 | self.set_shadow_type(Gtk.ShadowType.NONE) | 48 | self.set_shadow_type(Gtk.ShadowType.NONE) |
1100 | 47 | 49 | ||
1101 | 48 | def start_and_show(self): | 50 | def start_and_show(self): |
1102 | 49 | """ | 51 | """ |
1103 | 50 | start the spinner and show it | 52 | start the spinner and show it |
1104 | 51 | """ | 53 | """ |
1105 | 52 | self.spinner.start() | 54 | self.spinner.start() |
1106 | 53 | self.spinner.show() | 55 | self.spinner.show() |
1108 | 54 | 56 | ||
1109 | 55 | def stop_and_hide(self): | 57 | def stop_and_hide(self): |
1110 | 56 | """ | 58 | """ |
1111 | 57 | stop the spinner and hide it | 59 | stop the spinner and hide it |
1112 | 58 | """ | 60 | """ |
1113 | 59 | self.spinner.stop() | 61 | self.spinner.stop() |
1114 | 60 | self.spinner.hide() | 62 | self.spinner.hide() |
1117 | 61 | 63 | ||
1118 | 62 | def set_text(self, spinner_text = ""): | 64 | def set_text(self, spinner_text=""): |
1119 | 63 | """ | 65 | """ |
1121 | 64 | useful for adding/removing/changing the label text after the spinner instance has been created | 66 | useful for adding/removing/changing the label text after the spinner |
1122 | 67 | instance has been created | ||
1123 | 65 | """ | 68 | """ |
1124 | 66 | self.spinner_label.set_markup('<big>%s</big>' % spinner_text) | 69 | self.spinner_label.set_markup('<big>%s</big>' % spinner_text) |
1125 | 67 | 70 | ||
1126 | 71 | |||
1127 | 68 | class SpinnerNotebook(Gtk.Notebook): | 72 | class SpinnerNotebook(Gtk.Notebook): |
1128 | 69 | """ this provides a Gtk.Notebook that contains a content page | 73 | """ this provides a Gtk.Notebook that contains a content page |
1129 | 70 | and a spinner page. | 74 | and a spinner page. |
1130 | 71 | """ | 75 | """ |
1134 | 72 | 76 | (CONTENT_PAGE, | |
1132 | 73 | |||
1133 | 74 | (CONTENT_PAGE, | ||
1135 | 75 | SPINNER_PAGE) = range(2) | 77 | SPINNER_PAGE) = range(2) |
1136 | 76 | 78 | ||
1137 | 77 | def __init__(self, content, msg=""): | 79 | def __init__(self, content, msg=""): |
1138 | @@ -79,7 +81,7 @@ | |||
1139 | 79 | self.spinner_view = SpinnerView(msg) | 81 | self.spinner_view = SpinnerView(msg) |
1140 | 80 | # its critical to show() the spinner early as otherwise | 82 | # its critical to show() the spinner early as otherwise |
1141 | 81 | # gtk_notebook_set_active_page() will not switch to it | 83 | # gtk_notebook_set_active_page() will not switch to it |
1143 | 82 | self.spinner_view.show() | 84 | self.spinner_view.show() |
1144 | 83 | if not "SOFTWARE_CENTER_DEBUG_TABS" in os.environ: | 85 | if not "SOFTWARE_CENTER_DEBUG_TABS" in os.environ: |
1145 | 84 | self.set_show_tabs(False) | 86 | self.set_show_tabs(False) |
1146 | 85 | self.set_show_border(False) | 87 | self.set_show_border(False) |
1147 | @@ -106,15 +108,16 @@ | |||
1148 | 106 | self.spinner_view.stop_and_hide() | 108 | self.spinner_view.stop_and_hide() |
1149 | 107 | self.set_current_page(self.CONTENT_PAGE) | 109 | self.set_current_page(self.CONTENT_PAGE) |
1150 | 108 | 110 | ||
1152 | 109 | def get_test_spinner_window(): | 111 | |
1153 | 112 | def get_test_spinner_window(): | ||
1154 | 110 | label = Gtk.Label("foo") | 113 | label = Gtk.Label("foo") |
1155 | 111 | spinner_notebook = SpinnerNotebook(label, "random msg") | 114 | spinner_notebook = SpinnerNotebook(label, "random msg") |
1157 | 112 | 115 | ||
1158 | 113 | window = Gtk.Window() | 116 | window = Gtk.Window() |
1159 | 114 | window.add(spinner_notebook) | 117 | window.add(spinner_notebook) |
1160 | 115 | window.set_size_request(600, 500) | 118 | window.set_size_request(600, 500) |
1161 | 116 | window.set_position(Gtk.WindowPosition.CENTER) | 119 | window.set_position(Gtk.WindowPosition.CENTER) |
1163 | 117 | window.show_all() | 120 | window.show_all() |
1164 | 118 | window.connect('destroy', Gtk.main_quit) | 121 | window.connect('destroy', Gtk.main_quit) |
1165 | 119 | spinner_notebook.show_spinner("Loading for 1s ...") | 122 | spinner_notebook.show_spinner("Loading for 1s ...") |
1166 | 120 | GObject.timeout_add_seconds(1, lambda: spinner_notebook.hide_spinner()) | 123 | GObject.timeout_add_seconds(1, lambda: spinner_notebook.hide_spinner()) |
1167 | 121 | 124 | ||
1168 | === modified file 'test/test_pep8.py' | |||
1169 | --- test/test_pep8.py 2012-03-08 17:42:36 +0000 | |||
1170 | +++ test/test_pep8.py 2012-03-08 22:37:21 +0000 | |||
1171 | @@ -16,8 +16,7 @@ | |||
1172 | 16 | packages = [softwarecenter.ui.qml, | 16 | packages = [softwarecenter.ui.qml, |
1173 | 17 | softwarecenter.ui.gtk3.widgets, | 17 | softwarecenter.ui.gtk3.widgets, |
1174 | 18 | softwarecenter.db.pkginfo_impl] | 18 | softwarecenter.db.pkginfo_impl] |
1177 | 19 | exclude = ['spinner.py', 'sections.py', 'searchentry.py', 'searchaid.py', | 19 | exclude = ['recommendations.py', 'oneconfviews.py', 'menubutton.py', |
1176 | 20 | 'reviews.py', 'recommendations.py', 'oneconfviews.py', 'menubutton.py', | ||
1178 | 21 | 'labels.py', 'imagedialog.py', 'exhibits.py', 'description.py', | 20 | 'labels.py', 'imagedialog.py', 'exhibits.py', 'description.py', |
1179 | 22 | 'containers.py', 'cellrenderers.py', 'buttons.py', 'backforward.py', | 21 | 'containers.py', 'cellrenderers.py', 'buttons.py', 'backforward.py', |
1180 | 23 | 'apptreeview.py', 'animatedimage.py', 'actionbar.py'] | 22 | 'apptreeview.py', 'animatedimage.py', 'actionbar.py'] |