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 class GenreFilterDialog : Gtk.Dialog {
23 private enum Response {
26 private static const GenreType[] _genre_order = {
27 GenreType.SHORT, GenreType.DRAMA, GenreType.COMEDY, GenreType.DOCUMENTARY,
28 GenreType.ROMANCE, GenreType.ANIMATION, GenreType.ACTION, GenreType.CRIME,
29 GenreType.THRILLER, GenreType.FAMILY, GenreType.ADVENTURE, GenreType.MUSIC,
30 GenreType.HORROR, GenreType.FANTASY, GenreType.WESTERN, GenreType.MYSTERY,
31 GenreType.SCIFI, GenreType.MUSICAL, GenreType.WAR, GenreType.SPORT,
32 GenreType.BIOGRAPHY, GenreType.HISTORY, GenreType.FILMNOIR, GenreType.REALITYTV,
33 GenreType.TALKSHOW, GenreType.GAMESHOW, GenreType.NEWS, GenreType.ADULT
36 private PannableArea pannable;
37 private Gtk.Button button_clear;
38 private ToggleButton[] button_genre;
39 private Genres genres;
41 public GenreFilterDialog (Gtk.Window window) {
42 set_transient_for (window);
43 set_title (_("Filter by genres"));
47 var vbox = new VBox (true, 0);
49 pannable = new PannableArea ();
50 pannable.add_with_viewport (vbox);
52 var content_area = (VBox) get_content_area ();
53 content_area.set_size_request (-1, 5*70);
54 content_area.pack_start (pannable, true, true, 0);
58 button_genre = new ToggleButton[28];
60 for (i = 0; i < 28; i++) {
62 hbox = new HBox (false, 0);
63 vbox.pack_start (hbox, true, true, 0);
65 button_genre[i] = new ToggleButton.with_label (Genres.genre_string (_genre_order[i]));
66 hbox.pack_start (button_genre[i], true, true, 0);
67 Hildon.gtk_widget_set_theme_size (button_genre[i], SizeType.FINGER_HEIGHT);
68 button_genre[i].toggled.connect (on_genre_toggled);
71 button_clear = new Gtk.Button.with_label (_("Clear"));
72 Hildon.gtk_widget_set_theme_size (button_clear, SizeType.FINGER_HEIGHT);
74 add_action_widget (button_clear, Response.CLEAR);
76 add_button(_("Done"), ResponseType.OK);
79 public new int run (MovieFilter filter) {
83 genres = filter.genres;
84 for (i = 0; i < 28; i++) {
85 if ((1 << _genre_order[i]) in genres.field)
86 button_genre[i].set_active (true);
95 for (i = 0; i < 28; i++) {
96 button_genre[i].set_active (false);
101 if (res == ResponseType.OK) {
102 if (filter.genres.field == genres.field)
103 res = ResponseType.CANCEL;
105 filter.genres = genres;
111 void on_genre_toggled (ToggleButton button) {
114 for (i = 0; i < 28; i++) {
115 if (button_genre[i] == button)
118 genres.set_bit (_genre_order[i], button.get_active ());
119 if (genres.field != 0)
120 button_clear.show ();
122 button_clear.hide ();
127 private void update_title () {
128 string s = _("Filter by genres");
130 if (genres.field != 0) {
131 s += " - " + genres.to_string ();