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 {
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);
+ }
}
}
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);
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 ();
}
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;
}
tree = create_treeview (window, show_date);
+ store.view = (Widget) tree;
icons = create_iconview ();
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);
}
// 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 ();
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);
}
}
}
else
poster = new Poster ();
poster.small = pixbuf;
+ // Notify store of the poster change
movie.poster = poster;
}
else
poster = new Poster ();
poster.icon = pixbuf;
+ // Notify store of the poster change
movie.poster = poster;
}