Merge lp:~roignac/software-center/bug-630731-free-software-view into lp:software-center

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
Reviewer Review Type Date Requested Status
Matthew Paul Thomas Needs Fixing
Michael Vogt Pending
Review via email: mp+68953@code.launchpad.net

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
Matthew Paul Thomas (mpt) wrote :

Two typos: "counterd" and "UNRELAED".

There are larger issues with the design, but I'll address those in the bug report.

review: Needs Fixing
Revision history for this message
dobey (dobey) wrote :

Could you please check http://www.canonical.com/contributors and sign the
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
=== modified file 'data/ui/gtk/SoftwareCenter.ui'
--- data/ui/gtk/SoftwareCenter.ui 2011-07-05 07:59:13 +0000
+++ data/ui/gtk/SoftwareCenter.ui 2011-07-23 14:41:45 +0000
@@ -242,6 +242,16 @@
242 </object>242 </object>
243 </child>243 </child>
244 <child>244 <child>
245 <object class="GtkRadioMenuItem" id="menuitem_view_free_software_only">
246 <property name="visible">True</property>
247 <property name="label" translatable="yes">_Free Software</property>
248 <property name="use_underline">True</property>
249 <property name="draw_as_radio">True</property>
250 <property name="group">menuitem_view_supported_only</property>
251 <signal name="activate" handler="on_menuitem_view_free_software_only_activate"/>
252 </object>
253 </child>
254 <child>
245 <object class="GtkRadioMenuItem" id="menuitem_view_supported_only">255 <object class="GtkRadioMenuItem" id="menuitem_view_supported_only">
246 <property name="visible">True</property>256 <property name="visible">True</property>
247 <property name="label" translatable="yes">_Canonical-Maintained Software</property>257 <property name="label" translatable="yes">_Canonical-Maintained Software</property>
248258
=== modified file 'data/ui/gtk3/SoftwareCenter.ui'
--- data/ui/gtk3/SoftwareCenter.ui 2011-07-05 09:53:26 +0000
+++ data/ui/gtk3/SoftwareCenter.ui 2011-07-23 14:41:45 +0000
@@ -394,6 +394,18 @@
394 </object>394 </object>
395 </child>395 </child>
396 <child>396 <child>
397 <object class="GtkRadioMenuItem" id="menuitem_view_free_software_only">
398 <property name="visible">True</property>
399 <property name="can_focus">False</property>
400 <property name="use_action_appearance">False</property>
401 <property name="label" translatable="yes">_Free Software</property>
402 <property name="use_underline">True</property>
403 <property name="draw_as_radio">True</property>
404 <property name="group">menuitem_view_supported_only</property>
405 <signal name="activate" handler="on_menuitem_view_free_software_only_activate" swapped="no"/>
406 </object>
407 </child>
408 <child>
397 <object class="GtkRadioMenuItem" id="menuitem_view_supported_only">409 <object class="GtkRadioMenuItem" id="menuitem_view_supported_only">
398 <property name="visible">True</property>410 <property name="visible">True</property>
399 <property name="can_focus">False</property>411 <property name="can_focus">False</property>
400412
=== modified file 'po/software-center.pot'
--- po/software-center.pot 2011-07-21 15:28:53 +0000
+++ po/software-center.pot 2011-07-23 14:41:45 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: PACKAGE VERSION\n"9"Project-Id-Version: PACKAGE VERSION\n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2011-07-21 17:04+0200\n"11"POT-Creation-Date: 2011-07-23 15:23+0300\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -199,7 +199,7 @@
199#. located directly beneath a label asking 'Why is this review inappropriate?'.199#. located directly beneath a label asking 'Why is this review inappropriate?'.
200#. This text refers to a possible reason for why the corresponding200#. This text refers to a possible reason for why the corresponding
201#. review is being flagged as inappropriate.201#. review is being flagged as inappropriate.
202#: ../utils/submit_review.py:1201 ../softwarecenter/backend/channel.py:424202#: ../utils/submit_review.py:1201 ../softwarecenter/backend/channel.py:431
203msgid "Other"203msgid "Other"
204msgstr ""204msgstr ""
205205
@@ -278,34 +278,38 @@
278msgstr ""278msgstr ""
279279
280#: ../data/ui/gtk/SoftwareCenter.ui.h:12280#: ../data/ui/gtk/SoftwareCenter.ui.h:12
281msgid "_Free Software"
282msgstr ""
283
284#: ../data/ui/gtk/SoftwareCenter.ui.h:13
281msgid "_Go Back"285msgid "_Go Back"
282msgstr ""286msgstr ""
283287
284#: ../data/ui/gtk/SoftwareCenter.ui.h:13288#: ../data/ui/gtk/SoftwareCenter.ui.h:14
285msgid "_Go Forward"289msgid "_Go Forward"
286msgstr ""290msgstr ""
287291
288#: ../data/ui/gtk/SoftwareCenter.ui.h:14292#: ../data/ui/gtk/SoftwareCenter.ui.h:15
289msgid "_Help"293msgid "_Help"
290msgstr ""294msgstr ""
291295
292#: ../data/ui/gtk/SoftwareCenter.ui.h:15296#: ../data/ui/gtk/SoftwareCenter.ui.h:16
293msgid "_Install"297msgid "_Install"
294msgstr ""298msgstr ""
295299
296#: ../data/ui/gtk/SoftwareCenter.ui.h:16300#: ../data/ui/gtk/SoftwareCenter.ui.h:17
297msgid "_Software Sources…"301msgid "_Software Sources…"
298msgstr ""302msgstr ""
299303
300#: ../data/ui/gtk/SoftwareCenter.ui.h:17304#: ../data/ui/gtk/SoftwareCenter.ui.h:18
301msgid "_View"305msgid "_View"
302msgstr ""306msgstr ""
303307
304#: ../data/ui/gtk/SoftwareCenter.ui.h:18308#: ../data/ui/gtk/SoftwareCenter.ui.h:19
305msgid "translator-credits"309msgid "translator-credits"
306msgstr ""310msgstr ""
307311
308#: ../data/ui/gtk/SoftwareCenter.ui.h:19312#: ../data/ui/gtk/SoftwareCenter.ui.h:20
309msgid "©2009-2011 Canonical"313msgid "©2009-2011 Canonical"
310msgstr ""314msgstr ""
311315
@@ -447,7 +451,7 @@
447#. aquired for purchase in utils/submit_review.py451#. aquired for purchase in utils/submit_review.py
448#. the other one in softwarecenter/app.py452#. the other one in softwarecenter/app.py
449#: ../data/ubuntu-software-center.desktop.in.h:3453#: ../data/ubuntu-software-center.desktop.in.h:3
450#: ../softwarecenter/ui/gtk/app.py:756 ../softwarecenter/distro/Ubuntu.py:58454#: ../softwarecenter/ui/gtk/app.py:760 ../softwarecenter/distro/Ubuntu.py:58
451msgid "Ubuntu Software Center"455msgid "Ubuntu Software Center"
452msgstr ""456msgstr ""
453457
@@ -456,11 +460,11 @@
456"Lets you choose from thousands of applications available for your system "460"Lets you choose from thousands of applications available for your system "
457msgstr ""461msgstr ""
458462
459#: ../data/featured.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:426463#: ../data/featured.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:450
460msgid "Featured"464msgid "Featured"
461msgstr ""465msgstr ""
462466
463#: ../data/new.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:462467#: ../data/new.menu.in.h:1 ../softwarecenter/ui/gtk/catview_gtk.py:486
464msgid "What’s New"468msgid "What’s New"
465msgstr ""469msgstr ""
466470
@@ -704,13 +708,13 @@
704msgid "Please re-install the 'software-center' package."708msgid "Please re-install the 'software-center' package."
705msgstr ""709msgstr ""
706710
707#: ../softwarecenter/ui/gtk/app.py:757711#: ../softwarecenter/ui/gtk/app.py:761
708msgid "Ubuntu Software Center Store"712msgid "Ubuntu Software Center Store"
709msgstr ""713msgstr ""
710714
711#. display a "Loading" spinner until we actually display the715#. display a "Loading" spinner until we actually display the
712#. details view for the deb file716#. details view for the deb file
713#: ../softwarecenter/ui/gtk/app.py:1159717#: ../softwarecenter/ui/gtk/app.py:1183
714#: ../softwarecenter/ui/gtk/availablepane.py:116718#: ../softwarecenter/ui/gtk/availablepane.py:116
715msgid "Loading"719msgid "Loading"
716msgstr ""720msgstr ""
@@ -724,26 +728,34 @@
724msgid "_Ignore and install"728msgid "_Ignore and install"
725msgstr ""729msgstr ""
726730
727#: ../softwarecenter/backend/channel.py:414731#: ../softwarecenter/backend/channel.py:421
728msgid "Canonical Partners"732msgid "Canonical Partners"
729msgstr ""733msgstr ""
730734
731#: ../softwarecenter/backend/channel.py:416735#: ../softwarecenter/backend/channel.py:423
732#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1320736#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1322
733#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1326737#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1328
734#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1330738#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1332
735#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1748739#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1750
736msgid "Unknown"740msgid "Unknown"
737msgstr ""741msgstr ""
738742
739#: ../softwarecenter/backend/channel.py:420743#: ../softwarecenter/backend/channel.py:427
740msgid "For Purchase"744msgid "For Purchase"
741msgstr ""745msgstr ""
742746
743#: ../softwarecenter/backend/channel.py:422747#: ../softwarecenter/backend/channel.py:429
744msgid "Independent"748msgid "Independent"
745msgstr ""749msgstr ""
746750
751#: ../softwarecenter/backend/channel.py:508
752msgid "All Software"
753msgstr ""
754
755#: ../softwarecenter/backend/channel.py:514
756msgid "All Installed"
757msgstr ""
758
747#: ../softwarecenter/db/application.py:198759#: ../softwarecenter/db/application.py:198
748#: ../softwarecenter/db/application.py:298760#: ../softwarecenter/db/application.py:298
749#: ../softwarecenter/db/application.py:425761#: ../softwarecenter/db/application.py:425
@@ -792,7 +804,7 @@
792#. provide a list of words in your language that people are likely804#. provide a list of words in your language that people are likely
793#. to include in a search but that should normally be ignored in805#. to include in a search but that should normally be ignored in
794#. the search.806#. the search.
795#: ../softwarecenter/db/database.py:104807#: ../softwarecenter/db/database.py:118
796msgid "app;application;package;program;programme;suite;tool"808msgid "app;application;package;program;programme;suite;tool"
797msgstr ""809msgstr ""
798810
@@ -1197,52 +1209,52 @@
1197msgstr ""1209msgstr ""
11981210
1199#. Update total size label1211#. Update total size label
1200#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:13471212#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1349
1201msgid "Calculating..."1213msgid "Calculating..."
1202msgstr ""1214msgstr ""
12031215
1204#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:14191216#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1421
1205msgid "This program is run from a terminal: "1217msgid "This program is run from a terminal: "
1206msgstr ""1218msgstr ""
12071219
1208#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:14201220#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1422
1209msgid "These programs are run from a terminal: "1221msgid "These programs are run from a terminal: "
1210msgstr ""1222msgstr ""
12111223
1212#. display launcher location1224#. display launcher location
1213#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:14421225#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1444
1214msgid "Find it in the menu: "1226msgid "Find it in the menu: "
1215msgstr ""1227msgstr ""
12161228
1217#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:17311229#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1733
1218#, python-format1230#, python-format
1219msgid "%sB to download, "1231msgid "%sB to download, "
1220msgstr ""1232msgstr ""
12211233
1222#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:17341234#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1736
1223#, python-format1235#, python-format
1224msgid "%sB when installed"1236msgid "%sB when installed"
1225msgstr ""1237msgstr ""
12261238
1227#. FIXME: this is not really a good indication of the size on disk1239#. FIXME: this is not really a good indication of the size on disk
1228#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:17421240#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1744
1229#, python-format1241#, python-format
1230msgid "%sB on disk"1242msgid "%sB on disk"
1231msgstr ""1243msgstr ""
12321244
1233#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:17451245#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1747
1234#, python-format1246#, python-format
1235msgid "%sB to be freed"1247msgid "%sB to be freed"
1236msgstr ""1248msgstr ""
12371249
1238#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:17701250#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1772
1239#, python-format1251#, python-format
1240msgid "Used: one time"1252msgid "Used: one time"
1241msgid_plural "Used: %(amount)s times"1253msgid_plural "Used: %(amount)s times"
1242msgstr[0] ""1254msgstr[0] ""
1243msgstr[1] ""1255msgstr[1] ""
12441256
1245#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:17741257#: ../softwarecenter/ui/gtk/appdetailsview_gtk.py:1776
1246msgid "Used: over 100 times"1258msgid "Used: over 100 times"
1247msgstr ""1259msgstr ""
12481260
@@ -1385,13 +1397,13 @@
1385msgstr ""1397msgstr ""
13861398
1387#: ../softwarecenter/ui/gtk/catview_gtk.py:1001399#: ../softwarecenter/ui/gtk/catview_gtk.py:100
1388#: ../softwarecenter/ui/gtk/catview_gtk.py:5241400#: ../softwarecenter/ui/gtk/catview_gtk.py:552
1389#: ../softwarecenter/ui/gtk/catview_webkit.py:621401#: ../softwarecenter/ui/gtk/catview_webkit.py:62
1390#: ../softwarecenter/ui/gtk/catview_webkit.py:721402#: ../softwarecenter/ui/gtk/catview_webkit.py:72
1391msgid "Departments"1403msgid "Departments"
1392msgstr ""1404msgstr ""
13931405
1394#: ../softwarecenter/ui/gtk/catview_gtk.py:3051406#: ../softwarecenter/ui/gtk/catview_gtk.py:329
1395#, python-format1407#, python-format
1396msgid "Welcome back! There is <a href=\"\">%i new recommendation</a> for you."1408msgid "Welcome back! There is <a href=\"\">%i new recommendation</a> for you."
1397msgid_plural ""1409msgid_plural ""
@@ -1399,18 +1411,18 @@
1399msgstr[0] ""1411msgstr[0] ""
1400msgstr[1] ""1412msgstr[1] ""
14011413
1402#: ../softwarecenter/ui/gtk/catview_gtk.py:3161414#: ../softwarecenter/ui/gtk/catview_gtk.py:340
1403msgid "Recommendations"1415msgid "Recommendations"
1404msgstr ""1416msgstr ""
14051417
1406#: ../softwarecenter/ui/gtk/catview_gtk.py:3851418#: ../softwarecenter/ui/gtk/catview_gtk.py:409
1407msgid "Top Rated"1419msgid "Top Rated"
1408msgstr ""1420msgstr ""
14091421
1410#. append an additional button to show all of the items in the category1422#. append an additional button to show all of the items in the category
1411#. an AppStore1423#. an AppStore
1412#: ../softwarecenter/ui/gtk/catview_gtk.py:6141424#: ../softwarecenter/ui/gtk/catview_gtk.py:642
1413#: ../softwarecenter/ui/gtk/catview_gtk.py:6161425#: ../softwarecenter/ui/gtk/catview_gtk.py:644
1414#: ../softwarecenter/ui/gtk/widgets/carousel.py:721426#: ../softwarecenter/ui/gtk/widgets/carousel.py:72
1415msgid "All"1427msgid "All"
1416msgstr ""1428msgstr ""
14171429
=== modified file 'softwarecenter/ui/gtk/app.py'
--- softwarecenter/ui/gtk/app.py 2011-07-20 21:31:07 +0000
+++ softwarecenter/ui/gtk/app.py 2011-07-23 14:41:45 +0000
@@ -522,14 +522,18 @@
522 # set menu sensitve522 # set menu sensitve
523 self.menuitem_view_supported_only.set_sensitive(self.active_pane != None)523 self.menuitem_view_supported_only.set_sensitive(self.active_pane != None)
524 self.menuitem_view_all.set_sensitive(self.active_pane != None)524 self.menuitem_view_all.set_sensitive(self.active_pane != None)
525 self.menuitem_view_free_software_only.set_sensitive(self.active_pane != None)
525 # set menu state526 # set menu state
526 if self.active_pane:527 if self.active_pane:
527 self._block_menuitem_view = True528 self._block_menuitem_view = True
528 if not self.active_pane.apps_filter:529 if not self.active_pane.apps_filter:
529 self.menuitem_view_all.set_sensitive(False)530 self.menuitem_view_all.set_sensitive(False)
531 self.menuitem_view_free_software_only.set_sensitive(False)
530 self.menuitem_view_supported_only.set_sensitive(False)532 self.menuitem_view_supported_only.set_sensitive(False)
531 elif self.active_pane.apps_filter.get_supported_only():533 elif self.active_pane.apps_filter.get_supported_only():
532 self.menuitem_view_supported_only.activate()534 self.menuitem_view_supported_only.activate()
535 elif self.active_pane.apps_filter.get_free_software_only():
536 self.menuitem_view_free_software_only.activate()
533 else:537 else:
534 self.menuitem_view_all.activate()538 self.menuitem_view_all.activate()
535 self._block_menuitem_view = False539 self._block_menuitem_view = False
@@ -938,6 +942,26 @@
938 self.available_pane.subcategories_view.current_category,942 self.available_pane.subcategories_view.current_category,
939 len(self.available_pane.app_view.get_model()))943 len(self.available_pane.app_view.get_model()))
940944
945 def on_menuitem_view_free_software_only_activate(self, widget):
946 if (not self._block_menuitem_view and
947 self.active_pane.apps_filter and
948 not self.active_pane.apps_filter.get_free_software_only()):
949 self.active_pane.apps_filter.set_free_software_only(True)
950 self.active_pane.refresh_apps()
951
952 # update recommended widget counterd
953 if self.available_pane and self.available_pane.cat_view:
954 self.available_pane.cat_view._append_recommendations()
955
956 # update subcategory view
957 if (self.available_pane and
958 self.available_pane == self.active_pane and
959 self.available_pane.subcategories_view and
960 self.available_pane.subcategories_view.current_category):
961 self.available_pane.subcategories_view._append_subcat_departments(
962 self.available_pane.subcategories_view.current_category,
963 len(self.available_pane.app_view.get_model()))
964
941 def on_menuitem_view_supported_only_activate(self, widget):965 def on_menuitem_view_supported_only_activate(self, widget):
942 if (not self._block_menuitem_view and966 if (not self._block_menuitem_view and
943 self.active_pane.apps_filter and967 self.active_pane.apps_filter and
944968
=== modified file 'softwarecenter/ui/gtk/appview.py'
--- softwarecenter/ui/gtk/appview.py 2011-07-15 14:24:08 +0000
+++ softwarecenter/ui/gtk/appview.py 2011-07-23 14:41:45 +0000
@@ -1113,6 +1113,7 @@
1113 self.lowlevel_cache = None1113 self.lowlevel_cache = None
1114 self.available_only = False1114 self.available_only = False
1115 self.supported_only = False1115 self.supported_only = False
1116 self.free_software_only = False
1116 self.installed_only = False1117 self.installed_only = False
1117 self.not_installed_only = False1118 self.not_installed_only = False
1118 @property1119 @property
@@ -1120,18 +1121,23 @@
1120 """ True if the filter is in a state that it should be part of a query """1121 """ True if the filter is in a state that it should be part of a query """
1121 return (self.available_only or1122 return (self.available_only or
1122 self.supported_only or1123 self.supported_only or
1123 self.installed_only or 1124 self.installed_only or
1125 self.free_software_only or
1124 self.not_installed_only)1126 self.not_installed_only)
1125 def set_available_only(self, v):1127 def set_available_only(self, v):
1126 self.available_only = v1128 self.available_only = v
1127 def set_supported_only(self, v):1129 def set_supported_only(self, v):
1128 self.supported_only = v1130 self.supported_only = v
1131 def set_free_software_only(self, v):
1132 self.free_software_only = v
1129 def set_installed_only(self, v):1133 def set_installed_only(self, v):
1130 self.installed_only = v1134 self.installed_only = v
1131 def set_not_installed_only(self, v):1135 def set_not_installed_only(self, v):
1132 self.not_installed_only = v1136 self.not_installed_only = v
1133 def get_supported_only(self):1137 def get_supported_only(self):
1134 return self.supported_only1138 return self.supported_only
1139 def get_free_software_only(self):
1140 return self.free_software_only
1135 def __eq__(self, other):1141 def __eq__(self, other):
1136 if self is None and other is not None: 1142 if self is None and other is not None:
1137 return True1143 return True
@@ -1139,16 +1145,17 @@
1139 return False1145 return False
1140 return (self.installed_only == other.installed_only and1146 return (self.installed_only == other.installed_only and
1141 self.not_installed_only == other.not_installed_only and1147 self.not_installed_only == other.not_installed_only and
1142 self.supported_only == other.supported_only)1148 self.supported_only == other.supported_only and
1149 self.free_software_only == other.free_software_only)
1143 def __ne__(self, other):1150 def __ne__(self, other):
1144 return not self.__eq__(other)1151 return not self.__eq__(other)
1145 def __call__(self, doc):1152 def __call__(self, doc):
1146 """return True if the package should be displayed"""1153 """return True if the package should be displayed"""
1147 # get pkgname from document1154 # get pkgname from document
1148 pkgname = self.db.get_pkgname(doc)1155 pkgname = self.db.get_pkgname(doc)
1149 #LOG.debug(1156 #LOG.warn(
1150 # "filter: supported_only: %s installed_only: %s '%s'" % (1157 # "filter: supported_only: %s installed_only: %s free only %s '%s'" % (
1151 # self.supported_only, self.installed_only, pkgname))1158 # self.supported_only, self.installed_only, self.free_software_only, pkgname))
1152 if self.available_only:1159 if self.available_only:
1153 # an item is considered available if it is either found1160 # an item is considered available if it is either found
1154 # in the cache or is available for purchase1161 # in the cache or is available for purchase
@@ -1169,6 +1176,10 @@
1169 if (pkgname in self.cache and1176 if (pkgname in self.cache and
1170 self.cache[pkgname].is_installed):1177 self.cache[pkgname].is_installed):
1171 return False1178 return False
1179 if self.free_software_only:
1180 component = doc.get_value(XapianValues.ARCHIVE_SECTION)
1181 if self.distro.get_license_text(component) != "Open source":
1182 return False
1172 if self.supported_only:1183 if self.supported_only:
1173 if not self.distro.is_supported(self.cache, doc, pkgname):1184 if not self.distro.is_supported(self.cache, doc, pkgname):
1174 return False1185 return False
11751186
=== modified file 'softwarecenter/ui/gtk3/app.py'
--- softwarecenter/ui/gtk3/app.py 2011-07-20 12:05:57 +0000
+++ softwarecenter/ui/gtk3/app.py 2011-07-23 14:41:45 +0000
@@ -579,14 +579,18 @@
579 # set menu sensitve579 # set menu sensitve
580 self.menuitem_view_supported_only.set_sensitive(self.active_pane != None)580 self.menuitem_view_supported_only.set_sensitive(self.active_pane != None)
581 self.menuitem_view_all.set_sensitive(self.active_pane != None)581 self.menuitem_view_all.set_sensitive(self.active_pane != None)
582 self.menuitem_view_free_software_only.set_sensitive(self.active_pane != None)
582 # set menu state583 # set menu state
583 if self.active_pane:584 if self.active_pane:
584 self._block_menuitem_view = True585 self._block_menuitem_view = True
585 if not self.active_pane.apps_filter:586 if not self.active_pane.apps_filter:
586 self.menuitem_view_all.set_sensitive(False)587 self.menuitem_view_all.set_sensitive(False)
588 self.menuitem_view_free_software_only.set_sensitive(False)
587 self.menuitem_view_supported_only.set_sensitive(False)589 self.menuitem_view_supported_only.set_sensitive(False)
588 elif self.active_pane.apps_filter.get_supported_only():590 elif self.active_pane.apps_filter.get_supported_only():
589 self.menuitem_view_supported_only.activate()591 self.menuitem_view_supported_only.activate()
592 elif self.active_pane.apps_filter.get_free_software_only():
593 self.menuitem_view_free_software_only.activate()
590 else:594 else:
591 self.menuitem_view_all.activate()595 self.menuitem_view_all.activate()
592 self._block_menuitem_view = False596 self._block_menuitem_view = False
@@ -1000,6 +1004,26 @@
1000 self.available_pane.subcategories_view.current_category,1004 self.available_pane.subcategories_view.current_category,
1001 len(self.available_pane.app_view.get_model()))1005 len(self.available_pane.app_view.get_model()))
10021006
1007 def on_menuitem_view_free_software_only_activate(self, widget):
1008 if (not self._block_menuitem_view and
1009 self.active_pane.state and
1010 not self.active_pane.state.filter.get_free_software_only()):
1011 self.active_pane.state.filter.set_free_software_only(True)
1012 self.active_pane.refresh_apps()
1013
1014 # update recommended widget counter
1015 if self.available_pane and self.available_pane.cat_view:
1016 self.available_pane.cat_view._append_recommendations()
1017
1018 # update subcategory view
1019 if (self.available_pane and
1020 self.available_pane == self.active_pane and
1021 self.available_pane.subcategories_view and
1022 self.available_pane.subcategories_view.current_category):
1023 self.available_pane.subcategories_view._append_subcat_departments(
1024 self.available_pane.subcategories_view.current_category,
1025 len(self.available_pane.app_view.get_model()))
1026
1003 def on_menuitem_view_supported_only_activate(self, widget):1027 def on_menuitem_view_supported_only_activate(self, widget):
1004 if (not self._block_menuitem_view and1028 if (not self._block_menuitem_view and
1005 self.active_pane.state and1029 self.active_pane.state and
10061030
=== modified file 'softwarecenter/ui/gtk3/views/appview.py'
--- softwarecenter/ui/gtk3/views/appview.py 2011-07-20 12:05:57 +0000
+++ softwarecenter/ui/gtk3/views/appview.py 2011-07-23 14:41:45 +0000
@@ -563,6 +563,7 @@
563 self.db = db563 self.db = db
564 self.cache = cache564 self.cache = cache
565 self.available_only = False565 self.available_only = False
566 self.free_software_only = False
566 self.supported_only = False567 self.supported_only = False
567 self.installed_only = False568 self.installed_only = False
568 self.not_installed_only = False569 self.not_installed_only = False
@@ -571,18 +572,23 @@
571 """ True if the filter is in a state that it should be part of a query """572 """ True if the filter is in a state that it should be part of a query """
572 return (self.available_only or573 return (self.available_only or
573 self.supported_only or574 self.supported_only or
575 self.free_software_only or
574 self.installed_only or 576 self.installed_only or
575 self.not_installed_only)577 self.not_installed_only)
576 def set_available_only(self, v):578 def set_available_only(self, v):
577 self.available_only = v579 self.available_only = v
578 def set_supported_only(self, v):580 def set_supported_only(self, v):
579 self.supported_only = v581 self.supported_only = v
582 def set_free_software_only(self, v):
583 self.free_software_only = v
580 def set_installed_only(self, v):584 def set_installed_only(self, v):
581 self.installed_only = v585 self.installed_only = v
582 def set_not_installed_only(self, v):586 def set_not_installed_only(self, v):
583 self.not_installed_only = v587 self.not_installed_only = v
584 def get_supported_only(self):588 def get_supported_only(self):
585 return self.supported_only589 return self.supported_only
590 def get_free_software_only(self):
591 return self.free_software_only
586 def __eq__(self, other):592 def __eq__(self, other):
587 if self is None and other is not None: 593 if self is None and other is not None:
588 return True594 return True
@@ -590,6 +596,7 @@
590 return False596 return False
591 return (self.installed_only == other.installed_only and597 return (self.installed_only == other.installed_only and
592 self.not_installed_only == other.not_installed_only and598 self.not_installed_only == other.not_installed_only and
599 self.free_software_only == other.free_software_only and
593 self.supported_only == other.supported_only)600 self.supported_only == other.supported_only)
594 def __ne__(self, other):601 def __ne__(self, other):
595 return not self.__eq__(other)602 return not self.__eq__(other)
@@ -616,6 +623,10 @@
616 if (pkgname in self.cache and623 if (pkgname in self.cache and
617 self.cache[pkgname].is_installed):624 self.cache[pkgname].is_installed):
618 return False625 return False
626 if self.free_software_only:
627 component = doc.get_value(XapianValues.ARCHIVE_SECTION)
628 if self.distro.get_license_text(component) != "Open source":
629 return False
619 if self.supported_only:630 if self.supported_only:
620 if not self.distro.is_supported(self.cache, doc, pkgname):631 if not self.distro.is_supported(self.cache, doc, pkgname):
621 return False632 return False
622633
=== modified file 'softwarecenter/version.py'
--- softwarecenter/version.py 2011-07-21 15:28:53 +0000
+++ softwarecenter/version.py 2011-07-23 14:41:45 +0000
@@ -1,5 +1,5 @@
11
2VERSION='4.1.10'2VERSION='4.1.11'
3CODENAME='UNRELEASED'3CODENAME='UNRELAED'
4DISTRO='Ubuntu'4DISTRO='Ubuntu'
5RELEASE='11.10'5RELEASE='11.10'