Remove source selection button from movie list menu
[cinaest] / src / movie-list-menu.vala
1 /* This file is part of Cinaest.
2  *
3  * Copyright (C) 2009 Philipp Zabel
4  *
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.
9  *
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.
14  *
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/>.
17  */
18
19 using Gtk;
20 using Hildon;
21
22 public class MovieListMenu : AppMenu {
23         public TreeSortable sortable;
24         public MovieFilter filter;
25         private MovieListWindow movie_list_window;
26         private Hildon.Button filter_year;
27         private Hildon.Button filter_rating;
28         private Hildon.Button filter_genres;
29         private Gtk.Button delete_movies;
30
31         public signal void filter_changed ();
32
33         public MovieListMenu (MovieListWindow window) {
34                 movie_list_window = window;
35         }
36
37         construct {
38                 // Add sort buttons as view menu filters
39                 var sort_by_title = new RadioButton.with_label (null, _("ABC"));
40                 var sort_by_year = new RadioButton.with_label_from_widget (sort_by_title, _("Year"));
41                 var sort_by_rating = new RadioButton.with_label_from_widget (sort_by_title, _("Rating"));
42
43                 // Draw them as toggle buttons, not as radio buttons
44                 sort_by_title.set_mode (false);
45                 sort_by_year.set_mode (false);
46                 sort_by_rating.set_mode (false);
47
48                 // TODO - get this from GConf
49                 sort_by_title.set_active (true);
50
51                 // Connect signals
52                 sort_by_title.toggled.connect (button => {
53                         if (button.get_active ())
54                                 sortable.set_sort_column_id (MovieListStore.Columns.TITLE, Gtk.SortType.ASCENDING);
55                 });
56                 sort_by_year.toggled.connect (button => {
57                         if (button.get_active ())
58                                 sortable.set_sort_column_id (MovieListStore.Columns.YEAR, Gtk.SortType.DESCENDING);
59                 });
60                 sort_by_rating.toggled.connect (button => {
61                         if (button.get_active ())
62                                 sortable.set_sort_column_id (MovieListStore.Columns.RATING, Gtk.SortType.DESCENDING);
63                 });
64
65                 add_filter (sort_by_title);
66                 add_filter (sort_by_year);
67                 add_filter (sort_by_rating);
68
69                 // Add view menu buttons
70                 filter_year = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by year"), _("Off"));
71                 filter_rating = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by rating"), _("Off"));
72                 filter_genres = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by genres"), _("Off"));
73                 delete_movies = new Gtk.Button.with_label (_("Delete movies"));
74                 var settings = new Gtk.Button.with_label (_("Settings"));
75
76                 filter_year.set_style (ButtonStyle.PICKER);
77                 filter_rating.set_style (ButtonStyle.PICKER);
78                 filter_genres.set_style (ButtonStyle.PICKER);
79
80                 // Connect signals
81                 filter_year.clicked.connect (on_filter_year_clicked);
82                 filter_rating.clicked.connect (on_filter_rating_clicked);
83                 filter_genres.clicked.connect (on_filter_genres_clicked);
84                 delete_movies.clicked.connect (() => { movie_list_window.on_delete_movies_clicked (); });
85                 settings.clicked.connect (on_settings_clicked);
86
87                 append (filter_year);
88                 append (filter_rating);
89                 append (filter_genres);
90                 append (delete_movies);
91                 append (settings);
92
93                 show_all ();
94         }
95
96         public MovieSource source {
97                 set {
98                         if (value.get_editable ()) {
99                                 delete_movies.show ();
100                         } else {
101                                 delete_movies.hide ();
102                         }
103                 }
104         }
105
106         public void on_filter_year_clicked () {
107                 var dialog = new PickerDialog (movie_list_window);
108                 dialog.set_title (_("Filter by year"));
109
110                 var year_store = new ListStore (1, typeof (string));
111                 TreeIter iter;
112                 for (int i = 0; i < 128; i++) {
113                         year_store.append (out iter);
114                         year_store.set_value (iter, 0, "%d".printf (1888 + i));
115                 }
116
117                 var selector = new TouchSelector ();
118                 selector.append_text_column (year_store, true);
119                 selector.append_text_column (year_store, true);
120                 if (filter.year_min > 1888 && filter.year_min < 2015) {
121                         selector.set_active (0, filter.year_min - 1888);
122                 } else {
123                         selector.set_active (0, 0);
124                 }
125                 if (filter.year_max > 1888 && filter.year_max < 2015) {
126                         selector.set_active (1, filter.year_max - 1888);
127                 } else {
128                         selector.set_active (1, 127);
129                 }
130                 dialog.set_selector (selector);
131
132                 var res = dialog.run ();
133                 if (res == ResponseType.OK) {
134                         filter.year_min = 1888 + selector.get_active (0);
135                         if (filter.year_min <= 1888)
136                                 filter.year_min = 0;
137                         filter.year_max = 1888 + selector.get_active (1);
138                         if (filter.year_max >= 2015)
139                                 filter.year_max = 0;
140
141                         if (filter.year_min == 0 && filter.year_max == 0)
142                                 filter_year.set_value (_("Off"));
143                         else if (filter.year_min == 0)
144                                 filter_year.set_value (_("Until %d").printf (filter.year_max));
145                         else if (filter.year_max == 0)
146                                 filter_year.set_value (_("Since %d").printf (filter.year_min));
147                         else
148                                 filter_year.set_value ("%d - %d".printf (filter.year_min, filter.year_max));
149
150                         filter_changed ();
151                 }
152                 dialog.destroy ();
153         }
154
155         public void on_filter_rating_clicked () {
156                 var dialog = new PickerDialog (movie_list_window);
157                 dialog.set_title (_("Filter by rating"));
158
159                 var selector = new TouchSelector.text ();
160                 for (int i = 0; i < 10; i++) {
161                         selector.append_text ("%d.0".printf (9 - i));
162                 }
163                 selector.set_active (0, 9 - (filter.rating_min / 10));
164                 dialog.set_selector (selector);
165
166                 var res = dialog.run ();
167                 if (res == ResponseType.OK) {
168                         filter.rating_min = (9 - selector.get_active (0)) * 10;
169
170                         if (filter.rating_min == 0)
171                                 filter_rating.set_value (_("Off"));
172                         else
173                                 filter_rating.set_value (_("At least %d.0").printf (filter.rating_min / 10));
174
175                         filter_changed ();
176                 }
177                 dialog.destroy ();
178         }
179
180         public void on_filter_genres_clicked () {
181                 var dialog = new GenreFilterDialog (movie_list_window);
182                 string s;
183
184                 var res = dialog.run (filter);
185
186                 if (res == ResponseType.OK) {
187                         s = filter.genres.to_string ();
188                         if (s != null)
189                                 filter_genres.set_value (s);
190                         else
191                                 filter_genres.set_value (_("Off"));
192
193                         filter_changed ();
194                 }
195         }
196
197         public void on_settings_clicked (Gtk.Button button) {
198                 var dialog = new SettingsDialog (movie_list_window);
199
200                 dialog.run ();
201         }
202 }