Movie list window: use gettext plural forms
[cinaest] / src / movie-list-view.vala
index d92a535..b848884 100644 (file)
@@ -30,6 +30,8 @@ public class MovieListView : PannableArea {
        private CellRendererText rating_renderer;
        private CellRendererText date_renderer;
        private MoviePoster.Factory poster_factory;
+       private int last_a = -1;
+       private int last_b = -1;
 
        private bool poster_mode_;
        public bool poster_mode {
@@ -39,12 +41,27 @@ public class MovieListView : PannableArea {
                set {
                        if (value & !poster_mode_) {
                                remove (tree);
+                               tree.set_model (null);
+                               icons.set_model (store);
+                               store.view = (Widget) icons;
                                add (icons);
                        } else if (!value & poster_mode_) {
                                remove (icons);
+                               icons.set_model (null);
+                               tree.set_model (store);
+                               store.view = (Widget) tree;
                                add (tree);
                        }
-                       poster_mode_ = value;
+                       if (value != poster_mode_) {
+                               poster_mode_ = value;
+                               last_a = -1;
+                               last_b = -1;
+
+                               // FIXME - just calling on_adjustment_value_changed () here doesn't work
+                               // because icons.get_visible_range () returns wrong paths.
+                               check_posters (0, 10);
+                               jump_to (0, 0);
+                       }
                }
        }
 
@@ -60,7 +77,20 @@ public class MovieListView : PannableArea {
                var selection = tree.get_selection ();
                selection.set_mode (SelectionMode.SINGLE);
 
-               // Title column with poster
+               // Poster column
+               var poster_column = new TreeViewColumn ();
+               poster_column.set_title (_("Poster"));
+
+               // Add poster icon to column
+               var pixbuf_renderer = new CellRendererPixbuf ();
+               pixbuf_renderer.width = Poster.ICON_WIDTH + Hildon.MARGIN_DEFAULT;
+               pixbuf_renderer.xalign = 0.0f;
+               poster_column.pack_start (pixbuf_renderer, false);
+               poster_column.add_attribute (pixbuf_renderer, "pixbuf", MovieListStore.Columns.ICON);
+
+               tree.append_column (poster_column);
+
+               // Title column with secondary text
                var title_column = new TreeViewColumn ();
                title_column.set_title (_("Movie"));
                title_column.set_sort_column_id (MovieListStore.Columns.TITLE);
@@ -68,13 +98,6 @@ public class MovieListView : PannableArea {
                title_column.set_sizing (TreeViewColumnSizing.AUTOSIZE);
                title_column.set_expand (true);
 
-               // Add poster icon to column
-               var pixbuf_renderer = new CellRendererPixbuf ();
-               pixbuf_renderer.width = 64;
-               pixbuf_renderer.xalign = 0.0f;
-               title_column.pack_start (pixbuf_renderer, false);
-               title_column.add_attribute (pixbuf_renderer, "pixbuf", MovieListStore.Columns.ICON);
-
                // Add text to column
                var vbox_renderer = new CellRendererVBox ();
 
@@ -138,7 +161,7 @@ public class MovieListView : PannableArea {
        }
 
        private Gtk.IconView create_iconview () {
-               var iconview = (Gtk.IconView) Hildon.gtk_icon_view_new_with_model (Hildon.UIMode.NORMAL, store);
+               var iconview = (Gtk.IconView) Hildon.gtk_icon_view_new (Hildon.UIMode.NORMAL);
                iconview.set_column_spacing (0);
                iconview.set_pixbuf_column (MovieListStore.Columns.POSTER);
                iconview.margin = 0;
@@ -163,6 +186,7 @@ public class MovieListView : PannableArea {
                }
 
                tree = create_treeview (window, show_date);
+               store.view = (Widget) tree;
 
                icons = create_iconview ();
 
@@ -173,6 +197,7 @@ public class MovieListView : PannableArea {
                tree.row_activated.connect (on_row_activated);
                icons.item_activated.connect (on_item_activated);
                store.row_changed.connect (on_row_changed);
+               store.row_inserted.connect (on_row_changed);
                store.search_finished.connect (on_search_finished);
        }
 
@@ -246,8 +271,6 @@ public class MovieListView : PannableArea {
 
        // TODO: after scrolling down 80% of the list, load more
        //       results if available.
-       int last_a = 0;
-       int last_b = 0;
        private void on_adjustment_value_changed () {
                if (more_movies_available) {
                        var vadj = get_vadjustment ();
@@ -291,23 +314,33 @@ public class MovieListView : PannableArea {
                for (int i = a; i <= b; i++) {
                        var path = new TreePath.from_indices (i);
                        TreeIter iter;
-                       if (store.get_iter (out iter, path)) {
-                               Movie movie;
-                               store.get (iter, MovieListStore.Columns.MOVIE, out movie);
-                               if (movie != null) {
-                                       if (poster_mode_) {
-                                               if (movie.poster == null || movie.poster.small == null) try {
-                                                       poster_factory.queue_thumbnail (movie, Poster.SMALL_WIDTH, Poster.SMALL_HEIGHT, false, receive_poster_small);
-                                               } catch (Error e) {
-                                                       warning ("Failed to queue poster request: %s\n", e.message);
-                                               }
-                                       } else {
-                                               if (movie.poster == null || movie.poster.icon == null) try {
-                                                       poster_factory.queue_thumbnail (movie, Poster.ICON_WIDTH, Poster.ICON_HEIGHT, false, receive_poster_icon);
-                                               } catch (Error e) {
-                                                       warning ("Failed to queue poster request: %s\n", e.message);
-                                               }
-                                       }
+                       if (!store.get_iter (out iter, path))
+                               continue;
+
+                       Movie movie;
+                       store.get (iter, MovieListStore.Columns.MOVIE, out movie);
+                       if (movie == null)
+                               continue;
+
+                       if (poster_mode_) {
+                               if (movie.poster == null || movie.poster.small == null) try {
+                                       poster_factory.queue (movie,
+                                                             Poster.SMALL_WIDTH,
+                                                             Poster.SMALL_HEIGHT,
+                                                             true,
+                                                             receive_poster_small);
+                               } catch (Error e) {
+                                       warning ("Failed to queue poster request: %s\n", e.message);
+                               }
+                       } else {
+                               if (movie.poster == null || movie.poster.icon == null) try {
+                                       poster_factory.queue (movie,
+                                                             Poster.ICON_WIDTH,
+                                                             Poster.ICON_HEIGHT,
+                                                             true,
+                                                             receive_poster_icon);
+                               } catch (Error e) {
+                                       warning ("Failed to queue poster request: %s\n", e.message);
                                }
                        }
                }
@@ -357,6 +390,7 @@ public class MovieListView : PannableArea {
                else
                        poster = new Poster ();
                poster.small = pixbuf;
+               // Notify store of the poster change
                movie.poster = poster;
        }
 
@@ -367,6 +401,7 @@ public class MovieListView : PannableArea {
                else
                        poster = new Poster ();
                poster.icon = pixbuf;
+               // Notify store of the poster change
                movie.poster = poster;
        }