Merge lp:~kamstrup/libunity/sorted-filters into lp:libunity

Proposed by Mikkel Kamstrup Erlandsen
Status: Merged
Approved by: Neil J. Patel
Approved revision: 83
Merged at revision: 79
Proposed branch: lp:~kamstrup/libunity/sorted-filters
Merge into: lp:libunity
Diff against target: 229 lines (+170/-3)
4 files modified
src/unity-lens-filters.vala (+33/-3)
test/vala/Makefile.am (+1/-0)
test/vala/test-filters.vala (+132/-0)
test/vala/test-vala.vala (+4/-0)
To merge this branch: bzr merge lp:~kamstrup/libunity/sorted-filters
Reviewer Review Type Date Requested Status
Neil J. Patel (community) Approve
Review via email: mp+75014@code.launchpad.net

Description of the change

Adds API to sort Unity.FilterOptions in various ways inside a Unity.OptionsFilter. The default behaviour remains the same as before this change. The apps lens will use it to sort the filter options according to translation (and locale rules)

To post a comment you must log in.
Revision history for this message
Neil J. Patel (njpatel) wrote :

Approved!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/unity-lens-filters.vala'
--- src/unity-lens-filters.vala 2011-09-08 12:08:56 +0000
+++ src/unity-lens-filters.vala 2011-09-12 14:51:24 +0000
@@ -34,7 +34,6 @@
34 FILTERING34 FILTERING
35}35}
3636
37
38/*37/*
39 * Base class for filters. If you are implmenting a scope, checking first that38 * Base class for filters. If you are implmenting a scope, checking first that
40 * a filter is "filtering" is a good way to avoid unnecessary extra logic in39 * a filter is "filtering" is a good way to avoid unnecessary extra logic in
@@ -103,14 +102,45 @@
103public class OptionsFilter : Filter102public class OptionsFilter : Filter
104{103{
105 public List<FilterOption> options;104 public List<FilterOption> options;
105 public SortType sort_type { get; set; default = SortType.MANUAL; }
106
107 public enum SortType
108 {
109 MANUAL,
110 DISPLAY_NAME,
111 ID
112 }
106113
107 public FilterOption add_option (string id, string display_name, Icon? icon_hint=null)114 public FilterOption add_option (string id, string display_name, Icon? icon_hint=null)
108 {115 {
109 var option = new FilterOption(id, display_name, icon_hint);116 var option = new FilterOption(id, display_name, icon_hint);
110 options.append (option);117
111118 switch (sort_type)
119 {
120 case SortType.DISPLAY_NAME:
121 options.insert_sorted (option, sort_by_display_name);
122 break;
123 case SortType.ID:
124 options.insert_sorted (option, sort_by_id);
125 break;
126 case SortType.MANUAL :
127 default:
128 options.append (option);
129 break;
130 }
131
112 return option;132 return option;
113 }133 }
134
135 private static int sort_by_display_name (FilterOption f1, FilterOption f2)
136 {
137 return f1.display_name.collate (f2.display_name);
138 }
139
140 private static int sort_by_id (FilterOption f1, FilterOption f2)
141 {
142 return f1.id.collate (f2.id);
143 }
114144
115 public FilterOption? get_option (string id)145 public FilterOption? get_option (string id)
116 {146 {
117147
=== modified file 'test/vala/Makefile.am'
--- test/vala/Makefile.am 2011-08-04 09:29:04 +0000
+++ test/vala/Makefile.am 2011-09-12 14:51:24 +0000
@@ -32,6 +32,7 @@
3232
33test_vala_SOURCES = \33test_vala_SOURCES = \
34 test-appinfo-manager.vala \34 test-appinfo-manager.vala \
35 test-filters.vala \
35 test-io.vala \36 test-io.vala \
36 test-launcher.vala \37 test-launcher.vala \
37 test-sound-menu.vala \38 test-sound-menu.vala \
3839
=== added file 'test/vala/test-filters.vala'
--- test/vala/test-filters.vala 1970-01-01 00:00:00 +0000
+++ test/vala/test-filters.vala 2011-09-12 14:51:24 +0000
@@ -0,0 +1,132 @@
1/* -*- Mode: vala; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */
2/*
3 * Copyright (C) 2011 Canonical Ltd
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 *
17 * Authored by Mikkel Kamstrup Erlandsen <mikkel.kamstrup@canonical.com>
18 *
19 */
20using Unity;
21
22namespace Unity.Test
23{
24 public class FilterSuite
25 {
26 public FilterSuite ()
27 {
28 GLib.Test.add_data_func ("/Unit/Filters/OptionsFilter/Empty",
29 FilterSuite.test_options_filter_empty);
30 GLib.Test.add_data_func ("/Unit/Filters/OptionsFilter/SortManual",
31 FilterSuite.test_options_filter_sort_manual);
32 GLib.Test.add_data_func ("/Unit/Filters/OptionsFilter/SortDisplayName",
33 FilterSuite.test_options_filter_sort_display_name);
34 GLib.Test.add_data_func ("/Unit/Filters/OptionsFilter/SortId",
35 FilterSuite.test_options_filter_sort_id);
36 }
37
38 internal static void test_options_filter_empty ()
39 {
40 var filter = new OptionsFilter ();
41 assert (filter.options.length () == 0);
42 }
43
44 private static int find_filter_offset_by_id (OptionsFilter filter, string id)
45 {
46 int i = 0;
47 foreach (var f in filter.options)
48 {
49 if (f.id == id)
50 return i;
51 i++;
52 }
53 return -1;
54 }
55
56 internal static void test_options_filter_sort_manual ()
57 {
58 var filter = new OptionsFilter ();
59 assert (filter.sort_type == OptionsFilter.SortType.MANUAL);
60
61 filter.add_option ("accessories", "Accessories");
62 filter.add_option ("bccessories", "Bccessories");
63 filter.add_option ("xenomorphs", "Xenomorphic Creatures");
64
65 assert (find_filter_offset_by_id (filter, "accessories") == 0);
66 assert (find_filter_offset_by_id (filter, "bccessories") == 1);
67 assert (find_filter_offset_by_id (filter, "xenomorphs") == 2);
68
69 filter.add_option ("aardvaark", "Weird Animal");
70 assert (find_filter_offset_by_id (filter, "accessories") == 0);
71 assert (find_filter_offset_by_id (filter, "bccessories") == 1);
72 assert (find_filter_offset_by_id (filter, "xenomorphs") == 2);
73 assert (find_filter_offset_by_id (filter, "aardvaark") == 3);
74 }
75
76 internal static void test_options_filter_sort_display_name ()
77 {
78 var filter = new OptionsFilter ();
79 filter.sort_type = OptionsFilter.SortType.DISPLAY_NAME;
80 assert (filter.sort_type == OptionsFilter.SortType.DISPLAY_NAME);
81
82 filter.add_option ("accessories", "Accessories");
83 filter.add_option ("bccessories", "Bccessories");
84 filter.add_option ("xenomorphs", "Xenomorphic Creatures");
85
86 assert (find_filter_offset_by_id (filter, "accessories") == 0);
87 assert (find_filter_offset_by_id (filter, "bccessories") == 1);
88 assert (find_filter_offset_by_id (filter, "xenomorphs") == 2);
89
90 filter.add_option ("weirdanimal", "Aardvaark");
91 assert (find_filter_offset_by_id (filter, "weirdanimal") == 0);
92 assert (find_filter_offset_by_id (filter, "accessories") == 1);
93 assert (find_filter_offset_by_id (filter, "bccessories") == 2);
94 assert (find_filter_offset_by_id (filter, "xenomorphs") == 3);
95
96 filter.add_option ("zooanimal", "Zebra");
97 assert (find_filter_offset_by_id (filter, "weirdanimal") == 0);
98 assert (find_filter_offset_by_id (filter, "accessories") == 1);
99 assert (find_filter_offset_by_id (filter, "bccessories") == 2);
100 assert (find_filter_offset_by_id (filter, "xenomorphs") == 3);
101 assert (find_filter_offset_by_id (filter, "zooanimal") == 4);
102 }
103
104 internal static void test_options_filter_sort_id ()
105 {
106 var filter = new OptionsFilter ();
107 filter.sort_type = OptionsFilter.SortType.ID;
108 assert (filter.sort_type == OptionsFilter.SortType.ID);
109
110 filter.add_option ("accessories", "Accessories");
111 filter.add_option ("bccessories", "Bccessories");
112 filter.add_option ("xenomorphs", "Xenomorphic Creatures");
113
114 assert (find_filter_offset_by_id (filter, "accessories") == 0);
115 assert (find_filter_offset_by_id (filter, "bccessories") == 1);
116 assert (find_filter_offset_by_id (filter, "xenomorphs") == 2);
117
118 filter.add_option ("weirdanimal", "Aardvaark");
119 assert (find_filter_offset_by_id (filter, "accessories") == 0);
120 assert (find_filter_offset_by_id (filter, "bccessories") == 1);
121 assert (find_filter_offset_by_id (filter, "weirdanimal") == 2);
122 assert (find_filter_offset_by_id (filter, "xenomorphs") == 3);
123
124 filter.add_option ("zooanimal", "Zebra");
125 assert (find_filter_offset_by_id (filter, "accessories") == 0);
126 assert (find_filter_offset_by_id (filter, "bccessories") == 1);
127 assert (find_filter_offset_by_id (filter, "weirdanimal") == 2);
128 assert (find_filter_offset_by_id (filter, "xenomorphs") == 3);
129 assert (find_filter_offset_by_id (filter, "zooanimal") == 4);
130 }
131 }
132}
0133
=== modified file 'test/vala/test-vala.vala'
--- test/vala/test-vala.vala 2011-09-08 15:10:30 +0000
+++ test/vala/test-vala.vala 2011-09-12 14:51:24 +0000
@@ -27,6 +27,7 @@
27 AppInfoManagerSuite appinfo_manager;27 AppInfoManagerSuite appinfo_manager;
28 LauncherSuite launcher;28 LauncherSuite launcher;
29 SoundMenuSuite sound_menu_test_suite;29 SoundMenuSuite sound_menu_test_suite;
30 FilterSuite filter_suite;
30 31
31 Environment.set_variable ("XDG_DATA_HOME", Config.TESTDIR+"/data", true);32 Environment.set_variable ("XDG_DATA_HOME", Config.TESTDIR+"/data", true);
32 Test.init (ref args);33 Test.init (ref args);
@@ -39,6 +40,9 @@
39 appinfo_manager = new AppInfoManagerSuite ();40 appinfo_manager = new AppInfoManagerSuite ();
40 41
41 launcher = new LauncherSuite ();42 launcher = new LauncherSuite ();
43
44 /* Lens Filters */
45 filter_suite = new FilterSuite ();
4246
43 Test.run ();47 Test.run ();
4448

Subscribers

People subscribed via source and target branches