Merge lp:~roignac/software-center/bug-630731-free-software-view into lp:software-center
- bug-630731-free-software-view
- Merge into trunk
Proposed by
Vadim Rutkovsky
Status: | Rejected | ||||
---|---|---|---|---|---|
Rejected by: | dobey | ||||
Proposed branch: | lp:~roignac/software-center/bug-630731-free-software-view | ||||
Merge into: | lp:software-center | ||||
Diff against target: |
541 lines (+150/-46) 8 files modified
data/ui/gtk/SoftwareCenter.ui (+10/-0) data/ui/gtk3/SoftwareCenter.ui (+12/-0) po/software-center.pot (+51/-39) softwarecenter/ui/gtk/app.py (+24/-0) softwarecenter/ui/gtk/appview.py (+16/-5) softwarecenter/ui/gtk3/app.py (+24/-0) softwarecenter/ui/gtk3/views/appview.py (+11/-0) softwarecenter/version.py (+2/-2) |
||||
To merge this branch: | bzr merge lp:~roignac/software-center/bug-630731-free-software-view | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Matthew Paul Thomas | Needs Fixing | ||
Michael Vogt | Pending | ||
Review via email: mp+68953@code.launchpad.net |
Commit message
Description of the change
This changes adds a Free Software view. The packages, which have non-'Open Source' license (including 'None') are filtered
To post a comment you must log in.
- 1980. By Vadim Rutkovsky
-
Updated gtk3 files
- 1981. By Vadim Rutkovsky
-
Another fix for gtk3
Revision history for this message
dobey (dobey) wrote : | # |
Could you please check http://
Canonical's contributor agreement ? That would be great as this is a requirement for branches to get merged into the software-center.
Thanks.
Unmerged revisions
- 1981. By Vadim Rutkovsky
-
Another fix for gtk3
- 1980. By Vadim Rutkovsky
-
Updated gtk3 files
- 1979. By Vadim Rutkovsky
-
Adding a new view - Free Software Only
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'data/ui/gtk/SoftwareCenter.ui' |
2 | --- data/ui/gtk/SoftwareCenter.ui 2011-07-05 07:59:13 +0000 |
3 | +++ data/ui/gtk/SoftwareCenter.ui 2011-07-23 14:41:45 +0000 |
4 | @@ -242,6 +242,16 @@ |
5 | </object> |
6 | </child> |
7 | <child> |
8 | + <object class="GtkRadioMenuItem" id="menuitem_view_free_software_only"> |
9 | + <property name="visible">True</property> |
10 | + <property name="label" translatable="yes">_Free Software</property> |
11 | + <property name="use_underline">True</property> |
12 | + <property name="draw_as_radio">True</property> |
13 | + <property name="group">menuitem_view_supported_only</property> |
14 | + <signal name="activate" handler="on_menuitem_view_free_software_only_activate"/> |
15 | + </object> |
16 | + </child> |
17 | + <child> |
18 | <object class="GtkRadioMenuItem" id="menuitem_view_supported_only"> |
19 | <property name="visible">True</property> |
20 | <property name="label" translatable="yes">_Canonical-Maintained Software</property> |
21 | |
22 | === modified file 'data/ui/gtk3/SoftwareCenter.ui' |
23 | --- data/ui/gtk3/SoftwareCenter.ui 2011-07-05 09:53:26 +0000 |
24 | +++ data/ui/gtk3/SoftwareCenter.ui 2011-07-23 14:41:45 +0000 |
25 | @@ -394,6 +394,18 @@ |
26 | </object> |
27 | </child> |
28 | <child> |
29 | + <object class="GtkRadioMenuItem" id="menuitem_view_free_software_only"> |
30 | + <property name="visible">True</property> |
31 | + <property name="can_focus">False</property> |
32 | + <property name="use_action_appearance">False</property> |
33 | + <property name="label" translatable="yes">_Free Software</property> |
34 | + <property name="use_underline">True</property> |
35 | + <property name="draw_as_radio">True</property> |
36 | + <property name="group">menuitem_view_supported_only</property> |
37 | + <signal name="activate" handler="on_menuitem_view_free_software_only_activate" swapped="no"/> |
38 | + </object> |
39 | + </child> |
40 | + <child> |
41 | <object class="GtkRadioMenuItem" id="menuitem_view_supported_only"> |
42 | <property name="visible">True</property> |
43 | <property name="can_focus">False</property> |
44 | |
45 | === modified file 'po/software-center.pot' |
46 | --- po/software-center.pot 2011-07-21 15:28:53 +0000 |
47 | +++ po/software-center.pot 2011-07-23 14:41:45 +0000 |
48 | @@ -8,7 +8,7 @@ |
49 | msgstr "" |
50 | "Project-Id-Version: PACKAGE VERSION\n" |
51 | "Report-Msgid-Bugs-To: \n" |
52 | -"POT-Creation-Date: 2011-07-21 17:04+0200\n" |
53 | +"POT-Creation-Date: 2011-07-23 15:23+0300\n" |
54 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
55 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
56 | "Language-Team: LANGUAGE <LL@li.org>\n" |
57 | @@ -199,7 +199,7 @@ |
58 | #. located directly beneath a label asking 'Why is this review inappropriate?'. |
59 | #. This text refers to a possible reason for why the corresponding |
60 | #. review is being flagged as inappropriate. |
61 | -#: ../utils/submit_review.py:1201 ../softwarecenter/backend/channel.py:424 |
62 | +#: ../utils/submit_review.py:1201 ../softwarecenter/backend/channel.py:431 |
63 | msgid "Other" |
64 | msgstr "" |
65 | |
66 | @@ -278,34 +278,38 @@ |
67 | msgstr "" |
68 | |
69 | #: ../data/ui/gtk/SoftwareCenter.ui.h:12 |
70 | +msgid "_Free Software" |
71 | +msgstr "" |
72 | + |
73 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:13 |
74 | msgid "_Go Back" |
75 | msgstr "" |
76 | |
77 | -#: ../data/ui/gtk/SoftwareCenter.ui.h:13 |
78 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:14 |
79 | msgid "_Go Forward" |
80 | msgstr "" |
81 | |
82 | -#: ../data/ui/gtk/SoftwareCenter.ui.h:14 |
83 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:15 |
84 | msgid "_Help" |
85 | msgstr "" |
86 | |
87 | -#: ../data/ui/gtk/SoftwareCenter.ui.h:15 |
88 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:16 |
89 | msgid "_Install" |
90 | msgstr "" |
91 | |
92 | -#: ../data/ui/gtk/SoftwareCenter.ui.h:16 |
93 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:17 |
94 | msgid "_Software Sources…" |
95 | msgstr "" |
96 | |
97 | -#: ../data/ui/gtk/SoftwareCenter.ui.h:17 |
98 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:18 |
99 | msgid "_View" |
100 | msgstr "" |
101 | |
102 | -#: ../data/ui/gtk/SoftwareCenter.ui.h:18 |
103 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:19 |
104 | msgid "translator-credits" |
105 | msgstr "" |
106 | |
107 | -#: ../data/ui/gtk/SoftwareCenter.ui.h:19 |
108 | +#: ../data/ui/gtk/SoftwareCenter.ui.h:20 |
109 | msgid "©2009-2011 Canonical" |
110 | msgstr "" |
111 | |
112 | @@ -447,7 +451,7 @@ |
113 | #. aquired for purchase in utils/submit_review.py |
114 | #. the other one in softwarecenter/app.py |
115 | #: ../data/ubuntu-software-center.desktop.in.h:3 |
116 | -#: ../softwarecenter/ui/gtk/app.py:756 ../softwarecenter/distro/Ubuntu.py:58 |
117 | +#: ../softwarecenter/ui/gtk/app.py:760 ../softwarecenter/distro/Ubuntu.py:58 |
118 | msgid "Ubuntu Software Center" |
119 | msgstr "" |
120 | |
121 | @@ -456,11 +460,11 @@ |
122 | "Lets you choose from thousands of applications available for your system " |
123 | msgstr "" |
124 | |
125 | -#: ../data/featured.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:426 |
126 | +#: ../data/featured.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:450 |
127 | msgid "Featured" |
128 | msgstr "" |
129 | |
130 | -#: ../data/new.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:462 |
131 | +#: ../data/new.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:486 |
132 | msgid "What’s New" |
133 | msgstr "" |
134 | |
135 | @@ -704,13 +708,13 @@ |
136 | msgid "Please re-install the 'software-center' package." |
137 | msgstr "" |
138 | |
139 | -#: ../softwarecenter/ui/gtk/app.py:757 |
140 | +#: ../softwarecenter/ui/gtk/app.py:761 |
141 | msgid "Ubuntu Software Center Store" |
142 | msgstr "" |
143 | |
144 | #. display a "Loading" spinner until we actually display the |
145 | #. details view for the deb file |
146 | -#: ../softwarecenter/ui/gtk/app.py:1159 |
147 | +#: ../softwarecenter/ui/gtk/app.py:1183 |
148 | #: ../softwarecenter/ui/gtk/availablepane.py:116 |
149 | msgid "Loading" |
150 | msgstr "" |
151 | @@ -724,26 +728,34 @@ |
152 | msgid "_Ignore and install" |
153 | msgstr "" |
154 | |
155 | -#: ../softwarecenter/backend/channel.py:414 |
156 | +#: ../softwarecenter/backend/channel.py:421 |
157 | msgid "Canonical Partners" |
158 | msgstr "" |
159 | |
160 | -#: ../softwarecenter/backend/channel.py:416 |
161 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1320 |
162 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1326 |
163 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1330 |
164 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1748 |
165 | +#: ../softwarecenter/backend/channel.py:423 |
166 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1322 |
167 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1328 |
168 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1332 |
169 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1750 |
170 | msgid "Unknown" |
171 | msgstr "" |
172 | |
173 | -#: ../softwarecenter/backend/channel.py:420 |
174 | +#: ../softwarecenter/backend/channel.py:427 |
175 | msgid "For Purchase" |
176 | msgstr "" |
177 | |
178 | -#: ../softwarecenter/backend/channel.py:422 |
179 | +#: ../softwarecenter/backend/channel.py:429 |
180 | msgid "Independent" |
181 | msgstr "" |
182 | |
183 | +#: ../softwarecenter/backend/channel.py:508 |
184 | +msgid "All Software" |
185 | +msgstr "" |
186 | + |
187 | +#: ../softwarecenter/backend/channel.py:514 |
188 | +msgid "All Installed" |
189 | +msgstr "" |
190 | + |
191 | #: ../softwarecenter/db/application.py:198 |
192 | #: ../softwarecenter/db/application.py:298 |
193 | #: ../softwarecenter/db/application.py:425 |
194 | @@ -792,7 +804,7 @@ |
195 | #. provide a list of words in your language that people are likely |
196 | #. to include in a search but that should normally be ignored in |
197 | #. the search. |
198 | -#: ../softwarecenter/db/database.py:104 |
199 | +#: ../softwarecenter/db/database.py:118 |
200 | msgid "app;application;package;program;programme;suite;tool" |
201 | msgstr "" |
202 | |
203 | @@ -1197,52 +1209,52 @@ |
204 | msgstr "" |
205 | |
206 | #. Update total size label |
207 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1347 |
208 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1349 |
209 | msgid "Calculating..." |
210 | msgstr "" |
211 | |
212 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1419 |
213 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1421 |
214 | msgid "This program is run from a terminal: " |
215 | msgstr "" |
216 | |
217 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1420 |
218 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1422 |
219 | msgid "These programs are run from a terminal: " |
220 | msgstr "" |
221 | |
222 | #. display launcher location |
223 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1442 |
224 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1444 |
225 | msgid "Find it in the menu: " |
226 | msgstr "" |
227 | |
228 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1731 |
229 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1733 |
230 | #, python-format |
231 | msgid "%sB to download, " |
232 | msgstr "" |
233 | |
234 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1734 |
235 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1736 |
236 | #, python-format |
237 | msgid "%sB when installed" |
238 | msgstr "" |
239 | |
240 | #. FIXME: this is not really a good indication of the size on disk |
241 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1742 |
242 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1744 |
243 | #, python-format |
244 | msgid "%sB on disk" |
245 | msgstr "" |
246 | |
247 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1745 |
248 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1747 |
249 | #, python-format |
250 | msgid "%sB to be freed" |
251 | msgstr "" |
252 | |
253 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1770 |
254 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1772 |
255 | #, python-format |
256 | msgid "Used: one time" |
257 | msgid_plural "Used: %(amount)s times" |
258 | msgstr[0] "" |
259 | msgstr[1] "" |
260 | |
261 | -#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1774 |
262 | +#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1776 |
263 | msgid "Used: over 100 times" |
264 | msgstr "" |
265 | |
266 | @@ -1385,13 +1397,13 @@ |
267 | msgstr "" |
268 | |
269 | #: ../softwarecenter/ui/gtk/catview_gtk.py:100 |
270 | -#: ../softwarecenter/ui/gtk/catview_gtk.py:524 |
271 | +#: ../softwarecenter/ui/gtk/catview_gtk.py:552 |
272 | #: ../softwarecenter/ui/gtk/catview_webkit.py:62 |
273 | #: ../softwarecenter/ui/gtk/catview_webkit.py:72 |
274 | msgid "Departments" |
275 | msgstr "" |
276 | |
277 | -#: ../softwarecenter/ui/gtk/catview_gtk.py:305 |
278 | +#: ../softwarecenter/ui/gtk/catview_gtk.py:329 |
279 | #, python-format |
280 | msgid "Welcome back! There is <a href=\"\">%i new recommendation</a> for you." |
281 | msgid_plural "" |
282 | @@ -1399,18 +1411,18 @@ |
283 | msgstr[0] "" |
284 | msgstr[1] "" |
285 | |
286 | -#: ../softwarecenter/ui/gtk/catview_gtk.py:316 |
287 | +#: ../softwarecenter/ui/gtk/catview_gtk.py:340 |
288 | msgid "Recommendations" |
289 | msgstr "" |
290 | |
291 | -#: ../softwarecenter/ui/gtk/catview_gtk.py:385 |
292 | +#: ../softwarecenter/ui/gtk/catview_gtk.py:409 |
293 | msgid "Top Rated" |
294 | msgstr "" |
295 | |
296 | #. append an additional button to show all of the items in the category |
297 | #. an AppStore |
298 | -#: ../softwarecenter/ui/gtk/catview_gtk.py:614 |
299 | -#: ../softwarecenter/ui/gtk/catview_gtk.py:616 |
300 | +#: ../softwarecenter/ui/gtk/catview_gtk.py:642 |
301 | +#: ../softwarecenter/ui/gtk/catview_gtk.py:644 |
302 | #: ../softwarecenter/ui/gtk/widgets/carousel.py:72 |
303 | msgid "All" |
304 | msgstr "" |
305 | |
306 | === modified file 'softwarecenter/ui/gtk/app.py' |
307 | --- softwarecenter/ui/gtk/app.py 2011-07-20 21:31:07 +0000 |
308 | +++ softwarecenter/ui/gtk/app.py 2011-07-23 14:41:45 +0000 |
309 | @@ -522,14 +522,18 @@ |
310 | # set menu sensitve |
311 | self.menuitem_view_supported_only.set_sensitive(self.active_pane != None) |
312 | self.menuitem_view_all.set_sensitive(self.active_pane != None) |
313 | + self.menuitem_view_free_software_only.set_sensitive(self.active_pane != None) |
314 | # set menu state |
315 | if self.active_pane: |
316 | self._block_menuitem_view = True |
317 | if not self.active_pane.apps_filter: |
318 | self.menuitem_view_all.set_sensitive(False) |
319 | + self.menuitem_view_free_software_only.set_sensitive(False) |
320 | self.menuitem_view_supported_only.set_sensitive(False) |
321 | elif self.active_pane.apps_filter.get_supported_only(): |
322 | self.menuitem_view_supported_only.activate() |
323 | + elif self.active_pane.apps_filter.get_free_software_only(): |
324 | + self.menuitem_view_free_software_only.activate() |
325 | else: |
326 | self.menuitem_view_all.activate() |
327 | self._block_menuitem_view = False |
328 | @@ -938,6 +942,26 @@ |
329 | self.available_pane.subcategories_view.current_category, |
330 | len(self.available_pane.app_view.get_model())) |
331 | |
332 | + def on_menuitem_view_free_software_only_activate(self, widget): |
333 | + if (not self._block_menuitem_view and |
334 | + self.active_pane.apps_filter and |
335 | + not self.active_pane.apps_filter.get_free_software_only()): |
336 | + self.active_pane.apps_filter.set_free_software_only(True) |
337 | + self.active_pane.refresh_apps() |
338 | + |
339 | + # update recommended widget counterd |
340 | + if self.available_pane and self.available_pane.cat_view: |
341 | + self.available_pane.cat_view._append_recommendations() |
342 | + |
343 | + # update subcategory view |
344 | + if (self.available_pane and |
345 | + self.available_pane == self.active_pane and |
346 | + self.available_pane.subcategories_view and |
347 | + self.available_pane.subcategories_view.current_category): |
348 | + self.available_pane.subcategories_view._append_subcat_departments( |
349 | + self.available_pane.subcategories_view.current_category, |
350 | + len(self.available_pane.app_view.get_model())) |
351 | + |
352 | def on_menuitem_view_supported_only_activate(self, widget): |
353 | if (not self._block_menuitem_view and |
354 | self.active_pane.apps_filter and |
355 | |
356 | === modified file 'softwarecenter/ui/gtk/appview.py' |
357 | --- softwarecenter/ui/gtk/appview.py 2011-07-15 14:24:08 +0000 |
358 | +++ softwarecenter/ui/gtk/appview.py 2011-07-23 14:41:45 +0000 |
359 | @@ -1113,6 +1113,7 @@ |
360 | self.lowlevel_cache = None |
361 | self.available_only = False |
362 | self.supported_only = False |
363 | + self.free_software_only = False |
364 | self.installed_only = False |
365 | self.not_installed_only = False |
366 | @property |
367 | @@ -1120,18 +1121,23 @@ |
368 | """ True if the filter is in a state that it should be part of a query """ |
369 | return (self.available_only or |
370 | self.supported_only or |
371 | - self.installed_only or |
372 | + self.installed_only or |
373 | + self.free_software_only or |
374 | self.not_installed_only) |
375 | def set_available_only(self, v): |
376 | self.available_only = v |
377 | def set_supported_only(self, v): |
378 | self.supported_only = v |
379 | + def set_free_software_only(self, v): |
380 | + self.free_software_only = v |
381 | def set_installed_only(self, v): |
382 | self.installed_only = v |
383 | def set_not_installed_only(self, v): |
384 | self.not_installed_only = v |
385 | def get_supported_only(self): |
386 | return self.supported_only |
387 | + def get_free_software_only(self): |
388 | + return self.free_software_only |
389 | def __eq__(self, other): |
390 | if self is None and other is not None: |
391 | return True |
392 | @@ -1139,16 +1145,17 @@ |
393 | return False |
394 | return (self.installed_only == other.installed_only and |
395 | self.not_installed_only == other.not_installed_only and |
396 | - self.supported_only == other.supported_only) |
397 | + self.supported_only == other.supported_only and |
398 | + self.free_software_only == other.free_software_only) |
399 | def __ne__(self, other): |
400 | return not self.__eq__(other) |
401 | def __call__(self, doc): |
402 | """return True if the package should be displayed""" |
403 | # get pkgname from document |
404 | pkgname = self.db.get_pkgname(doc) |
405 | - #LOG.debug( |
406 | - # "filter: supported_only: %s installed_only: %s '%s'" % ( |
407 | - # self.supported_only, self.installed_only, pkgname)) |
408 | + #LOG.warn( |
409 | + # "filter: supported_only: %s installed_only: %s free only %s '%s'" % ( |
410 | + # self.supported_only, self.installed_only, self.free_software_only, pkgname)) |
411 | if self.available_only: |
412 | # an item is considered available if it is either found |
413 | # in the cache or is available for purchase |
414 | @@ -1169,6 +1176,10 @@ |
415 | if (pkgname in self.cache and |
416 | self.cache[pkgname].is_installed): |
417 | return False |
418 | + if self.free_software_only: |
419 | + component = doc.get_value(XapianValues.ARCHIVE_SECTION) |
420 | + if self.distro.get_license_text(component) != "Open source": |
421 | + return False |
422 | if self.supported_only: |
423 | if not self.distro.is_supported(self.cache, doc, pkgname): |
424 | return False |
425 | |
426 | === modified file 'softwarecenter/ui/gtk3/app.py' |
427 | --- softwarecenter/ui/gtk3/app.py 2011-07-20 12:05:57 +0000 |
428 | +++ softwarecenter/ui/gtk3/app.py 2011-07-23 14:41:45 +0000 |
429 | @@ -579,14 +579,18 @@ |
430 | # set menu sensitve |
431 | self.menuitem_view_supported_only.set_sensitive(self.active_pane != None) |
432 | self.menuitem_view_all.set_sensitive(self.active_pane != None) |
433 | + self.menuitem_view_free_software_only.set_sensitive(self.active_pane != None) |
434 | # set menu state |
435 | if self.active_pane: |
436 | self._block_menuitem_view = True |
437 | if not self.active_pane.apps_filter: |
438 | self.menuitem_view_all.set_sensitive(False) |
439 | + self.menuitem_view_free_software_only.set_sensitive(False) |
440 | self.menuitem_view_supported_only.set_sensitive(False) |
441 | elif self.active_pane.apps_filter.get_supported_only(): |
442 | self.menuitem_view_supported_only.activate() |
443 | + elif self.active_pane.apps_filter.get_free_software_only(): |
444 | + self.menuitem_view_free_software_only.activate() |
445 | else: |
446 | self.menuitem_view_all.activate() |
447 | self._block_menuitem_view = False |
448 | @@ -1000,6 +1004,26 @@ |
449 | self.available_pane.subcategories_view.current_category, |
450 | len(self.available_pane.app_view.get_model())) |
451 | |
452 | + def on_menuitem_view_free_software_only_activate(self, widget): |
453 | + if (not self._block_menuitem_view and |
454 | + self.active_pane.state and |
455 | + not self.active_pane.state.filter.get_free_software_only()): |
456 | + self.active_pane.state.filter.set_free_software_only(True) |
457 | + self.active_pane.refresh_apps() |
458 | + |
459 | + # update recommended widget counter |
460 | + if self.available_pane and self.available_pane.cat_view: |
461 | + self.available_pane.cat_view._append_recommendations() |
462 | + |
463 | + # update subcategory view |
464 | + if (self.available_pane and |
465 | + self.available_pane == self.active_pane and |
466 | + self.available_pane.subcategories_view and |
467 | + self.available_pane.subcategories_view.current_category): |
468 | + self.available_pane.subcategories_view._append_subcat_departments( |
469 | + self.available_pane.subcategories_view.current_category, |
470 | + len(self.available_pane.app_view.get_model())) |
471 | + |
472 | def on_menuitem_view_supported_only_activate(self, widget): |
473 | if (not self._block_menuitem_view and |
474 | self.active_pane.state and |
475 | |
476 | === modified file 'softwarecenter/ui/gtk3/views/appview.py' |
477 | --- softwarecenter/ui/gtk3/views/appview.py 2011-07-20 12:05:57 +0000 |
478 | +++ softwarecenter/ui/gtk3/views/appview.py 2011-07-23 14:41:45 +0000 |
479 | @@ -563,6 +563,7 @@ |
480 | self.db = db |
481 | self.cache = cache |
482 | self.available_only = False |
483 | + self.free_software_only = False |
484 | self.supported_only = False |
485 | self.installed_only = False |
486 | self.not_installed_only = False |
487 | @@ -571,18 +572,23 @@ |
488 | """ True if the filter is in a state that it should be part of a query """ |
489 | return (self.available_only or |
490 | self.supported_only or |
491 | + self.free_software_only or |
492 | self.installed_only or |
493 | self.not_installed_only) |
494 | def set_available_only(self, v): |
495 | self.available_only = v |
496 | def set_supported_only(self, v): |
497 | self.supported_only = v |
498 | + def set_free_software_only(self, v): |
499 | + self.free_software_only = v |
500 | def set_installed_only(self, v): |
501 | self.installed_only = v |
502 | def set_not_installed_only(self, v): |
503 | self.not_installed_only = v |
504 | def get_supported_only(self): |
505 | return self.supported_only |
506 | + def get_free_software_only(self): |
507 | + return self.free_software_only |
508 | def __eq__(self, other): |
509 | if self is None and other is not None: |
510 | return True |
511 | @@ -590,6 +596,7 @@ |
512 | return False |
513 | return (self.installed_only == other.installed_only and |
514 | self.not_installed_only == other.not_installed_only and |
515 | + self.free_software_only == other.free_software_only and |
516 | self.supported_only == other.supported_only) |
517 | def __ne__(self, other): |
518 | return not self.__eq__(other) |
519 | @@ -616,6 +623,10 @@ |
520 | if (pkgname in self.cache and |
521 | self.cache[pkgname].is_installed): |
522 | return False |
523 | + if self.free_software_only: |
524 | + component = doc.get_value(XapianValues.ARCHIVE_SECTION) |
525 | + if self.distro.get_license_text(component) != "Open source": |
526 | + return False |
527 | if self.supported_only: |
528 | if not self.distro.is_supported(self.cache, doc, pkgname): |
529 | return False |
530 | |
531 | === modified file 'softwarecenter/version.py' |
532 | --- softwarecenter/version.py 2011-07-21 15:28:53 +0000 |
533 | +++ softwarecenter/version.py 2011-07-23 14:41:45 +0000 |
534 | @@ -1,5 +1,5 @@ |
535 | |
536 | -VERSION='4.1.10' |
537 | -CODENAME='UNRELEASED' |
538 | +VERSION='4.1.11' |
539 | +CODENAME='UNRELAED' |
540 | DISTRO='Ubuntu' |
541 | RELEASE='11.10' |
Two typos: "counterd" and "UNRELAED".
There are larger issues with the design, but I'll address those in the bug report.