RATING,
POSTER,
MOVIE,
+ MARKUP,
N_COLUMNS
}
private GLib.Type[] types = {
typeof (string),
typeof (int),
- typeof (int),
+ typeof (string),
typeof (Gdk.Pixbuf),
- typeof (Movie)
+ typeof (Movie),
+ typeof (string)
};
private GLib.Type[] base_type = {
- typeof (Movie)
+ typeof (Movie),
+ typeof (string), // Markup: "Title (Year)"
+ typeof (string) // Rating
};
private Gdk.Pixbuf no_poster;
private MoviePoster.Factory poster_factory;
private MovieFilter filter;
public bool update_running { get; set; }
+ public string year_markup = "<span size=\"small\">[%d]</span>";
private Cancellable cancellable;
public signal void search_finished (int movies);
public void add (Movie movie, out TreeIter iter) {
TreeIter iter1;
+ var markup = new StringBuilder ();
+ markup.append (Markup.escape_text (movie.title));
+ if (movie.year > 0) {
+ markup.append (" ");
+ markup.append_printf (year_markup, movie.year);
+ }
append (out iter1);
- base.set (iter1, 0, movie);
+ base.set (iter1, 0, movie,
+ 1, markup.str,
+ 2, (movie.rating >= 0) ? "%d.%d".printf (movie.rating / 10, movie.rating % 10) : null);
movie.notify.connect (this.on_movie_changed);
break;
case Columns.RATING:
- if (movie != null) {
- value.set_int (movie.rating);
- } else {
- value.set_int (-1);
- }
+ base.get_value (iter, 2, out value);
break;
case Columns.POSTER:
value.set_object (movie);
break;
+ case Columns.MARKUP:
+ base.get_value (iter, 1, out value);
+ break;
+
default:
assert_not_reached ();
}
public MovieListView (Gtk.Window window, bool show_date = false) {
store = new MovieListStore ();
+ Gdk.Color color;
+ window.ensure_style ();
+ if (window.style.lookup_color ("SecondaryTextColor", out color)) {
+ store.year_markup = "<span size=\"small\" fgcolor=\"%s\">(%%d)</span>".printf (color.to_string ());
+ }
+
// Add filter wrapper
var filtered_store = new TreeModelFilter (store, null);
sorted_store.set_sort_column_id (MovieListStore.Columns.TITLE, SortType.ASCENDING);
// Year column
- var 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
private void title_data_func (CellLayout cell_layout, CellRenderer cell, TreeModel model, TreeIter iter) {
Movie movie;
+ string markup;
- model.get (iter, MovieListStore.Columns.MOVIE, out movie);
- title_renderer.text = movie.title;
+ model.get (iter, MovieListStore.Columns.MOVIE, out movie,
+ MovieListStore.Columns.MARKUP, out markup);
+ title_renderer.markup = markup;
secondary_renderer.text = movie.secondary;
}
- private void year_data_func (CellLayout cell_layout, CellRenderer cell, TreeModel model, TreeIter iter) {
- int year;
-
- model.get (iter, MovieListStore.Columns.YEAR, out year);
- ((CellRendererText) cell).text = (year > 0) ? year.to_string () : "";
- }
-
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,
MovieListStore.Columns.MOVIE, out movie);
- rating_renderer.text = (rating > 0) ? "%d.%d".printf (rating / 10, rating % 10) : "";
+ rating_renderer.text = rating;
if (movie.julian_date != 0) {
var date = Date ();
date.set_julian (movie.julian_date);