X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmovie-list-view.vala;h=87e67c1d1b8738b7a190f78a2ceb3c47813edb26;hb=a0bcf1e4d6b7f4cbba2cd7d16be74c5499194f01;hp=60163ae0080bb7a41772e6516e1a1b2af9d3b87a;hpb=f2c77c59477899bed3a0866deed3620463694f2a;p=cinaest diff --git a/src/movie-list-view.vala b/src/movie-list-view.vala index 60163ae..87e67c1 100644 --- a/src/movie-list-view.vala +++ b/src/movie-list-view.vala @@ -22,21 +22,26 @@ using Hildon; public class MovieListView : PannableArea { public MovieListStore store; TreeView tree; - public TreeSortable sorted_store; + + private bool more_movies_available; + private CellRendererText title_renderer; + private CellRendererText secondary_renderer; + private CellRendererText rating_renderer; + private CellRendererText date_renderer; public signal void movie_activated (Movie movie); - construct { + public MovieListView (Gtk.Window window, bool show_date = false) { store = new MovieListStore (); - // Add filter wrapper - var filtered_store = new TreeModelFilter (store, null); - - // Add sort wrapper - sorted_store = new TreeModelSort.with_model (filtered_store); + Gdk.Color color; + window.ensure_style (); + if (window.style.lookup_color ("SecondaryTextColor", out color)) { + store.year_markup = "(%%d)".printf (color.to_string ()); + } // Tree View - tree = (TreeView) Hildon.gtk_tree_view_new_with_model (UIMode.NORMAL, sorted_store); + tree = (TreeView) Hildon.gtk_tree_view_new_with_model (UIMode.NORMAL, store); tree.set_headers_visible (false); add (tree); @@ -58,76 +63,76 @@ public class MovieListView : PannableArea { // 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.POSTER); // Add text to column var vbox_renderer = new CellRendererVBox (); - var renderer = new CellRendererText (); - renderer.set ("ellipsize", Pango.EllipsizeMode.END); - title_column.add_attribute (renderer, "text", MovieListStore.Columns.TITLE); + title_renderer = new CellRendererText (); + title_renderer.yalign = 1.0f; + title_renderer.ellipsize = Pango.EllipsizeMode.END; - vbox_renderer.append (renderer, true); - vbox_renderer.set_data ("title", renderer); + vbox_renderer.append (title_renderer, true); // Add secondary text to column (Genres, Director, etc.) - renderer = new CellRendererText (); - renderer.set ("ellipsize", Pango.EllipsizeMode.END); - - Pango.AttrList attr_list = new Pango.AttrList (); - var style = Gtk.rc_get_style_by_paths (this.get_settings (), "SmallSystemFont", null, typeof (void)); - if (style != null) { - var attr_font_desc = new Pango.AttrFontDesc (style.font_desc.copy ()); - attr_list.insert ((owned) attr_font_desc); - } else { - Pango.Attribute attr_font_scale = Pango.attr_scale_new (Pango.Scale.SMALL); - attr_list.insert ((owned) attr_font_scale); - } - Gdk.Color color; - if (!style.lookup_color ("SecondaryTextColor", out color)) { - Gdk.Color.parse ("grey", out color); - } - Pango.Attribute attr_color = Pango.attr_foreground_new (color.red, color.green, color.blue); - attr_list.insert ((owned) attr_color); - renderer.attributes = attr_list; + secondary_renderer = new CellRendererText (); + secondary_renderer.yalign = 0; + secondary_renderer.ellipsize = Pango.EllipsizeMode.END; + secondary_renderer.attributes = get_attributes (window, "SmallSystemFont", "SecondaryTextColor"); - vbox_renderer.append (renderer, true); - vbox_renderer.set_data ("secondary", renderer); + vbox_renderer.append (secondary_renderer, true); title_column.pack_start (vbox_renderer, true); - title_column.set_cell_data_func (vbox_renderer, vbox_data_func); + title_column.set_cell_data_func (vbox_renderer, title_data_func); tree.append_column (title_column); // Sort by title - sorted_store.set_sort_column_id (MovieListStore.Columns.TITLE, SortType.ASCENDING); + store.set_sort_column_id (MovieListStore.Columns.TITLE, SortType.ASCENDING); // Year column - renderer = new CellRendererText (); var year_column = new TreeViewColumn (); - year_column.set_title (_("Rating")); + year_column.set_title (_("Year")); year_column.set_sort_column_id (MovieListStore.Columns.YEAR); year_column.set_reorderable (false); year_column.set_sort_order (SortType.DESCENDING); - year_column.pack_start (renderer, true); - year_column.set_cell_data_func (renderer, year_data_func); tree.append_column (year_column); // Rating column - renderer = new CellRendererText (); var rating_column = new TreeViewColumn (); rating_column.set_title (_("Rating")); rating_column.set_sort_column_id (MovieListStore.Columns.RATING); rating_column.set_reorderable (false); rating_column.set_sort_order (SortType.DESCENDING); - rating_column.pack_start (renderer, true); - rating_column.set_cell_data_func (renderer, rating_data_func); - rating_column.xalign = (float) 1.0; + rating_column.xalign = 1.0f; + + vbox_renderer = new CellRendererVBox (); + + rating_renderer = new CellRendererText (); + rating_renderer.xalign = 1.0f; + if (show_date) + rating_renderer.yalign = 1.0f; + + vbox_renderer.append (rating_renderer, true); + + date_renderer = new CellRendererText (); + date_renderer.yalign = 0; + date_renderer.attributes = get_attributes (window, "SmallSystemFont", "SecondaryTextColor"); + + if (show_date) + vbox_renderer.append (date_renderer, true); + + rating_column.pack_start (vbox_renderer, true); + rating_column.set_cell_data_func (vbox_renderer, rating_data_func); + tree.append_column (rating_column); // Connect signals + get_vadjustment ().value_changed.connect (on_adjustment_value_changed); tree.row_activated.connect (on_row_activated); + store.search_finished.connect (on_search_finished); } public void set_hildon_ui_mode (UIMode mode) { @@ -146,8 +151,35 @@ public class MovieListView : PannableArea { return tree.get_selection (); } - private void on_row_activated (TreeView tree, TreePath path_, TreeViewColumn column) { - TreePath path = path_.copy (); // FIXME - calling model.get_iter with path_ directly causes a C qualifier warning + private Pango.AttrList get_attributes (Gtk.Window window, string font_name, string color_name) { + Pango.AttrList attr_list = new Pango.AttrList (); + var style = Gtk.rc_get_style_by_paths (Gtk.Settings.get_default (), font_name, null, typeof (void)); + if (style != null) { + var attr_font_desc = new Pango.AttrFontDesc (style.font_desc.copy ()); + attr_list.insert ((owned) attr_font_desc); + } + Gdk.Color color; + window.ensure_style (); + if (window.style.lookup_color (color_name, out color)) { + Pango.Attribute attr_color = Pango.attr_foreground_new (color.red, color.green, color.blue); + attr_list.insert ((owned) attr_color); + } + return attr_list; + } + + // TODO: after scrolling down 80% of the list, load more + // results if available. + private void on_adjustment_value_changed () { + if (more_movies_available) { + var vadj = get_vadjustment (); + if (vadj.value > 0.8 * vadj.upper) { + Banner.show_information (this, null, _("More results available - refine search to reduce the dataset")); + more_movies_available = false; + } + } + } + + private void on_row_activated (TreeView tree, TreePath path, TreeViewColumn column) { TreeModel model = tree.model; TreeIter iter; @@ -158,30 +190,35 @@ public class MovieListView : PannableArea { } } - private void vbox_data_func (CellLayout cell_layout, CellRenderer cell, TreeModel model, TreeIter iter) { - Movie movie; - CellRendererText renderer; - - model.get (iter, MovieListStore.Columns.MOVIE, out movie); - - renderer = cell.get_data ("title"); - renderer.text = movie.title; - - renderer = cell.get_data ("secondary"); - renderer.text = movie.secondary; + private void on_search_finished (int movies) { + more_movies_available = (movies > 100); // FIXME } - private void year_data_func (CellLayout cell_layout, CellRenderer cell, TreeModel model, TreeIter iter) { - int year; + private void title_data_func (CellLayout cell_layout, CellRenderer cell, TreeModel model, TreeIter iter) { + Movie movie; + string markup; - model.get (iter, MovieListStore.Columns.YEAR, out year); - ((CellRendererText) cell).text = (year > 0) ? year.to_string () : ""; + model.get (iter, MovieListStore.Columns.MOVIE, out movie, + MovieListStore.Columns.MARKUP, out markup); + title_renderer.markup = markup; + secondary_renderer.text = movie.secondary; } private void rating_data_func (CellLayout cell_layout, CellRenderer cell, TreeModel model, TreeIter iter) { - int rating; + string rating; + Movie movie; - model.get (iter, MovieListStore.Columns.RATING, out rating); - ((CellRendererText) cell).text = (rating > 0) ? "%d.%d".printf (rating / 10, rating % 10) : ""; + model.get (iter, MovieListStore.Columns.RATING, out rating, + MovieListStore.Columns.MOVIE, out movie); + rating_renderer.text = rating; + if (movie.julian_date != 0) { + var date = Date (); + date.set_julian (movie.julian_date); + var s = new char[64]; + date.strftime (s, "%x"); + date_renderer.text = (string) s; + } else { + date_renderer.text = ""; + } } }