private PannableArea pannable;
private Label title_label;
private Label rating_label;
+ private Label cast_label;
private Label plot;
private bool portrait_mode;
rating_label.set_alignment (0.5f, 0.0f);
header.pack_start (rating_label, false, false, MARGIN_DOUBLE);
+ cast_label = new Label (cast_label_markup (movie));
+ cast_label.wrap = true;
+ cast_label.use_markup = true;
+ cast_label.set_alignment (0.0f, 0.0f);
+
plot = new Label (movie.get_plot ());
plot.wrap = true;
plot.set_alignment (0.0f, 0.0f);
details = new VBox (false, MARGIN_DOUBLE);
details.pack_start (header, false, false, 0);
+ details.pack_start (cast_label, false, false, 0);
details.pack_start (plot, false, false, 0);
var pannable = new PannableArea ();
return "";
}
+ private string cast_label_markup (Movie movie) {
+ List<Role> cast = movie.get_cast ();
+ var markup = new StringBuilder ();
+ Gdk.Color color;
+ this.ensure_style ();
+
+ if (this.style.lookup_color ("SecondaryTextColor", out color)) {
+ foreach (Role role in cast) {
+ if (markup.len > 0)
+ markup.append (",\n");
+ markup.append_printf ("%s <span size=\"small\" fgcolor=\"%s\">(%s)</span>", display_name (role.actor_name), color.to_string (), role.character);
+ }
+ } else {
+ foreach (Role role in cast) {
+ if (markup.len > 0)
+ markup.append (",\n");
+ markup.append_printf ("%s <small>(%s)</small>", display_name (role.actor_name), role.character);
+ }
+ }
+
+ return markup.str;
+ }
+
+ private string display_name (string name) {
+ string[] parts;
+ if (name.has_suffix (")"))
+ parts = name.ndup (name.length - 4).split (", ");
+ else
+ parts = name.split (", ");
+ if (parts.length == 2) {
+ return parts[1] + " " + parts[0];
+ } else {
+ return name;
+ }
+ }
+
private void receive_poster (Gdk.Pixbuf pixbuf, Movie movie) {
var poster = new Poster();