YEAR,
RATING,
POSTER,
+ ICON,
MOVIE,
+ MARKUP,
N_COLUMNS
}
private GLib.Type[] types = {
typeof (string),
typeof (int),
- typeof (int),
+ typeof (string),
+ typeof (Gdk.Pixbuf),
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;
- public MovieSource source;
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);
+ private MovieSource _source;
+ public MovieSource source {
+ get {
+ return _source;
+ }
+ set {
+ _source = value;
+ }
+ }
+
construct {
set_column_types (base_type);
no_poster = null;
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);
movie.notify.disconnect (this.on_movie_changed);
base.remove (iter);
- if (source.get_editable ()) {
+ if (SourceFlags.EDITABLE in source.get_flags ()) {
source.delete_movie (movie);
}
}
public bool get_editable () {
- return source.get_editable ();
+ return (SourceFlags.EDITABLE in source.get_flags ());
}
public bool get_iter_from_movie (out TreeIter iter, Movie movie_a) {
}
}
- private void receive_movie (Movie movie) {
+ private void receive_movie (SList<Movie> movies) {
TreeIter iter;
if (cancellable.is_cancelled ())
return;
- add (movie, out iter);
- try {
- poster_factory.queue_thumbnail (movie, 64, 64, false, receive_poster_thumbnail);
- } catch (Error e) {
- warning ("Failed to queue poster request: %s\n", e.message);
+ foreach (Movie movie in movies) {
+ add (movie, out iter);
+ try {
+ poster_factory.queue_thumbnail (movie, Poster.ICON_WIDTH, Poster.ICON_HEIGHT, false, receive_poster_icon);
+ 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);
+ }
}
}
- private void receive_poster_thumbnail (Gdk.Pixbuf pixbuf, Movie movie) {
+ private void receive_poster_icon (Gdk.Pixbuf pixbuf, Movie movie) {
+ var poster = new Poster ();
+ poster.icon = pixbuf;
+ movie.poster = poster;
+ }
+
+ private void receive_poster_small (Gdk.Pixbuf pixbuf, Movie movie) {
var poster = new Poster ();
- poster.thumbnail = pixbuf;
+ if (movie.poster != null && movie.poster.icon != null)
+ poster.icon = movie.poster.icon;
+ poster.small = pixbuf;
movie.poster = poster;
}
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:
- if ((movie.poster != null) && (movie.poster.thumbnail != null))
- value.set_object (movie.poster.thumbnail);
+ if ((movie.poster != null) && (movie.poster.small != null))
+ value.set_object (movie.poster.small);
+ else
+ value.set_object (no_poster);
+ break;
+
+ case Columns.ICON:
+ if ((movie.poster != null) && (movie.poster.icon != null))
+ value.set_object (movie.poster.icon);
else
value.set_object (no_poster);
break;
value.set_object (movie);
break;
+ case Columns.MARKUP:
+ base.get_value (iter, 1, out value);
+ break;
+
default:
assert_not_reached ();
}