Movie window: add markup to window title, year and genres label, connect to notify
[cinaest] / src / movie-window.vala
index 82a2511..5d751b6 100644 (file)
@@ -27,11 +27,13 @@ public class MovieWindow : StackableWindow {
        private Image image;
        private VBox details;
        private PannableArea pannable;
+       private Label title_label;
+       private Label rating_label;
        private Label plot;
        private bool portrait_mode;
 
        public MovieWindow.with_movie (Movie movie, MovieListStore store) {
-               set_title (movie.title);
+               update_title (movie);
 
                // View menu
                menu = new MovieMenu (movie, store, this);
@@ -44,7 +46,6 @@ public class MovieWindow : StackableWindow {
                if (movie.poster != null && movie.poster.large != null) {
                        image.pixbuf = movie.poster.large;
                } else {
-                       movie.notify.connect (this.on_movie_changed);
                        if (movie.poster != null && movie.poster.icon != null) {
                                // FIXME
                                image.pixbuf = movie.poster.icon.scale_simple (268, 424, Gdk.InterpType.BILINEAR);
@@ -65,23 +66,18 @@ public class MovieWindow : StackableWindow {
                        }
                }
 
-               // Text area
-               string year = movie.year > 0 ? " (%d)".printf (movie.year) : "";
-               string text = "<big><b>%s</b></big>%s\n<small>%s</small>".printf (movie.title, year, movie.secondary);
-               var label = new Label (text);
-               label.wrap = true;
-               label.use_markup = true;
-               label.set_alignment (0.0f, 0.0f);
+               title_label = new Label (title_label_markup (movie));
+               title_label.wrap = true;
+               title_label.use_markup = true;
+               title_label.set_alignment (0.0f, 0.0f);
 
                var header = new HBox (false, 0);
-               header.pack_start (label, true, true, 0);
-               if (movie.rating > 0) {
-                       text = "<big><b>%d.%d</b></big>".printf (movie.rating / 10, movie.rating % 10);
-                       var rating = new Label (text);
-                       rating.use_markup = true;
-                       rating.set_alignment (0.5f, 0.0f);
-                       header.pack_start (rating, false, false, MARGIN_DOUBLE);
-               }
+               header.pack_start (title_label, true, true, 0);
+
+               rating_label = new Label (rating_label_markup (movie));
+               rating_label.use_markup = true;
+               rating_label.set_alignment (0.5f, 0.0f);
+               header.pack_start (rating_label, false, false, MARGIN_DOUBLE);
 
                plot = new Label (movie.get_plot ());
                plot.wrap = true;
@@ -118,6 +114,38 @@ public class MovieWindow : StackableWindow {
                // Connect signals
                menu.movie_deleted.connect (() => { destroy (); });
                Gdk.Screen.get_default ().size_changed.connect (on_orientation_changed);
+               movie.notify.connect (this.on_movie_changed);
+       }
+
+       private void update_title (Movie movie) {
+               Gdk.Color color;
+               this.ensure_style ();
+               if (this.style.lookup_color ("SecondaryTextColor", out color))
+                       set_markup ("%s <span size=\"small\" fgcolor=\"%s\">(%d)</span>".printf (movie.title, color.to_string (), movie.year));
+               else
+                       set_markup ("%s <small>(%d)</small>".printf (movie.title, movie.year));
+       }
+
+       private string title_label_markup (Movie movie) {
+               Gdk.Color color;
+               this.ensure_style ();
+               string year = "";
+               if (this.style.lookup_color ("SecondaryTextColor", out color)) {
+                       if (movie.year > 0)
+                               year = " <span fgcolor=\"%s\">(%d)</span>".printf (color.to_string (), movie.year);
+                       return "<big><b>%s</b></big>%s\n<span size=\"small\" fgcolor=\"%s\">%s</span>".printf (movie.title, year, color.to_string (), movie.secondary);
+               } else {
+                       if (movie.year > 0)
+                               year = " (%d)".printf (movie.year);
+                       return "<big><b>%s</b></big>%s\n<small>%s</small>".printf (movie.title, year, movie.secondary);
+               }
+       }
+
+       private string rating_label_markup (Movie movie) {
+               if (movie.rating > 0)
+                       return "<big><b>%d.%d</b></big>".printf (movie.rating / 10, movie.rating % 10);
+               else
+                       return "";
        }
 
        private void receive_poster (Gdk.Pixbuf pixbuf, Movie movie) {
@@ -134,6 +162,13 @@ public class MovieWindow : StackableWindow {
        private void on_movie_changed (GLib.Object source, GLib.ParamSpec spec) {
                var movie = (Movie) source;
 
+               if ((spec.name == "title") || (spec.name == "year")) {
+                       update_title (movie);
+                       title_label.set_markup (title_label_markup (movie));
+               }
+               if (spec.name == "rating") {
+                       rating_label.set_markup (rating_label_markup (movie));
+               }
                if ((spec.name == "poster") && (movie.poster != null) && (movie.poster.large != null)) {
                        image.pixbuf = movie.poster.large;
                }