[longomatch] Implement secondary media player.
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Implement secondary media player.
- Date: Wed, 18 Mar 2015 14:41:42 +0000 (UTC)
commit de6727aa930709fceab47087d272b6a212ea3df8
Author: Julien Moutte <julien fluendo com>
Date: Fri Mar 13 18:51:47 2015 +0100
Implement secondary media player.
LongoMatch.GUI/Gui/Component/ProjectPeriods.cs | 161 +++++++++++--
.../LongoMatch.Gui.Component.ProjectPeriods.cs | 237 +++++++++++++++-----
LongoMatch.GUI/gtk-gui/gui.stetic | 145 +++++++++++-
3 files changed, 453 insertions(+), 90 deletions(-)
---
diff --git a/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs b/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs
index 122218a..1fb2ce9 100644
--- a/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs
+++ b/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs
@@ -23,6 +23,7 @@ using LongoMatch.Drawing.Widgets;
using LongoMatch.Drawing.Cairo;
using Mono.Unix;
using Gtk;
+using Pango;
using LongoMatch.Core.Common;
using LongoMatch.Gui.Menus;
using LongoMatch.Gui.Helpers;
@@ -49,29 +50,55 @@ namespace LongoMatch.Gui.Component
zoomscale.CanFocus = false;
zoomscale.Adjustment.Lower = 0;
zoomscale.Adjustment.Upper = 100;
- zoomscale.ValueChanged += HandleZoomChanged;
- zoomoutimage.Pixbuf = LongoMatch.Gui.Helpers.Misc.LoadIcon ("longomatch-zoom-out",
14);
- zoominimage.Pixbuf = LongoMatch.Gui.Helpers.Misc.LoadIcon ("longomatch-zoom-in", 14);
+ zoomoutimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-zoom-out", 14);
+ zoominimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-zoom-in", 14);
- main_cam_playerbin.Tick += HandleTick;
- main_cam_playerbin.ShowControls = false;
- //sec_cam_playerbin.ShowControls = false;
+ // Only main cam has audio for now
+ main_cam_audio_button_image.Pixbuf = Helpers.Misc.LoadIcon
("longomatch-control-volume-hi", IconSize.Button);
+ sec_cam_audio_button_image.Pixbuf = Helpers.Misc.LoadIcon
("longomatch-control-volume-off", IconSize.Button);
+ main_cam_audio_button.Active = true;
+ sec_cam_audio_button.Active = false;
- timerule = new Timerule (new WidgetWrapper (timerulearea)) { ObjectsCanMove = false };
+ // We control visibility of those widgets
+ sec_cam_vbox.NoShowAll = true;
+ sec_cam_vbox.Visible = false;
+ sec_cam_didactic_label.NoShowAll = true;
+ sec_cam_didactic_label.Visible = true;
+ sec_cam_didactic_label.Text = Catalog.GetString ("Drag the bars in the timeline to
synchronize secondary video files with the main video");
+
+ timerule = new Timerule (new WidgetWrapper (timerulearea));
camerasTimeline = new CamerasTimeline (new WidgetWrapper (timelinearea));
camerasLabels = new CamerasLabels (new WidgetWrapper (labelsarea));
- /* FIXME: Links Label size to the container */
- labelsarea.SizeRequested += (o, args) => {
- labels_vbox.WidthRequest = args.Requisition.Width;
- };
-
// Set some sane defaults
labels_vbox.WidthRequest = StyleConf.TimelineLabelsWidth;
// We need to align the timerule and the beginning of labels list
timerulearea.HeightRequest = StyleConf.TimelineCameraHeight;
+ main_cam_label.ModifyFont (FontDescription.FromString (Config.Style.Font + " bold
14"));
+ sec_cam_label.ModifyFont (FontDescription.FromString (Config.Style.Font + " bold
14"));
+
+ ConnectSignals ();
+
+ LongoMatch.Gui.Helpers.Misc.SetFocus (this, false);
+
+ menu = new PeriodsMenu ();
+ }
+
+ void ConnectSignals ()
+ {
+ zoomscale.ValueChanged += HandleZoomChanged;
+ main_cam_audio_button.Toggled += HandleAudioToggled;
+ sec_cam_audio_button.Toggled += HandleAudioToggled;
+
+ main_cam_playerbin.Tick += HandleTick;
+ main_cam_playerbin.PlayStateChanged += HandleStateChanged;
+
+ // Listen for seek events from the timerule
+ Config.EventsBroker.SeekEvent += HandleSeekEvent;
+ // Handle dragging of cameras and periods
+ camerasTimeline.CameraDragged += HandleCameraDragged;
camerasTimeline.TimeNodeChanged += HandleTimeNodeChanged;
camerasTimeline.ShowTimerMenuEvent += HandleShowTimerMenuEvent;
@@ -79,6 +106,11 @@ namespace LongoMatch.Gui.Component
scrolledwindow2.Vadjustment.ValueChanged += HandleScrollEvent;
scrolledwindow2.Hadjustment.ValueChanged += HandleScrollEvent;
+ /* FIXME: Links Label size to the container */
+ labelsarea.SizeRequested += (o, args) => {
+ labels_vbox.WidthRequest = args.Requisition.Width;
+ };
+
// Adjust our zoom factors when the window is resized
scrolledwindow2.SizeAllocated += (o, args) => {
UpdateMaxSecondsPerPixel ();
@@ -88,26 +120,36 @@ namespace LongoMatch.Gui.Component
int spacing = (int)scrolledwindow2.StyleGetProperty ("scrollbar-spacing");
zoomhbox.HeightRequest = args.Allocation.Height + spacing;
};
-
- LongoMatch.Gui.Helpers.Misc.SetFocus (this, false);
-
- menu = new PeriodsMenu ();
}
protected override void OnDestroyed ()
{
+ Config.EventsBroker.SeekEvent -= HandleSeekEvent;
+
main_cam_playerbin.Destroy ();
- //sec_cam_playerbin.Destroy ();
+ sec_cam_playerbin.Destroy ();
+
timerule.Dispose ();
camerasLabels.Dispose ();
camerasTimeline.Dispose ();
+
base.OnDestroyed ();
}
public void Pause ()
{
main_cam_playerbin.Pause ();
- //sec_cam_playerbin.Pause ();
+ sec_cam_playerbin.Pause ();
+ }
+
+ public void Seek (Time time, bool accurate)
+ {
+ if (main_cam_playerbin.Opened) {
+ main_cam_playerbin.Seek (time, accurate);
+ }
+ if (sec_cam_playerbin.Opened) {
+ sec_cam_playerbin.Seek (time, accurate);
+ }
}
public void SaveChanges ()
@@ -134,8 +176,7 @@ namespace LongoMatch.Gui.Component
List<string> gamePeriods;
List<Period> periods;
MediaFile file;
-
- main_cam_playerbin.ShowControls = false;
+
this.project = value;
gamePeriods = value.Dashboard.GamePeriods;
@@ -176,7 +217,9 @@ namespace LongoMatch.Gui.Component
timerule.Duration = duration;
// Open media file
- main_cam_playerbin.Open (value.Description.FileSet);
+ main_cam_label.Text = fileSet.First ().Name;
+ main_cam_playerbin.ShowControls = false;
+ main_cam_playerbin.Open (fileSet);
}
}
@@ -215,12 +258,79 @@ namespace LongoMatch.Gui.Component
QueueDraw ();
}
+ /// <summary>
+ /// Try to slave the secondary player to the first
+ /// </summary>
+ /// <param name="playing">If set to <c>true</c> playing.</param>
+ void HandleStateChanged (bool playing)
+ {
+ if (playing) {
+ sec_cam_playerbin.Play ();
+ } else {
+ sec_cam_playerbin.Pause ();
+ }
+ }
+
+ void HandleAudioToggled (object sender, EventArgs args)
+ {
+ if (sender == main_cam_audio_button) {
+ main_cam_playerbin.Volume = main_cam_audio_button.Active ? 1 : 0;
+ main_cam_audio_button_image.Pixbuf = Helpers.Misc.LoadIcon
(main_cam_audio_button.Active ? "longomatch-control-volume-hi" : "longomatch-control-volume-off",
IconSize.Button);
+ } else if (sender == sec_cam_audio_button) {
+ sec_cam_playerbin.Volume = sec_cam_audio_button.Active ? 1 : 0;
+ sec_cam_audio_button_image.Pixbuf = Helpers.Misc.LoadIcon
(sec_cam_audio_button.Active ? "longomatch-control-volume-hi" : "longomatch-control-volume-off",
IconSize.Button);
+ }
+ }
+
+ void HandleCameraDragged (MediaFile mediafile, TimeNode timenode)
+ {
+ // Start by pausing players
+ main_cam_playerbin.Pause ();
+ sec_cam_playerbin.Pause ();
+
+ // Check if the CurrentTime of the time rule is in that node
+ if (timenode.Start <= timerule.CurrentTime && timerule.CurrentTime <= timenode.Stop) {
+ // Check if we need to show the player
+ if (!sec_cam_vbox.Visible) {
+ sec_cam_didactic_label.Hide ();
+ sec_cam_vbox.Show ();
+ }
+ // Open this media file if needed
+ if (!sec_cam_playerbin.Opened ||
+ sec_cam_playerbin.MediaFileSet.FirstOrDefault () != mediafile) {
+ MediaFileSet fileSet = new MediaFileSet ();
+ fileSet.Add (mediafile);
+
+ // Reload player with new cam
+ sec_cam_label.Text = mediafile.Name;
+ sec_cam_playerbin.ShowControls = false;
+ sec_cam_playerbin.Open (fileSet);
+
+ // Configure audio
+ HandleAudioToggled (sec_cam_audio_button, new EventArgs ());
+ }
+ // Seek to position
+ sec_cam_playerbin.Seek (timerule.CurrentTime, true);
+ } else {
+ // Camera is out of scope, show didactic message
+ sec_cam_vbox.Hide ();
+ sec_cam_didactic_label.Text = Catalog.GetString ("Camera out of scope");
+ sec_cam_didactic_label.Show ();
+ }
+ }
+
+ /// <summary>
+ /// Periods segments have moved, adjust main camera position to segment boundaries
+ /// </summary>
void HandleTimeNodeChanged (TimeNode tNode, object val)
{
Time time = val as Time;
+
main_cam_playerbin.Pause ();
- main_cam_playerbin.Seek (time, false);
- // FIXME: Reflect change in the MediaFile's offset.
+ if (sec_cam_playerbin.Opened) {
+ sec_cam_playerbin.Pause ();
+ }
+ Seek (time, false);
}
/// <summary>
@@ -242,7 +352,6 @@ namespace LongoMatch.Gui.Component
{
// We zoom from our Maximum number of seconds per pixel to the minimum using the 0 to
100 scale value
double secondsPerPixel = 0, minSecondsPerPixels = 0.01;
- double value = Math.Round (zoomscale.Value);
double diff = maxSecondsPerPixels - minSecondsPerPixels;
secondsPerPixel = maxSecondsPerPixels - (diff * zoomscale.Value / 100);
@@ -252,6 +361,10 @@ namespace LongoMatch.Gui.Component
QueueDraw ();
}
+ void HandleSeekEvent (Time time, bool accurate) {
+ Seek (time, false);
+ }
+
void HandleShowTimerMenuEvent (Timer timer, Time time)
{
menu.ShowMenu (project, timer, time, camerasTimeline.PeriodsTimeline);
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs
index 7b4e965..4e6a8b4 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs
@@ -8,13 +8,39 @@ namespace LongoMatch.Gui.Component
private global::Gtk.VPaned vpaned2;
- private global::Gtk.VBox vbox2;
-
private global::Gtk.HBox playbins_hbox;
+ private global::Gtk.VBox main_cam_vbox;
+
private global::LongoMatch.Gui.PlayerBin main_cam_playerbin;
- private global::Gtk.HBox hbox3;
+ private global::Gtk.HBox main_cam_hbox;
+
+ private global::Gtk.Label main_cam_label;
+
+ private global::Gtk.Alignment main_cam_audio_alignment;
+
+ private global::Gtk.ToggleButton main_cam_audio_button;
+
+ private global::Gtk.Image main_cam_audio_button_image;
+
+ private global::Gtk.VBox sec_cam_vbox;
+
+ private global::LongoMatch.Gui.PlayerBin sec_cam_playerbin;
+
+ private global::Gtk.HBox sec_cam_hbox;
+
+ private global::Gtk.Label sec_cam_label;
+
+ private global::Gtk.Alignment sec_cam_audio_alignment;
+
+ private global::Gtk.ToggleButton sec_cam_audio_button;
+
+ private global::Gtk.Image sec_cam_audio_button_image;
+
+ private global::Gtk.Label sec_cam_didactic_label;
+
+ private global::Gtk.HBox hbox5;
private global::Gtk.Alignment labels_alignment;
@@ -30,7 +56,7 @@ namespace LongoMatch.Gui.Component
private global::Gtk.Image zoominimage;
- private global::Gtk.VBox vbox7;
+ private global::Gtk.VBox vbox9;
private global::Gtk.DrawingArea timerulearea;
@@ -53,32 +79,127 @@ namespace LongoMatch.Gui.Component
this.vpaned2.Name = "vpaned2";
this.vpaned2.Position = 400;
// Container child vpaned2.Gtk.Paned+PanedChild
- this.vbox2 = new global::Gtk.VBox ();
- this.vbox2.Name = "vbox2";
- // Container child vbox2.Gtk.Box+BoxChild
this.playbins_hbox = new global::Gtk.HBox ();
this.playbins_hbox.Name = "playbins_hbox";
this.playbins_hbox.Homogeneous = true;
this.playbins_hbox.Spacing = 15;
this.playbins_hbox.BorderWidth = ((uint)(15));
// Container child playbins_hbox.Gtk.Box+BoxChild
+ this.main_cam_vbox = new global::Gtk.VBox ();
+ this.main_cam_vbox.Name = "main_cam_vbox";
+ this.main_cam_vbox.Spacing = 6;
+ // Container child main_cam_vbox.Gtk.Box+BoxChild
this.main_cam_playerbin = new global::LongoMatch.Gui.PlayerBin ();
this.main_cam_playerbin.Events = ((global::Gdk.EventMask)(256));
this.main_cam_playerbin.Name = "main_cam_playerbin";
+ this.main_cam_playerbin.Volume = 0;
this.main_cam_playerbin.CloseAlwaysVisible = false;
- this.playbins_hbox.Add (this.main_cam_playerbin);
- global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.playbins_hbox
[this.main_cam_playerbin]));
+ this.main_cam_vbox.Add (this.main_cam_playerbin);
+ global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.main_cam_vbox
[this.main_cam_playerbin]));
w1.Position = 0;
- this.vbox2.Add (this.playbins_hbox);
- global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2
[this.playbins_hbox]));
+ // Container child main_cam_vbox.Gtk.Box+BoxChild
+ this.main_cam_hbox = new global::Gtk.HBox ();
+ this.main_cam_hbox.Name = "main_cam_hbox";
+ this.main_cam_hbox.Spacing = 6;
+ // Container child main_cam_hbox.Gtk.Box+BoxChild
+ this.main_cam_label = new global::Gtk.Label ();
+ this.main_cam_label.Name = "main_cam_label";
+ this.main_cam_label.Xalign = 0F;
+ this.main_cam_hbox.Add (this.main_cam_label);
+ global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.main_cam_hbox
[this.main_cam_label]));
w2.Position = 0;
- this.vpaned2.Add (this.vbox2);
- global::Gtk.Paned.PanedChild w3 = ((global::Gtk.Paned.PanedChild)(this.vpaned2
[this.vbox2]));
- w3.Resize = false;
+ // Container child main_cam_hbox.Gtk.Box+BoxChild
+ this.main_cam_audio_alignment = new global::Gtk.Alignment (0.5F, 0.5F, 1F, 1F);
+ this.main_cam_audio_alignment.Name = "main_cam_audio_alignment";
+ this.main_cam_audio_alignment.RightPadding = ((uint)(50));
+ // Container child main_cam_audio_alignment.Gtk.Container+ContainerChild
+ this.main_cam_audio_button = new global::Gtk.ToggleButton ();
+ this.main_cam_audio_button.CanFocus = true;
+ this.main_cam_audio_button.Name = "main_cam_audio_button";
+ this.main_cam_audio_button.Active = true;
+ // Container child main_cam_audio_button.Gtk.Container+ContainerChild
+ this.main_cam_audio_button_image = new global::Gtk.Image ();
+ this.main_cam_audio_button_image.Name = "main_cam_audio_button_image";
+ this.main_cam_audio_button.Add (this.main_cam_audio_button_image);
+ this.main_cam_audio_alignment.Add (this.main_cam_audio_button);
+ this.main_cam_hbox.Add (this.main_cam_audio_alignment);
+ global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.main_cam_hbox
[this.main_cam_audio_alignment]));
+ w5.Position = 1;
+ w5.Expand = false;
+ w5.Fill = false;
+ this.main_cam_vbox.Add (this.main_cam_hbox);
+ global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.main_cam_vbox
[this.main_cam_hbox]));
+ w6.Position = 1;
+ w6.Expand = false;
+ w6.Fill = false;
+ this.playbins_hbox.Add (this.main_cam_vbox);
+ global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.playbins_hbox
[this.main_cam_vbox]));
+ w7.Position = 0;
+ // Container child playbins_hbox.Gtk.Box+BoxChild
+ this.sec_cam_vbox = new global::Gtk.VBox ();
+ this.sec_cam_vbox.Name = "sec_cam_vbox";
+ this.sec_cam_vbox.Spacing = 6;
+ // Container child sec_cam_vbox.Gtk.Box+BoxChild
+ this.sec_cam_playerbin = new global::LongoMatch.Gui.PlayerBin ();
+ this.sec_cam_playerbin.Events = ((global::Gdk.EventMask)(256));
+ this.sec_cam_playerbin.Name = "sec_cam_playerbin";
+ this.sec_cam_playerbin.Volume = 0;
+ this.sec_cam_playerbin.CloseAlwaysVisible = false;
+ this.sec_cam_vbox.Add (this.sec_cam_playerbin);
+ global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.sec_cam_vbox
[this.sec_cam_playerbin]));
+ w8.Position = 0;
+ // Container child sec_cam_vbox.Gtk.Box+BoxChild
+ this.sec_cam_hbox = new global::Gtk.HBox ();
+ this.sec_cam_hbox.Name = "sec_cam_hbox";
+ this.sec_cam_hbox.Spacing = 6;
+ // Container child sec_cam_hbox.Gtk.Box+BoxChild
+ this.sec_cam_label = new global::Gtk.Label ();
+ this.sec_cam_label.Name = "sec_cam_label";
+ this.sec_cam_label.Xalign = 0F;
+ this.sec_cam_hbox.Add (this.sec_cam_label);
+ global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.sec_cam_hbox
[this.sec_cam_label]));
+ w9.Position = 0;
+ // Container child sec_cam_hbox.Gtk.Box+BoxChild
+ this.sec_cam_audio_alignment = new global::Gtk.Alignment (0.5F, 0.5F, 1F, 1F);
+ this.sec_cam_audio_alignment.Name = "sec_cam_audio_alignment";
+ this.sec_cam_audio_alignment.RightPadding = ((uint)(50));
+ // Container child sec_cam_audio_alignment.Gtk.Container+ContainerChild
+ this.sec_cam_audio_button = new global::Gtk.ToggleButton ();
+ this.sec_cam_audio_button.CanFocus = true;
+ this.sec_cam_audio_button.Name = "sec_cam_audio_button";
+ // Container child sec_cam_audio_button.Gtk.Container+ContainerChild
+ this.sec_cam_audio_button_image = new global::Gtk.Image ();
+ this.sec_cam_audio_button_image.Name = "sec_cam_audio_button_image";
+ this.sec_cam_audio_button.Add (this.sec_cam_audio_button_image);
+ this.sec_cam_audio_alignment.Add (this.sec_cam_audio_button);
+ this.sec_cam_hbox.Add (this.sec_cam_audio_alignment);
+ global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.sec_cam_hbox
[this.sec_cam_audio_alignment]));
+ w12.Position = 1;
+ w12.Expand = false;
+ w12.Fill = false;
+ this.sec_cam_vbox.Add (this.sec_cam_hbox);
+ global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.sec_cam_vbox
[this.sec_cam_hbox]));
+ w13.Position = 1;
+ w13.Expand = false;
+ w13.Fill = false;
+ this.playbins_hbox.Add (this.sec_cam_vbox);
+ global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.playbins_hbox
[this.sec_cam_vbox]));
+ w14.Position = 1;
+ // Container child playbins_hbox.Gtk.Box+BoxChild
+ this.sec_cam_didactic_label = new global::Gtk.Label ();
+ this.sec_cam_didactic_label.Name = "sec_cam_didactic_label";
+ this.playbins_hbox.Add (this.sec_cam_didactic_label);
+ global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.playbins_hbox
[this.sec_cam_didactic_label]));
+ w15.Position = 2;
+ w15.Expand = false;
+ w15.Fill = false;
+ this.vpaned2.Add (this.playbins_hbox);
+ global::Gtk.Paned.PanedChild w16 = ((global::Gtk.Paned.PanedChild)(this.vpaned2
[this.playbins_hbox]));
+ w16.Resize = false;
// Container child vpaned2.Gtk.Paned+PanedChild
- this.hbox3 = new global::Gtk.HBox ();
- this.hbox3.Name = "hbox3";
- // Container child hbox3.Gtk.Box+BoxChild
+ this.hbox5 = new global::Gtk.HBox ();
+ this.hbox5.Name = "hbox5";
+ // Container child hbox5.Gtk.Box+BoxChild
this.labels_alignment = new global::Gtk.Alignment (0.5F, 0.5F, 1F, 1F);
this.labels_alignment.Name = "labels_alignment";
// Container child labels_alignment.Gtk.Container+ContainerChild
@@ -88,8 +209,8 @@ namespace LongoMatch.Gui.Component
this.labelsarea = new global::Gtk.DrawingArea ();
this.labelsarea.Name = "labelsarea";
this.labels_vbox.Add (this.labelsarea);
- global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.labels_vbox
[this.labelsarea]));
- w4.Position = 0;
+ global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.labels_vbox
[this.labelsarea]));
+ w17.Position = 0;
// Container child labels_vbox.Gtk.Box+BoxChild
this.zoomhbox = new global::Gtk.HBox ();
this.zoomhbox.Name = "zoomhbox";
@@ -100,10 +221,10 @@ namespace LongoMatch.Gui.Component
this.zoomoutimage.HeightRequest = 8;
this.zoomoutimage.Name = "zoomoutimage";
this.zoomhbox.Add (this.zoomoutimage);
- global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.zoomhbox
[this.zoomoutimage]));
- w5.Position = 0;
- w5.Expand = false;
- w5.Fill = false;
+ global::Gtk.Box.BoxChild w18 = ((global::Gtk.Box.BoxChild)(this.zoomhbox
[this.zoomoutimage]));
+ w18.Position = 0;
+ w18.Expand = false;
+ w18.Fill = false;
// Container child zoomhbox.Gtk.Box+BoxChild
this.zoomscale = new global::Gtk.HScale (null);
this.zoomscale.CanFocus = true;
@@ -115,39 +236,39 @@ namespace LongoMatch.Gui.Component
this.zoomscale.Digits = 0;
this.zoomscale.ValuePos = ((global::Gtk.PositionType)(2));
this.zoomhbox.Add (this.zoomscale);
- global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.zoomhbox
[this.zoomscale]));
- w6.Position = 1;
+ global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.zoomhbox
[this.zoomscale]));
+ w19.Position = 1;
// Container child zoomhbox.Gtk.Box+BoxChild
this.zoominimage = new global::Gtk.Image ();
this.zoominimage.WidthRequest = 14;
this.zoominimage.HeightRequest = 8;
this.zoominimage.Name = "zoominimage";
this.zoomhbox.Add (this.zoominimage);
- global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.zoomhbox
[this.zoominimage]));
- w7.Position = 2;
- w7.Expand = false;
- w7.Fill = false;
+ global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.zoomhbox
[this.zoominimage]));
+ w20.Position = 2;
+ w20.Expand = false;
+ w20.Fill = false;
this.labels_vbox.Add (this.zoomhbox);
- global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.labels_vbox
[this.zoomhbox]));
- w8.Position = 1;
- w8.Expand = false;
- w8.Fill = false;
+ global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.labels_vbox
[this.zoomhbox]));
+ w21.Position = 1;
+ w21.Expand = false;
+ w21.Fill = false;
this.labels_alignment.Add (this.labels_vbox);
- this.hbox3.Add (this.labels_alignment);
- global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox3
[this.labels_alignment]));
- w10.Position = 0;
- w10.Expand = false;
- // Container child hbox3.Gtk.Box+BoxChild
- this.vbox7 = new global::Gtk.VBox ();
- this.vbox7.Name = "vbox7";
- // Container child vbox7.Gtk.Box+BoxChild
+ this.hbox5.Add (this.labels_alignment);
+ global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.hbox5
[this.labels_alignment]));
+ w23.Position = 0;
+ w23.Expand = false;
+ // Container child hbox5.Gtk.Box+BoxChild
+ this.vbox9 = new global::Gtk.VBox ();
+ this.vbox9.Name = "vbox9";
+ // Container child vbox9.Gtk.Box+BoxChild
this.timerulearea = new global::Gtk.DrawingArea ();
this.timerulearea.Name = "timerulearea";
- this.vbox7.Add (this.timerulearea);
- global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.vbox7
[this.timerulearea]));
- w11.Position = 0;
- w11.Expand = false;
- // Container child vbox7.Gtk.Box+BoxChild
+ this.vbox9.Add (this.timerulearea);
+ global::Gtk.Box.BoxChild w24 = ((global::Gtk.Box.BoxChild)(this.vbox9
[this.timerulearea]));
+ w24.Position = 0;
+ w24.Expand = false;
+ // Container child vbox9.Gtk.Box+BoxChild
this.scrolledwindow2 = new global::Gtk.ScrolledWindow ();
this.scrolledwindow2.HeightRequest = 50;
this.scrolledwindow2.CanFocus = true;
@@ -155,25 +276,27 @@ namespace LongoMatch.Gui.Component
this.scrolledwindow2.VscrollbarPolicy = ((global::Gtk.PolicyType)(0));
this.scrolledwindow2.HscrollbarPolicy = ((global::Gtk.PolicyType)(0));
// Container child scrolledwindow2.Gtk.Container+ContainerChild
- global::Gtk.Viewport w12 = new global::Gtk.Viewport ();
- w12.ShadowType = ((global::Gtk.ShadowType)(0));
+ global::Gtk.Viewport w25 = new global::Gtk.Viewport ();
+ w25.ShadowType = ((global::Gtk.ShadowType)(0));
// Container child GtkViewport.Gtk.Container+ContainerChild
this.timelinearea = new global::Gtk.DrawingArea ();
this.timelinearea.Name = "timelinearea";
- w12.Add (this.timelinearea);
- this.scrolledwindow2.Add (w12);
- this.vbox7.Add (this.scrolledwindow2);
- global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.vbox7
[this.scrolledwindow2]));
- w15.Position = 1;
- this.hbox3.Add (this.vbox7);
- global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.hbox3 [this.vbox7]));
- w16.Position = 1;
- this.vpaned2.Add (this.hbox3);
+ w25.Add (this.timelinearea);
+ this.scrolledwindow2.Add (w25);
+ this.vbox9.Add (this.scrolledwindow2);
+ global::Gtk.Box.BoxChild w28 = ((global::Gtk.Box.BoxChild)(this.vbox9
[this.scrolledwindow2]));
+ w28.Position = 1;
+ this.hbox5.Add (this.vbox9);
+ global::Gtk.Box.BoxChild w29 = ((global::Gtk.Box.BoxChild)(this.hbox5 [this.vbox9]));
+ w29.Position = 1;
+ this.vpaned2.Add (this.hbox5);
this.headereventbox.Add (this.vpaned2);
this.Add (this.headereventbox);
if ((this.Child != null)) {
this.Child.ShowAll ();
}
+ this.sec_cam_vbox.Hide ();
+ this.sec_cam_didactic_label.Hide ();
this.Hide ();
}
}
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index ca2e979..ccc4c53 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -9657,7 +9657,7 @@ You can continue with the current capture, cancel it or save your project.
</widget>
</child>
</widget>
- <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.ProjectPeriods" design-size="1639 475">
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.ProjectPeriods" design-size="3263 475">
<property name="MemberName" />
<property name="Visible">False</property>
<child>
@@ -9669,18 +9669,20 @@ You can continue with the current capture, cancel it or save your project.
<property name="CanFocus">True</property>
<property name="Position">400</property>
<child>
- <widget class="Gtk.VBox" id="vbox2">
+ <widget class="Gtk.HBox" id="playbins_hbox">
<property name="MemberName" />
+ <property name="Homogeneous">True</property>
+ <property name="Spacing">15</property>
+ <property name="BorderWidth">15</property>
<child>
- <widget class="Gtk.HBox" id="playbins_hbox">
+ <widget class="Gtk.VBox" id="main_cam_vbox">
<property name="MemberName" />
- <property name="Homogeneous">True</property>
- <property name="Spacing">15</property>
- <property name="BorderWidth">15</property>
+ <property name="Spacing">6</property>
<child>
<widget class="LongoMatch.Gui.PlayerBin" id="main_cam_playerbin">
<property name="MemberName" />
<property name="Events">ButtonPressMask</property>
+ <property name="Volume">0</property>
<property name="CloseAlwaysVisible">False</property>
</widget>
<packing>
@@ -9689,12 +9691,137 @@ You can continue with the current capture, cancel it or save your project.
</packing>
</child>
<child>
- <placeholder />
+ <widget class="Gtk.HBox" id="main_cam_hbox">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Label" id="main_cam_label">
+ <property name="MemberName" />
+ <property name="Xalign">0</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Alignment" id="main_cam_audio_alignment">
+ <property name="MemberName" />
+ <property name="RightPadding">50</property>
+ <child>
+ <widget class="Gtk.ToggleButton" id="main_cam_audio_button">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <property name="Active">True</property>
+ <child>
+ <widget class="Gtk.Image" id="main_cam_audio_button_image">
+ <property name="MemberName" />
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
</child>
</widget>
<packing>
<property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.VBox" id="sec_cam_vbox">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="LongoMatch.Gui.PlayerBin" id="sec_cam_playerbin">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ <property name="Volume">0</property>
+ <property name="CloseAlwaysVisible">False</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.HBox" id="sec_cam_hbox">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Label" id="sec_cam_label">
+ <property name="MemberName" />
+ <property name="Xalign">0</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Alignment" id="sec_cam_audio_alignment">
+ <property name="MemberName" />
+ <property name="RightPadding">50</property>
+ <child>
+ <widget class="Gtk.ToggleButton" id="sec_cam_audio_button">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <child>
+ <widget class="Gtk.Image" id="sec_cam_audio_button_image">
+ <property name="MemberName" />
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="sec_cam_didactic_label">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ </widget>
+ <packing>
+ <property name="Position">2</property>
<property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
</packing>
</child>
</widget>
@@ -9703,7 +9830,7 @@ You can continue with the current capture, cancel it or save your project.
</packing>
</child>
<child>
- <widget class="Gtk.HBox" id="hbox3">
+ <widget class="Gtk.HBox" id="hbox5">
<property name="MemberName" />
<child>
<widget class="Gtk.Alignment" id="labels_alignment">
@@ -9784,7 +9911,7 @@ You can continue with the current capture, cancel it or save your project.
</packing>
</child>
<child>
- <widget class="Gtk.VBox" id="vbox7">
+ <widget class="Gtk.VBox" id="vbox9">
<property name="MemberName" />
<child>
<widget class="Gtk.DrawingArea" id="timerulearea">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]