1 /* This file is part of Cinaest.
3 * Copyright (C) 2009 Philipp Zabel
5 * Cinaest is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * Cinaest is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with Cinaest. If not, see <http://www.gnu.org/licenses/>.
22 public class MovieListMenu : AppMenu {
23 public TreeSortable sortable;
24 private MovieListWindow movie_list_window;
25 private Hildon.Button filter_year;
26 private Hildon.Button filter_rating;
27 private Hildon.Button select_source;
28 private Gtk.Button delete_movies;
30 public signal void filter_changed ();
32 public MovieListMenu (MovieListWindow window) {
33 movie_list_window = window;
37 // Add sort buttons as view menu filters
38 var sort_by_title = new RadioButton.with_label (null, _("ABC"));
39 var sort_by_year = new RadioButton.with_label_from_widget (sort_by_title, _("Year"));
40 var sort_by_rating = new RadioButton.with_label_from_widget (sort_by_title, _("Rating"));
42 // Draw them as toggle buttons, not as radio buttons
43 sort_by_title.set_mode (false);
44 sort_by_year.set_mode (false);
45 sort_by_rating.set_mode (false);
47 // TODO - get this from GConf
48 sort_by_title.set_active (true);
51 sort_by_title.toggled.connect (button => {
52 if (button.get_active ())
53 sortable.set_sort_column_id (MovieListStore.Columns.TITLE, Gtk.SortType.ASCENDING);
55 sort_by_year.toggled.connect (button => {
56 if (button.get_active ())
57 sortable.set_sort_column_id (MovieListStore.Columns.YEAR, Gtk.SortType.DESCENDING);
59 sort_by_rating.toggled.connect (button => {
60 if (button.get_active ())
61 sortable.set_sort_column_id (MovieListStore.Columns.RATING, Gtk.SortType.DESCENDING);
64 add_filter (sort_by_title);
65 add_filter (sort_by_year);
66 add_filter (sort_by_rating);
68 // Add view menu buttons
69 filter_year = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by year"), _("Off"));
70 filter_rating = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by rating"), _("Off"));
71 select_source = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Source"), _("None"));
72 delete_movies = new Gtk.Button.with_label (_("Delete movies"));
73 var settings = new Gtk.Button.with_label (_("Settings"));
75 filter_year.set_style (ButtonStyle.PICKER);
76 filter_rating.set_style (ButtonStyle.PICKER);
77 select_source.set_style (ButtonStyle.PICKER);
80 filter_year.clicked.connect (on_filter_year_clicked);
81 filter_rating.clicked.connect (on_filter_rating_clicked);
82 select_source.clicked.connect (on_select_source_clicked);
83 delete_movies.clicked.connect (() => { movie_list_window.on_delete_movies_clicked (); });
84 settings.clicked.connect (on_settings_clicked);
87 append (filter_rating);
88 append (select_source);
89 append (delete_movies);
96 public MovieSource source {
98 select_source.value = value.get_name ();
99 if (value.get_editable ()) {
100 delete_movies.show ();
102 delete_movies.hide ();
107 public void on_filter_year_clicked () {
108 var dialog = new PickerDialog (movie_list_window);
109 dialog.set_title (_("Filter by year"));
111 var year_store = new ListStore (1, typeof (string));
113 for (int i = 0; i < 128; i++) {
114 year_store.append (out iter);
115 year_store.set_value (iter, 0, "%d".printf (1888 + i));
118 var selector = new TouchSelector ();
119 selector.append_text_column (year_store, true);
120 selector.append_text_column (year_store, true);
121 if (filter.year_min > 1888 && filter.year_min < 2015) {
122 selector.set_active (0, filter.year_min - 1888);
124 selector.set_active (0, 0);
126 if (filter.year_max > 1888 && filter.year_max < 2015) {
127 selector.set_active (1, filter.year_max - 1888);
129 selector.set_active (1, 127);
131 dialog.set_selector (selector);
133 var res = dialog.run ();
134 if (res == ResponseType.OK) {
135 filter.year_min = 1888 + selector.get_active (0);
136 if (filter.year_min <= 1888)
138 filter.year_max = 1888 + selector.get_active (1);
139 if (filter.year_max >= 2015)
142 if (filter.year_min == 0 && filter.year_max == 0)
143 filter_year.set_value (_("Off"));
144 else if (filter.year_min == 0)
145 filter_year.set_value (_("Until %d").printf (filter.year_max));
146 else if (filter.year_max == 0)
147 filter_year.set_value (_("Since %d").printf (filter.year_min));
149 filter_year.set_value ("%d - %d".printf (filter.year_min, filter.year_max));
156 public void on_filter_rating_clicked () {
157 var dialog = new PickerDialog (movie_list_window);
158 dialog.set_title (_("Filter by rating"));
160 var selector = new TouchSelector.text ();
161 for (int i = 0; i < 10; i++) {
162 selector.append_text ("%d.0".printf (9 - i));
164 selector.set_active (0, 9 - (filter.rating_min / 10));
165 dialog.set_selector (selector);
167 var res = dialog.run ();
168 if (res == ResponseType.OK) {
169 filter.rating_min = (9 - selector.get_active (0)) * 10;
171 if (filter.rating_min == 0)
172 filter_rating.set_value (_("Off"));
174 filter_rating.set_value (_("At least %d.0").printf (filter.rating_min / 10));
181 public void on_select_source_clicked (Gtk.Button button) {
182 Hildon.Button select_source = (Hildon.Button) button;
183 var dialog = new SourceDialog (movie_list_window);
185 var source = movie_list_window.source;
186 dialog.run (ref source);
187 movie_list_window.source = source;
189 select_source.value = source.get_name ();
192 public void on_settings_clicked (Gtk.Button button) {
193 var dialog = new SettingsDialog (movie_list_window);