X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmovie-list-menu.vala;h=69d8add9c2200a143e4fa9e61d5c9405f904ac6b;hb=c0ba11e59b044376878656c338ff3242ee7506bb;hp=2b7713f7f8fd6aaae2c0477130b17a07307bf7bb;hpb=9e551feab739af3346c4578a034d71984aa7a84e;p=cinaest diff --git a/src/movie-list-menu.vala b/src/movie-list-menu.vala index 2b7713f..69d8add 100644 --- a/src/movie-list-menu.vala +++ b/src/movie-list-menu.vala @@ -20,9 +20,17 @@ using Gtk; using Hildon; public class MovieListMenu : AppMenu { - public TreeSortable sortable; - private MovieListWindow movie_list_window; - private Hildon.Button select_source; + public MovieListStore store; + public MovieFilter filter; + private weak MovieListWindow movie_list_window; + private Hildon.Button filter_year; + private Hildon.Button filter_rating; + private Hildon.Button filter_genres; + private Gtk.Button poster_view; + private Gtk.Button delete_movies; + private Gtk.Button import_movies; + + public signal void filter_changed (); public MovieListMenu (MovieListWindow window) { movie_list_window = window; @@ -45,15 +53,15 @@ public class MovieListMenu : AppMenu { // Connect signals sort_by_title.toggled.connect (button => { if (button.get_active ()) - sortable.set_sort_column_id (MovieListStore.Columns.TITLE, Gtk.SortType.ASCENDING); + store.set_sort_column_id (MovieListStore.Columns.TITLE, Gtk.SortType.ASCENDING); }); sort_by_year.toggled.connect (button => { if (button.get_active ()) - sortable.set_sort_column_id (MovieListStore.Columns.YEAR, Gtk.SortType.DESCENDING); + store.set_sort_column_id (MovieListStore.Columns.YEAR, Gtk.SortType.DESCENDING); }); sort_by_rating.toggled.connect (button => { if (button.get_active ()) - sortable.set_sort_column_id (MovieListStore.Columns.RATING, Gtk.SortType.DESCENDING); + store.set_sort_column_id (MovieListStore.Columns.RATING, Gtk.SortType.DESCENDING); }); add_filter (sort_by_title); @@ -61,30 +69,170 @@ public class MovieListMenu : AppMenu { add_filter (sort_by_rating); // Add view menu buttons - select_source = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Source"), _("None")); - - select_source.set_style (ButtonStyle.PICKER); + filter_year = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by year"), _("Off")); + filter_rating = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by rating"), _("Off")); + filter_genres = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Filter by genres"), _("Off")); + poster_view = new Gtk.Button.with_label (_("Poster view")); + delete_movies = new Gtk.Button.with_label (_("Delete movies")); + import_movies = new Gtk.Button.with_label (_("Import movies")); + var settings = new Gtk.Button.with_label (_("Settings")); + + filter_year.set_style (ButtonStyle.PICKER); + filter_rating.set_style (ButtonStyle.PICKER); + filter_genres.set_style (ButtonStyle.PICKER); // Connect signals - select_source.clicked.connect (on_select_source_clicked); - - append (select_source); + filter_year.clicked.connect (on_filter_year_clicked); + filter_rating.clicked.connect (on_filter_rating_clicked); + filter_genres.clicked.connect (on_filter_genres_clicked); + poster_view.clicked.connect (on_poster_view_clicked); + delete_movies.clicked.connect (() => { movie_list_window.on_delete_movies_clicked (); }); + import_movies.clicked.connect (on_import_movies_clicked); + settings.clicked.connect (on_settings_clicked); + + append (filter_year); + append (filter_rating); + append (filter_genres); + append (poster_view); + append (import_movies); + append (delete_movies); + append (settings); show_all (); } public MovieSource source { - set { select_source.value = value.get_name (); } + set { + if (SourceFlags.EDITABLE in value.get_flags ()) { + delete_movies.show (); + import_movies.show (); + } else { + delete_movies.hide (); + import_movies.hide (); + } + } + } + + public void on_filter_year_clicked () { + var dialog = new PickerDialog (movie_list_window); + dialog.set_title (_("Filter by year")); + + var year_store = new ListStore (1, typeof (string)); + TreeIter iter; + for (int i = 0; i < 128; i++) { + year_store.append (out iter); + year_store.set_value (iter, 0, "%d".printf (1888 + i)); + } + + var selector = new TouchSelector (); + selector.append_text_column (year_store, true); + selector.append_text_column (year_store, true); + if (filter.year_min > 1888 && filter.year_min < 2015) { + selector.set_active (0, filter.year_min - 1888); + } else { + selector.set_active (0, 0); + } + if (filter.year_max > 1888 && filter.year_max < 2015) { + selector.set_active (1, filter.year_max - 1888); + } else { + selector.set_active (1, 127); + } + selector.center_on_selected (); + dialog.set_selector (selector); + + var res = dialog.run (); + if (res == ResponseType.OK) { + filter.year_min = 1888 + selector.get_active (0); + if (filter.year_min <= 1888) + filter.year_min = 0; + filter.year_max = 1888 + selector.get_active (1); + if (filter.year_max >= 2015) + filter.year_max = 0; + + if (filter.year_min == 0 && filter.year_max == 0) + filter_year.set_value (_("Off")); + else if (filter.year_min == 0) + filter_year.set_value (_("Until %d").printf (filter.year_max)); + else if (filter.year_max == 0) + filter_year.set_value (_("Since %d").printf (filter.year_min)); + else if (filter.year_min == filter.year_max) + filter_year.set_value ("%d".printf (filter.year_min)); + else + filter_year.set_value ("%d - %d".printf (filter.year_min, filter.year_max)); + + filter_changed (); + } + dialog.destroy (); + } + + public void on_filter_rating_clicked () { + var dialog = new PickerDialog (movie_list_window); + dialog.set_title (_("Filter by rating")); + + var selector = new TouchSelector.text (); + for (int i = 0; i < 10; i++) { + selector.append_text ("%d.0".printf (9 - i)); + } + selector.set_active (0, 9 - (filter.rating_min / 10)); + dialog.set_selector (selector); + + var res = dialog.run (); + if (res == ResponseType.OK) { + filter.rating_min = (9 - selector.get_active (0)) * 10; + + if (filter.rating_min == 0) + filter_rating.set_value (_("Off")); + else + filter_rating.set_value (_("At least %d.0").printf (filter.rating_min / 10)); + + filter_changed (); + } + dialog.destroy (); + } + + public void on_filter_genres_clicked () { + var dialog = new GenreFilterDialog (movie_list_window); + string s; + + var res = dialog.run (filter); + + if (res == ResponseType.OK) { + s = filter.genres.to_string (); + if (s != null) + filter_genres.set_value (s); + else + filter_genres.set_value (_("Off")); + + filter_changed (); + } } - public void on_select_source_clicked (Gtk.Button button) { - Hildon.Button select_source = (Hildon.Button) button; - var dialog = new SourceDialog (movie_list_window); + public void on_poster_view_clicked (Gtk.Button button) { + var poster_mode = movie_list_window.get_movie_list_view ().poster_mode; + movie_list_window.get_movie_list_view ().poster_mode = !poster_mode; + poster_view.set_label (poster_mode ? _("Poster view") : _("List view")); + } + + public void on_import_movies_clicked (Gtk.Button button) { + var dialog = new Gtk.Dialog (); + dialog.set_transient_for (movie_list_window); + dialog.set_title (_("Import movies")); +/* + // import movies or ratings from some source + for (var Plugin in CinaestProgram.plugins) { + if (plugin.can_export_ratings ()) { + exporters++; + } + } + if (exporters > 1) + exporter = run_exporter_selection_dialog +*/ + dialog.run (); + } - var source = movie_list_window.source; - dialog.run (ref source); - movie_list_window.source = source; + public void on_settings_clicked (Gtk.Button button) { + var dialog = new SettingsDialog (movie_list_window); - select_source.value = source.get_name (); + dialog.run (); } }