Movie list window / menu: add edit mode to delete multiple movies
[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         private MovieListWindow movie_list_window;
25         private Hildon.Button select_source;
26         private Gtk.Button delete_movies;
27
28         public MovieListMenu (MovieListWindow window) {
29                 movie_list_window = window;
30         }
31
32         construct {
33                 // Add sort buttons as view menu filters
34                 var sort_by_title = new RadioButton.with_label (null, _("ABC"));
35                 var sort_by_year = new RadioButton.with_label_from_widget (sort_by_title, _("Year"));
36                 var sort_by_rating = new RadioButton.with_label_from_widget (sort_by_title, _("Rating"));
37
38                 // Draw them as toggle buttons, not as radio buttons
39                 sort_by_title.set_mode (false);
40                 sort_by_year.set_mode (false);
41                 sort_by_rating.set_mode (false);
42
43                 // TODO - get this from GConf
44                 sort_by_title.set_active (true);
45
46                 // Connect signals
47                 sort_by_title.toggled.connect (button => {
48                         if (button.get_active ())
49                                 sortable.set_sort_column_id (MovieListStore.Columns.TITLE, Gtk.SortType.ASCENDING);
50                 });
51                 sort_by_year.toggled.connect (button => {
52                         if (button.get_active ())
53                                 sortable.set_sort_column_id (MovieListStore.Columns.YEAR, Gtk.SortType.DESCENDING);
54                 });
55                 sort_by_rating.toggled.connect (button => {
56                         if (button.get_active ())
57                                 sortable.set_sort_column_id (MovieListStore.Columns.RATING, Gtk.SortType.DESCENDING);
58                 });
59
60                 add_filter (sort_by_title);
61                 add_filter (sort_by_year);
62                 add_filter (sort_by_rating);
63
64                 // Add view menu buttons
65                 select_source = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Source"), _("None"));
66                 delete_movies = new Gtk.Button.with_label (_("Delete movies"));
67                 var settings = new Gtk.Button.with_label (_("Settings"));
68
69                 select_source.set_style (ButtonStyle.PICKER);
70
71                 // Connect signals
72                 select_source.clicked.connect (on_select_source_clicked);
73                 delete_movies.clicked.connect (() => { movie_list_window.on_delete_movies_clicked (); });
74                 settings.clicked.connect (on_settings_clicked);
75
76                 append (select_source);
77                 append (delete_movies);
78                 append (settings);
79
80                 show_all ();
81         }
82
83         public MovieSource source {
84                 set {
85                         select_source.value = value.get_name ();
86                         if (value.get_editable ()) {
87                                 delete_movies.show ();
88                         } else {
89                                 delete_movies.hide ();
90                         }
91                 }
92         }
93
94         public void on_select_source_clicked (Gtk.Button button) {
95                 Hildon.Button select_source = (Hildon.Button) button;
96                 var dialog = new SourceDialog (movie_list_window);
97
98                 var source = movie_list_window.source;
99                 dialog.run (ref source);
100                 movie_list_window.source = source;
101
102                 select_source.value = source.get_name ();
103         }
104
105         public void on_settings_clicked (Gtk.Button button) {
106                 var dialog = new SettingsDialog (movie_list_window);
107
108                 dialog.run ();
109         }
110 }