From e52b1d810e2509667b38f0d1b7bf8f217deedcac Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Mon, 9 Nov 2009 18:55:24 +0100 Subject: [PATCH] Movie list: add dialogs to filter by year and by rating Also adds a filter-changed signal and connects it to start_search in the movie list window. --- src/movie-list-menu.vala | 87 ++++++++++++++++++++++++++++++++++++++++++++ src/movie-list-window.vala | 1 + 2 files changed, 88 insertions(+) diff --git a/src/movie-list-menu.vala b/src/movie-list-menu.vala index 94fc795..1f0d6f1 100644 --- a/src/movie-list-menu.vala +++ b/src/movie-list-menu.vala @@ -22,9 +22,13 @@ using Hildon; public class MovieListMenu : AppMenu { public TreeSortable sortable; private MovieListWindow movie_list_window; + private Hildon.Button filter_year; + private Hildon.Button filter_rating; private Hildon.Button select_source; private Gtk.Button delete_movies; + public signal void filter_changed (); + public MovieListMenu (MovieListWindow window) { movie_list_window = window; } @@ -62,17 +66,25 @@ public class MovieListMenu : AppMenu { add_filter (sort_by_rating); // Add view menu buttons + 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")); select_source = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Source"), _("None")); delete_movies = new Gtk.Button.with_label (_("Delete movies")); var settings = new Gtk.Button.with_label (_("Settings")); + filter_year.set_style (ButtonStyle.PICKER); + filter_rating.set_style (ButtonStyle.PICKER); select_source.set_style (ButtonStyle.PICKER); // Connect signals + filter_year.clicked.connect (on_filter_year_clicked); + filter_rating.clicked.connect (on_filter_rating_clicked); select_source.clicked.connect (on_select_source_clicked); delete_movies.clicked.connect (() => { movie_list_window.on_delete_movies_clicked (); }); settings.clicked.connect (on_settings_clicked); + append (filter_year); + append (filter_rating); append (select_source); append (delete_movies); append (settings); @@ -80,6 +92,7 @@ public class MovieListMenu : AppMenu { show_all (); } + public MovieSource source { set { select_source.value = value.get_name (); @@ -91,6 +104,80 @@ public class MovieListMenu : AppMenu { } } + 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); + } + 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 + 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_select_source_clicked (Gtk.Button button) { Hildon.Button select_source = (Hildon.Button) button; var dialog = new SourceDialog (movie_list_window); diff --git a/src/movie-list-window.vala b/src/movie-list-window.vala index c77cb60..12339dd 100644 --- a/src/movie-list-window.vala +++ b/src/movie-list-window.vala @@ -74,6 +74,7 @@ public class MovieListWindow : StackableWindow { set_edit_toolbar (edit_toolbar); // Connect signals + menu.filter_changed.connect (() => { start_search (); }); edit_toolbar.button_clicked.connect (on_delete_button_clicked); edit_toolbar.arrow_clicked.connect (leave_edit_mode); search_field.changed.connect (on_search_field_changed); -- 1.7.9.5