Movie list menu: hold a reference to the store, not any sortable
[cinaest] / src / movie-list-menu.vala
index 3e16769..69d8add 100644 (file)
@@ -20,14 +20,15 @@ using Gtk;
 using Hildon;
 
 public class MovieListMenu : AppMenu {
-       public TreeSortable sortable;
+       public MovieListStore store;
        public MovieFilter filter;
-       private MovieListWindow movie_list_window;
+       private weak MovieListWindow movie_list_window;
        private Hildon.Button filter_year;
        private Hildon.Button filter_rating;
        private Hildon.Button filter_genres;
-       private Hildon.Button select_source;
+       private Gtk.Button poster_view;
        private Gtk.Button delete_movies;
+       private Gtk.Button import_movies;
 
        public signal void filter_changed ();
 
@@ -52,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);
@@ -71,27 +72,29 @@ public class MovieListMenu : AppMenu {
                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"));
-               select_source = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Source"), _("None"));
+               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);
-               select_source.set_style (ButtonStyle.PICKER);
 
                // Connect signals
                filter_year.clicked.connect (on_filter_year_clicked);
                filter_rating.clicked.connect (on_filter_rating_clicked);
                filter_genres.clicked.connect (on_filter_genres_clicked);
-               select_source.clicked.connect (on_select_source_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 (select_source);
+               append (poster_view);
+               append (import_movies);
                append (delete_movies);
                append (settings);
 
@@ -100,11 +103,12 @@ public class MovieListMenu : AppMenu {
 
        public MovieSource source {
                set {
-                       select_source.value = value.get_name ();
-                       if (value.get_editable ()) {
+                       if (SourceFlags.EDITABLE in value.get_flags ()) {
                                delete_movies.show ();
+                               import_movies.show ();
                        } else {
                                delete_movies.hide ();
+                               import_movies.hide ();
                        }
                }
        }
@@ -133,6 +137,7 @@ public class MovieListMenu : AppMenu {
                } else {
                        selector.set_active (1, 127);
                }
+               selector.center_on_selected ();
                dialog.set_selector (selector);
 
                var res = dialog.run ();
@@ -150,6 +155,8 @@ public class MovieListMenu : AppMenu {
                                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));
 
@@ -200,15 +207,27 @@ public class MovieListMenu : AppMenu {
                }
        }
 
-       public void on_select_source_clicked (Gtk.Button button) {
-               Hildon.Button select_source = (Hildon.Button) button;
-               var dialog = new SourceDialog (movie_list_window);
-
-               var source = movie_list_window.source;
-               dialog.run (ref source);
-               movie_list_window.source = source;
+       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"));
+       }
 
-               select_source.value = source.get_name ();
+       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 ();
        }
 
        public void on_settings_clicked (Gtk.Button button) {