From 5f67c1f826c6c371380b1fee1396b16a291c56e0 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Jan 2010 18:54:11 +0100 Subject: [PATCH] Movie window: display plot of IMDb films if available Includes layout updates, an pannable area for the movie details. --- src/movie-window.vala | 76 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 26 deletions(-) diff --git a/src/movie-window.vala b/src/movie-window.vala index 1c34ede..0aef805 100644 --- a/src/movie-window.vala +++ b/src/movie-window.vala @@ -23,10 +23,11 @@ public class MovieWindow : StackableWindow { private MovieMenu menu; private Gdk.Pixbuf no_poster; private MoviePoster.Factory poster_factory; - private HBox landscape; - private VBox portrait; + private HBox hbox; private Image image; - private Label label; + private VBox details; + private PannableArea pannable; + private Label plot; private bool portrait_mode; public MovieWindow.with_movie (Movie movie, MovieListStore store) { @@ -65,33 +66,54 @@ public class MovieWindow : StackableWindow { } // Text area - string genres = movie.genres.to_string (); string year = movie.year > 0 ? " (%d)".printf (movie.year) : ""; - string text = "%s%s".printf (genres, year); - - label = new Label (text); + string text = "%s%s\n%s".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); - landscape = new HBox (false, 0); - portrait = new VBox (false, 0); + var header = new HBox (false, 0); + header.pack_start (label, true, true, 0); + if (movie.rating > 0) { + text = "%d.%d".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); + } + + 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 (plot, false, false, 0); + + var pannable = new PannableArea (); + var eventbox = new EventBox (); + eventbox.add (details); + eventbox.above_child = true; + pannable.add_with_viewport (eventbox); - var vbox = new VBox (false, 0); - vbox.pack_start (landscape, true, true, MARGIN_DOUBLE); - vbox.pack_start (portrait, true, true, MARGIN_DOUBLE); + hbox = new HBox (false, 0); + hbox.pack_start (pannable, true, true, 0); portrait_mode = CinaestProgram.orientation.portrait; if (portrait_mode) { - portrait.pack_start (image, false, false, 0); - portrait.pack_start (label, true, true, MARGIN_DOUBLE); + details.pack_start (image, false, false, 0); + details.reorder_child (image, 0); + plot.set_size_request (480 - 2 * MARGIN_DOUBLE, -1); } else { - landscape.pack_start (image, false, true, 0); - landscape.pack_start (label, true, true, MARGIN_DOUBLE); + hbox.pack_start (image, false, false, MARGIN_DOUBLE); + hbox.reorder_child (image, 0); + plot.set_size_request (800 - 268 /* image */ - 3 * MARGIN_DOUBLE, -1); + pannable.set_size_request (-1, 424); } - vbox.show_all (); - add (vbox); + hbox.show_all (); + add (hbox); // Connect signals menu.movie_deleted.connect (() => { destroy (); }); @@ -121,15 +143,17 @@ public class MovieWindow : StackableWindow { portrait_mode = CinaestProgram.orientation.portrait; if (portrait_mode) { - landscape.remove (label); - landscape.remove (image); - portrait.pack_start (image, false, false, 0); - portrait.pack_start (label, true, true, MARGIN_DOUBLE); + hbox.remove (image); + details.pack_start (image, false, false, 0); + details.reorder_child (image, 0); + plot.set_size_request (480 - 2 * MARGIN_DOUBLE, -1); + pannable.set_size_request (-1, -1); } else { - portrait.remove (label); - portrait.remove (image); - landscape.pack_start (image, false, true, 0); - landscape.pack_start (label, true, true, MARGIN_DOUBLE); + details.remove (image); + hbox.pack_start (image, false, false, MARGIN_DOUBLE); + hbox.reorder_child (image, 0); + pannable.set_size_request (-1, 424); + plot.set_size_request (800 - 268 /* image */ - 3 * MARGIN_DOUBLE, -1); } } } -- 1.7.9.5