diff --git a/mediainfo/src/mi-info.vala b/mediainfo/src/mi-info.vala index e4a993d0b9..afe0dafd89 100644 --- a/mediainfo/src/mi-info.vala +++ b/mediainfo/src/mi-info.vala @@ -36,12 +36,15 @@ sudo cp gstreamer-pbutils-0.10.vapi /usr/share/vala-0.10/vapi/ public class MediaInfo.Info : VPaned { + // layout + private bool compact_mode = false; // ui components private Label container_name; private Label mime_type; private Label duration; private Image icon_image; - private Notebook video_streams; + private Notebook all_streams; // there is either all or separate a/mediainfo/v + private Notebook video_streams; // depending on sreen resolution private Notebook audio_streams; private DrawingArea drawing_area; // gstreamer objects @@ -115,6 +118,11 @@ public class MediaInfo.Info : VPaned // video codecs wikilinks["video/x-theora"] = "Theora"; // FIXME: check + int screen_height = Gdk.Screen.get_default().get_height(); + if (screen_height <= 600) { + compact_mode = true; + } + // add widgets // FIXME: handle aspect ratio (AspectFrame.ratio) drawing_area = new DrawingArea (); @@ -172,31 +180,41 @@ public class MediaInfo.Info : VPaned table.attach (duration, 1, 2, row, row+1, fill_exp, 0, 3, 1); row++; - /* TODO: if screen-height<600 use a *single* notebook for both audio and - * video streams - * - this needs a bit of cleverness when switching streams - */ - label = new Label (null); - label.set_markup("Video Streams"); - label.set_alignment (0.0f, 0.5f); - table.attach (label, 0, 3, row, row+1, fill_exp, 0, 0, 1); - row++; + if (compact_mode) { + label = new Label (null); + label.set_markup("Streams"); + label.set_alignment (0.0f, 0.5f); + table.attach (label, 0, 3, row, row+1, fill_exp, 0, 0, 1); + row++; - video_streams = new Notebook (); - video_streams.switch_page.connect (on_video_stream_switched); - table.attach (video_streams, 0, 3, row, row+1, fill_exp, 0, 0, 1); - row++; + all_streams = new Notebook (); + // TODO: needs a bit of cleverness when switching streams + //all_streams.switch_page.connect (on_stream_switched); + table.attach (all_streams, 0, 3, row, row+1, fill_exp, 0, 0, 1); + row++; + } else { + label = new Label (null); + label.set_markup("Video Streams"); + label.set_alignment (0.0f, 0.5f); + table.attach (label, 0, 3, row, row+1, fill_exp, 0, 0, 1); + row++; - label = new Label (null); - label.set_markup("Audio Streams"); - label.set_alignment (0.0f, 0.5f); - table.attach (label, 0, 3, row, row+1, fill_exp, 0, 0, 1); - row++; + video_streams = new Notebook (); + video_streams.switch_page.connect (on_video_stream_switched); + table.attach (video_streams, 0, 3, row, row+1, fill_exp, 0, 0, 1); + row++; - audio_streams = new Notebook (); - audio_streams.switch_page.connect (on_audio_stream_switched); - table.attach (audio_streams, 0, 3, row, row+1, fill_exp, 0, 0, 1); - row++; + label = new Label (null); + label.set_markup("Audio Streams"); + label.set_alignment (0.0f, 0.5f); + table.attach (label, 0, 3, row, row+1, fill_exp, 0, 0, 1); + row++; + + audio_streams = new Notebook (); + audio_streams.switch_page.connect (on_audio_stream_switched); + table.attach (audio_streams, 0, 3, row, row+1, fill_exp, 0, 0, 1); + row++; + } // TODO: add container stream info widgets @@ -255,6 +273,7 @@ public class MediaInfo.Info : VPaned //DiscovererAudioInfo ainfo; Table table; Label label; + Notebook nb; uint row; AttachOptions fill = AttachOptions.FILL; AttachOptions fill_exp = AttachOptions.EXPAND|AttachOptions.FILL; @@ -301,16 +320,28 @@ public class MediaInfo.Info : VPaned } else { container_name.set_text (str); } - - // get stream info - while (video_streams.get_n_pages() > 0) { - video_streams.remove_page (-1); + + // reset notebooks + if (compact_mode) { + while (all_streams.get_n_pages() > 0) { + all_streams.remove_page (-1); + } + } else { + while (video_streams.get_n_pages() > 0) { + video_streams.remove_page (-1); + } + while (audio_streams.get_n_pages() > 0) { + audio_streams.remove_page (-1); + } } + + // get stream info + nb = compact_mode ? all_streams : video_streams; l = info.get_video_streams (); have_video = (l.length () > 0); for (int i = 0; i < l.length (); i++) { sinfo = l.nth_data (i); - caps = sinfo.get_caps (); + caps = sinfo.get_caps (); row = 0; table = new Table (2, 8, false); @@ -424,17 +455,15 @@ public class MediaInfo.Info : VPaned row++; } - video_streams.append_page (table, new Label (@"video $i")); + nb.append_page (table, new Label (@"video $i")); } - video_streams.show_all(); + nb.show_all(); - while (audio_streams.get_n_pages() > 0) { - audio_streams.remove_page (-1); - } + nb = compact_mode ? all_streams : audio_streams; l = info.get_audio_streams (); for (int i = 0; i < l.length (); i++) { sinfo = l.nth_data (i); - caps = sinfo.get_caps (); + caps = sinfo.get_caps (); row = 0; table = new Table (2, 7, false); @@ -530,9 +559,10 @@ public class MediaInfo.Info : VPaned row++; } - audio_streams.append_page (table, new Label (@"audio $i")); + nb.append_page (table, new Label (@"audio $i")); } - audio_streams.show_all(); + nb.show_all(); + //l = info.get_container_streams (); } catch (Error e) {