[longomatch] Implement the new live analysis UI
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Implement the new live analysis UI
- Date: Tue, 28 Oct 2014 09:55:43 +0000 (UTC)
commit 4da71fa5bcbacb2603b73b1d3c99bc23b76ebafa
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Mon Oct 27 14:05:58 2014 +0100
Implement the new live analysis UI
LongoMatch.Core/Common/Exceptions.cs | 4 +
LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs | 4 +-
LongoMatch.Core/Interfaces/Multimedia/ICapturer.cs | 2 +
.../Interfaces/Multimedia/IMultimediaToolkit.cs | 2 +-
LongoMatch.Core/Store/Timer.cs | 39 ++-
LongoMatch.Core/StyleConf.cs | 4 +-
LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs | 427 +++++++++++--------
LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs | 37 ++-
LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs | 61 ++-
.../Gui/RecordingController.cs | 254 +++++++++++
LongoMatch.GUI.Multimedia/Gui/VideoWindow.cs | 2 +-
LongoMatch.GUI.Multimedia/MultimediaToolkit.cs | 4 -
.../gtk-gui/LongoMatch.Gui.CapturerBin.cs | 352 +++++++++------
.../gtk-gui/LongoMatch.Gui.PlayerBin.cs | 10 +
.../gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs | 128 ++++--
LongoMatch.GUI.Multimedia/gtk-gui/generated.cs | 34 --
LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic | 454 ++++++++++++++------
LongoMatch.GUI.Multimedia/gtk-gui/objects.xml | 1 +
LongoMatch.GUI/Gui/Component/AnalysisComponent.cs | 171 ++------
LongoMatch.GUI/Gui/Component/CodingWidget.cs | 65 ++-
LongoMatch.GUI/Gui/Component/EventsListWidget.cs | 85 ++++
.../Gui/Component/FakeAnalysisComponent.cs | 114 +++++
LongoMatch.GUI/Gui/Component/PeriodsRecoder.cs | 94 ----
LongoMatch.GUI/Gui/Component/PlayListWidget.cs | 1 +
.../Gui/Component/PlayersListTreeWidget.cs | 40 ++-
.../Gui/Component/PlaysSelectionWidget.cs | 95 ++---
LongoMatch.GUI/Gui/MainWindow.cs | 10 +-
LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs | 14 +-
LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs | 2 +-
LongoMatch.GUI/LongoMatch.GUI.csproj | 6 +-
LongoMatch.GUI/Makefile.am | 6 +-
.../LongoMatch.Gui.Component.AnalysisComponent.cs | 61 +++
.../LongoMatch.Gui.Component.CodingWidget.cs | 17 +-
.../LongoMatch.Gui.Component.EventsListWidget.cs | 69 +++
...ngoMatch.Gui.Component.FakeAnalysisComponent.cs | 59 +++
.../LongoMatch.Gui.Component.PeriodsRecoder.cs | 116 -----
...ongoMatch.Gui.Component.PlaysSelectionWidget.cs | 71 +---
.../LongoMatch.Gui.Panel.NewProjectPanel.cs | 3 -
.../LongoMatch.Gui.Panel.ProjectsManagerPanel.cs | 1 -
LongoMatch.GUI/gtk-gui/gui.stetic | 339 +++++++++------
LongoMatch.GUI/gtk-gui/objects.xml | 13 +-
LongoMatch.Multimedia/Capturer/FakeCapturer.cs | 3 +
.../Capturer/GstCameraCapturer.cs | 6 +
LongoMatch.Multimedia/Utils/MultimediaFactory.cs | 9 +-
LongoMatch.Services/Services/EventsManager.cs | 24 +-
LongoMatch.Services/Services/ProjectsManager.cs | 22 +-
data/icons/Makefile.am | 8 +
.../scalable/actions/longomatch-cancel-rec.svg | 73 ++++
.../scalable/actions/longomatch-control-record.svg | 79 +++-
.../hicolor/scalable/actions/longomatch-live.svg | 55 +++
.../scalable/actions/longomatch-pause-clock.svg | 73 ++++
.../hicolor/scalable/actions/longomatch-record.svg | 56 +++
.../hicolor/scalable/actions/longomatch-replay.svg | 55 +++
.../scalable/actions/longomatch-resume-clock.svg | 66 +++
.../hicolor/scalable/actions/longomatch-save.svg | 55 +++
.../hicolor/scalable/actions/longomatch-stop.svg | 67 +++
libcesarplayer/gst-camera-capturer.c | 11 +
libcesarplayer/gst-camera-capturer.h | 2 +
58 files changed, 2707 insertions(+), 1228 deletions(-)
---
diff --git a/LongoMatch.Core/Common/Exceptions.cs b/LongoMatch.Core/Common/Exceptions.cs
index abcfbca..5a93566 100644
--- a/LongoMatch.Core/Common/Exceptions.cs
+++ b/LongoMatch.Core/Common/Exceptions.cs
@@ -78,5 +78,9 @@ namespace LongoMatch.Core.Common
{
}
}
+
+ public class TimerNotRunningException: Exception
+ {
+ }
}
diff --git a/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs b/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs
index b49efde..7033221 100644
--- a/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs
+++ b/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs
@@ -31,11 +31,13 @@ namespace LongoMatch.Core.Interfaces.GUI
Image CurrentMiniatureFrame {get;}
CaptureSettings CaptureSettings {get;}
List<string> PeriodsNames {set;}
+ List<Period> Periods { get; set; }
void Run (CaptureSettings settings);
void StartPeriod();
+ void PausePeriod();
+ void ResumePeriod();
void StopPeriod();
- void Stop();
void Close();
}
}
diff --git a/LongoMatch.Core/Interfaces/Multimedia/ICapturer.cs
b/LongoMatch.Core/Interfaces/Multimedia/ICapturer.cs
index 70ebd80..e023460 100644
--- a/LongoMatch.Core/Interfaces/Multimedia/ICapturer.cs
+++ b/LongoMatch.Core/Interfaces/Multimedia/ICapturer.cs
@@ -55,5 +55,7 @@ namespace LongoMatch.Core.Interfaces.Multimedia
void Close();
void Dispose();
+
+ void Expose ();
}
}
diff --git a/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs
b/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs
index ccda512..a2b48b2 100644
--- a/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs
+++ b/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs
@@ -37,7 +37,7 @@ namespace LongoMatch.Core.Interfaces.Multimedia
IRemuxer GetRemuxer(MediaFile inputFile, string outputFile, VideoMuxerType muxer);
- ICapturer GetCapturer(CapturerType type);
+ ICapturer GetCapturer();
MediaFile DiscoverFile(string path, bool takeScreenshot=true);
diff --git a/LongoMatch.Core/Store/Timer.cs b/LongoMatch.Core/Store/Timer.cs
index c7ca9d3..4c63973 100644
--- a/LongoMatch.Core/Store/Timer.cs
+++ b/LongoMatch.Core/Store/Timer.cs
@@ -29,7 +29,7 @@ namespace LongoMatch.Core.Store
{
public Timer ()
{
- Nodes = new List<TimeNode>();
+ Nodes = new List<TimeNode> ();
Team = Team.NONE;
}
@@ -37,7 +37,7 @@ namespace LongoMatch.Core.Store
get;
set;
}
-
+
public List<TimeNode> Nodes {
get;
set;
@@ -47,26 +47,44 @@ namespace LongoMatch.Core.Store
get;
set;
}
-
+
[JsonIgnore]
public Time TotalTime {
get {
return new Time (Nodes.Sum (tn => tn.Duration.MSeconds));
}
}
-
- public TimeNode StartTimer (Time start, string name = null) {
+
+ public TimeNode StartTimer (Time start, string name = null)
+ {
TimeNode tn;
if (name == null)
name = Name;
StopTimer (start);
- tn = new TimeNode {Name = name, Start = start};
+ tn = new TimeNode { Name = name, Start = start };
Nodes.Add (tn);
return tn;
}
-
- public void StopTimer (Time stop) {
+
+ public void PauseTimer (Time stop)
+ {
+ TimeNode node = Nodes.LastOrDefault ();
+ if (node == null) {
+ throw new TimerNotRunningException ();
+ }
+ node.Stop = stop;
+ }
+
+ public TimeNode Resume (Time start)
+ {
+ TimeNode tn = new TimeNode { Name = Name, Start = start };
+ Nodes.Add (tn);
+ return tn;
+ }
+
+ public void StopTimer (Time stop)
+ {
if (Nodes.Count > 0) {
TimeNode last = Nodes.Last ();
if (last.Stop == null) {
@@ -75,8 +93,9 @@ namespace LongoMatch.Core.Store
}
Nodes.OrderBy (tn => tn.Start.MSeconds);
}
-
- public void CancelTimer () {
+
+ public void CancelTimer ()
+ {
if (Nodes.Count > 0) {
TimeNode last = Nodes.Last ();
if (last.Stop == null) {
diff --git a/LongoMatch.Core/StyleConf.cs b/LongoMatch.Core/StyleConf.cs
index a606842..18316e2 100644
--- a/LongoMatch.Core/StyleConf.cs
+++ b/LongoMatch.Core/StyleConf.cs
@@ -117,7 +117,9 @@ namespace LongoMatch.Core.Common
public static Color ButtonPenaltyColor = Color.Parse ("#ffc7f0");
public static Color ButtonEventColor = Color.Parse ("#c7e9ff");
-
+ public static int PlayerCapturerIconSize = 20;
+ public static int PlayerCapturerControlsHeight = 30;
+
public int BenchLineWidth = 2;
public int TeamTaggerBenchBorder = 10;
diff --git a/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs b/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
index f4732fc..4d6d860 100644
--- a/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
@@ -19,15 +19,17 @@
//
using System;
using System.Collections.Generic;
+using System.Linq;
using Gtk;
using LongoMatch.Core.Common;
-using LongoMatch.Gui.Helpers;
using LongoMatch.Core.Interfaces.GUI;
using LongoMatch.Core.Interfaces.Multimedia;
-using LongoMatch.Multimedia.Utils;
using LongoMatch.Core.Store;
+using LongoMatch.Gui.Helpers;
+using LongoMatch.Multimedia.Utils;
using Mono.Unix;
using Image = LongoMatch.Core.Common.Image;
+using Misc = LongoMatch.Gui.Helpers.Misc;
namespace LongoMatch.Gui
{
@@ -35,47 +37,71 @@ namespace LongoMatch.Gui
[System.ComponentModel.ToolboxItem(true)]
public partial class CapturerBin : Gtk.Bin, ICapturerBin
{
- CaptureSettings settings;
CapturerType type;
+ CaptureSettings settings;
bool delayStart;
- ICapturer capturer;
- int periodIndex;
Period currentPeriod;
- Time ellapsedTime;
- List<string> periods;
+ uint timeoutID;
+ TimeNode currentTimeNode;
+ Time accumTime;
+ DateTime currentPeriodStart;
+ List<string> gamePeriods;
public CapturerBin ()
{
this.Build ();
- recbutton.Visible = false;
- stopbutton.Visible = false;
- finishbutton.Visible = false;
- cancelbutton.Visible = true;
LongoMatch.Gui.Helpers.Misc.SetFocus (vbox1, false);
- videodrawingarea.CanFocus = true;
- ConnectSignals ();
- ellapsedTime = new Time (0);
+ videowindow.ReadyEvent += HandleReady;
+ videowindow.ExposeEvent += HandleExposeEvent;
+ videowindow.CanFocus = true;
+ recbutton.Clicked += (sender, e) => StartPeriod ();
+ stopbutton.Clicked += (sender, e) => StopPeriod ();
+ pausebutton.Clicked += (sender, e) => PausePeriod ();
+ resumebutton.Clicked += (sender, e) => ResumePeriod ();
+ savebutton.Clicked += HandleSaveClicked;
+ cancelbutton.Clicked += HandleCloseClicked;
+ recimage.Pixbuf = Misc.LoadIcon ("longomatch-record",
+ StyleConf.PlayerCapturerIconSize);
+ stopimage.Pixbuf = Misc.LoadIcon ("longomatch-stop",
+ StyleConf.PlayerCapturerIconSize);
+ pauseimage.Pixbuf = Misc.LoadIcon ("longomatch-pause-clock",
+ StyleConf.PlayerCapturerIconSize);
+ pauseimage.Pixbuf = Misc.LoadIcon ("longomatch-resume-clock",
+ StyleConf.PlayerCapturerIconSize);
+ saveimage.Pixbuf = Misc.LoadIcon ("longomatch-save",
+ StyleConf.PlayerCapturerIconSize);
+ resumeimage.Pixbuf = Misc.LoadIcon ("longomatch-pause-clock",
+ StyleConf.PlayerCapturerIconSize);
+ cancelimage.Pixbuf = Misc.LoadIcon ("longomatch-cancel-rec",
+ StyleConf.PlayerCapturerIconSize);
+ Periods = new List<Period> ();
+ Reset ();
+ Mode = CapturerType.Live;
+ }
+
+ protected override void OnDestroyed ()
+ {
+ if (timeoutID != 0) {
+ GLib.Source.Remove (timeoutID);
+ }
+ base.OnDestroyed ();
}
public CapturerType Mode {
set {
type = value;
- videodrawingarea.Visible = value == CapturerType.Live;
+ videowindow.Visible = value == CapturerType.Live;
+ if (type == CapturerType.Fake) {
+ SetStyle (StyleConf.PlayerCapturerControlsHeight * 2, 24 * 2, 40 * 2);
+ } else {
+ SetStyle (StyleConf.PlayerCapturerControlsHeight, 24, 40);
+ }
}
-
}
public bool Capturing {
get;
- protected set;
- }
-
- public Time CurrentTime {
- get {
- if (capturer == null)
- return new Time (-1);
- return capturer.CurrentTime;
- }
+ set;
}
public CaptureSettings CaptureSettings {
@@ -86,182 +112,239 @@ namespace LongoMatch.Gui
public List<string> PeriodsNames {
set {
- periods = value;
- UpdateLabel (value [0]);
+ gamePeriods = value;
+ if (gamePeriods != null && gamePeriods.Count > 0) {
+ periodlabel.Markup = gamePeriods [0];
+ } else {
+ periodlabel.Markup = "1";
+ }
}
get {
- return periods;
+ return gamePeriods;
}
}
+ public ICapturer Capturer {
+ get;
+ set;
+ }
+
public List<Period> Periods {
set;
get;
}
- public void StartPeriod ()
- {
- if (capturer == null)
- return;
+ public Time CurrentTime {
+ get {
+ int timeDiff;
- if (currentPeriod != null) {
- throw new Exception ("Period already started");
+ timeDiff = (int)(DateTime.UtcNow - currentPeriodStart).TotalMilliseconds;
+ return new Time (accumTime.MSeconds + timeDiff);
}
+ }
- currentPeriod = new Period { Name = periods[periodIndex] };
- currentPeriod.StartTimer (ellapsedTime);
- Log.Information (String.Format ("Start new period {0} at {1}",
- currentPeriod.Name, ellapsedTime.ToSecondsString ()));
- Capturing = true;
+ Time EllapsedTime {
+ get {
+ if (currentPeriod != null) {
+ return currentPeriod.TotalTime;
+ } else {
+ return new Time (0);
+ }
+
+ }
+ }
+
+ public void StartPeriod ()
+ {
+ string periodName;
+
recbutton.Visible = false;
- stopbutton.Visible = true;
- finishbutton.Visible = true;
- if (Periods.Count == 0) {
- capturer.Start ();
+ pausebutton.Visible = savebutton.Visible = stopbutton.Visible = true;
+
+ if (PeriodsNames != null && PeriodsNames.Count > Periods.Count) {
+ periodName = PeriodsNames [Periods.Count];
} else {
- capturer.TogglePause ();
+ periodName = (Periods.Count + 1).ToString ();
}
- if (periodIndex + 1 == periods.Count) {
- stopbutton.Visible = false;
+ currentPeriod = new Period { Name = periodName };
+
+ currentTimeNode = currentPeriod.StartTimer (accumTime, periodName);
+ currentTimeNode.Stop = currentTimeNode.Start;
+ currentPeriodStart = DateTime.UtcNow;
+ timeoutID = GLib.Timeout.Add (20, UpdateTime);
+ if (Capturer != null) {
+ if (Periods.Count == 0) {
+ Capturer.Start ();
+ } else {
+ Capturer.TogglePause ();
+ }
}
- UpdateLabel (currentPeriod.Name);
+ periodlabel.Markup = currentPeriod.Name;
+ Capturing = true;
Periods.Add (currentPeriod);
+ Log.Debug ("Start new period start=", currentTimeNode.Start.ToMSecondsString ());
}
public void StopPeriod ()
{
- string msg;
-
- msg = Catalog.GetString ("Do you want to stop the current period?");
-
- if (!MessagesHelpers.QuestionMessage (this, msg)) {
- return;
- }
- if (currentPeriod == null) {
- throw new Exception ("Period not started");
+ GLib.Source.Remove (timeoutID);
+ if (currentPeriod != null) {
+ currentPeriod.StopTimer (CurrentTime);
+ accumTime = CurrentTime;
+ Log.Debug ("Stop period stop=", accumTime.ToMSecondsString ());
}
-
- Log.Information (String.Format ("Stop period {0} at {1}",
- currentPeriod.Name, ellapsedTime.ToSecondsString ()));
- periodIndex ++;
- Capturing = false;
- capturer.TogglePause ();
- currentPeriod.StopTimer (ellapsedTime);
- UpdateLabel (periods [periodIndex]);
+ currentTimeNode = null;
currentPeriod = null;
+
recbutton.Visible = true;
- stopbutton.Visible = false;
+ pausebutton.Visible = resumebutton.Visible = stopbutton.Visible = false;
+ if (Capturer != null && Capturing) {
+ Capturer.TogglePause ();
+ }
+ Capturing = false;
}
- public void Stop ()
+ public void PausePeriod ()
{
if (currentPeriod != null) {
- Log.Information (String.Format ("Stop period {0} at {1}",
- currentPeriod.Name,
ellapsedTime.ToSecondsString ()));
- currentPeriod.StopTimer (ellapsedTime);
+ Log.Debug ("Pause period at currentTime=", CurrentTime.ToMSecondsString ());
+ currentPeriod.PauseTimer (CurrentTime);
}
- Log.Information ("Stop capture");
- capturer.Stop ();
+ currentTimeNode = null;
+ pausebutton.Visible = false;
+ resumebutton.Visible = true;
+ Capturing = false;
}
- public void Run (CaptureSettings settings)
+ public void ResumePeriod ()
{
- /* Close any previous instance of the capturer */
- Close ();
-
- capturer = Config.MultimediaToolkit.GetCapturer (type);
- capturer.EllapsedTime += OnTick;
- this.settings = settings;
- if (type != CapturerType.Live) {
- capturer.Error += OnError;
- capturer.DeviceChange += OnDeviceChange;
- videodrawingarea.DoubleBuffered = true;
- } else {
- videodrawingarea.DoubleBuffered = false;
- }
- if (type == CapturerType.Fake || videodrawingarea.IsRealized) {
- Configure ();
- capturer.Run ();
- } else {
- delayStart = true;
+ Log.Debug ("Resume period at currentTime=", CurrentTime.ToMSecondsString ());
+ currentTimeNode = currentPeriod.Resume (CurrentTime);
+ pausebutton.Visible = true;
+ resumebutton.Visible = false;
+ Capturing = true;
+ }
+
+ void SetStyle (int height, int fontSize, int timeWidth)
+ {
+ string font = String.Format ("Ubuntu {0}px", fontSize);
+ Pango.FontDescription desc = Pango.FontDescription.FromString (font);
+
+ controllerbox.HeightRequest = height;
+ hourseventbox.ModifyBg (StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteBackgroundDark));
+ hourlabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ hourlabel.ModifyFont (desc);
+ hourseventbox.WidthRequest = timeWidth;
+ minuteseventbox.ModifyBg (StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteBackgroundDark));
+ minuteslabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ minuteslabel.ModifyFont (desc);
+ minuteseventbox.WidthRequest = timeWidth;
+ secondseventbox.ModifyBg (StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteBackgroundDark));
+ secondslabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ secondslabel.ModifyFont (desc);
+ secondseventbox.WidthRequest = timeWidth;
+ label1.ModifyFont (desc);
+ label1.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ label2.ModifyFont (desc);
+ label2.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ periodlabel.ModifyFont (desc);
+ periodlabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+
+ }
+
+ bool UpdateTime ()
+ {
+ if (currentTimeNode != null) {
+ currentTimeNode.Stop = CurrentTime;
}
- Periods = new List<Period> ();
+ hourlabel.Markup = EllapsedTime.Hours.ToString ("d2");
+ minuteslabel.Markup = EllapsedTime.Minutes.ToString ("d2");
+ secondslabel.Markup = EllapsedTime.Seconds.ToString ("d2");
+ Config.EventsBroker.EmitCapturerTick (CurrentTime);
+ return true;
}
- public void Close ()
+ void HandleSaveClicked (object sender, EventArgs e)
{
- bool stop = Capturing;
+ string msg = Catalog.GetString ("Do you want to finish the current capture?");
+ if (MessagesHelpers.QuestionMessage (this, msg)) {
+ Config.EventsBroker.EmitCaptureFinished (false);
+ }
+ }
- /* resetting common properties */
- stopbutton.Visible = false;
- finishbutton.Visible = false;
- recbutton.Visible = false;
- Capturing = false;
+ void HandleCloseClicked (object sender, EventArgs e)
+ {
+ string msg = Catalog.GetString ("Do you want to close and cancell the current
capture?");
+ if (MessagesHelpers.QuestionMessage (this, msg)) {
+ Config.EventsBroker.EmitCaptureFinished (true);
+ }
+ }
- if (capturer == null)
- return;
+ public void Run (CaptureSettings settings)
+ {
+ Reset ();
+ if (type == CapturerType.Live) {
+ Capturer = Config.MultimediaToolkit.GetCapturer ();
+ this.settings = settings;
+ videowindow.Ratio = (float)settings.EncodingSettings.VideoStandard.Width /
+ settings.EncodingSettings.VideoStandard.Height;
+ Capturer.Error += OnError;
+ Capturer.DeviceChange += OnDeviceChange;
+ Periods = new List<Period> ();
+ if (videowindow.Ready) {
+ Configure ();
+ } else {
+ delayStart = true;
+ }
+ }
+ }
+ public void Close ()
+ {
+ StopPeriod ();
/* stopping and closing capturer */
- try {
- if (Capturing) {
- capturer.Stop ();
- }
- capturer.Close ();
- if (type == CapturerType.Live) {
- /* release and dispose live capturer */
- capturer.Error -= OnError;
- capturer.DeviceChange -= OnDeviceChange;
- capturer.Dispose ();
+ if (Capturer != null) {
+ try {
+ Capturer.Close ();
+ Capturer.Error -= OnError;
+ Capturer.DeviceChange -= OnDeviceChange;
+ Capturer.Dispose ();
+ } catch (Exception ex) {
+ Log.Exception (ex);
}
- } catch (Exception ex) {
- Log.Exception (ex);
}
- capturer = null;
+ Capturer = null;
}
public Image CurrentMiniatureFrame {
get {
- if (capturer == null)
+ if (Capturer == null)
return null;
- Image image = capturer.CurrentFrame;
+ Image image = Capturer.CurrentFrame;
if (image.Value == null)
return null;
- image.ScaleInplace (Constants.MAX_THUMBNAIL_SIZE,
Constants.MAX_THUMBNAIL_SIZE);
+ image.ScaleInplace (Constants.MAX_THUMBNAIL_SIZE,
+ Constants.MAX_THUMBNAIL_SIZE);
return image;
}
}
- void ConnectSignals ()
+ void Reset ()
{
- recbutton.Clicked += (sender, e) => StartPeriod ();
- stopbutton.Clicked += (sender, e) => StopPeriod ();
- finishbutton.Clicked += (sender, e) => {
- string msg = Catalog.GetString ("Do you want to finish the current capture?");
- if (!MessagesHelpers.QuestionMessage (this, msg)) {
- return;
- }
- Config.EventsBroker.EmitCaptureFinished (false);
- };
- cancelbutton.Clicked += (sender, e) => Config.EventsBroker.EmitCaptureFinished (true);
- videodrawingarea.Realized += (sender, e) => {
- if (delayStart) {
- Configure ();
- capturer.Run ();
- }
- };
- }
-
- void UpdateLabel (string name)
- {
- frame1.Label = Catalog.GetString ("Period") + " " + name;
- }
-
- string FormatTime (Period period, Time time)
- {
- return String.Format ("{0} {1}: {2} ", Catalog.GetString ("Period"),
- period.Name, time.ToSecondsString ());
+ currentPeriod = null;
+ currentTimeNode = null;
+ currentPeriodStart = DateTime.UtcNow;
+ accumTime = new Time (0);
+ Capturing = false;
+ Capturer = null;
+ recbutton.Visible = true;
+ stopbutton.Visible = false;
+ pausebutton.Visible = false;
+ savebutton.Visible = false;
+ cancelbutton.Visible = true;
+ resumebutton.Visible = false;
}
void Configure ()
@@ -269,21 +352,28 @@ namespace LongoMatch.Gui
VideoMuxerType muxer;
IntPtr windowHandle = IntPtr.Zero;
- if (capturer == null)
+ if (Capturer == null) {
+ videowindow.Visible = false;
return;
+ }
- recbutton.Visible = true;
/* We need to use Matroska for live replay and remux when the capture is done */
muxer = settings.EncodingSettings.EncodingProfile.Muxer;
if (muxer == VideoMuxerType.Avi || muxer == VideoMuxerType.Mp4) {
settings.EncodingSettings.EncodingProfile.Muxer = VideoMuxerType.Matroska;
}
-
- if (type == CapturerType.Live) {
- windowHandle = WindowHandle.GetWindowHandle (videodrawingarea.GdkWindow);
- }
- capturer.Configure (settings, windowHandle);
+ windowHandle = WindowHandle.GetWindowHandle (videowindow.Window.GdkWindow);
+ Capturer.Configure (settings, windowHandle);
+ settings.EncodingSettings.EncodingProfile.Muxer = muxer;
delayStart = false;
+ Capturer.Run ();
+ }
+
+ void HandleReady (object sender, EventArgs e)
+ {
+ if (delayStart) {
+ Configure ();
+ }
}
void DeviceChanged (int deviceID)
@@ -291,41 +381,17 @@ namespace LongoMatch.Gui
string msg;
/* device disconnected, pause capture */
if (deviceID == -1) {
- if (Capturing)
- capturer.TogglePause ();
- recbutton.Sensitive = false;
+ PausePeriod ();
msg = Catalog.GetString ("Device disconnected. " + "The capture will be
paused");
MessagesHelpers.WarningMessage (this, msg);
} else {
- recbutton.Sensitive = true;
msg = Catalog.GetString ("Device reconnected." + "Do you want to restart the
capture?");
if (MessagesHelpers.QuestionMessage (this, msg, null)) {
- capturer.TogglePause ();
+ ResumePeriod ();
}
}
}
- void OnTick (Time ellapsedTime)
- {
- string text = "";
- Time duration = new Time (0);
-
- this.ellapsedTime = ellapsedTime;
-
- foreach (Period period in Periods) {
- TimeNode tn = period.PeriodNode;
- if (tn.Stop != null) {
- text += FormatTime (period, tn.Duration);
- duration += tn.Duration;
- } else {
- text += FormatTime (period, ellapsedTime - duration);
- break;
- }
- }
- timelabel.Markup = String.Format ("<span font=\"30px bold\">{0}</span> ", text);
- Config.EventsBroker.EmitCapturerTick (ellapsedTime);
- }
-
void OnError (string message)
{
Application.Invoke (delegate {
@@ -339,5 +405,12 @@ namespace LongoMatch.Gui
DeviceChanged (deviceID);
});
}
+
+ void HandleExposeEvent (object o, ExposeEventArgs args)
+ {
+ if (Capturer != null) {
+ Capturer.Expose ();
+ }
+ }
}
}
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
index 630f7a3..6d20cad 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
@@ -52,6 +52,7 @@ namespace LongoMatch.Gui
public event TickHandler Tick;
public event StateChangeHandler PlayStateChanged;
+ public event EventHandler CloseEvent;
const int THUMBNAIL_MAX_WIDTH = 100;
const int SCALE_FPS = 25;
@@ -80,14 +81,22 @@ namespace LongoMatch.Gui
{
this.Build ();
- closebuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-back",
IconSize.Button, 0);
- drawbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-draw",
IconSize.Button, 0);
- playbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-play",
IconSize.Button, 0);
- pausebuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-pause",
IconSize.Button, 0);
- prevbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-rw",
IconSize.Button, 0);
- nextbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-ff",
IconSize.Button, 0);
- volumebuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-volume-hi",
IconSize.Button, 0);
- detachbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-detach",
IconSize.Button, 0);
+ closebuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-cancel-rec",
+ StyleConf.PlayerCapturerIconSize);
+ drawbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-draw",
+ StyleConf.PlayerCapturerIconSize);
+ playbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-play",
+ StyleConf.PlayerCapturerIconSize);
+ pausebuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-pause",
+ StyleConf.PlayerCapturerIconSize);
+ prevbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-rw",
+ StyleConf.PlayerCapturerIconSize);
+ nextbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-ff",
+ StyleConf.PlayerCapturerIconSize);
+ volumebuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-volume-hi",
+ StyleConf.PlayerCapturerIconSize);
+ detachbuttonimage.Pixbuf = Helpers.Misc.LoadIcon ("longomatch-control-detach",
+ StyleConf.PlayerCapturerIconSize);
vwin = new VolumeWindow ();
ConnectSignals ();
@@ -109,6 +118,7 @@ namespace LongoMatch.Gui
lastTime = new Time (0);
length = new Time (0);
vscale1.ModifyFont (FontDescription.FromString (Config.Style.Font + " 8"));
+ controlsbox.HeightRequest = StyleConf.PlayerCapturerControlsHeight;
CreatePlayer ();
}
@@ -187,6 +197,14 @@ namespace LongoMatch.Gui
return player != null ? player.Playing : false;
}
}
+
+ public bool Compact {
+ set {
+ prevbutton.Visible = nextbutton.Visible = jumplabel.Visible =
+ jumpspinbutton.Visible = tlabel.Visible = timelabel.Visible =
+ detachbutton.Visible = vscale1.Visible = !value;
+ }
+ }
#endregion
#region Public methods
@@ -763,6 +781,9 @@ namespace LongoMatch.Gui
void OnClosebuttonClicked (object sender, System.EventArgs e)
{
+ if (CloseEvent != null) {
+ CloseEvent (this, null);
+ }
Config.EventsBroker.EmitLoadEvent (null);
Play ();
}
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
b/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
index ccf6789..3145410 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
@@ -25,6 +25,7 @@ using System.Collections.Generic;
using LongoMatch.Core.Interfaces;
using LongoMatch.Core.Store.Playlists;
using LongoMatch.Core.Interfaces.Multimedia;
+using LongoMatch.Gui.Helpers;
namespace LongoMatch.Gui
{
@@ -49,8 +50,15 @@ namespace LongoMatch.Gui
{
this.Build ();
ConnectSignals();
+ replayhbox.HeightRequest = livebox.HeightRequest =
StyleConf.PlayerCapturerControlsHeight;
+ replayimage.Pixbuf = Misc.LoadIcon ("longomatch-replay",
StyleConf.PlayerCapturerIconSize);
+ liveimage.Pixbuf = Misc.LoadIcon ("longomatch-live",
StyleConf.PlayerCapturerIconSize);
+ livelabel.ModifyFg (Gtk.StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteActive));
+ replaylabel.ModifyFg (Gtk.StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteActive));
+ livebox.Visible = replayhbox.Visible = false;
+ playerbin.CloseEvent += HandleCloseClicked;
}
-
+
protected override void OnDestroyed ()
{
playerbin.Destroy ();
@@ -63,31 +71,36 @@ namespace LongoMatch.Gui
mode = value;
if (mode == PlayerOperationMode.Player) {
ShowPlayer();
+ playerbin.Compact = false;
} else {
- if (value == PlayerOperationMode.FakeCapturer) {
- capturerbin.Mode = CapturerType.Fake;
- } else {
- capturerbin.Mode = CapturerType.Live;
- }
ShowCapturer();
+ playerbin.Compact = true;
}
- backtolivebutton.Visible = false;
Log.Debug ("CapturerPlayer setting mode " + value);
backLoaded = false;
}
}
public void ShowPlayer () {
- playerbin.Visible = true;
+ playerbox.Visible = true;
+ replayhbox.Visible = false;
if (mode == PlayerOperationMode.PreviewCapturer && Config.ReviewPlaysInSameWindow)
- capturerbin.Visible = true;
+ capturerbox.Visible = true;
else
- capturerbin.Visible = false;
+ capturerbox.Visible = false;
}
public void ShowCapturer () {
- playerbin.Visible = false;
- capturerbin.Visible = true;
+ playerbox.Visible = false;
+ livebox.Visible = false;
+ capturerbox.Visible = true;
+ }
+
+ void HandleCloseClicked (object sender, EventArgs e)
+ {
+ livebox.Visible = replayhbox.Visible = false;
+ playerbin.Pause ();
+ ShowCapturer ();
}
#region Common
@@ -117,6 +130,7 @@ namespace LongoMatch.Gui
#endregion
#region Capturer
+
public CaptureSettings CaptureSettings {
get {
return capturerbin.CaptureSettings;
@@ -135,7 +149,10 @@ namespace LongoMatch.Gui
}
}
- public List<Period> PeriodsTimers {
+ public List<Period> Periods {
+ get {
+ return capturerbin.Periods;
+ }
set {
capturerbin.Periods = value;
}
@@ -149,13 +166,20 @@ namespace LongoMatch.Gui
capturerbin.StopPeriod ();
}
- public void Stop () {
- capturerbin.Stop ();
- }
-
public void Run (CaptureSettings settings) {
capturerbin.Run (settings);
}
+
+ public void PausePeriod ()
+ {
+ capturerbin.PausePeriod ();
+ }
+
+ public void ResumePeriod ()
+ {
+ capturerbin.ResumePeriod ();
+ }
+
#endregion
@@ -229,9 +253,9 @@ namespace LongoMatch.Gui
public void LoadPlay (MediaFileSet fileSet, TimelineEvent play, Time seekTime, bool playing) {
if (mode == PlayerOperationMode.PreviewCapturer) {
- backtolivebutton.Visible = true;
ShowPlayer ();
LoadBackgroundPlayer(fileSet);
+ livebox.Visible = replayhbox.Visible = true;
}
playerbin.LoadPlay (fileSet, play, seekTime, playing);
}
@@ -279,7 +303,6 @@ namespace LongoMatch.Gui
protected void OnBacktolivebuttonClicked (object sender, System.EventArgs e)
{
- backtolivebutton.Visible = false;
playerbin.Pause();
ShowCapturer ();
}
diff --git a/LongoMatch.GUI.Multimedia/Gui/RecordingController.cs
b/LongoMatch.GUI.Multimedia/Gui/RecordingController.cs
new file mode 100644
index 0000000..ea93345
--- /dev/null
+++ b/LongoMatch.GUI.Multimedia/Gui/RecordingController.cs
@@ -0,0 +1,254 @@
+//
+// Copyright (C) 2014 Andoni Morales Alastruey
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using LongoMatch.Core.Store;
+using LongoMatch.Core.Interfaces.Multimedia;
+using Mono.Unix;
+using LongoMatch.Gui.Helpers;
+using LongoMatch.Core.Common;
+using Gtk;
+using Misc = LongoMatch.Gui.Helpers.Misc;
+
+namespace LongoMatch.Gui
+{
+ [System.ComponentModel.ToolboxItem(true)]
+ public partial class RecordingController : Gtk.Bin
+ {
+ Period currentPeriod;
+ uint timeoutID;
+ TimeNode currentTimeNode;
+ Time accumTime;
+ DateTime currentPeriodStart;
+ List<string> gamePeriods;
+
+ public RecordingController ()
+ {
+ this.Build ();
+ recbutton.Clicked += (sender, e) => StartPeriod ();
+ stopbutton.Clicked += (sender, e) => StopPeriod ();
+ pausebutton.Clicked += (sender, e) => PausePeriod ();
+ resumebutton.Clicked += (sender, e) => ResumePeriod ();
+ savebutton.Clicked += HandleSaveClicked;
+ cancelbutton.Clicked += HandleCloseClicked;
+ recimage.Pixbuf = Misc.LoadIcon ("longomatch-record",
+ StyleConf.PlayerCapturerIconSize);
+ stopimage.Pixbuf = Misc.LoadIcon ("longomatch-stop",
+ StyleConf.PlayerCapturerIconSize);
+ pauseimage.Pixbuf = Misc.LoadIcon ("longomatch-pause-clock",
+ StyleConf.PlayerCapturerIconSize);
+ saveimage.Pixbuf = Misc.LoadIcon ("longomatch-save",
+ StyleConf.PlayerCapturerIconSize);
+ resumeimage.Pixbuf = Misc.LoadIcon ("longomatch-pause-clock",
+ StyleConf.PlayerCapturerIconSize);
+ cancelimage.Pixbuf = Misc.LoadIcon ("longomatch-cancel-rec",
+ StyleConf.PlayerCapturerIconSize);
+ Periods = new List<Period>();
+ hourseventbox.ModifyBg (StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteBackgroundDark));
+ hourlabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ hourlabel.ModifyFont (Pango.FontDescription.FromString ("Ubuntu 24px"));
+ hourseventbox.WidthRequest = 40;
+ minuteseventbox.ModifyBg (StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteBackgroundDark));
+ minuteslabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ minuteslabel.ModifyFont (Pango.FontDescription.FromString ("Ubuntu 24px"));
+ minuteseventbox.WidthRequest = 40;
+ secondseventbox.ModifyBg (StateType.Normal, Misc.ToGdkColor
(Config.Style.PaletteBackgroundDark));
+ secondslabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ secondslabel.ModifyFont (Pango.FontDescription.FromString ("Ubuntu 24px"));
+ secondseventbox.WidthRequest = 40;
+ label1.ModifyFont (Pango.FontDescription.FromString ("Ubuntu 24px"));
+ label1.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ label2.ModifyFont (Pango.FontDescription.FromString ("Ubuntu 24px"));
+ label2.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ periodlabel.ModifyFont (Pango.FontDescription.FromString ("Ubuntu 24px"));
+ periodlabel.ModifyFg (StateType.Normal, Misc.ToGdkColor (Config.Style.PaletteText));
+ Reset ();
+ }
+
+ protected override void OnDestroyed ()
+ {
+ if (timeoutID != 0) {
+ GLib.Source.Remove (timeoutID);
+ }
+ base.OnDestroyed ();
+ }
+
+ public bool Capturing {
+ get;
+ set;
+ }
+
+ public List<string> GamePeriods {
+ set {
+ gamePeriods = value;
+ if (gamePeriods != null && gamePeriods.Count > 0) {
+ periodlabel.Markup = gamePeriods [0];
+ } else {
+ periodlabel.Markup = "1";
+ }
+ }
+ get {
+ return gamePeriods;
+ }
+ }
+
+ public ICapturer Capturer {
+ get;
+ set;
+ }
+
+ public List<Period> Periods {
+ set;
+ get;
+ }
+
+ public void Reset () {
+ currentPeriod = null;
+ currentTimeNode = null;
+ currentPeriodStart = DateTime.UtcNow;
+ accumTime = new Time (0);
+ Capturing = false;
+ recbutton.Visible = true;
+ stopbutton.Visible = false;
+ pausebutton.Visible = false;
+ savebutton.Visible = false;
+ cancelbutton.Visible = true;
+ resumebutton.Visible = false;
+ }
+
+ public void StartPeriod ()
+ {
+ string periodName;
+
+ recbutton.Visible = false;
+ pausebutton.Visible = savebutton.Visible = stopbutton.Visible = true;
+
+ if (GamePeriods != null && GamePeriods.Count > Periods.Count) {
+ periodName = GamePeriods [Periods.Count];
+ } else {
+ periodName = (Periods.Count + 1).ToString ();
+ }
+ currentPeriod = new Period { Name = periodName };
+
+ currentTimeNode = currentPeriod.StartTimer (accumTime, periodName);
+ currentTimeNode.Stop = currentTimeNode.Start;
+ currentPeriodStart = DateTime.UtcNow;
+ timeoutID = GLib.Timeout.Add (20, UpdateTime);
+ if (Capturer != null) {
+ if (Periods.Count == 0) {
+ Capturer.Start ();
+ } else {
+ Capturer.TogglePause ();
+ }
+ }
+ periodlabel.Markup = currentPeriod.Name;
+ Capturing = true;
+ Periods.Add (currentPeriod);
+ Log.Debug ("Start new period start=", currentTimeNode.Start.ToMSecondsString());
+ }
+
+ public void StopPeriod ()
+ {
+ GLib.Source.Remove (timeoutID);
+ if (currentPeriod != null) {
+ currentPeriod.StopTimer (CurrentTime);
+ accumTime = CurrentTime;
+ Log.Debug ("Stop period stop=", accumTime.ToMSecondsString());
+ }
+ currentTimeNode = null;
+ currentPeriod = null;
+
+ recbutton.Visible = true;
+ pausebutton.Visible = resumebutton.Visible = stopbutton.Visible = false;
+ if (Capturer != null && Capturing) {
+ Capturer.TogglePause ();
+ }
+ Capturing = false;
+ }
+
+ public void PausePeriod ()
+ {
+ if (currentPeriod != null) {
+ Log.Debug ("Pause period at currentTime=", CurrentTime.ToMSecondsString());
+ currentPeriod.PauseTimer (CurrentTime);
+ }
+ currentTimeNode = null;
+ pausebutton.Visible = false;
+ resumebutton.Visible = true;
+ Capturing = false;
+ }
+
+ public void ResumePeriod ()
+ {
+ Log.Debug ("Resume period at currentTime=", CurrentTime.ToMSecondsString());
+ currentTimeNode = currentPeriod.Resume (CurrentTime);
+ pausebutton.Visible = true;
+ resumebutton.Visible = false;
+ Capturing = true;
+ }
+
+ Time CurrentTime {
+ get {
+ int timeDiff;
+
+ timeDiff = (int)(DateTime.UtcNow - currentPeriodStart).TotalMilliseconds;
+ return (new Time (accumTime.MSeconds + timeDiff));
+ }
+ }
+
+ public Time EllapsedTime {
+ get {
+ if (currentPeriod != null) {
+ return currentPeriod.TotalTime;
+ } else {
+ return new Time (0);
+ }
+
+ }
+ }
+
+ bool UpdateTime () {
+ if (currentTimeNode != null) {
+ currentTimeNode.Stop = CurrentTime;
+ }
+ hourlabel.Markup = EllapsedTime.Hours.ToString ("d2");
+ minuteslabel.Markup = EllapsedTime.Minutes.ToString ("d2");
+ secondslabel.Markup = EllapsedTime.Seconds.ToString ("d2");
+ Config.EventsBroker.EmitCapturerTick (new Time (Periods.Sum (p =>
p.TotalTime.MSeconds)));
+ return true;
+ }
+
+ void HandleSaveClicked (object sender, EventArgs e)
+ {
+ string msg = Catalog.GetString ("Do you want to finish the current capture?");
+ if (MessagesHelpers.QuestionMessage (this, msg)) {
+ Config.EventsBroker.EmitCaptureFinished (false);
+ }
+ }
+
+ void HandleCloseClicked (object sender, EventArgs e)
+ {
+ string msg = Catalog.GetString ("Do you want to close and cancell the current
capture?");
+ if (MessagesHelpers.QuestionMessage (this, msg)) {
+ Config.EventsBroker.EmitCaptureFinished (true);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/LongoMatch.GUI.Multimedia/Gui/VideoWindow.cs b/LongoMatch.GUI.Multimedia/Gui/VideoWindow.cs
index 6062574..d8c70c7 100644
--- a/LongoMatch.GUI.Multimedia/Gui/VideoWindow.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/VideoWindow.cs
@@ -53,7 +53,7 @@ namespace LongoMatch.Gui
}
set {
base.Visible = value;
- if (value) {
+ if (value && Window.GdkWindow != null) {
// Hack for Windows. Force video window visibility as EventBox
window's might prevent it to be mapped again.
// See for more info
https://code.area51.fluendo.com/private/trac/ticket/26543
Window.GdkWindow.Show ();
diff --git a/LongoMatch.GUI.Multimedia/MultimediaToolkit.cs b/LongoMatch.GUI.Multimedia/MultimediaToolkit.cs
index ada2873..17b400f 100644
--- a/LongoMatch.GUI.Multimedia/MultimediaToolkit.cs
+++ b/LongoMatch.GUI.Multimedia/MultimediaToolkit.cs
@@ -28,10 +28,6 @@ namespace LongoMatch.Video
public class MultimediaToolkit:MultimediaFactory, IMultimediaToolkit
{
-
- public MultimediaToolkit () {
- }
-
public string RemuxFile (MediaFile file, object window) {
LongoMatch.Video.Utils.Remuxer remuxer = new LongoMatch.Video.Utils.Remuxer (file);
return remuxer.Remux (window as Gtk.Window);
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs
index e413b30..027fe4c 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs
@@ -5,17 +5,31 @@ namespace LongoMatch.Gui
public partial class CapturerBin
{
private global::Gtk.VBox vbox1;
- private global::Gtk.DrawingArea videodrawingarea;
- private global::Gtk.HBox hbox2;
- private global::Gtk.Frame frame1;
- private global::Gtk.Alignment GtkAlignment;
- private global::Gtk.HBox buttonsbox;
+ private global::LongoMatch.Gui.VideoWindow videowindow;
+ private global::Gtk.Alignment alignment1;
+ private global::Gtk.HBox controllerbox;
+ private global::Gtk.EventBox hourseventbox;
+ private global::Gtk.Label hourlabel;
+ private global::Gtk.Label label1;
+ private global::Gtk.EventBox minuteseventbox;
+ private global::Gtk.Label minuteslabel;
+ private global::Gtk.Label label2;
+ private global::Gtk.EventBox secondseventbox;
+ private global::Gtk.Label secondslabel;
+ private global::Gtk.Label periodlabel;
+ private global::Gtk.VSeparator vseparator1;
private global::Gtk.Button recbutton;
+ private global::Gtk.Image recimage;
private global::Gtk.Button stopbutton;
- private global::Gtk.Button finishbutton;
+ private global::Gtk.Image stopimage;
+ private global::Gtk.Button pausebutton;
+ private global::Gtk.Image pauseimage;
+ private global::Gtk.Button resumebutton;
+ private global::Gtk.Image resumeimage;
+ private global::Gtk.Button savebutton;
+ private global::Gtk.Image saveimage;
private global::Gtk.Button cancelbutton;
- private global::Gtk.Label GtkLabel3;
- private global::Gtk.Label timelabel;
+ private global::Gtk.Image cancelimage;
protected virtual void Build ()
{
@@ -28,154 +42,216 @@ namespace LongoMatch.Gui
this.vbox1.Name = "vbox1";
this.vbox1.Spacing = 6;
// Container child vbox1.Gtk.Box+BoxChild
- this.videodrawingarea = new global::Gtk.DrawingArea ();
- this.videodrawingarea.Name = "videodrawingarea";
- this.vbox1.Add (this.videodrawingarea);
- global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox1
[this.videodrawingarea]));
+ this.videowindow = new global::LongoMatch.Gui.VideoWindow ();
+ this.videowindow.Events = ((global::Gdk.EventMask)(256));
+ this.videowindow.Name = "videowindow";
+ this.videowindow.Ready = false;
+ this.vbox1.Add (this.videowindow);
+ global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox1
[this.videowindow]));
w1.Position = 0;
// Container child vbox1.Gtk.Box+BoxChild
- this.hbox2 = new global::Gtk.HBox ();
- this.hbox2.Name = "hbox2";
- this.hbox2.Spacing = 6;
- // Container child hbox2.Gtk.Box+BoxChild
- this.frame1 = new global::Gtk.Frame ();
- this.frame1.Name = "frame1";
- this.frame1.ShadowType = ((global::Gtk.ShadowType)(0));
- // Container child frame1.Gtk.Container+ContainerChild
- this.GtkAlignment = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
- this.GtkAlignment.Name = "GtkAlignment";
- this.GtkAlignment.LeftPadding = ((uint)(12));
- // Container child GtkAlignment.Gtk.Container+ContainerChild
- this.buttonsbox = new global::Gtk.HBox ();
- this.buttonsbox.Name = "buttonsbox";
- this.buttonsbox.Spacing = 6;
- // Container child buttonsbox.Gtk.Box+BoxChild
+ this.alignment1 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 1F);
+ this.alignment1.Name = "alignment1";
+ // Container child alignment1.Gtk.Container+ContainerChild
+ this.controllerbox = new global::Gtk.HBox ();
+ this.controllerbox.Name = "controllerbox";
+ this.controllerbox.Spacing = 6;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.hourseventbox = new global::Gtk.EventBox ();
+ this.hourseventbox.Name = "hourseventbox";
+ // Container child hourseventbox.Gtk.Container+ContainerChild
+ this.hourlabel = new global::Gtk.Label ();
+ this.hourlabel.Name = "hourlabel";
+ this.hourlabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>00</b>");
+ this.hourlabel.UseMarkup = true;
+ this.hourseventbox.Add (this.hourlabel);
+ this.controllerbox.Add (this.hourseventbox);
+ global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.hourseventbox]));
+ w3.Position = 0;
+ w3.Expand = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.label1 = new global::Gtk.Label ();
+ this.label1.Name = "label1";
+ this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>:</b>");
+ this.label1.UseMarkup = true;
+ this.controllerbox.Add (this.label1);
+ global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.label1]));
+ w4.Position = 1;
+ w4.Expand = false;
+ w4.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.minuteseventbox = new global::Gtk.EventBox ();
+ this.minuteseventbox.Name = "minuteseventbox";
+ // Container child minuteseventbox.Gtk.Container+ContainerChild
+ this.minuteslabel = new global::Gtk.Label ();
+ this.minuteslabel.Name = "minuteslabel";
+ this.minuteslabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>00</b>");
+ this.minuteslabel.UseMarkup = true;
+ this.minuteseventbox.Add (this.minuteslabel);
+ this.controllerbox.Add (this.minuteseventbox);
+ global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.minuteseventbox]));
+ w6.Position = 2;
+ w6.Expand = false;
+ w6.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.label2 = new global::Gtk.Label ();
+ this.label2.Name = "label2";
+ this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>:</b>");
+ this.label2.UseMarkup = true;
+ this.controllerbox.Add (this.label2);
+ global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.label2]));
+ w7.Position = 3;
+ w7.Expand = false;
+ w7.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.secondseventbox = new global::Gtk.EventBox ();
+ this.secondseventbox.Name = "secondseventbox";
+ // Container child secondseventbox.Gtk.Container+ContainerChild
+ this.secondslabel = new global::Gtk.Label ();
+ this.secondslabel.Name = "secondslabel";
+ this.secondslabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>00</b>");
+ this.secondslabel.UseMarkup = true;
+ this.secondseventbox.Add (this.secondslabel);
+ this.controllerbox.Add (this.secondseventbox);
+ global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.secondseventbox]));
+ w9.Position = 4;
+ w9.Expand = false;
+ w9.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.periodlabel = new global::Gtk.Label ();
+ this.periodlabel.Name = "periodlabel";
+ this.periodlabel.Xpad = 10;
+ this.controllerbox.Add (this.periodlabel);
+ global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.periodlabel]));
+ w10.Position = 5;
+ w10.Expand = false;
+ w10.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.vseparator1 = new global::Gtk.VSeparator ();
+ this.vseparator1.WidthRequest = 60;
+ this.vseparator1.Name = "vseparator1";
+ this.controllerbox.Add (this.vseparator1);
+ global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.vseparator1]));
+ w11.Position = 6;
+ w11.Expand = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
this.recbutton = new global::Gtk.Button ();
- this.recbutton.TooltipMarkup = "Start capturing new period";
+ this.recbutton.TooltipMarkup = "Start recording period";
+ this.recbutton.CanFocus = true;
this.recbutton.Name = "recbutton";
- this.recbutton.UseUnderline = true;
+ this.recbutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child recbutton.Gtk.Container+ContainerChild
- global::Gtk.Alignment w2 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
- // Container child GtkAlignment.Gtk.Container+ContainerChild
- global::Gtk.HBox w3 = new global::Gtk.HBox ();
- w3.Spacing = 2;
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Image w4 = new global::Gtk.Image ();
- w4.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-record",
global::Gtk.IconSize.Menu);
- w3.Add (w4);
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Label w6 = new global::Gtk.Label ();
- w3.Add (w6);
- w2.Add (w3);
- this.recbutton.Add (w2);
- this.buttonsbox.Add (this.recbutton);
- global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.buttonsbox
[this.recbutton]));
- w10.Position = 0;
- w10.Expand = false;
- w10.Fill = false;
- // Container child buttonsbox.Gtk.Box+BoxChild
+ this.recimage = new global::Gtk.Image ();
+ this.recimage.Name = "recimage";
+ this.recimage.Xpad = 5;
+ this.recimage.Ypad = 5;
+ this.recbutton.Add (this.recimage);
+ this.recbutton.Label = null;
+ this.controllerbox.Add (this.recbutton);
+ global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.recbutton]));
+ w13.Position = 7;
+ w13.Expand = false;
+ w13.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
this.stopbutton = new global::Gtk.Button ();
- this.stopbutton.TooltipMarkup = "Stop capturing current period";
+ this.stopbutton.TooltipMarkup = "Stop recording period";
+ this.stopbutton.CanFocus = true;
this.stopbutton.Name = "stopbutton";
- this.stopbutton.UseUnderline = true;
+ this.stopbutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child stopbutton.Gtk.Container+ContainerChild
- global::Gtk.Alignment w11 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
- // Container child GtkAlignment.Gtk.Container+ContainerChild
- global::Gtk.HBox w12 = new global::Gtk.HBox ();
- w12.Spacing = 2;
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Image w13 = new global::Gtk.Image ();
- w13.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-stop",
global::Gtk.IconSize.Menu);
- w12.Add (w13);
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Label w15 = new global::Gtk.Label ();
- w12.Add (w15);
- w11.Add (w12);
- this.stopbutton.Add (w11);
- this.buttonsbox.Add (this.stopbutton);
- global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.buttonsbox
[this.stopbutton]));
- w19.Position = 1;
+ this.stopimage = new global::Gtk.Image ();
+ this.stopimage.Name = "stopimage";
+ this.stopimage.Xpad = 5;
+ this.stopimage.Ypad = 5;
+ this.stopbutton.Add (this.stopimage);
+ this.stopbutton.Label = null;
+ this.controllerbox.Add (this.stopbutton);
+ global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.stopbutton]));
+ w15.Position = 8;
+ w15.Expand = false;
+ w15.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.pausebutton = new global::Gtk.Button ();
+ this.pausebutton.TooltipMarkup = "Pause clock";
+ this.pausebutton.CanFocus = true;
+ this.pausebutton.Name = "pausebutton";
+ this.pausebutton.Relief = ((global::Gtk.ReliefStyle)(2));
+ // Container child pausebutton.Gtk.Container+ContainerChild
+ this.pauseimage = new global::Gtk.Image ();
+ this.pauseimage.Name = "pauseimage";
+ this.pauseimage.Xpad = 5;
+ this.pauseimage.Ypad = 5;
+ this.pausebutton.Add (this.pauseimage);
+ this.pausebutton.Label = null;
+ this.controllerbox.Add (this.pausebutton);
+ global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.pausebutton]));
+ w17.Position = 9;
+ w17.Expand = false;
+ w17.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.resumebutton = new global::Gtk.Button ();
+ this.resumebutton.TooltipMarkup = "Resume clock";
+ this.resumebutton.CanFocus = true;
+ this.resumebutton.Name = "resumebutton";
+ this.resumebutton.Relief = ((global::Gtk.ReliefStyle)(2));
+ // Container child resumebutton.Gtk.Container+ContainerChild
+ this.resumeimage = new global::Gtk.Image ();
+ this.resumeimage.Name = "resumeimage";
+ this.resumeimage.Xpad = 5;
+ this.resumeimage.Ypad = 5;
+ this.resumebutton.Add (this.resumeimage);
+ this.resumebutton.Label = null;
+ this.controllerbox.Add (this.resumebutton);
+ global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.resumebutton]));
+ w19.Position = 10;
w19.Expand = false;
w19.Fill = false;
- // Container child buttonsbox.Gtk.Box+BoxChild
- this.finishbutton = new global::Gtk.Button ();
- this.finishbutton.TooltipMarkup = "End capture";
- this.finishbutton.Name = "finishbutton";
- this.finishbutton.UseUnderline = true;
- // Container child finishbutton.Gtk.Container+ContainerChild
- global::Gtk.Alignment w20 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
- // Container child GtkAlignment.Gtk.Container+ContainerChild
- global::Gtk.HBox w21 = new global::Gtk.HBox ();
- w21.Spacing = 2;
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Image w22 = new global::Gtk.Image ();
- w22.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-ok",
global::Gtk.IconSize.Menu);
- w21.Add (w22);
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Label w24 = new global::Gtk.Label ();
- w21.Add (w24);
- w20.Add (w21);
- this.finishbutton.Add (w20);
- this.buttonsbox.Add (this.finishbutton);
- global::Gtk.Box.BoxChild w28 = ((global::Gtk.Box.BoxChild)(this.buttonsbox
[this.finishbutton]));
- w28.Position = 2;
- w28.Expand = false;
- w28.Fill = false;
- // Container child buttonsbox.Gtk.Box+BoxChild
+ // Container child controllerbox.Gtk.Box+BoxChild
+ this.savebutton = new global::Gtk.Button ();
+ this.savebutton.TooltipMarkup = "Save project";
+ this.savebutton.CanFocus = true;
+ this.savebutton.Name = "savebutton";
+ this.savebutton.Relief = ((global::Gtk.ReliefStyle)(2));
+ // Container child savebutton.Gtk.Container+ContainerChild
+ this.saveimage = new global::Gtk.Image ();
+ this.saveimage.Name = "saveimage";
+ this.saveimage.Xpad = 5;
+ this.saveimage.Ypad = 5;
+ this.savebutton.Add (this.saveimage);
+ this.savebutton.Label = null;
+ this.controllerbox.Add (this.savebutton);
+ global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.savebutton]));
+ w21.Position = 11;
+ w21.Expand = false;
+ w21.Fill = false;
+ // Container child controllerbox.Gtk.Box+BoxChild
this.cancelbutton = new global::Gtk.Button ();
- this.cancelbutton.TooltipMarkup = "Close current capture";
+ this.cancelbutton.TooltipMarkup = "Cancel capture";
this.cancelbutton.CanFocus = true;
this.cancelbutton.Name = "cancelbutton";
- this.cancelbutton.UseUnderline = true;
+ this.cancelbutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child cancelbutton.Gtk.Container+ContainerChild
- global::Gtk.Alignment w29 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
- // Container child GtkAlignment.Gtk.Container+ContainerChild
- global::Gtk.HBox w30 = new global::Gtk.HBox ();
- w30.Spacing = 2;
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Image w31 = new global::Gtk.Image ();
- w31.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-stop",
global::Gtk.IconSize.Menu);
- w30.Add (w31);
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Label w33 = new global::Gtk.Label ();
- w30.Add (w33);
- w29.Add (w30);
- this.cancelbutton.Add (w29);
- this.buttonsbox.Add (this.cancelbutton);
- global::Gtk.Box.BoxChild w37 = ((global::Gtk.Box.BoxChild)(this.buttonsbox
[this.cancelbutton]));
- w37.Position = 3;
- w37.Expand = false;
- w37.Fill = false;
- this.GtkAlignment.Add (this.buttonsbox);
- this.frame1.Add (this.GtkAlignment);
- this.GtkLabel3 = new global::Gtk.Label ();
- this.GtkLabel3.Name = "GtkLabel3";
- this.GtkLabel3.UseMarkup = true;
- this.frame1.LabelWidget = this.GtkLabel3;
- this.hbox2.Add (this.frame1);
- global::Gtk.Box.BoxChild w40 = ((global::Gtk.Box.BoxChild)(this.hbox2 [this.frame1]));
- w40.Position = 0;
- w40.Expand = false;
- w40.Fill = false;
- // Container child hbox2.Gtk.Box+BoxChild
- this.timelabel = new global::Gtk.Label ();
- this.timelabel.Name = "timelabel";
- this.timelabel.LabelProp = "Time: 0:00:00";
- this.timelabel.UseMarkup = true;
- this.hbox2.Add (this.timelabel);
- global::Gtk.Box.BoxChild w41 = ((global::Gtk.Box.BoxChild)(this.hbox2
[this.timelabel]));
- w41.PackType = ((global::Gtk.PackType)(1));
- w41.Position = 1;
- this.vbox1.Add (this.hbox2);
- global::Gtk.Box.BoxChild w42 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.hbox2]));
- w42.Position = 1;
- w42.Expand = false;
+ this.cancelimage = new global::Gtk.Image ();
+ this.cancelimage.Name = "cancelimage";
+ this.cancelimage.Xpad = 5;
+ this.cancelimage.Ypad = 5;
+ this.cancelbutton.Add (this.cancelimage);
+ this.cancelbutton.Label = null;
+ this.controllerbox.Add (this.cancelbutton);
+ global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.controllerbox
[this.cancelbutton]));
+ w23.Position = 12;
+ w23.Expand = false;
+ w23.Fill = false;
+ this.alignment1.Add (this.controllerbox);
+ this.vbox1.Add (this.alignment1);
+ global::Gtk.Box.BoxChild w25 = ((global::Gtk.Box.BoxChild)(this.vbox1
[this.alignment1]));
+ w25.Position = 1;
+ w25.Expand = false;
this.Add (this.vbox1);
if ((this.Child != null)) {
this.Child.ShowAll ();
}
- this.stopbutton.Hide ();
- this.finishbutton.Hide ();
+ this.videowindow.Hide ();
this.Show ();
}
}
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
index 05c8d42..19f7326 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
@@ -93,6 +93,7 @@ namespace LongoMatch.Gui
this.vbox5.Spacing = 6;
// Container child vbox5.Gtk.Box+BoxChild
this.vscale1 = new global::Gtk.VScale (null);
+ this.vscale1.TooltipMarkup = "Playback speed";
this.vscale1.WidthRequest = 36;
this.vscale1.Sensitive = false;
this.vscale1.Name = "vscale1";
@@ -131,6 +132,7 @@ namespace LongoMatch.Gui
this.buttonsbox.Homogeneous = true;
// Container child buttonsbox.Gtk.Box+BoxChild
this.closebutton = new global::Gtk.Button ();
+ this.closebutton.TooltipMarkup = "Close loaded event";
this.closebutton.Name = "closebutton";
this.closebutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child closebutton.Gtk.Container+ContainerChild
@@ -145,6 +147,7 @@ namespace LongoMatch.Gui
w10.Fill = false;
// Container child buttonsbox.Gtk.Box+BoxChild
this.drawbutton = new global::Gtk.Button ();
+ this.drawbutton.TooltipMarkup = "Draw frame";
this.drawbutton.Name = "drawbutton";
this.drawbutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child drawbutton.Gtk.Container+ContainerChild
@@ -159,6 +162,7 @@ namespace LongoMatch.Gui
w12.Fill = false;
// Container child buttonsbox.Gtk.Box+BoxChild
this.playbutton = new global::Gtk.Button ();
+ this.playbutton.TooltipMarkup = "Play";
this.playbutton.Name = "playbutton";
this.playbutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child playbutton.Gtk.Container+ContainerChild
@@ -173,6 +177,7 @@ namespace LongoMatch.Gui
w14.Fill = false;
// Container child buttonsbox.Gtk.Box+BoxChild
this.pausebutton = new global::Gtk.Button ();
+ this.pausebutton.TooltipMarkup = "Pause";
this.pausebutton.Name = "pausebutton";
this.pausebutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child pausebutton.Gtk.Container+ContainerChild
@@ -187,6 +192,7 @@ namespace LongoMatch.Gui
w16.Fill = false;
// Container child buttonsbox.Gtk.Box+BoxChild
this.prevbutton = new global::Gtk.Button ();
+ this.prevbutton.TooltipMarkup = "Previous";
this.prevbutton.Name = "prevbutton";
this.prevbutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child prevbutton.Gtk.Container+ContainerChild
@@ -201,6 +207,7 @@ namespace LongoMatch.Gui
w18.Fill = false;
// Container child buttonsbox.Gtk.Box+BoxChild
this.nextbutton = new global::Gtk.Button ();
+ this.nextbutton.TooltipMarkup = "Next";
this.nextbutton.Sensitive = false;
this.nextbutton.Name = "nextbutton";
this.nextbutton.Relief = ((global::Gtk.ReliefStyle)(2));
@@ -281,6 +288,7 @@ namespace LongoMatch.Gui
w27.Expand = false;
// Container child controlsbox.Gtk.Box+BoxChild
this.volumebutton = new global::Gtk.Button ();
+ this.volumebutton.TooltipMarkup = "Volume";
this.volumebutton.Name = "volumebutton";
this.volumebutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child volumebutton.Gtk.Container+ContainerChild
@@ -295,6 +303,7 @@ namespace LongoMatch.Gui
w29.Fill = false;
// Container child controlsbox.Gtk.Box+BoxChild
this.detachbutton = new global::Gtk.Button ();
+ this.detachbutton.TooltipMarkup = "Detach window";
this.detachbutton.Name = "detachbutton";
this.detachbutton.Relief = ((global::Gtk.ReliefStyle)(2));
// Container child detachbutton.Gtk.Container+ContainerChild
@@ -317,6 +326,7 @@ namespace LongoMatch.Gui
if ((this.Child != null)) {
this.Child.ShowAll ();
}
+ this.videowindow.Hide ();
this.blackboarddrawingarea.Hide ();
this.closebutton.Hide ();
this.prevbutton.Hide ();
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs
index af59547..3ed805e 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs
@@ -4,11 +4,17 @@ namespace LongoMatch.Gui
{
public partial class PlayerCapturerBin
{
- private global::Gtk.VBox vbox2;
private global::Gtk.HBox hbox4;
+ private global::Gtk.VBox playerbox;
+ private global::Gtk.HBox replayhbox;
+ private global::Gtk.Image replayimage;
+ private global::Gtk.Label replaylabel;
private global::LongoMatch.Gui.PlayerBin playerbin;
+ private global::Gtk.VBox capturerbox;
+ private global::Gtk.HBox livebox;
+ private global::Gtk.Image liveimage;
+ private global::Gtk.Label livelabel;
private global::LongoMatch.Gui.CapturerBin capturerbin;
- private global::Gtk.Button backtolivebutton;
protected virtual void Build ()
{
@@ -17,63 +23,97 @@ namespace LongoMatch.Gui
global::Stetic.BinContainer.Attach (this);
this.Name = "LongoMatch.Gui.PlayerCapturerBin";
// Container child LongoMatch.Gui.PlayerCapturerBin.Gtk.Container+ContainerChild
- this.vbox2 = new global::Gtk.VBox ();
- this.vbox2.Name = "vbox2";
- this.vbox2.Spacing = 6;
- // Container child vbox2.Gtk.Box+BoxChild
this.hbox4 = new global::Gtk.HBox ();
this.hbox4.Name = "hbox4";
+ this.hbox4.Homogeneous = true;
this.hbox4.Spacing = 6;
// Container child hbox4.Gtk.Box+BoxChild
+ this.playerbox = new global::Gtk.VBox ();
+ this.playerbox.Name = "playerbox";
+ this.playerbox.Spacing = 6;
+ // Container child playerbox.Gtk.Box+BoxChild
+ this.replayhbox = new global::Gtk.HBox ();
+ this.replayhbox.Name = "replayhbox";
+ this.replayhbox.Spacing = 6;
+ // Container child replayhbox.Gtk.Box+BoxChild
+ this.replayimage = new global::Gtk.Image ();
+ this.replayimage.Name = "replayimage";
+ this.replayhbox.Add (this.replayimage);
+ global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.replayhbox
[this.replayimage]));
+ w1.Position = 0;
+ w1.Expand = false;
+ w1.Fill = false;
+ // Container child replayhbox.Gtk.Box+BoxChild
+ this.replaylabel = new global::Gtk.Label ();
+ this.replaylabel.Name = "replaylabel";
+ this.replaylabel.LabelProp = global::Mono.Unix.Catalog.GetString ("Replay");
+ this.replayhbox.Add (this.replaylabel);
+ global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.replayhbox
[this.replaylabel]));
+ w2.Position = 1;
+ w2.Expand = false;
+ w2.Fill = false;
+ this.playerbox.Add (this.replayhbox);
+ global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.playerbox
[this.replayhbox]));
+ w3.Position = 0;
+ w3.Expand = false;
+ w3.Fill = false;
+ // Container child playerbox.Gtk.Box+BoxChild
this.playerbin = new global::LongoMatch.Gui.PlayerBin ();
this.playerbin.Events = ((global::Gdk.EventMask)(256));
this.playerbin.Name = "playerbin";
- this.hbox4.Add (this.playerbin);
- global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox4
[this.playerbin]));
- w1.Position = 0;
+ this.playerbox.Add (this.playerbin);
+ global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.playerbox
[this.playerbin]));
+ w4.Position = 1;
+ this.hbox4.Add (this.playerbox);
+ global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox4
[this.playerbox]));
+ w5.Position = 0;
// Container child hbox4.Gtk.Box+BoxChild
+ this.capturerbox = new global::Gtk.VBox ();
+ this.capturerbox.Name = "capturerbox";
+ this.capturerbox.Spacing = 6;
+ // Container child capturerbox.Gtk.Box+BoxChild
+ this.livebox = new global::Gtk.HBox ();
+ this.livebox.Name = "livebox";
+ this.livebox.Spacing = 6;
+ // Container child livebox.Gtk.Box+BoxChild
+ this.liveimage = new global::Gtk.Image ();
+ this.liveimage.Name = "liveimage";
+ this.livebox.Add (this.liveimage);
+ global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.livebox
[this.liveimage]));
+ w6.Position = 0;
+ w6.Expand = false;
+ w6.Fill = false;
+ // Container child livebox.Gtk.Box+BoxChild
+ this.livelabel = new global::Gtk.Label ();
+ this.livelabel.Name = "livelabel";
+ this.livelabel.LabelProp = global::Mono.Unix.Catalog.GetString ("Live");
+ this.livebox.Add (this.livelabel);
+ global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.livebox
[this.livelabel]));
+ w7.Position = 1;
+ w7.Expand = false;
+ w7.Fill = false;
+ this.capturerbox.Add (this.livebox);
+ global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.capturerbox
[this.livebox]));
+ w8.Position = 0;
+ w8.Expand = false;
+ w8.Fill = false;
+ // Container child capturerbox.Gtk.Box+BoxChild
this.capturerbin = new global::LongoMatch.Gui.CapturerBin ();
this.capturerbin.Events = ((global::Gdk.EventMask)(256));
this.capturerbin.Name = "capturerbin";
- this.hbox4.Add (this.capturerbin);
- global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox4
[this.capturerbin]));
- w2.Position = 1;
- this.vbox2.Add (this.hbox4);
- global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox4]));
- w3.Position = 0;
- // Container child vbox2.Gtk.Box+BoxChild
- this.backtolivebutton = new global::Gtk.Button ();
- this.backtolivebutton.CanFocus = true;
- this.backtolivebutton.Name = "backtolivebutton";
- this.backtolivebutton.UseUnderline = true;
- // Container child backtolivebutton.Gtk.Container+ContainerChild
- global::Gtk.Alignment w4 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
- // Container child GtkAlignment.Gtk.Container+ContainerChild
- global::Gtk.HBox w5 = new global::Gtk.HBox ();
- w5.Spacing = 2;
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Image w6 = new global::Gtk.Image ();
- w6.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-goto-last",
global::Gtk.IconSize.Menu);
- w5.Add (w6);
- // Container child GtkHBox.Gtk.Container+ContainerChild
- global::Gtk.Label w8 = new global::Gtk.Label ();
- w8.LabelProp = global::Mono.Unix.Catalog.GetString ("Back To Live");
- w8.UseUnderline = true;
- w5.Add (w8);
- w4.Add (w5);
- this.backtolivebutton.Add (w4);
- this.vbox2.Add (this.backtolivebutton);
- global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.vbox2
[this.backtolivebutton]));
- w12.Position = 1;
- w12.Expand = false;
- w12.Fill = false;
- this.Add (this.vbox2);
+ this.capturerbox.Add (this.capturerbin);
+ global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.capturerbox
[this.capturerbin]));
+ w9.Position = 1;
+ this.hbox4.Add (this.capturerbox);
+ global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox4
[this.capturerbox]));
+ w10.Position = 1;
+ this.Add (this.hbox4);
if ((this.Child != null)) {
this.Child.ShowAll ();
}
- this.backtolivebutton.Hide ();
+ this.replayhbox.Hide ();
+ this.livebox.Hide ();
this.Hide ();
- this.backtolivebutton.Clicked += new global::System.EventHandler
(this.OnBacktolivebuttonClicked);
}
}
}
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs b/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs
index 0ada9fc..75935e2 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs
@@ -66,40 +66,6 @@ namespace Stetic
}
}
- internal class IconLoader
- {
- public static Gdk.Pixbuf LoadIcon (Gtk.Widget widget, string name, Gtk.IconSize size)
- {
- Gdk.Pixbuf res = widget.RenderIcon (name, size, null);
- if ((res != null)) {
- return res;
- } else {
- int sz;
- int sy;
- global::Gtk.Icon.SizeLookup (size, out sz, out sy);
- try {
- return Gtk.IconTheme.Default.LoadIcon (name, sz, 0);
- } catch (System.Exception) {
- if ((name != "gtk-missing-image")) {
- return Stetic.IconLoader.LoadIcon (widget,
"gtk-missing-image", size);
- } else {
- Gdk.Pixmap pmap = new Gdk.Pixmap
(Gdk.Screen.Default.RootWindow, sz, sz);
- Gdk.GC gc = new Gdk.GC (pmap);
- gc.RgbFgColor = new Gdk.Color (255, 255, 255);
- pmap.DrawRectangle (gc, true, 0, 0, sz, sz);
- gc.RgbFgColor = new Gdk.Color (0, 0, 0);
- pmap.DrawRectangle (gc, false, 0, 0, (sz - 1), (sz - 1));
- gc.SetLineAttributes (3, Gdk.LineStyle.Solid,
Gdk.CapStyle.Round, Gdk.JoinStyle.Round);
- gc.RgbFgColor = new Gdk.Color (255, 0, 0);
- pmap.DrawLine (gc, (sz / 4), (sz / 4), ((sz - 1) - (sz / 4)),
((sz - 1) - (sz / 4)));
- pmap.DrawLine (gc, ((sz - 1) - (sz / 4)), (sz / 4), (sz / 4),
((sz - 1) - (sz / 4)));
- return Gdk.Pixbuf.FromDrawable (pmap, pmap.Colormap, 0, 0, 0,
0, sz, sz);
- }
- }
- }
- }
- }
-
internal class ActionGroups
{
public static Gtk.ActionGroup GetActionGroup (System.Type type)
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
index bf817ab..2c8fe83 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
@@ -74,7 +74,7 @@
</widget>
</child>
</widget>
- <widget class="Gtk.Bin" id="LongoMatch.Gui.PlayerBin" design-size="922 521">
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.PlayerBin" design-size="1080 433">
<property name="MemberName" />
<child>
<widget class="Gtk.VBox" id="vbox3">
@@ -98,8 +98,9 @@
<child>
<widget class="LongoMatch.Gui.VideoWindow" id="videowindow">
<property name="MemberName" />
+ <property name="Visible">False</property>
<property name="Events">ButtonPressMask</property>
- <property name="Visible">True</property>
+ <property name="Visible">False</property>
<property name="Ready">False</property>
</widget>
<packing>
@@ -144,6 +145,7 @@
<property name="MemberName" />
<property name="WidthRequest">36</property>
<property name="Sensitive">False</property>
+ <property name="Tooltip" translatable="yes">Playback speed</property>
<property name="UpdatePolicy">Discontinuous</property>
<property name="Inverted">True</property>
<property name="Lower">1</property>
@@ -191,6 +193,7 @@
<widget class="Gtk.Button" id="closebutton">
<property name="MemberName" />
<property name="Visible">False</property>
+ <property name="Tooltip" translatable="yes">Close loaded event</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -209,6 +212,7 @@
<child>
<widget class="Gtk.Button" id="drawbutton">
<property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Draw frame</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -227,6 +231,7 @@
<child>
<widget class="Gtk.Button" id="playbutton">
<property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Play</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -245,6 +250,7 @@
<child>
<widget class="Gtk.Button" id="pausebutton">
<property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Pause</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -264,6 +270,7 @@
<widget class="Gtk.Button" id="prevbutton">
<property name="MemberName" />
<property name="Visible">False</property>
+ <property name="Tooltip" translatable="yes">Previous</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -284,6 +291,7 @@
<property name="MemberName" />
<property name="Visible">False</property>
<property name="Sensitive">False</property>
+ <property name="Tooltip" translatable="yes">Next</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -391,6 +399,7 @@
<child>
<widget class="Gtk.Button" id="volumebutton">
<property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Volume</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -409,6 +418,7 @@
<child>
<widget class="Gtk.Button" id="detachbutton">
<property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Detach window</property>
<property name="Type">Custom</property>
<property name="Relief">None</property>
<child>
@@ -437,15 +447,19 @@
</widget>
</child>
</widget>
- <widget class="Gtk.Bin" id="LongoMatch.Gui.CapturerBin" design-size="474 295">
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.CapturerBin" design-size="983 403">
<property name="MemberName" />
<child>
<widget class="Gtk.VBox" id="vbox1">
<property name="MemberName" />
<property name="Spacing">6</property>
<child>
- <widget class="Gtk.DrawingArea" id="videodrawingarea">
+ <widget class="LongoMatch.Gui.VideoWindow" id="videowindow">
<property name="MemberName" />
+ <property name="Visible">False</property>
+ <property name="Events">ButtonPressMask</property>
+ <property name="Visible">False</property>
+ <property name="Ready">False</property>
</widget>
<packing>
<property name="Position">0</property>
@@ -453,122 +467,248 @@
</packing>
</child>
<child>
- <widget class="Gtk.HBox" id="hbox2">
+ <widget class="Gtk.Alignment" id="alignment1">
<property name="MemberName" />
- <property name="Spacing">6</property>
+ <property name="Xscale">0</property>
<child>
- <widget class="Gtk.Frame" id="frame1">
+ <widget class="Gtk.HBox" id="controllerbox">
<property name="MemberName" />
- <property name="ShadowType">None</property>
+ <property name="Spacing">6</property>
<child>
- <widget class="Gtk.Alignment" id="GtkAlignment">
+ <widget class="Gtk.EventBox" id="hourseventbox">
<property name="MemberName" />
- <property name="Xalign">0</property>
- <property name="Yalign">0</property>
- <property name="LeftPadding">12</property>
<child>
- <widget class="Gtk.HBox" id="buttonsbox">
+ <widget class="Gtk.Label" id="hourlabel">
<property name="MemberName" />
- <property name="Spacing">6</property>
- <child>
- <widget class="Gtk.Button" id="recbutton">
- <property name="MemberName" />
- <property name="Tooltip" translatable="yes">Start capturing new period</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-media-record Menu</property>
- <property name="Label" translatable="yes" />
- <property name="UseUnderline">True</property>
- </widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">False</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Button" id="stopbutton">
- <property name="MemberName" />
- <property name="Visible">False</property>
- <property name="Tooltip" translatable="yes">Stop capturing current
period</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-media-stop Menu</property>
- <property name="Label" translatable="yes" />
- <property name="UseUnderline">True</property>
- </widget>
- <packing>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Button" id="finishbutton">
- <property name="MemberName" />
- <property name="Visible">False</property>
- <property name="Tooltip" translatable="yes">End capture</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-ok Menu</property>
- <property name="Label" translatable="yes" />
- <property name="UseUnderline">True</property>
- </widget>
- <packing>
- <property name="Position">2</property>
- <property name="AutoSize">False</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Button" id="cancelbutton">
- <property name="MemberName" />
- <property name="Tooltip" translatable="yes">Close current capture</property>
- <property name="CanFocus">True</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-stop Menu</property>
- <property name="Label" translatable="yes" />
- <property name="UseUnderline">True</property>
- </widget>
- <packing>
- <property name="Position">3</property>
- <property name="AutoSize">True</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
+ <property name="LabelProp" translatable="yes"><b>00</b></property>
+ <property name="UseMarkup">True</property>
</widget>
</child>
</widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ </packing>
</child>
<child>
- <widget class="Gtk.Label" id="GtkLabel3">
+ <widget class="Gtk.Label" id="label1">
<property name="MemberName" />
+ <property name="LabelProp" translatable="yes"><b>:</b></property>
<property name="UseMarkup">True</property>
</widget>
<packing>
- <property name="type">label_item</property>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.EventBox" id="minuteseventbox">
+ <property name="MemberName" />
+ <child>
+ <widget class="Gtk.Label" id="minuteslabel">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes"><b>00</b></property>
+ <property name="UseMarkup">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">2</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="label2">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes"><b>:</b></property>
+ <property name="UseMarkup">True</property>
+ </widget>
+ <packing>
+ <property name="Position">3</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.EventBox" id="secondseventbox">
+ <property name="MemberName" />
+ <child>
+ <widget class="Gtk.Label" id="secondslabel">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes"><b>00</b></property>
+ <property name="UseMarkup">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">4</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="periodlabel">
+ <property name="MemberName" />
+ <property name="Xpad">10</property>
+ </widget>
+ <packing>
+ <property name="Position">5</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.VSeparator" id="vseparator1">
+ <property name="MemberName" />
+ <property name="WidthRequest">60</property>
+ </widget>
+ <packing>
+ <property name="Position">6</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="recbutton">
+ <property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Start recording period</property>
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <property name="Relief">None</property>
+ <child>
+ <widget class="Gtk.Image" id="recimage">
+ <property name="MemberName" />
+ <property name="Xpad">5</property>
+ <property name="Ypad">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">7</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="stopbutton">
+ <property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Stop recording period</property>
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <property name="Relief">None</property>
+ <child>
+ <widget class="Gtk.Image" id="stopimage">
+ <property name="MemberName" />
+ <property name="Xpad">5</property>
+ <property name="Ypad">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">8</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="pausebutton">
+ <property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Pause clock</property>
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <property name="Relief">None</property>
+ <child>
+ <widget class="Gtk.Image" id="pauseimage">
+ <property name="MemberName" />
+ <property name="Xpad">5</property>
+ <property name="Ypad">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">9</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="resumebutton">
+ <property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Resume clock</property>
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <property name="Relief">None</property>
+ <child>
+ <widget class="Gtk.Image" id="resumeimage">
+ <property name="MemberName" />
+ <property name="Xpad">5</property>
+ <property name="Ypad">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">10</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="savebutton">
+ <property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Save project</property>
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <property name="Relief">None</property>
+ <child>
+ <widget class="Gtk.Image" id="saveimage">
+ <property name="MemberName" />
+ <property name="Xpad">5</property>
+ <property name="Ypad">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">11</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="cancelbutton">
+ <property name="MemberName" />
+ <property name="Tooltip" translatable="yes">Cancel capture</property>
+ <property name="CanFocus">True</property>
+ <property name="Type">Custom</property>
+ <property name="Relief">None</property>
+ <child>
+ <widget class="Gtk.Image" id="cancelimage">
+ <property name="MemberName" />
+ <property name="Xpad">5</property>
+ <property name="Ypad">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">12</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
</packing>
</child>
</widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">True</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Label" id="timelabel">
- <property name="MemberName" />
- <property name="LabelProp">Time: 0:00:00</property>
- <property name="UseMarkup">True</property>
- </widget>
- <packing>
- <property name="PackType">End</property>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- </packing>
</child>
</widget>
<packing>
@@ -580,59 +720,131 @@
</widget>
</child>
</widget>
- <widget class="Gtk.Bin" id="LongoMatch.Gui.PlayerCapturerBin" design-size="936 300">
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.PlayerCapturerBin" design-size="1402 300">
<property name="MemberName" />
<property name="Visible">False</property>
<child>
- <widget class="Gtk.VBox" id="vbox2">
+ <widget class="Gtk.HBox" id="hbox4">
<property name="MemberName" />
+ <property name="Homogeneous">True</property>
<property name="Spacing">6</property>
<child>
- <widget class="Gtk.HBox" id="hbox4">
+ <widget class="Gtk.VBox" id="playerbox">
<property name="MemberName" />
<property name="Spacing">6</property>
<child>
- <widget class="LongoMatch.Gui.PlayerBin" id="playerbin">
+ <widget class="Gtk.HBox" id="replayhbox">
<property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
+ <property name="Visible">False</property>
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Image" id="replayimage">
+ <property name="MemberName" />
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="replaylabel">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes">Replay</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder />
+ </child>
</widget>
<packing>
<property name="Position">0</property>
- <property name="AutoSize">True</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
</packing>
</child>
<child>
- <widget class="LongoMatch.Gui.CapturerBin" id="capturerbin">
+ <widget class="LongoMatch.Gui.PlayerBin" id="playerbin">
<property name="MemberName" />
<property name="Events">ButtonPressMask</property>
</widget>
<packing>
<property name="Position">1</property>
- <property name="AutoSize">False</property>
+ <property name="AutoSize">True</property>
</packing>
</child>
</widget>
<packing>
<property name="Position">0</property>
- <property name="AutoSize">True</property>
+ <property name="AutoSize">False</property>
</packing>
</child>
<child>
- <widget class="Gtk.Button" id="backtolivebutton">
+ <widget class="Gtk.VBox" id="capturerbox">
<property name="MemberName" />
- <property name="Visible">False</property>
- <property name="CanFocus">True</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-goto-last Menu</property>
- <property name="Label" translatable="yes">Back To Live</property>
- <property name="UseUnderline">True</property>
- <signal name="Clicked" handler="OnBacktolivebuttonClicked" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.HBox" id="livebox">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Image" id="liveimage">
+ <property name="MemberName" />
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="livelabel">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes">Live</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder />
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.CapturerBin" id="capturerbin">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ <property name="Capturing">False</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</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>
+ <property name="AutoSize">False</property>
</packing>
</child>
</widget>
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml b/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
index 6ba9645..f79f24e 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
@@ -17,6 +17,7 @@
<itemgroup label="PlayerBin Signals">
<signal name="Tick" />
<signal name="PlayStateChanged" />
+ <signal name="CloseEvent" />
</itemgroup>
</signals>
</object>
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
index 23c1ddb..4a9d8dc 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
@@ -31,12 +31,7 @@ namespace LongoMatch.Gui.Component
EventsFilter filter;
bool detachedPlayer;
Gtk.Window playerWindow;
- EventBox backgroundBox;
- PlaysSelectionWidget playsSelection;
- PlayerCapturerBin playercapturer;
- CodingWidget codingwidget;
- HBox videowidgetsbox;
-
+
public AnalysisComponent ()
{
this.Build ();
@@ -49,54 +44,63 @@ namespace LongoMatch.Gui.Component
playercapturer.Destroy ();
base.OnDestroyed ();
}
-
- public IPlayerBin Player{
+
+ public IPlayerBin Player {
get {
return playercapturer;
}
}
-
- public ICapturerBin Capturer{
+
+ public ICapturerBin Capturer {
get {
return playercapturer;
}
}
-
- public void AddPlay(TimelineEvent play) {
- playsSelection.AddPlay(play);
+
+ public void AddPlay (TimelineEvent play)
+ {
+ playsSelection.AddPlay (play);
codingwidget.AddPlay (play);
}
-
- public void UpdateCategories () {
+
+ public void UpdateCategories ()
+ {
codingwidget.UpdateCategories ();
}
-
- public void DeletePlays (List<TimelineEvent> plays) {
- playsSelection.RemovePlays(plays);
+
+ public void DeletePlays (List<TimelineEvent> plays)
+ {
+ playsSelection.RemovePlays (plays);
codingwidget.DeletePlays (plays);
}
-
- public void ZoomIn () {
+
+ public void ZoomIn ()
+ {
codingwidget.ZoomIn ();
}
-
- public void ZoomOut () {
+
+ public void ZoomOut ()
+ {
codingwidget.ZoomOut ();
}
-
- public void FitTimeline () {
+
+ public void FitTimeline ()
+ {
codingwidget.FitTimeline ();
}
-
- public void ShowDashboard () {
+
+ public void ShowDashboard ()
+ {
codingwidget.ShowDashboard ();
}
- public void ShowTimeline () {
+ public void ShowTimeline ()
+ {
codingwidget.ShowTimeline ();
}
-
- public void ShowZonalTags () {
+
+ public void ShowZonalTags ()
+ {
codingwidget.ShowZonalTags ();
}
@@ -123,7 +127,7 @@ namespace LongoMatch.Gui.Component
box = new EventBox ();
box.Name = "lightbackgroundeventbox";
box.KeyPressEvent += (o, args) => {
- Config.EventsBroker.EmitKeyPressed(this, Keyboard.ParseEvent
(args.Event));
+ Config.EventsBroker.EmitKeyPressed (this, Keyboard.ParseEvent
(args.Event));
};
playerWindow.Add (box);
@@ -140,47 +144,27 @@ namespace LongoMatch.Gui.Component
playerWindow.Destroy ();
}
if (isPlaying) {
- playercapturer.Play();
+ playercapturer.Play ();
}
detachedPlayer = !detachedPlayer;
}
-
- public void CloseOpenedProject () {
+
+ public void CloseOpenedProject ()
+ {
openedProject = null;
projectType = ProjectType.None;
if (detachedPlayer)
- DetachPlayer();
- ClearWidgets();
+ DetachPlayer ();
}
-
- public void SetProject(Project project, ProjectType projectType, CaptureSettings props,
EventsFilter filter)
+
+ public void SetProject (Project project, ProjectType projectType, CaptureSettings props,
EventsFilter filter)
{
openedProject = project;
this.projectType = projectType;
this.filter = filter;
- if(projectType == ProjectType.FakeCaptureProject) {
- CreateCodingUI ();
- } else {
- CreatePreviewUI ();
- }
-
codingwidget.SetProject (project, projectType, filter);
playsSelection.SetProject (project, filter);
- }
-
- public void ReloadProject () {
- codingwidget.SetProject (openedProject, projectType, filter);
- playsSelection.SetProject (openedProject, filter);
- }
-
- void CreateCommonUI () {
- backgroundBox = new EventBox ();
- backgroundBox.Name = "lightbackgroundeventbox";
- videowidgetsbox = new HBox ();
- playsSelection = new PlaysSelectionWidget ();
- codingwidget = new CodingWidget();
- playercapturer = new PlayerCapturerBin ();
if (projectType == ProjectType.FileProject) {
playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
} else {
@@ -189,76 +173,15 @@ namespace LongoMatch.Gui.Component
} else {
playercapturer.Mode =
PlayerCapturerBin.PlayerOperationMode.PreviewCapturer;
}
- playercapturer.PeriodsNames = openedProject.Dashboard.GamePeriods;
- playercapturer.PeriodsTimers = openedProject.Periods;
+ playercapturer.PeriodsNames = project.Dashboard.GamePeriods;
+ playercapturer.Periods = project.Periods;
}
- backgroundBox.Show ();
- playsSelection.Show ();
- codingwidget.Show ();
- playercapturer.Show ();
- videowidgetsbox.Show();
}
-
- void CreateCodingUI () {
- HPaned centralpane, rightpane;
- VBox vbox;
-
- ClearWidgets ();
- centralpane = new HPaned();
- rightpane = new HPaned ();
- vbox = new VBox ();
- centralpane.Show ();
- rightpane.Show ();
- vbox.Show();
-
- CreateCommonUI ();
-
- centralpane.Pack1 (playsSelection, true, true);
- centralpane.Pack2 (rightpane, true, true);
- rightpane.Pack1 (vbox, true, true);
- videowidgetsbox.Add (playercapturer);
- vbox.PackStart (videowidgetsbox, false, true, 0);
- vbox.PackEnd (codingwidget, true, true, 0);
- backgroundBox.Add (centralpane);
- Add (backgroundBox);
- }
-
- void CreatePreviewUI () {
- VPaned centralpane;
- HPaned uppane, rightpane;
-
- ClearWidgets ();
-
- centralpane = new VPaned();
- uppane = new HPaned ();
- rightpane = new HPaned();
- centralpane.Show ();
- uppane.Show ();
- rightpane.Show ();
-
- CreateCommonUI ();
-
- centralpane.Pack1 (uppane, true, true);
- centralpane.Pack2 (codingwidget, true, true);
- uppane.Pack1 (playsSelection, true, true);
- uppane.Pack2 (rightpane, true, true);
- videowidgetsbox.Add (playercapturer);
- rightpane.Pack1 (videowidgetsbox, true, true);
- backgroundBox.Add (centralpane);
- Add (backgroundBox);
- }
-
- void ClearWidgets() {
- if (Children.Length == 1)
- Children[0].Destroy();
- if (playsSelection != null)
- playsSelection.Destroy();
- if (codingwidget != null)
- codingwidget.Destroy();
- if (playercapturer != null) {
- playercapturer.Destroy();
- }
+ public void ReloadProject ()
+ {
+ codingwidget.SetProject (openedProject, projectType, filter);
+ playsSelection.SetProject (openedProject, filter);
}
}
}
diff --git a/LongoMatch.GUI/Gui/Component/CodingWidget.cs b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
index d7a2337..87a8beb 100644
--- a/LongoMatch.GUI/Gui/Component/CodingWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
@@ -16,17 +16,15 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
//
using System;
-using System.Linq;
using System.Collections.Generic;
+using System.Linq;
using Gtk;
-using LongoMatch.Core.Handlers;
-using LongoMatch.Core.Store;
using LongoMatch.Core.Common;
-using LongoMatch.Drawing.Widgets;
+using LongoMatch.Core.Store;
+using LongoMatch.Core.Store.Templates;
using LongoMatch.Drawing.Cairo;
-using LongoMatch.Gui.Helpers;
+using LongoMatch.Drawing.Widgets;
using Mono.Unix;
-using LongoMatch.Core.Store.Templates;
namespace LongoMatch.Gui.Component
{
@@ -42,6 +40,7 @@ namespace LongoMatch.Gui.Component
Gdk.Pixbuf timelineIco, timelineActiveIco;
Gdk.Pixbuf posIco, posAtiveIco;
Gdk.Pixbuf dashboardIco, dashboardActiveIco;
+ Gdk.Pixbuf listIco, listActiveIco;
bool sizeAllocated;
public CodingWidget ()
@@ -58,6 +57,7 @@ namespace LongoMatch.Gui.Component
SetTabProps (dashboardhpaned, false);
SetTabProps (timeline, false);
SetTabProps (playspositionviewer1, false);
+ SetTabProps (eventslistwidget, false);
notebook.Page = currentPage = 0;
teamtagger = new TeamTagger (new WidgetWrapper (teamsdrawingarea));
@@ -108,27 +108,35 @@ namespace LongoMatch.Gui.Component
base.OnDestroyed ();
}
- public void ZoomIn () {
+ public void ZoomIn ()
+ {
timeline.ZoomIn ();
}
-
- public void ZoomOut () {
+
+ public void ZoomOut ()
+ {
timeline.ZoomOut ();
}
-
- public void FitTimeline () {
+
+ public void FitTimeline ()
+ {
timeline.Fit ();
}
-
- public void ShowDashboard () {
+
+ public void ShowDashboard ()
+ {
SelectPage (dashboardhpaned);
}
- public void ShowTimeline () {
- SelectPage (timeline);
+ public void ShowTimeline ()
+ {
+ if (projectType == ProjectType.FileProject) {
+ SelectPage (timeline);
+ }
}
-
- public void ShowZonalTags () {
+
+ public void ShowZonalTags ()
+ {
SelectPage (playspositionviewer1);
}
@@ -145,13 +153,18 @@ namespace LongoMatch.Gui.Component
if (project != null) {
buttonswidget.Project = project;
}
+ buttonswidget.Mode = TagMode.Predefined;
teamtagger.Project = project;
teamtagger.LoadTeams (project.LocalTeamTemplate, project.VisitorTeamTemplate,
project.Dashboard.FieldBackground);
teamtagger.CurrentTime = new Time (0);
if (projectType == ProjectType.FileProject) {
timeline.SetProject (project, filter);
+ } else if (projectType == ProjectType.FakeCaptureProject) {
+ eventslistwidget.SetProject (project, filter);
}
+ eventslistwidget.Visible = projectType == ProjectType.FakeCaptureProject;
+ timeline.Visible = projectType == ProjectType.FileProject;
playspositionviewer1.LoadProject (project, filter);
}
@@ -159,6 +172,8 @@ namespace LongoMatch.Gui.Component
{
if (projectType == ProjectType.FileProject) {
timeline.AddPlay (play);
+ } else if (projectType == ProjectType.FakeCaptureProject) {
+ eventslistwidget.AddPlay (play);
}
playspositionviewer1.AddPlay (play);
}
@@ -167,6 +182,8 @@ namespace LongoMatch.Gui.Component
{
if (projectType == ProjectType.FileProject) {
timeline.RemovePlays (plays);
+ } else if (projectType == ProjectType.FakeCaptureProject) {
+ eventslistwidget.RemovePlays (plays);
}
playspositionviewer1.RemovePlays (plays);
}
@@ -187,6 +204,8 @@ namespace LongoMatch.Gui.Component
dashboardActiveIco = Helpers.Misc.LoadIcon ("longomatch-tab-active-dashboard", s, f);
posIco = Helpers.Misc.LoadIcon ("longomatch-tab-position", s, f);
posAtiveIco = Helpers.Misc.LoadIcon ("longomatch-tab-active-position", s, f);
+ listIco = Helpers.Misc.LoadIcon ("longomatch-tab-dashboard", s, f);
+ listActiveIco = Helpers.Misc.LoadIcon ("longomatch-tab-active-dashboard", s, f);
}
void SelectPage (Widget widget)
@@ -218,6 +237,8 @@ namespace LongoMatch.Gui.Component
icon = active ? dashboardActiveIco : dashboardIco;
} else if (widget == playspositionviewer1) {
icon = active ? posAtiveIco : posIco;
+ } else if (widget == eventslistwidget) {
+ icon = active ? listActiveIco : listIco;
} else {
return;
}
@@ -290,9 +311,9 @@ namespace LongoMatch.Gui.Component
void HandlePlayersSelectionChangedEvent (List<Player> players)
{
- selectedPlayers = players.ToList();
+ selectedPlayers = players.ToList ();
}
-
+
void HandleNewTagEvent (EventType eventType, List<Player> players, Team team, List<Tag> tags,
Time start, Time stop, Time eventTime, Score score, PenaltyCard card)
{
@@ -300,9 +321,6 @@ namespace LongoMatch.Gui.Component
play.Team = teamtagger.SelectedTeam;
play.Players = selectedPlayers ?? new List<Player> ();
play.Tags = tags ?? new List<Tag> ();
- if (!project.Dashboard.DisablePopupWindow) {
- Config.GUIToolkit.EditPlay (play, project, true, true, true, true);
- }
teamtagger.ResetSelection ();
selectedPlayers = null;
Config.EventsBroker.EmitNewEvent (play);
@@ -313,7 +331,7 @@ namespace LongoMatch.Gui.Component
{
Config.EventsBroker.EmitSubstitutionEvent (team, p1, p2, reason, time);
}
-
+
void HandleSizeAllocated (object o, SizeAllocatedArgs args)
{
if (!sizeAllocated) {
@@ -327,7 +345,6 @@ namespace LongoMatch.Gui.Component
{
timeline.AddTimerNode (timer, tn);
}
-
}
}
diff --git a/LongoMatch.GUI/Gui/Component/EventsListWidget.cs
b/LongoMatch.GUI/Gui/Component/EventsListWidget.cs
new file mode 100644
index 0000000..b1de796
--- /dev/null
+++ b/LongoMatch.GUI/Gui/Component/EventsListWidget.cs
@@ -0,0 +1,85 @@
+//
+// Copyright (C) 2014 Andoni Morales Alastruey
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+using LongoMatch.Core.Store;
+using LongoMatch.Core.Common;
+using System.Collections.Generic;
+
+namespace LongoMatch.Gui.Component
+{
+ [System.ComponentModel.ToolboxItem(true)]
+ public partial class EventsListWidget : Gtk.Bin
+ {
+ Project project;
+
+ public EventsListWidget ()
+ {
+ this.Build ();
+ localPlayersList.Team = Team.LOCAL;
+ visitorPlayersList.Team = Team.VISITOR;
+ playsnotebook.Page = 0;
+ playsList1.HeightRequest = StyleConf.PlayerCapturerControlsHeight;
+ Config.EventsBroker.TeamTagsChanged += UpdateTeamsModels;
+ }
+
+ protected override void OnDestroyed ()
+ {
+ Config.EventsBroker.TeamTagsChanged -= UpdateTeamsModels;
+ playsList.Project = null;
+ localPlayersList.Clear();
+ visitorPlayersList.Clear();
+ playsList1.Destroy ();
+ base.OnDestroyed ();
+ }
+
+ public void SetProject (Project project, EventsFilter filter)
+ {
+ this.project = project;
+ playsList.Filter = filter;
+ localPlayersList.Filter = filter;
+ visitorPlayersList.Filter = filter;
+ playsList.Project = project;
+ visitorPlayersList.Project = project;
+ localPlayersList.Project = project;
+ visitorPlaysList.LabelProp = project.VisitorTeamTemplate.TeamName;
+ localPlaysList.LabelProp = project.LocalTeamTemplate.TeamName;
+ UpdateTeamsModels ();
+ }
+
+ public void AddPlay(TimelineEvent play) {
+ playsList.AddPlay(play);
+ localPlayersList.AddEvent (play);
+ visitorPlayersList.AddEvent (play);
+ }
+
+ public void RemovePlays (List<TimelineEvent> plays) {
+ playsList.RemovePlays(plays);
+ localPlayersList.RemoveEvents (plays);
+ visitorPlayersList.RemoveEvents (plays);
+ }
+
+ void UpdateTeamsModels() {
+ if (project == null)
+ return;
+ localPlayersList.SetTeam(project.LocalTeamTemplate, project.Timeline);
+ visitorPlayersList.SetTeam(project.VisitorTeamTemplate, project.Timeline);
+ }
+
+ }
+}
+
diff --git a/LongoMatch.GUI/Gui/Component/FakeAnalysisComponent.cs
b/LongoMatch.GUI/Gui/Component/FakeAnalysisComponent.cs
new file mode 100644
index 0000000..e38843e
--- /dev/null
+++ b/LongoMatch.GUI/Gui/Component/FakeAnalysisComponent.cs
@@ -0,0 +1,114 @@
+//
+// Copyright (C) 2014 Andoni Morales Alastruey
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+using LongoMatch.Core.Interfaces.GUI;
+using LongoMatch.Core.Store;
+using LongoMatch.Core.Common;
+using System.Collections.Generic;
+
+namespace LongoMatch.Gui.Component
+{
+ [System.ComponentModel.ToolboxItem(true)]
+ public partial class FakeAnalysisComponent : Gtk.Bin, IAnalysisWindow
+ {
+
+ public FakeAnalysisComponent ()
+ {
+ this.Build ();
+ capturerbin.Mode = CapturerType.Live;
+ }
+ #region IAnalysisWindow implementation
+ public void SetProject (Project project, ProjectType projectType, CaptureSettings props,
EventsFilter filter)
+ {
+ codingwidget1.SetProject (project, projectType, filter);
+ }
+
+ public void ReloadProject ()
+ {
+ }
+
+ public void CloseOpenedProject ()
+ {
+ }
+
+ public void AddPlay (TimelineEvent play)
+ {
+ codingwidget1.AddPlay (play);
+ }
+
+ public void DeletePlays (List<TimelineEvent> plays)
+ {
+ codingwidget1.DeletePlays (plays);
+ }
+
+ public void UpdateCategories ()
+ {
+ codingwidget1.UpdateCategories ();
+ }
+
+ public void DetachPlayer ()
+ {
+ }
+
+ public void ZoomIn ()
+ {
+ }
+
+ public void ZoomOut ()
+ {
+ }
+
+ public void FitTimeline ()
+ {
+ }
+
+ public void ShowDashboard ()
+ {
+ codingwidget1.ShowDashboard ();
+ }
+
+ public void ShowTimeline ()
+ {
+ codingwidget1.ShowTimeline ();
+ }
+
+ public void ShowZonalTags ()
+ {
+ codingwidget1.ShowZonalTags ();
+ }
+
+ public void ClickButton (DashboardButton button)
+ {
+ codingwidget1.ClickButton (button);
+ }
+
+ public IPlayerBin Player {
+ get {
+ return null;
+ }
+ }
+
+ public ICapturerBin Capturer {
+ get {
+ return capturerbin;
+ }
+ }
+ #endregion
+ }
+}
+
diff --git a/LongoMatch.GUI/Gui/Component/PlayListWidget.cs b/LongoMatch.GUI/Gui/Component/PlayListWidget.cs
index 0abd180..08c6636 100644
--- a/LongoMatch.GUI/Gui/Component/PlayListWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlayListWidget.cs
@@ -44,6 +44,7 @@ namespace LongoMatch.Gui.Component
newvideobutton.CanFocus = false;
Config.EventsBroker.PlaylistsChangedEvent += HandlePlaylistsChangedEvent;
Config.EventsBroker.PlaylistElementSelectedEvent +=
HandlePlaylistElementSelectedEvent;
+ hbox2.HeightRequest = StyleConf.PlayerCapturerControlsHeight;
}
protected override void OnDestroyed ()
diff --git a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
index 9c185f3..1cf4516 100644
--- a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
@@ -34,6 +34,8 @@ namespace LongoMatch.Gui.Component
public partial class PlayersListTreeWidget : Gtk.Bin
{
+ TreeStore team;
+
public PlayersListTreeWidget()
{
this.Build();
@@ -57,8 +59,44 @@ namespace LongoMatch.Gui.Component
}
}
+ public void AddEvent (TimelineEvent evt)
+ {
+ TreeIter piter;
+
+ if (evt.Players == null) {
+ return;
+ }
+ team.GetIterFirst (out piter);
+ while (team.IterIsValid (piter)) {
+ Player player = team.GetValue (piter, 0) as Player;
+ if (evt.Players.Contains (player)) {
+ team.AppendValues (piter, evt);
+ }
+ team.IterNext (ref piter);
+ }
+ }
+
+ public void RemoveEvents (List<TimelineEvent> events)
+ {
+ TreeIter piter;
+
+ team.GetIterFirst (out piter);
+ while (team.IterIsValid (piter)) {
+ TreeIter evtIter;
+
+ team.IterChildren (out evtIter, piter);
+ while (team.IterIsValid (evtIter)) {
+ TimelineEvent evt = team.GetValue (evtIter, 0) as TimelineEvent;
+ if (events.Contains (evt)) {
+ team.Remove (ref evtIter);
+ }
+ team.IterNext (ref evtIter);
+ }
+ team.IterNext (ref piter);
+ }
+ }
+
public void SetTeam(TeamTemplate template, List<TimelineEvent> plays) {
- TreeStore team;
Dictionary<Player, TreeIter> playersDict = new Dictionary<Player, TreeIter>();
Log.Debug("Updating teams models with template:" + template);
diff --git a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
index 0f5b5ca..fc419c2 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
@@ -17,15 +17,12 @@
//
using System;
using System.Collections.Generic;
-using Mono.Unix;
+using Gdk;
using Gtk;
-
using LongoMatch.Core.Common;
-using LongoMatch.Core.Handlers;
-using LongoMatch.Core.Interfaces;
using LongoMatch.Core.Store;
+using Mono.Unix;
using Helpers = LongoMatch.Gui.Helpers;
-using Gdk;
namespace LongoMatch.Gui.Component
{
@@ -41,67 +38,48 @@ namespace LongoMatch.Gui.Component
Pixbuf filtersIco, filtersActiveIco;
int currentPage;
-
public PlaysSelectionWidget ()
{
this.Build ();
LoadIcons ();
- localPlayersList.Team = Team.LOCAL;
- visitorPlayersList.Team = Team.VISITOR;
- AddFilters();
- Config.EventsBroker.TeamTagsChanged += UpdateTeamsModels;
- playsnotebook.Page = 0;
+ AddFilters ();
notebook.Page = currentPage = 0;
notebook.SwitchPage += HandleSwitchPage;
- SetTabProps (playsnotebook, false);
+ SetTabProps (eventslistwidget, false);
SetTabProps (playlistwidget, false);
SetTabProps (filtersvbox, false);
- LongoMatch.Gui.Helpers.Misc.SetFocus (this, false, typeof (TreeView));
+ LongoMatch.Gui.Helpers.Misc.SetFocus (this, false, typeof(TreeView));
}
protected override void OnDestroyed ()
{
- Config.EventsBroker.TeamTagsChanged -= UpdateTeamsModels;
- playsList.Project = null;
- localPlayersList.Clear();
- visitorPlayersList.Clear();
- playsList1.Destroy ();
+ eventslistwidget.Destroy ();
playlistwidget.Destroy ();
base.OnDestroyed ();
}
-
#region Plubic Methods
-
- public void SetProject(Project project, EventsFilter filter) {
+ public void SetProject (Project project, EventsFilter filter)
+ {
this.project = project;
- playsList.Filter = filter;
- localPlayersList.Filter = filter;
- visitorPlayersList.Filter = filter;
- playersfilter.SetFilter(filter, project);
- categoriesfilter.SetFilter(filter, project);
- playsList.Project=project;
- visitorPlayersList.Project = project;
- localPlayersList.Project = project;
+ eventslistwidget.SetProject (project, filter);
+ playersfilter.SetFilter (filter, project);
+ categoriesfilter.SetFilter (filter, project);
playlistwidget.Project = project;
- visitorPlaysList.LabelProp = project.VisitorTeamTemplate.TeamName;
- localPlaysList.LabelProp = project.LocalTeamTemplate.TeamName;
- UpdateTeamsModels();
}
-
- public void AddPlay(TimelineEvent play) {
- playsList.AddPlay(play);
- UpdateTeamsModels();
+
+ public void AddPlay (TimelineEvent play)
+ {
+ eventslistwidget.AddPlay (play);
}
-
- public void RemovePlays (List<TimelineEvent> plays) {
- playsList.RemovePlays(plays);
- UpdateTeamsModels();
+
+ public void RemovePlays (List<TimelineEvent> plays)
+ {
+ eventslistwidget.RemovePlays (plays);
}
#endregion
-
void LoadIcons ()
{
int s = StyleConf.NotebookTabIconSize;
@@ -128,7 +106,7 @@ namespace LongoMatch.Gui.Component
notebook.SetTabLabel (widget, img);
}
- if (widget == playsnotebook) {
+ if (widget == eventslistwidget) {
icon = active ? listActiveIco : listIco;
} else if (widget == filtersvbox) {
icon = active ? filtersActiveIco : filtersIco;
@@ -147,25 +125,24 @@ namespace LongoMatch.Gui.Component
currentPage = (int)args.PageNum;
}
- void AddFilters() {
- ScrolledWindow s1 = new ScrolledWindow();
- ScrolledWindow s2 = new ScrolledWindow();
+ void AddFilters ()
+ {
+ Label l;
+ ScrolledWindow s1 = new ScrolledWindow ();
+ ScrolledWindow s2 = new ScrolledWindow ();
- playersfilter = new PlayersFilterTreeView();
- categoriesfilter = new CategoriesFilterTreeView();
+ playersfilter = new PlayersFilterTreeView ();
+ categoriesfilter = new CategoriesFilterTreeView ();
- s1.Add(categoriesfilter);
- s2.Add(playersfilter);
- filtersnotebook.AppendPage(s1, new Gtk.Label(Catalog.GetString("Categories filter")));
- filtersnotebook.AppendPage(s2, new Gtk.Label(Catalog.GetString("Players filter")));
- filtersnotebook.ShowAll();
- }
-
- private void UpdateTeamsModels() {
- if (project == null)
- return;
- localPlayersList.SetTeam(project.LocalTeamTemplate, project.Timeline);
- visitorPlayersList.SetTeam(project.VisitorTeamTemplate, project.Timeline);
+ s1.Add (categoriesfilter);
+ s2.Add (playersfilter);
+ l = new Gtk.Label (Catalog.GetString ("Categories filter"));
+ l.HeightRequest = StyleConf.PlayerCapturerControlsHeight;
+ filtersnotebook.AppendPage (s1, l);
+ l = new Gtk.Label (Catalog.GetString ("Players filter"));
+ l.HeightRequest = StyleConf.PlayerCapturerControlsHeight;
+ filtersnotebook.AppendPage (s2, l);
+ filtersnotebook.ShowAll ();
}
}
}
diff --git a/LongoMatch.GUI/Gui/MainWindow.cs b/LongoMatch.GUI/Gui/MainWindow.cs
index a25a5dc..722a2a4 100644
--- a/LongoMatch.GUI/Gui/MainWindow.cs
+++ b/LongoMatch.GUI/Gui/MainWindow.cs
@@ -117,7 +117,7 @@ namespace LongoMatch.Gui
(parent.Submenu as Menu).Append(item);
}
- public IAnalysisWindow SetProject(Project project, ProjectType projectType, CaptureSettings
props, EventsFilter filter)
+ public IAnalysisWindow SetProject (Project project, ProjectType projectType, CaptureSettings
props, EventsFilter filter)
{
ExportProjectAction1.Sensitive = true;
@@ -129,8 +129,12 @@ namespace LongoMatch.Gui
} else {
Title = Constants.SOFTWARE_NAME;
}
- MakeActionsSensitive(true, projectType);
- analysisWindow = new AnalysisComponent();
+ MakeActionsSensitive (true, projectType);
+ if (projectType == ProjectType.FakeCaptureProject) {
+ analysisWindow = new FakeAnalysisComponent ();
+ } else {
+ analysisWindow = new AnalysisComponent();
+ }
SetPanel (analysisWindow as Widget);
analysisWindow.SetProject (project, projectType, props, filter);
return analysisWindow;
diff --git a/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs b/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs
index 1b2904d..9a5aca6 100644
--- a/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs
@@ -229,20 +229,8 @@ namespace LongoMatch.Gui.Panel
foreach (Device device in devices) {
string deviceElement, deviceName;
-
- if (Environment.OSVersion.Platform == PlatformID.Win32NT) {
- deviceElement = Catalog.GetString ("DirectShow source");
- } else {
- if (device.DeviceType == CaptureSourceType.DV)
- deviceElement = Catalog.GetString (Catalog.GetString ("DV
source"));
- else if (device.DeviceType == CaptureSourceType.System) {
- deviceElement = Catalog.GetString (Catalog.GetString ("System
source"));
- } else {
- deviceElement = Catalog.GetString (Catalog.GetString ("GConf
source"));
- }
- }
deviceName = (device.ID == "") ? Catalog.GetString ("Unknown") : device.ID;
- devicecombobox.AppendText (deviceName + " (" + deviceElement + ")");
+ devicecombobox.AppendText (deviceName);
devicecombobox.Active = 0;
}
}
diff --git a/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs
b/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs
index b51e6de..80bdc18 100644
--- a/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs
@@ -242,7 +242,7 @@ namespace LongoMatch.Gui.Panel
deletedProjects = new List<ProjectDescription>();
foreach (ProjectDescription selectedProject in selectedProjects) {
- if(openedProject == loadedProject) {
+ if (openedProject != null && openedProject.ID == selectedProject.ID) {
MessagesHelpers.WarningMessage (this,
Catalog.GetString("This Project is
actually in use.")+"\n"+
Catalog.GetString("Close it first to
allow its removal from the database"));
diff --git a/LongoMatch.GUI/LongoMatch.GUI.csproj b/LongoMatch.GUI/LongoMatch.GUI.csproj
index 8cf7f03..58090f4 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.csproj
+++ b/LongoMatch.GUI/LongoMatch.GUI.csproj
@@ -165,8 +165,6 @@
<Compile Include="gtk-gui\LongoMatch.Gui.Component.CodingWidget.cs" />
<Compile Include="Gui\Component\ProjectPeriods.cs" />
<Compile Include="gtk-gui\LongoMatch.Gui.Component.ProjectPeriods.cs" />
- <Compile Include="Gui\Component\PeriodsRecoder.cs" />
- <Compile Include="gtk-gui\LongoMatch.Gui.Component.PeriodsRecoder.cs" />
<Compile Include="Gui\Component\PlaysPositionViewer.cs" />
<Compile Include="gtk-gui\LongoMatch.Gui.Component.PlaysPositionViewer.cs" />
<Compile Include="Gui\Menu\PlaysMenu.cs" />
@@ -190,6 +188,10 @@
<Compile Include="Gui\Menu\PeriodsMenu.cs" />
<Compile Include="Gui\Component\HotkeysConfiguration.cs" />
<Compile Include="gtk-gui\LongoMatch.Gui.Component.HotkeysConfiguration.cs" />
+ <Compile Include="Gui\Component\FakeAnalysisComponent.cs" />
+ <Compile Include="gtk-gui\LongoMatch.Gui.Component.FakeAnalysisComponent.cs" />
+ <Compile Include="Gui\Component\EventsListWidget.cs" />
+ <Compile Include="gtk-gui\LongoMatch.Gui.Component.EventsListWidget.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="gtk-gui\gui.stetic">
diff --git a/LongoMatch.GUI/Makefile.am b/LongoMatch.GUI/Makefile.am
index f5780f0..699c40c 100644
--- a/LongoMatch.GUI/Makefile.am
+++ b/LongoMatch.GUI/Makefile.am
@@ -11,13 +11,14 @@ SOURCES = Gui/Cairo.cs \
Gui/Component/CoordinatesTagger.cs \
Gui/Component/DashboardWidget.cs \
Gui/Component/DatePicker.cs \
+ Gui/Component/EventsListWidget.cs \
+ Gui/Component/FakeAnalysisComponent.cs \
Gui/Component/GeneralPreferencesPanel.cs \
Gui/Component/HotkeysConfiguration.cs \
Gui/Component/LiveAnalysisPreferences.cs \
Gui/Component/MediaFileChooser.cs \
Gui/Component/MediaFileSetSelection.cs \
Gui/Component/NotesWidget.cs \
- Gui/Component/PeriodsRecoder.cs \
Gui/Component/PlayListWidget.cs \
Gui/Component/PlayersListTreeWidget.cs \
Gui/Component/PlaysCoordinatesTagger.cs \
@@ -89,6 +90,8 @@ SOURCES = Gui/Cairo.cs \
gtk-gui/LongoMatch.Gui.Component.CoordinatesTagger.cs \
gtk-gui/LongoMatch.Gui.Component.DashboardWidget.cs \
gtk-gui/LongoMatch.Gui.Component.DatePicker.cs \
+ gtk-gui/LongoMatch.Gui.Component.EventsListWidget.cs \
+ gtk-gui/LongoMatch.Gui.Component.FakeAnalysisComponent.cs \
gtk-gui/LongoMatch.Gui.Component.GameViewer.cs \
gtk-gui/LongoMatch.Gui.Component.GeneralPreferencesPanel.cs \
gtk-gui/LongoMatch.Gui.Component.HotkeysConfiguration.cs \
@@ -96,7 +99,6 @@ SOURCES = Gui/Cairo.cs \
gtk-gui/LongoMatch.Gui.Component.MediaFileChooser.cs \
gtk-gui/LongoMatch.Gui.Component.MediaFileSetSelection.cs \
gtk-gui/LongoMatch.Gui.Component.NotesWidget.cs \
- gtk-gui/LongoMatch.Gui.Component.PeriodsRecoder.cs \
gtk-gui/LongoMatch.Gui.Component.PlayListWidget.cs \
gtk-gui/LongoMatch.Gui.Component.PlayersListTreeWidget.cs \
gtk-gui/LongoMatch.Gui.Component.PlaysCoordinatesTagger.cs \
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
index e0c7e2d..95bd48e 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
@@ -6,6 +6,14 @@ namespace LongoMatch.Gui.Component
{
private global::Gtk.UIManager UIManager;
private global::Gtk.HBox hbox1;
+ private global::Gtk.EventBox lightbackgroundeventbox;
+ private global::Gtk.VPaned centralpane;
+ private global::Gtk.HPaned uppane;
+ private global::LongoMatch.Gui.Component.PlaysSelectionWidget playsSelection;
+ private global::Gtk.HPaned rigthpane;
+ private global::Gtk.HBox videowidgetsbox;
+ private global::LongoMatch.Gui.PlayerCapturerBin playercapturer;
+ private global::LongoMatch.Gui.Component.CodingWidget codingwidget;
protected virtual void Build ()
{
@@ -20,6 +28,59 @@ namespace LongoMatch.Gui.Component
this.hbox1 = new global::Gtk.HBox ();
this.hbox1.Name = "hbox1";
this.hbox1.Spacing = 6;
+ // Container child hbox1.Gtk.Box+BoxChild
+ this.lightbackgroundeventbox = new global::Gtk.EventBox ();
+ this.lightbackgroundeventbox.Name = "lightbackgroundeventbox";
+ // Container child lightbackgroundeventbox.Gtk.Container+ContainerChild
+ this.centralpane = new global::Gtk.VPaned ();
+ this.centralpane.CanFocus = true;
+ this.centralpane.Name = "centralpane";
+ this.centralpane.Position = 263;
+ // Container child centralpane.Gtk.Paned+PanedChild
+ this.uppane = new global::Gtk.HPaned ();
+ this.uppane.CanFocus = true;
+ this.uppane.Name = "uppane";
+ this.uppane.Position = 283;
+ // Container child uppane.Gtk.Paned+PanedChild
+ this.playsSelection = new global::LongoMatch.Gui.Component.PlaysSelectionWidget ();
+ this.playsSelection.Events = ((global::Gdk.EventMask)(256));
+ this.playsSelection.Name = "playsSelection";
+ this.uppane.Add (this.playsSelection);
+ global::Gtk.Paned.PanedChild w3 = ((global::Gtk.Paned.PanedChild)(this.uppane
[this.playsSelection]));
+ w3.Resize = false;
+ // Container child uppane.Gtk.Paned+PanedChild
+ this.rigthpane = new global::Gtk.HPaned ();
+ this.rigthpane.CanFocus = true;
+ this.rigthpane.Name = "rigthpane";
+ this.rigthpane.Position = 1219;
+ // Container child rigthpane.Gtk.Paned+PanedChild
+ this.videowidgetsbox = new global::Gtk.HBox ();
+ this.videowidgetsbox.Name = "videowidgetsbox";
+ this.videowidgetsbox.Spacing = 6;
+ // Container child videowidgetsbox.Gtk.Box+BoxChild
+ this.playercapturer = new global::LongoMatch.Gui.PlayerCapturerBin ();
+ this.playercapturer.Events = ((global::Gdk.EventMask)(256));
+ this.playercapturer.Name = "playercapturer";
+ this.videowidgetsbox.Add (this.playercapturer);
+ global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.videowidgetsbox
[this.playercapturer]));
+ w4.Position = 0;
+ this.rigthpane.Add (this.videowidgetsbox);
+ global::Gtk.Paned.PanedChild w5 = ((global::Gtk.Paned.PanedChild)(this.rigthpane
[this.videowidgetsbox]));
+ w5.Resize = false;
+ this.uppane.Add (this.rigthpane);
+ this.centralpane.Add (this.uppane);
+ global::Gtk.Paned.PanedChild w7 = ((global::Gtk.Paned.PanedChild)(this.centralpane
[this.uppane]));
+ w7.Resize = false;
+ // Container child centralpane.Gtk.Paned+PanedChild
+ this.codingwidget = new global::LongoMatch.Gui.Component.CodingWidget ();
+ this.codingwidget.Events = ((global::Gdk.EventMask)(256));
+ this.codingwidget.Name = "codingwidget";
+ this.codingwidget.TagPositions = false;
+ this.centralpane.Add (this.codingwidget);
+ this.lightbackgroundeventbox.Add (this.centralpane);
+ this.hbox1.Add (this.lightbackgroundeventbox);
+ global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox1
[this.lightbackgroundeventbox]));
+ w10.Position = 0;
this.Add (this.hbox1);
if ((this.Child != null)) {
this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
index 62b2123..b5f45ee 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
@@ -14,6 +14,8 @@ namespace LongoMatch.Gui.Component
private global::Gtk.Label label3;
private global::LongoMatch.Gui.Component.PlaysPositionViewer playspositionviewer1;
private global::Gtk.Label label5;
+ private global::LongoMatch.Gui.Component.EventsListWidget eventslistwidget;
+ private global::Gtk.Label label13;
protected virtual void Build ()
{
@@ -25,7 +27,7 @@ namespace LongoMatch.Gui.Component
this.notebook = new global::Gtk.Notebook ();
this.notebook.CanFocus = true;
this.notebook.Name = "notebook";
- this.notebook.CurrentPage = 0;
+ this.notebook.CurrentPage = 3;
this.notebook.TabPos = ((global::Gtk.PositionType)(0));
this.notebook.ShowBorder = false;
// Container child notebook.Gtk.Notebook+NotebookChild
@@ -85,6 +87,19 @@ namespace LongoMatch.Gui.Component
this.label5.LabelProp = global::Mono.Unix.Catalog.GetString ("page3");
this.notebook.SetTabLabel (this.playspositionviewer1, this.label5);
this.label5.ShowAll ();
+ // Container child notebook.Gtk.Notebook+NotebookChild
+ this.eventslistwidget = new global::LongoMatch.Gui.Component.EventsListWidget ();
+ this.eventslistwidget.Events = ((global::Gdk.EventMask)(256));
+ this.eventslistwidget.Name = "eventslistwidget";
+ this.notebook.Add (this.eventslistwidget);
+ global::Gtk.Notebook.NotebookChild w7 =
((global::Gtk.Notebook.NotebookChild)(this.notebook [this.eventslistwidget]));
+ w7.Position = 3;
+ // Notebook tab
+ this.label13 = new global::Gtk.Label ();
+ this.label13.Name = "label13";
+ this.label13.LabelProp = global::Mono.Unix.Catalog.GetString ("page4");
+ this.notebook.SetTabLabel (this.eventslistwidget, this.label13);
+ this.label13.ShowAll ();
this.Add (this.notebook);
if ((this.Child != null)) {
this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.EventsListWidget.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.EventsListWidget.cs
new file mode 100644
index 0000000..cc57210
--- /dev/null
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.EventsListWidget.cs
@@ -0,0 +1,69 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace LongoMatch.Gui.Component
+{
+ public partial class EventsListWidget
+ {
+ private global::Gtk.Notebook playsnotebook;
+ private global::LongoMatch.Gui.Component.PlaysListTreeWidget playsList;
+ private global::Gtk.Label playsList1;
+ private global::LongoMatch.Gui.Component.PlayersListTreeWidget localPlayersList;
+ private global::Gtk.Label localPlaysList;
+ private global::LongoMatch.Gui.Component.PlayersListTreeWidget visitorPlayersList;
+ private global::Gtk.Label visitorPlaysList;
+
+ protected virtual void Build ()
+ {
+ global::Stetic.Gui.Initialize (this);
+ // Widget LongoMatch.Gui.Component.EventsListWidget
+ global::Stetic.BinContainer.Attach (this);
+ this.Name = "LongoMatch.Gui.Component.EventsListWidget";
+ // Container child
LongoMatch.Gui.Component.EventsListWidget.Gtk.Container+ContainerChild
+ this.playsnotebook = new global::Gtk.Notebook ();
+ this.playsnotebook.CanFocus = true;
+ this.playsnotebook.Name = "playsnotebook";
+ this.playsnotebook.CurrentPage = 0;
+ this.playsnotebook.TabPos = ((global::Gtk.PositionType)(3));
+ // Container child playsnotebook.Gtk.Notebook+NotebookChild
+ this.playsList = new global::LongoMatch.Gui.Component.PlaysListTreeWidget ();
+ this.playsList.Events = ((global::Gdk.EventMask)(256));
+ this.playsList.Name = "playsList";
+ this.playsnotebook.Add (this.playsList);
+ // Notebook tab
+ this.playsList1 = new global::Gtk.Label ();
+ this.playsList1.Name = "playsList1";
+ this.playsList1.LabelProp = global::Mono.Unix.Catalog.GetString ("Events");
+ this.playsnotebook.SetTabLabel (this.playsList, this.playsList1);
+ this.playsList1.ShowAll ();
+ // Container child playsnotebook.Gtk.Notebook+NotebookChild
+ this.localPlayersList = new global::LongoMatch.Gui.Component.PlayersListTreeWidget ();
+ this.localPlayersList.Events = ((global::Gdk.EventMask)(256));
+ this.localPlayersList.Name = "localPlayersList";
+ this.playsnotebook.Add (this.localPlayersList);
+ global::Gtk.Notebook.NotebookChild w2 =
((global::Gtk.Notebook.NotebookChild)(this.playsnotebook [this.localPlayersList]));
+ w2.Position = 1;
+ // Notebook tab
+ this.localPlaysList = new global::Gtk.Label ();
+ this.localPlaysList.Name = "localPlaysList";
+ this.playsnotebook.SetTabLabel (this.localPlayersList, this.localPlaysList);
+ this.localPlaysList.ShowAll ();
+ // Container child playsnotebook.Gtk.Notebook+NotebookChild
+ this.visitorPlayersList = new global::LongoMatch.Gui.Component.PlayersListTreeWidget
();
+ this.visitorPlayersList.Events = ((global::Gdk.EventMask)(256));
+ this.visitorPlayersList.Name = "visitorPlayersList";
+ this.playsnotebook.Add (this.visitorPlayersList);
+ global::Gtk.Notebook.NotebookChild w3 =
((global::Gtk.Notebook.NotebookChild)(this.playsnotebook [this.visitorPlayersList]));
+ w3.Position = 2;
+ // Notebook tab
+ this.visitorPlaysList = new global::Gtk.Label ();
+ this.visitorPlaysList.Name = "visitorPlaysList";
+ this.playsnotebook.SetTabLabel (this.visitorPlayersList, this.visitorPlaysList);
+ this.visitorPlaysList.ShowAll ();
+ this.Add (this.playsnotebook);
+ if ((this.Child != null)) {
+ this.Child.ShowAll ();
+ }
+ this.Hide ();
+ }
+ }
+}
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.FakeAnalysisComponent.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.FakeAnalysisComponent.cs
new file mode 100644
index 0000000..5cfdeea
--- /dev/null
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.FakeAnalysisComponent.cs
@@ -0,0 +1,59 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace LongoMatch.Gui.Component
+{
+ public partial class FakeAnalysisComponent
+ {
+ private global::Gtk.EventBox lightbackgroundeventbox;
+ private global::Gtk.VBox vbox3;
+ private global::LongoMatch.Gui.CapturerBin capturerbin;
+ private global::Gtk.HSeparator hseparator1;
+ private global::LongoMatch.Gui.Component.CodingWidget codingwidget1;
+
+ protected virtual void Build ()
+ {
+ global::Stetic.Gui.Initialize (this);
+ // Widget LongoMatch.Gui.Component.FakeAnalysisComponent
+ global::Stetic.BinContainer.Attach (this);
+ this.Name = "LongoMatch.Gui.Component.FakeAnalysisComponent";
+ // Container child
LongoMatch.Gui.Component.FakeAnalysisComponent.Gtk.Container+ContainerChild
+ this.lightbackgroundeventbox = new global::Gtk.EventBox ();
+ this.lightbackgroundeventbox.Name = "lightbackgroundeventbox";
+ // Container child lightbackgroundeventbox.Gtk.Container+ContainerChild
+ this.vbox3 = new global::Gtk.VBox ();
+ this.vbox3.Name = "vbox3";
+ this.vbox3.Spacing = 6;
+ // Container child vbox3.Gtk.Box+BoxChild
+ this.capturerbin = new global::LongoMatch.Gui.CapturerBin ();
+ this.capturerbin.Events = ((global::Gdk.EventMask)(256));
+ this.capturerbin.Name = "capturerbin";
+ this.capturerbin.Capturing = false;
+ this.vbox3.Add (this.capturerbin);
+ global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox3
[this.capturerbin]));
+ w1.Position = 0;
+ w1.Expand = false;
+ // Container child vbox3.Gtk.Box+BoxChild
+ this.hseparator1 = new global::Gtk.HSeparator ();
+ this.hseparator1.Name = "hseparator1";
+ this.vbox3.Add (this.hseparator1);
+ global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox3
[this.hseparator1]));
+ w2.Position = 1;
+ w2.Expand = false;
+ w2.Fill = false;
+ // Container child vbox3.Gtk.Box+BoxChild
+ this.codingwidget1 = new global::LongoMatch.Gui.Component.CodingWidget ();
+ this.codingwidget1.Events = ((global::Gdk.EventMask)(256));
+ this.codingwidget1.Name = "codingwidget1";
+ this.codingwidget1.TagPositions = false;
+ this.vbox3.Add (this.codingwidget1);
+ global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox3
[this.codingwidget1]));
+ w3.Position = 2;
+ this.lightbackgroundeventbox.Add (this.vbox3);
+ this.Add (this.lightbackgroundeventbox);
+ if ((this.Child != null)) {
+ this.Child.ShowAll ();
+ }
+ this.Hide ();
+ }
+ }
+}
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs
index 6452b31..6821bb2 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs
@@ -5,13 +5,7 @@ namespace LongoMatch.Gui.Component
public partial class PlaysSelectionWidget
{
private global::Gtk.Notebook notebook;
- private global::Gtk.Notebook playsnotebook;
- private global::LongoMatch.Gui.Component.PlaysListTreeWidget playsList;
- private global::Gtk.Label playsList1;
- private global::LongoMatch.Gui.Component.PlayersListTreeWidget localPlayersList;
- private global::Gtk.Label localPlaysList;
- private global::LongoMatch.Gui.Component.PlayersListTreeWidget visitorPlayersList;
- private global::Gtk.Label visitorPlaysList;
+ private global::LongoMatch.Gui.Component.EventsListWidget eventslistwidget;
private global::Gtk.Label label1;
private global::LongoMatch.Gui.Component.PlayListWidget playlistwidget;
private global::Gtk.Label label3;
@@ -29,57 +23,20 @@ namespace LongoMatch.Gui.Component
this.notebook = new global::Gtk.Notebook ();
this.notebook.CanFocus = true;
this.notebook.Name = "notebook";
- this.notebook.CurrentPage = 2;
+ this.notebook.CurrentPage = 0;
this.notebook.TabPos = ((global::Gtk.PositionType)(0));
// Container child notebook.Gtk.Notebook+NotebookChild
- this.playsnotebook = new global::Gtk.Notebook ();
- this.playsnotebook.CanFocus = true;
- this.playsnotebook.Name = "playsnotebook";
- this.playsnotebook.CurrentPage = 2;
- this.playsnotebook.TabPos = ((global::Gtk.PositionType)(3));
- // Container child playsnotebook.Gtk.Notebook+NotebookChild
- this.playsList = new global::LongoMatch.Gui.Component.PlaysListTreeWidget ();
- this.playsList.Events = ((global::Gdk.EventMask)(256));
- this.playsList.Name = "playsList";
- this.playsnotebook.Add (this.playsList);
- // Notebook tab
- this.playsList1 = new global::Gtk.Label ();
- this.playsList1.Name = "playsList1";
- this.playsList1.LabelProp = global::Mono.Unix.Catalog.GetString ("Events");
- this.playsnotebook.SetTabLabel (this.playsList, this.playsList1);
- this.playsList1.ShowAll ();
- // Container child playsnotebook.Gtk.Notebook+NotebookChild
- this.localPlayersList = new global::LongoMatch.Gui.Component.PlayersListTreeWidget ();
- this.localPlayersList.Events = ((global::Gdk.EventMask)(256));
- this.localPlayersList.Name = "localPlayersList";
- this.playsnotebook.Add (this.localPlayersList);
- global::Gtk.Notebook.NotebookChild w2 =
((global::Gtk.Notebook.NotebookChild)(this.playsnotebook [this.localPlayersList]));
- w2.Position = 1;
- // Notebook tab
- this.localPlaysList = new global::Gtk.Label ();
- this.localPlaysList.Name = "localPlaysList";
- this.playsnotebook.SetTabLabel (this.localPlayersList, this.localPlaysList);
- this.localPlaysList.ShowAll ();
- // Container child playsnotebook.Gtk.Notebook+NotebookChild
- this.visitorPlayersList = new global::LongoMatch.Gui.Component.PlayersListTreeWidget
();
- this.visitorPlayersList.Events = ((global::Gdk.EventMask)(256));
- this.visitorPlayersList.Name = "visitorPlayersList";
- this.playsnotebook.Add (this.visitorPlayersList);
- global::Gtk.Notebook.NotebookChild w3 =
((global::Gtk.Notebook.NotebookChild)(this.playsnotebook [this.visitorPlayersList]));
- w3.Position = 2;
- // Notebook tab
- this.visitorPlaysList = new global::Gtk.Label ();
- this.visitorPlaysList.Name = "visitorPlaysList";
- this.playsnotebook.SetTabLabel (this.visitorPlayersList, this.visitorPlaysList);
- this.visitorPlaysList.ShowAll ();
- this.notebook.Add (this.playsnotebook);
+ this.eventslistwidget = new global::LongoMatch.Gui.Component.EventsListWidget ();
+ this.eventslistwidget.Events = ((global::Gdk.EventMask)(256));
+ this.eventslistwidget.Name = "eventslistwidget";
+ this.notebook.Add (this.eventslistwidget);
// Notebook tab
this.label1 = new global::Gtk.Label ();
this.label1.Name = "label1";
this.label1.LabelProp = global::Mono.Unix.Catalog.GetString (" Events ");
this.label1.Justify = ((global::Gtk.Justification)(2));
this.label1.Angle = 90;
- this.notebook.SetTabLabel (this.playsnotebook, this.label1);
+ this.notebook.SetTabLabel (this.eventslistwidget, this.label1);
this.label1.ShowAll ();
// Container child notebook.Gtk.Notebook+NotebookChild
this.playlistwidget = new global::LongoMatch.Gui.Component.PlayListWidget ();
@@ -87,8 +44,8 @@ namespace LongoMatch.Gui.Component
this.playlistwidget.Events = ((global::Gdk.EventMask)(256));
this.playlistwidget.Name = "playlistwidget";
this.notebook.Add (this.playlistwidget);
- global::Gtk.Notebook.NotebookChild w5 =
((global::Gtk.Notebook.NotebookChild)(this.notebook [this.playlistwidget]));
- w5.Position = 1;
+ global::Gtk.Notebook.NotebookChild w2 =
((global::Gtk.Notebook.NotebookChild)(this.notebook [this.playlistwidget]));
+ w2.Position = 1;
// Notebook tab
this.label3 = new global::Gtk.Label ();
this.label3.Name = "label3";
@@ -104,14 +61,14 @@ namespace LongoMatch.Gui.Component
this.filtersnotebook = new global::Gtk.Notebook ();
this.filtersnotebook.CanFocus = true;
this.filtersnotebook.Name = "filtersnotebook";
- this.filtersnotebook.CurrentPage = 0;
+ this.filtersnotebook.CurrentPage = 1;
this.filtersnotebook.TabPos = ((global::Gtk.PositionType)(3));
this.filtersvbox.Add (this.filtersnotebook);
- global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.filtersvbox
[this.filtersnotebook]));
- w6.Position = 0;
+ global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.filtersvbox
[this.filtersnotebook]));
+ w3.Position = 0;
this.notebook.Add (this.filtersvbox);
- global::Gtk.Notebook.NotebookChild w7 =
((global::Gtk.Notebook.NotebookChild)(this.notebook [this.filtersvbox]));
- w7.Position = 2;
+ global::Gtk.Notebook.NotebookChild w4 =
((global::Gtk.Notebook.NotebookChild)(this.notebook [this.filtersvbox]));
+ w4.Position = 2;
// Notebook tab
this.label2 = new global::Gtk.Label ();
this.label2.Name = "label2";
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
index 2fd6175..6cb850b 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
@@ -467,7 +467,6 @@ namespace LongoMatch.Gui.Panel
global::Gtk.Table.TableChild w42 = ((global::Gtk.Table.TableChild)(this.lcapturetable
[this.hbox7]));
w42.LeftAttach = ((uint)(1));
w42.RightAttach = ((uint)(2));
- w42.XOptions = ((global::Gtk.AttachOptions)(4));
w42.YOptions = ((global::Gtk.AttachOptions)(4));
// Container child lcapturetable.Gtk.Table+TableChild
this.hbox8 = new global::Gtk.HBox ();
@@ -515,8 +514,6 @@ namespace LongoMatch.Gui.Panel
this.hbox10.Add (this.lcapturetable);
global::Gtk.Box.BoxChild w48 = ((global::Gtk.Box.BoxChild)(this.hbox10
[this.lcapturetable]));
w48.Position = 0;
- w48.Expand = false;
- w48.Fill = false;
// Container child hbox10.Gtk.Box+BoxChild
this.rcapturetable = new global::Gtk.Table (((uint)(2)), ((uint)(2)), false);
this.rcapturetable.Name = "rcapturetable";
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
index 1feb359..ed56cf5 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
@@ -613,7 +613,6 @@ namespace LongoMatch.Gui.Panel
w60.Position = 0;
// Container child rbox.Gtk.Box+BoxChild
this.hbuttonbox1 = new global::Gtk.HButtonBox ();
- this.hbuttonbox1.Name = "hbuttonbox1";
// Container child hbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
this.savebutton = new global::Gtk.Button ();
this.savebutton.TooltipMarkup = "Save";
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 47e6181..e13f8d3 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -4405,63 +4405,12 @@ You can continue with the current capture, cancel it or save your project.
<widget class="Gtk.Notebook" id="notebook">
<property name="MemberName" />
<property name="CanFocus">True</property>
- <property name="CurrentPage">2</property>
+ <property name="CurrentPage">0</property>
<property name="TabPos">Left</property>
<child>
- <widget class="Gtk.Notebook" id="playsnotebook">
+ <widget class="LongoMatch.Gui.Component.EventsListWidget" id="eventslistwidget">
<property name="MemberName" />
- <property name="CanFocus">True</property>
- <property name="CurrentPage">2</property>
- <property name="TabPos">Bottom</property>
- <child>
- <widget class="LongoMatch.Gui.Component.PlaysListTreeWidget" id="playsList">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- </widget>
- </child>
- <child>
- <widget class="Gtk.Label" id="playsList1">
- <property name="MemberName" />
- <property name="LabelProp" translatable="yes">Events</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- <child>
- <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="localPlayersList">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">1</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Label" id="localPlaysList">
- <property name="MemberName" />
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- <child>
- <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="visitorPlayersList">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">2</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Label" id="visitorPlaysList">
- <property name="MemberName" />
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
+ <property name="Events">ButtonPressMask</property>
</widget>
</child>
<child>
@@ -4503,7 +4452,7 @@ You can continue with the current capture, cancel it or save your project.
<widget class="Gtk.Notebook" id="filtersnotebook">
<property name="MemberName" />
<property name="CanFocus">True</property>
- <property name="CurrentPage">0</property>
+ <property name="CurrentPage">1</property>
<property name="TabPos">Bottom</property>
<child>
<placeholder />
@@ -6268,7 +6217,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.AnalysisComponent" design-size="1524 875">
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.AnalysisComponent" design-size="1592 741">
<action-group name="Default" />
<property name="MemberName" />
<property name="Visible">False</property>
@@ -6277,7 +6226,75 @@ You can continue with the current capture, cancel it or save your project.
<property name="MemberName" />
<property name="Spacing">6</property>
<child>
- <placeholder />
+ <widget class="Gtk.EventBox" id="lightbackgroundeventbox">
+ <property name="MemberName" />
+ <child>
+ <widget class="Gtk.VPaned" id="centralpane">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Position">263</property>
+ <child>
+ <widget class="Gtk.HPaned" id="uppane">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Position">283</property>
+ <child>
+ <widget class="LongoMatch.Gui.Component.PlaysSelectionWidget" id="playsSelection">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Resize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.HPaned" id="rigthpane">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Position">1219</property>
+ <child>
+ <widget class="Gtk.HBox" id="videowidgetsbox">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="LongoMatch.Gui.PlayerCapturerBin" id="playercapturer">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Resize">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder />
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Resize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.CodingWidget" id="codingwidget">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ <property name="TagPositions">False</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ </packing>
</child>
</widget>
</child>
@@ -7154,10 +7171,9 @@ You can continue with the current capture, cancel it or save your project.
<packing>
<property name="LeftAttach">1</property>
<property name="RightAttach">2</property>
- <property name="AutoSize">True</property>
- <property name="XOptions">Fill</property>
+ <property name="AutoSize">False</property>
<property name="YOptions">Fill</property>
- <property name="XExpand">False</property>
+ <property name="XExpand">True</property>
<property name="XFill">True</property>
<property name="XShrink">False</property>
<property name="YExpand">False</property>
@@ -7248,9 +7264,7 @@ You can continue with the current capture, cancel it or save your project.
</widget>
<packing>
<property name="Position">0</property>
- <property name="AutoSize">True</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
+ <property name="AutoSize">False</property>
</packing>
</child>
<child>
@@ -10301,7 +10315,7 @@ You can continue with the current capture, cancel it or save your project.
<widget class="Gtk.Notebook" id="notebook">
<property name="MemberName" />
<property name="CanFocus">True</property>
- <property name="CurrentPage">0</property>
+ <property name="CurrentPage">3</property>
<property name="TabPos">Left</property>
<property name="ShowBorder">False</property>
<child>
@@ -10381,6 +10395,24 @@ You can continue with the current capture, cancel it or save your project.
<property name="type">tab</property>
</packing>
</child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.EventsListWidget" id="eventslistwidget">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="label13">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes">page4</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
</widget>
</child>
</widget>
@@ -10510,75 +10542,6 @@ You can continue with the current capture, cancel it or save your project.
</widget>
</child>
</widget>
- <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PeriodsRecoder" design-size="522 98">
- <property name="MemberName" />
- <property name="Visible">False</property>
- <child>
- <widget class="Gtk.HBox" id="hbox1">
- <property name="MemberName" />
- <property name="Spacing">6</property>
- <child>
- <widget class="Gtk.Label" id="timelabel">
- <property name="MemberName" />
- </widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">True</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Button" id="stopbutton">
- <property name="MemberName" />
- <property name="CanFocus">True</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-media-stop Dialog</property>
- <property name="Label" translatable="yes">Stop period</property>
- <property name="UseUnderline">True</property>
- </widget>
- <packing>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Button" id="startbutton">
- <property name="MemberName" />
- <property name="CanFocus">True</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-media-record Dialog</property>
- <property name="Label" translatable="yes">New period</property>
- <property name="UseUnderline">True</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>
- <child>
- <widget class="Gtk.Button" id="closebutton">
- <property name="MemberName" />
- <property name="CanFocus">True</property>
- <property name="Type">TextAndIcon</property>
- <property name="Icon">stock:gtk-close Dialog</property>
- <property name="Label" translatable="yes">Stop project</property>
- <property name="UseUnderline">True</property>
- </widget>
- <packing>
- <property name="Position">3</property>
- <property name="AutoSize">True</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
<widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlaysPositionViewer" design-size="300 300">
<property name="MemberName" />
<property name="Visible">False</property>
@@ -11528,4 +11491,114 @@ You can continue with the current capture, cancel it or save your project.
</widget>
</child>
</widget>
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.FakeAnalysisComponent" design-size="1075 443">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <child>
+ <widget class="Gtk.EventBox" id="lightbackgroundeventbox">
+ <property name="MemberName" />
+ <child>
+ <widget class="Gtk.VBox" id="vbox3">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="LongoMatch.Gui.CapturerBin" id="capturerbin">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ <property name="Capturing">False</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.HSeparator" id="hseparator1">
+ <property name="MemberName" />
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.CodingWidget" id="codingwidget1">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ <property name="TagPositions">False</property>
+ </widget>
+ <packing>
+ <property name="Position">2</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.EventsListWidget" design-size="300 300">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <child>
+ <widget class="Gtk.Notebook" id="playsnotebook">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="CurrentPage">0</property>
+ <property name="TabPos">Bottom</property>
+ <child>
+ <widget class="LongoMatch.Gui.Component.PlaysListTreeWidget" id="playsList">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="playsList1">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes">Events</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="localPlayersList">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="localPlaysList">
+ <property name="MemberName" />
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="visitorPlayersList">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="visitorPlaysList">
+ <property name="MemberName" />
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
</stetic-interface>
\ No newline at end of file
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index 0de5976..c43f9c0 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -252,10 +252,6 @@
<itemgroups />
<signals />
</object>
- <object type="LongoMatch.Gui.Component.PeriodsRecoder" palette-category="General" allow-children="false"
base-type="Gtk.Bin">
- <itemgroups />
- <signals />
- </object>
<object type="LongoMatch.Gui.Component.PlaysPositionViewer" palette-category="General"
allow-children="false" base-type="Gtk.Bin">
<itemgroups />
<signals />
@@ -332,6 +328,7 @@
<itemgroup label="PlayerBin Signals">
<signal name="Tick" />
<signal name="PlayStateChanged" />
+ <signal name="CloseEvent" />
</itemgroup>
</signals>
</object>
@@ -363,4 +360,12 @@
</itemgroup>
</signals>
</object>
+ <object type="LongoMatch.Gui.Component.FakeAnalysisComponent" palette-category="General"
allow-children="false" base-type="Gtk.Bin">
+ <itemgroups />
+ <signals />
+ </object>
+ <object type="LongoMatch.Gui.Component.EventsListWidget" palette-category="General" allow-children="false"
base-type="Gtk.Bin">
+ <itemgroups />
+ <signals />
+ </object>
</objects>
\ No newline at end of file
diff --git a/LongoMatch.Multimedia/Capturer/FakeCapturer.cs b/LongoMatch.Multimedia/Capturer/FakeCapturer.cs
index b016459..5c6ba6c 100644
--- a/LongoMatch.Multimedia/Capturer/FakeCapturer.cs
+++ b/LongoMatch.Multimedia/Capturer/FakeCapturer.cs
@@ -147,5 +147,8 @@ namespace LongoMatch.Video.Capturer
{
return true;
}
+
+ public void Expose () {
+ }
}
}
diff --git a/LongoMatch.Multimedia/Capturer/GstCameraCapturer.cs
b/LongoMatch.Multimedia/Capturer/GstCameraCapturer.cs
index 7512934..4c9d5f5 100644
--- a/LongoMatch.Multimedia/Capturer/GstCameraCapturer.cs
+++ b/LongoMatch.Multimedia/Capturer/GstCameraCapturer.cs
@@ -62,6 +62,8 @@ namespace LongoMatch.Video.Capturer {
[DllImport("libcesarplayer.dll")]
static extern void gst_camera_capturer_close(IntPtr raw);
[DllImport("libcesarplayer.dll")]
+ static extern void gst_camera_capturer_expose(IntPtr raw);
+ [DllImport("libcesarplayer.dll")]
static extern IntPtr gst_camera_capturer_get_type();
[DllImport("libcesarplayer.dll")]
static extern IntPtr gst_camera_capturer_enum_audio_devices();
@@ -344,6 +346,10 @@ namespace LongoMatch.Video.Capturer {
gst_camera_capturer_close(Handle);
}
+ public void Expose() {
+ gst_camera_capturer_expose(Handle);
+ }
+
public static string[] AudioDevices {
get {
IntPtr raw_ret = gst_camera_capturer_enum_audio_devices();
diff --git a/LongoMatch.Multimedia/Utils/MultimediaFactory.cs
b/LongoMatch.Multimedia/Utils/MultimediaFactory.cs
index 33313b2..f85c800 100644
--- a/LongoMatch.Multimedia/Utils/MultimediaFactory.cs
+++ b/LongoMatch.Multimedia/Utils/MultimediaFactory.cs
@@ -84,14 +84,9 @@ namespace LongoMatch.Video
return GetDefaultElement<IDiscoverer> (typeof(IDiscoverer));
}
- public ICapturer GetCapturer (CapturerType type)
+ public ICapturer GetCapturer ()
{
- switch (type) {
- case CapturerType.Live:
- return GetDefaultElement<ICapturer> (typeof(ICapturer), "test.avi");
- default:
- return new FakeCapturer ();
- }
+ return GetDefaultElement<ICapturer> (typeof(ICapturer), "test.avi");
}
public IRemuxer GetRemuxer (MediaFile inputFile, string outputFile, VideoMuxerType muxer)
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index 64f2ec8..23e910d 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -55,7 +55,7 @@ namespace LongoMatch.Services
}
void HandleOpenedProjectChanged (Project project, ProjectType projectType,
- EventsFilter filter, IAnalysisWindow analysisWindow)
+ EventsFilter filter, IAnalysisWindow analysisWindow)
{
this.openedProject = project;
this.projectType = projectType;
@@ -71,7 +71,7 @@ namespace LongoMatch.Services
if (projectType == ProjectType.FileProject) {
framesCapturer = Config.MultimediaToolkit.GetFramesCapturer ();
- framesCapturer.Open
(openedProject.Description.FileSet.GetAngle(MediaFileAngle.Angle1).FilePath);
+ framesCapturer.Open (openedProject.Description.FileSet.GetAngle
(MediaFileAngle.Angle1).FilePath);
}
this.analysisWindow = analysisWindow;
player = analysisWindow.Player;
@@ -149,6 +149,7 @@ namespace LongoMatch.Services
{
loadedPlay = play;
}
+
void HandlePlaylistElementSelectedEvent (Playlist playlist, IPlaylistElement element)
{
if (element is PlaylistPlayElement) {
@@ -158,7 +159,6 @@ namespace LongoMatch.Services
}
}
-
void HandleDetach ()
{
analysisWindow.DetachPlayer ();
@@ -294,7 +294,7 @@ namespace LongoMatch.Services
}
}
Log.Debug (String.Format ("New play created start:{0} stop:{1} category:{2}",
- start.ToMSecondsString(), stop.ToMSecondsString(),
+ start.ToMSecondsString (), stop.ToMSecondsString (),
evType.Name));
/* Add the new created play to the project and update the GUI*/
var play = openedProject.AddEvent (evType, start, stop, eventTime, null, score, card);
@@ -310,18 +310,24 @@ namespace LongoMatch.Services
public void HandleNewPlay (TimelineEvent play)
{
- if (player == null || openedProject == null)
+ if (openedProject == null)
return;
if (projectType == ProjectType.CaptureProject ||
- projectType == ProjectType.URICaptureProject) {
+ projectType == ProjectType.URICaptureProject ||
+ projectType == ProjectType.FakeCaptureProject) {
if (!capturer.Capturing) {
guiToolkit.WarningMessage (Catalog.GetString ("Video capture is
stopped"));
return;
}
}
+
+ if (!openedProject.Dashboard.DisablePopupWindow) {
+ Config.GUIToolkit.EditPlay (play, openedProject, true, true, true, true);
+ }
+
Log.Debug (String.Format ("New play created start:{0} stop:{1} category:{2}",
- play.Start.ToMSecondsString(), play.Stop.ToMSecondsString(),
+ play.Start.ToMSecondsString (), play.Stop.ToMSecondsString
(),
play.EventType.Name));
openedProject.AddEvent (play);
AddNewPlay (play);
@@ -358,7 +364,7 @@ namespace LongoMatch.Services
newplay.ID = Guid.NewGuid ();
newplay.EventType = evType;
newplay.Players = play.Players;
- DeletePlays (new List<TimelineEvent> {play}, false);
+ DeletePlays (new List<TimelineEvent> { play }, false);
openedProject.AddEvent (newplay);
analysisWindow.AddPlay (newplay);
Save (openedProject);
@@ -393,7 +399,7 @@ namespace LongoMatch.Services
break;
case KeyAction.DeleteEvent:
if (loadedPlay != null) {
- DeletePlays (new List<TimelineEvent> {loadedPlay});
+ DeletePlays (new List<TimelineEvent> { loadedPlay });
}
break;
}
diff --git a/LongoMatch.Services/Services/ProjectsManager.cs b/LongoMatch.Services/Services/ProjectsManager.cs
index ea48e51..0d39ef6 100644
--- a/LongoMatch.Services/Services/ProjectsManager.cs
+++ b/LongoMatch.Services/Services/ProjectsManager.cs
@@ -138,8 +138,9 @@ namespace LongoMatch.Services
RemuxOutputFile (Capturer.CaptureSettings.EncodingSettings);
Log.Debug ("Reloading saved file: " + filePath);
- project.Description.FileSet.SetAngle (MediaFileAngle.Angle1,
- multimediaToolkit.DiscoverFile
(filePath));
+ MediaFile file = multimediaToolkit.DiscoverFile (filePath);
+ project.Description.FileSet.SetAngle (MediaFileAngle.Angle1, file);
+ project.Periods = Capturer.Periods;
Config.DatabaseManager.ActiveDB.AddProject (project);
} catch (Exception ex) {
Log.Exception (ex);
@@ -274,7 +275,7 @@ namespace LongoMatch.Services
Log.Debug ("Closing project " + OpenedProject.ID);
if (OpenedProjectType != ProjectType.FileProject) {
- Capturer.Stop ();
+ Capturer.StopPeriod ();
Capturer.Close ();
} else {
Player.Close ();
@@ -293,10 +294,10 @@ namespace LongoMatch.Services
protected virtual void SaveProject (Project project, ProjectType projectType)
{
- Log.Debug (String.Format ("Saving project {0} type: {1}", project, projectType));
if (project == null)
return;
+ Log.Debug (String.Format ("Saving project {0} type: {1}", project.ID, projectType));
if (projectType == ProjectType.FileProject) {
try {
Config.DatabaseManager.ActiveDB.UpdateProject (project);
@@ -381,12 +382,19 @@ namespace LongoMatch.Services
CloseOpenedProject (true);
}
- void HandleCaptureFinished (bool close)
+ void HandleCaptureFinished (bool cancel)
{
Guid id = OpenedProject.ID;
ProjectType type = OpenedProjectType;
- CloseOpenedProject (!close);
- if (!close && type != ProjectType.FakeCaptureProject) {
+ if (cancel) {
+ try {
+ Config.DatabaseManager.ActiveDB.RemoveProject (OpenedProject.ID);
+ } catch (Exception ex) {
+ Log.Exception (ex);
+ }
+ }
+ CloseOpenedProject (!cancel);
+ if (!cancel && type != ProjectType.FakeCaptureProject) {
OpenProjectID (id);
}
}
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
index 4e7fada..66291a7 100644
--- a/data/icons/Makefile.am
+++ b/data/icons/Makefile.am
@@ -21,6 +21,7 @@ nobase_dist_icons_DATA = Makefile.am \
hicolor/scalable/actions/longomatch-back.svg \
hicolor/scalable/actions/longomatch-browse.svg \
hicolor/scalable/actions/longomatch-calendar.svg \
+ hicolor/scalable/actions/longomatch-cancel-rec.svg \
hicolor/scalable/actions/longomatch-category-header.svg \
hicolor/scalable/actions/longomatch-circle-fill.svg \
hicolor/scalable/actions/longomatch-circle.svg \
@@ -50,7 +51,9 @@ nobase_dist_icons_DATA = Makefile.am \
hicolor/scalable/actions/longomatch-field-full.svg \
hicolor/scalable/actions/longomatch-field-goal.svg \
hicolor/scalable/actions/longomatch-field-half.svg \
+ hicolor/scalable/actions/longomatch-live.svg \
hicolor/scalable/actions/longomatch-mark.svg \
+ hicolor/scalable/actions/longomatch-pause-clock.svg \
hicolor/scalable/actions/longomatch-pencil.svg \
hicolor/scalable/actions/longomatch-person.svg \
hicolor/scalable/actions/longomatch-player-add.svg \
@@ -68,10 +71,15 @@ nobase_dist_icons_DATA = Makefile.am \
hicolor/scalable/actions/longomatch-project-open.svg \
hicolor/scalable/actions/longomatch-project-save.svg \
hicolor/scalable/actions/longomatch-project.svg \
+ hicolor/scalable/actions/longomatch-record.svg \
+ hicolor/scalable/actions/longomatch-replay.svg \
+ hicolor/scalable/actions/longomatch-resume-clock.svg \
+ hicolor/scalable/actions/longomatch-save.svg \
hicolor/scalable/actions/longomatch-select.svg \
hicolor/scalable/actions/longomatch-shortcut.svg \
hicolor/scalable/actions/longomatch-square-fill.svg \
hicolor/scalable/actions/longomatch-square.svg \
+ hicolor/scalable/actions/longomatch-stop.svg \
hicolor/scalable/actions/longomatch-tab-active-dashboard.svg \
hicolor/scalable/actions/longomatch-tab-active-filter.svg \
hicolor/scalable/actions/longomatch-tab-active-playlist.svg \
diff --git a/data/icons/hicolor/scalable/actions/longomatch-cancel-rec.svg
b/data/icons/hicolor/scalable/actions/longomatch-cancel-rec.svg
new file mode 100644
index 0000000..6bb7a45
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-cancel-rec.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Calque_1"
+ x="0px"
+ y="0px"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-cancel-rec.svg"><metadata
+ id="metadata18"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs16" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="733"
+ inkscape:window-height="480"
+ id="namedview14"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="10.893249"
+ inkscape:cx="-4.3177954"
+ inkscape:cy="10.5"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Calque_1" /><g
+ id="Layer_1"
+ transform="translate(-7.079,-8.5)" /><g
+ id="g4"
+ transform="translate(-7.079,-8.5)"><path
+ clip-rule="evenodd"
+ d="m 24.797,24.859 c 1.426,-1.728 2.282,-3.943 2.282,-6.359 0,-2.415 -0.856,-4.63 -2.282,-6.359 l
-6.359,6.359 6.359,6.359 z"
+ id="path6"
+ inkscape:connector-curvature="0"
+ style="fill:#d13d3c;fill-rule:evenodd" /><path
+ clip-rule="evenodd"
+ d="m 17.079,17.141 6.359,-6.359 C 21.71,9.356 19.494,8.5 17.079,8.5 c -2.415,0 -4.63,0.856
-6.359,2.282 l 6.359,6.359 z"
+ id="path8"
+ inkscape:connector-curvature="0"
+ style="fill:#d13d3c;fill-rule:evenodd" /><path
+ clip-rule="evenodd"
+ d="m 17.079,19.859 -6.359,6.359 c 1.728,1.426 3.943,2.282 6.359,2.282 2.415,0 4.63,-0.856
6.359,-2.282 l -6.359,-6.359 z"
+ id="path10"
+ inkscape:connector-curvature="0"
+ style="fill:#d13d3c;fill-rule:evenodd" /><path
+ clip-rule="evenodd"
+ d="M 9.361,12.141 C 7.935,13.87 7.079,16.085 7.079,18.5 c 0,2.415 0.856,4.631 2.282,6.359 L
15.72,18.5 9.361,12.141 z"
+ id="path12"
+ inkscape:connector-curvature="0"
+ style="fill:#d13d3c;fill-rule:evenodd" /></g></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-control-record.svg
b/data/icons/hicolor/scalable/actions/longomatch-control-record.svg
index c550688..22e5350 100644
--- a/data/icons/hicolor/scalable/actions/longomatch-control-record.svg
+++ b/data/icons/hicolor/scalable/actions/longomatch-control-record.svg
@@ -1,8 +1,71 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="28px" height="28px" viewBox="0 0 28 28" enable-background="new 0 0 28 28"
xml:space="preserve">
-<circle id="record_1_" fill-rule="evenodd" clip-rule="evenodd" fill="#231F20" cx="961.184" cy="733.502"
r="13.418"/>
-<circle id="record" fill-rule="evenodd" clip-rule="evenodd" fill="#C42628" cx="14" cy="14" r="7.542"/>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ enable-background="new 0 0 28 28"
+ xml:space="preserve"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-control-record.svg"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="733"
+ inkscape:window-height="480"
+ id="namedview5"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="31.106212"
+ inkscape:cx="8.7995091"
+ inkscape:cy="4.2416534"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1" /><circle
+ id="record_1_"
+ clip-rule="evenodd"
+ cx="961.18402"
+ cy="733.50201"
+ r="13.418"
+ sodipodi:cx="961.18402"
+ sodipodi:cy="733.50201"
+ sodipodi:rx="13.418"
+ sodipodi:ry="13.418"
+ style="fill:#231f20;fill-rule:evenodd"
+ transform="translate(-3.9999992,-3.9999992)" /><circle
+ id="record"
+ clip-rule="evenodd"
+ cx="14"
+ cy="14"
+ r="7.5419998"
+ sodipodi:cx="14"
+ sodipodi:cy="14"
+ sodipodi:rx="7.5419998"
+ sodipodi:ry="7.5419998"
+ style="fill:#c42628;fill-rule:evenodd"
+ transform="matrix(1.3259083,0,0,1.3259083,-8.562716,-8.562716)" /></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-live.svg
b/data/icons/hicolor/scalable/actions/longomatch-live.svg
new file mode 100644
index 0000000..34f01f9
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-live.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Calque_1"
+ x="0px"
+ y="0px"
+ width="23.000381"
+ height="23"
+ viewBox="0 0 23.000381 23"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-live.svg"><metadata
+ id="metadata10"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs8" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="733"
+ inkscape:window-height="480"
+ id="namedview6"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="6.5555556"
+ inkscape:cx="11.50004"
+ inkscape:cy="12.000018"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Calque_1" /><g
+ id="Layer_1"
+ transform="translate(-6.4999598,-7.0000179)" /><path
+ d="M 21.457861,5.7515311 C 18.283095,0.25166493 11.250092,-1.6329044 5.7509752,1.5424402
0.25185913,4.7177851 -1.6334469,11.749508 1.5431645,17.249374 4.7179312,22.748301 11.750012,24.632871
17.249128,21.457526 22.748245,18.282182 24.633551,11.250458 21.457861,5.7515311 z M 16.098944,19.465079 C
11.700204,22.005355 6.0738022,20.497887 3.5345422,16.09837 0.99435973,11.698853 2.50242,6.0732861
6.9011602,3.5339491 11.299899,0.99367313 16.926302,2.501141 19.466484,6.9006581 22.005744,11.300176
20.498606,16.925742 16.098944,19.465079 z M 15.639608,11.032828 9.6184352,7.5216561 c -0.548805,-0.319879
-0.991538,-0.06473 -0.987848,0.570343 l 0.03044,6.9698109 c 0.0028,0.634131 0.451035,0.893036
1.000762,0.575033 l 5.9750548,-3.449259 c 0.549727,-0.318004 0.55065,-0.834877 0.0028,-1.154756 z"
+ id="path4"
+ inkscape:connector-curvature="0"
+ style="fill:#50b44d" /></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-pause-clock.svg
b/data/icons/hicolor/scalable/actions/longomatch-pause-clock.svg
new file mode 100644
index 0000000..02fd60c
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-pause-clock.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-pause-clock.svg"><metadata
+ id="metadata20"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs18" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1252"
+ inkscape:window-height="726"
+ id="namedview16"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="29.4075"
+ inkscape:cx="10.641788"
+ inkscape:cy="8.1983642"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" /><g
+ id="Layer_1"
+ transform="translate(-4.1800002,-7.5909092)" /><g
+ id="g6"
+ transform="matrix(1,0,0,1.0083417,-5.18,-6.5362213)"><path
+ style="fill:#6a6a6a"
+ inkscape:connector-curvature="0"
+ id="path8"
+ d="m 16.064,10.279 c -0.5,0 -0.906,0.402 -0.906,0.898 v 6.793 c 0,0.496 0.406,0.898 0.906,0.898 h
5.849 c 0.5,0 0.906,-0.402 0.906,-0.898 0,-0.496 -0.406,-0.898 -0.906,-0.898 H 16.97 v -5.895 c -10e-4,-0.495
-0.406,-0.898 -0.906,-0.898 z" /><path
+ style="fill:#6a6a6a"
+ inkscape:connector-curvature="0"
+ id="path10"
+ d="m 18.18,25.758 c -0.642,0.153 -1.311,0.239 -2,0.239 -4.775,0 -8.659,-3.852 -8.659,-8.588 0,-4.736
3.885,-8.588 8.659,-8.588 4.775,0 8.66,3.852 8.66,8.588 0,0.722 -0.093,1.422 -0.264,2.091 h 2.397 c
0.135,-0.677 0.207,-1.375 0.207,-2.091 0,-6.015 -4.935,-10.909 -11,-10.909 -6.065,0 -11,4.894 -11,10.909
0,6.015 4.935,10.909 11,10.909 0.684,0 1.351,-0.067 2,-0.188 v -2.372 z" /></g><rect
+ style="fill:#50b44d"
+ id="rect12"
+ height="9"
+ width="3"
+ y="15"
+ x="21.027" /><rect
+ style="fill:#50b44d"
+ id="rect14"
+ height="9"
+ width="3"
+ y="15"
+ x="15" /></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-record.svg
b/data/icons/hicolor/scalable/actions/longomatch-record.svg
new file mode 100644
index 0000000..be95ba8
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-record.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Calque_1"
+ x="0px"
+ y="0px"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-record.svg"><metadata
+ id="metadata10"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs8" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1313"
+ inkscape:window-height="699"
+ id="namedview6"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="14.058594"
+ inkscape:cx="9.5"
+ inkscape:cy="10.5"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Calque_1" /><g
+ id="Layer_1"
+ transform="translate(-8.5,-8.5)" /><path
+ clip-rule="evenodd"
+ d="M 10,0 C 15.523,0 20,4.477 20,10 20,15.523 15.523,20 10,20 4.477,20 0,15.523 0,10 0,4.477 4.477,0
10,0 z"
+ id="path4"
+ inkscape:connector-curvature="0"
+ style="fill:#d13d3c;fill-rule:evenodd" /></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-replay.svg
b/data/icons/hicolor/scalable/actions/longomatch-replay.svg
new file mode 100644
index 0000000..87be59a
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-replay.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Calque_1"
+ x="0px"
+ y="0px"
+ width="23"
+ height="23"
+ viewBox="0 0 23 23"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-replay.svg"><metadata
+ id="metadata10"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs8" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="733"
+ inkscape:window-height="480"
+ id="namedview6"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="6.5555556"
+ inkscape:cx="10.21"
+ inkscape:cy="11.501"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Calque_1" /><g
+ id="Layer_1"
+ transform="translate(-7.79,-6.5009995)" /><path
+ d="M 11.71,3.6550005 V -9.9945068e-4 L 4.091,4.8640005 l 7.619,4.866 v -3.656 c 4.212,0 7.657,3.264
7.657,7.2540005 0,3.99 -3.446,7.254 -7.657,7.254 -4.211,0 -7.658,-3.264 -7.658,-7.254 H 1.5 c 0,5.319
4.595,9.672 10.21,9.672 5.615,0 10.21,-4.352 10.21,-9.672 0,-5.3200005 -4.595,-9.6730005 -10.21,-9.6730005 z"
+ id="path4"
+ inkscape:connector-curvature="0"
+ style="fill:#50b44d" /></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-resume-clock.svg
b/data/icons/hicolor/scalable/actions/longomatch-resume-clock.svg
new file mode 100644
index 0000000..c81c037
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-resume-clock.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-resume-clock.svg"><metadata
+ id="metadata20"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title
/></cc:Work></rdf:RDF></metadata><defs
+ id="defs18" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1252"
+ inkscape:window-height="726"
+ id="namedview16"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="20.8"
+ inkscape:cx="15.835712"
+ inkscape:cy="6.8398606"
+ inkscape:window-x="9"
+ inkscape:window-y="296"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" /><g
+ id="Layer_1"
+ transform="translate(-4.1800002,-7.5909092)" /><g
+ id="g6"
+ transform="matrix(1,0,0,1.0083417,-5.18,-6.5362203)"><path
+ style="fill:#6a6a6a"
+ inkscape:connector-curvature="0"
+ id="path8"
+ d="m 16.064,10.279 c -0.5,0 -0.906,0.402 -0.906,0.898 v 6.793 c 0,0.496 0.406,0.898 0.906,0.898 h
5.849 c 0.5,0 0.906,-0.402 0.906,-0.898 0,-0.496 -0.406,-0.898 -0.906,-0.898 H 16.97 v -5.895 c -10e-4,-0.495
-0.406,-0.898 -0.906,-0.898 z" /><path
+ style="fill:#6a6a6a"
+ inkscape:connector-curvature="0"
+ id="path10"
+ d="m 18.18,25.758 c -0.642,0.153 -1.311,0.239 -2,0.239 -4.775,0 -8.659,-3.852 -8.659,-8.588 0,-4.736
3.885,-8.588 8.659,-8.588 4.775,0 8.66,3.852 8.66,8.588 0,0.722 -0.093,1.422 -0.264,2.091 h 2.397 c
0.135,-0.677 0.207,-1.375 0.207,-2.091 0,-6.015 -4.935,-10.909 -11,-10.909 -6.065,0 -11,4.894 -11,10.909
0,6.015 4.935,10.909 11,10.909 0.684,0 1.351,-0.067 2,-0.188 v -2.372 z" /></g><polygon
+ style="fill:#50b44d;fill-opacity:1;fill-rule:evenodd"
+ transform="matrix(0.34615385,0,0,0.39805396,13.615385,14.723352)"
+ clip-rule="evenodd"
+ points="30,12 4,23.305 4,0.695 "
+ id="polygon3" /></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-save.svg
b/data/icons/hicolor/scalable/actions/longomatch-save.svg
new file mode 100644
index 0000000..11ee25c
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-save.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Calque_1"
+ x="0px"
+ y="0px"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-save.svg"><metadata
+ id="metadata10"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs8" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="733"
+ inkscape:window-height="480"
+ id="namedview6"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="6.5555556"
+ inkscape:cx="10.4995"
+ inkscape:cy="10.5005"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Calque_1" /><g
+ id="Layer_1"
+ transform="translate(-7.5005,-8.5005)" /><path
+ d="M 19.313034,0 H 0.6859657 C 0.3069847,0 0,0.3069847 0,0.6859657 V 19.314034 C 0,19.693015
0.3069847,20 0.6859657,20 H 19.314034 C 19.693015,20 20,19.693015 20,19.314034 V 0.6859657 C 19.999,0.3069847
19.692015,0 19.313034,0 z M 3.828809,1.0289486 H 16.171191 V 6.79966 H 3.828809 V 1.0289486 z M
16.771161,18.542073 H 3.228839 V 9.9995 h 13.542322 v 8.542573 z M 12.685366,1.885906 H 14.39928 V 6.0007 H
12.684366 V 1.885906 z m 2.842858,10.227488 H 4.471776 v -0.685965 h 11.056448 v 0.685965 z m 0,2.39988 H
4.471776 v -0.685965 h 11.056448 v 0.685965 z m 0,2.314885 H 4.471776 v -0.685966 h 11.056448 v 0.685966 z"
+ id="path4"
+ inkscape:connector-curvature="0"
+ style="fill:#6a6a6a" /></svg>
\ No newline at end of file
diff --git a/data/icons/hicolor/scalable/actions/longomatch-stop.svg
b/data/icons/hicolor/scalable/actions/longomatch-stop.svg
new file mode 100644
index 0000000..76d372f
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/longomatch-stop.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Calque_1"
+ x="0px"
+ y="0px"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ enable-background="new 0 0 36 36"
+ xml:space="preserve"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="longomatch-stop.svg"><metadata
+ id="metadata16"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs14" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1090"
+ inkscape:window-height="658"
+ id="namedview12"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="25.814101"
+ inkscape:cx="13.727"
+ inkscape:cy="15.599081"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Calque_1" /><g
+ id="Layer_1"
+ transform="translate(-4.273,-6.5)" /><rect
+ x="15"
+ y="15"
+ width="9"
+ height="9"
+ id="rect4"
+ style="fill:#50b44d" /><g
+ id="g6"
+ transform="matrix(1,0,0,1.0083417,-4.273,-6.5362203)"><path
+ d="m 15.156,10.279 c -0.5,0 -0.906,0.402 -0.906,0.898 v 6.793 c 0,0.496 0.406,0.898 0.906,0.898 h
5.849 c 0.5,0 0.906,-0.402 0.906,-0.898 0,-0.496 -0.406,-0.898 -0.906,-0.898 h -4.943 v -5.895 c 0,-0.496
-0.406,-0.898 -0.906,-0.898 z"
+ id="path8"
+ inkscape:connector-curvature="0"
+ style="fill:#6a6a6a" /><path
+ d="m 17.277,25.757 c -0.644,0.153 -1.313,0.24 -2.004,0.24 -4.775,0 -8.66,-3.852 -8.66,-8.588 0,-4.736
3.885,-8.588 8.66,-8.588 4.775,0 8.66,3.852 8.66,8.588 0,0.721 -0.093,1.421 -0.263,2.091 h 2.396 c
0.135,-0.677 0.207,-1.375 0.207,-2.091 0,-6.015 -4.935,-10.909 -11,-10.909 -6.065,0 -11,4.894 -11,10.909
0,6.015 4.935,10.909 11,10.909 0.685,0 1.354,-0.067 2.004,-0.189 v -2.372 z"
+ id="path10"
+ inkscape:connector-curvature="0"
+ style="fill:#6a6a6a" /></g></svg>
\ No newline at end of file
diff --git a/libcesarplayer/gst-camera-capturer.c b/libcesarplayer/gst-camera-capturer.c
index 7825dd1..0f4746b 100644
--- a/libcesarplayer/gst-camera-capturer.c
+++ b/libcesarplayer/gst-camera-capturer.c
@@ -1597,6 +1597,17 @@ gst_camera_capturer_stop (GstCameraCapturer * gcc)
}
void
+gst_camera_capturer_expose (GstCameraCapturer * gcc)
+{
+ g_return_if_fail (gcc != NULL);
+
+ if (gcc->priv->xoverlay != NULL &&
+ GST_IS_X_OVERLAY (gcc->priv->xoverlay)) {
+ gst_x_overlay_expose (gcc->priv->xoverlay);
+ }
+}
+
+void
gst_camera_capturer_configure (GstCameraCapturer *gcc,
const gchar * filename, CaptureSourceType source,
const gchar *source_element, const gchar *device_id,
diff --git a/libcesarplayer/gst-camera-capturer.h b/libcesarplayer/gst-camera-capturer.h
index 643c3c0..5f8b959 100644
--- a/libcesarplayer/gst-camera-capturer.h
+++ b/libcesarplayer/gst-camera-capturer.h
@@ -92,6 +92,8 @@ EXPORT void gst_camera_capturer_toggle_pause (GstCameraCapturer * g
EXPORT void gst_camera_capturer_stop (GstCameraCapturer * gcc);
+EXPORT void gst_camera_capturer_expose (GstCameraCapturer * gcc);
+
EXPORT GList *gst_camera_capturer_enum_audio_devices (const gchar *device);
EXPORT GList *gst_camera_capturer_enum_video_devices (const gchar *device);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]