[longomatch] Use the vevents broker for player and capturer events



commit 9326b706cebd41daab7627bc9ac262e1304739d6
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Sun Jun 22 13:58:06 2014 +0200

    Use the vevents broker for player and capturer events

 LongoMatch.Core/Common/EventsBroker.cs             |   65 ++++++++++++++++++++
 LongoMatch.Core/Handlers/Handlers.cs               |    2 +-
 LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs  |    1 +
 LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs     |    3 -
 LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs       |    9 ---
 LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs       |   22 ++-----
 LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs         |   46 +++++---------
 LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs |   62 -------------------
 LongoMatch.GUI.Multimedia/gtk-gui/objects.xml      |   24 +-------
 LongoMatch.GUI/Gui/Component/AnalysisComponent.cs  |    3 +-
 LongoMatch.GUI/gtk-gui/objects.xml                 |   28 ++-------
 LongoMatch.Services/Services/EventsManager.cs      |   29 ++++-----
 LongoMatch.Services/Services/PlaylistManager.cs    |   14 ++---
 LongoMatch.Services/Services/ProjectsManager.cs    |   33 ++++++----
 14 files changed, 134 insertions(+), 207 deletions(-)
---
diff --git a/LongoMatch.Core/Common/EventsBroker.cs b/LongoMatch.Core/Common/EventsBroker.cs
index 5265f66..dd2abc2 100644
--- a/LongoMatch.Core/Common/EventsBroker.cs
+++ b/LongoMatch.Core/Common/EventsBroker.cs
@@ -78,9 +78,18 @@ namespace LongoMatch.Common
                
                public event OpenedProjectChangedHandler OpenedProjectChanged;
                
+               /* Player and Capturer */
                public event TickHandler Tick;
                public event ErrorHandler MultimediaError;
+               public event ErrorHandler CaptureError;
+               public event CaptureFinishedHandler CaptureFinished;
                public event SegmentClosedHandler SegmentClosed;
+               public event NextButtonClickedHandler Next;
+               public event PrevButtonClickedHandler Prev;
+               public event DrawFrameHandler DrawFrame;
+               public event DetachPlayerHandler Detach;
+               public event PlaybackRateChangedHandler PlaybackRateChanged;
+
                
                
                public EventsBroker ()
@@ -318,6 +327,62 @@ namespace LongoMatch.Common
                                TeamTagsChanged ();
                        }
                }
+               
+               public void EmitCaptureFinished (bool close)
+               {
+                       if (CaptureFinished != null) {
+                               CaptureFinished (close);
+                       }
+               }
+               
+               public void EmitCaptureError (string message)
+               {
+                       if (CaptureError != null) {
+                               CaptureError (message);
+                       }
+               }
+
+               public void EmitMultimediaError (string message)
+               {
+                       if (MultimediaError != null) {
+                               MultimediaError (message);
+                       }
+               }
+
+               public void EmitDetach ()
+               {
+                       if (Detach != null) {
+                               Detach ();
+                       }
+               }
+               
+               public void EmitNext ()
+               {
+                       if (Next != null) {
+                               Next ();
+                       }
+               }
+               
+               public void EmitPrev ()
+               {
+                       if (Prev != null) {
+                               Prev ();
+                       }
+               }
+
+               public void EmitDrawFrame (Time currentTime)
+               {
+                       if (DrawFrame != null) {
+                               DrawFrame (currentTime);
+                       }
+               }
+
+               public void EmitPlaybackRateChanged (float val)
+               {
+                       if (PlaybackRateChanged != null) {
+                               PlaybackRateChanged (val);
+                       }
+               }
        }
 }
 
diff --git a/LongoMatch.Core/Handlers/Handlers.cs b/LongoMatch.Core/Handlers/Handlers.cs
index 4386334..48184cd 100644
--- a/LongoMatch.Core/Handlers/Handlers.cs
+++ b/LongoMatch.Core/Handlers/Handlers.cs
@@ -142,7 +142,7 @@ namespace LongoMatch.Handlers
        /* The plays filter was updated */      
        public delegate void FilterUpdatedHandler ();
        
-       public delegate void DetachPlayerHandler (bool detach);
+       public delegate void DetachPlayerHandler ();
        
        /* Show project stats */
        public delegate void ShowProjectStats(Project project);
diff --git a/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs 
b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
index 56365c0..3df9abd 100644
--- a/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
@@ -32,6 +32,7 @@ namespace LongoMatch.Interfaces.GUI
                void AddPlay(Play play);
                void UpdateCategories ();
                void DeletePlays (List<Play> plays);
+               void DetachPlayer ();
                
                bool Fullscreen {set;}
                
diff --git a/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs b/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs
index c11cb48..00af422 100644
--- a/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs
+++ b/LongoMatch.Core/Interfaces/GUI/ICapturerBin.cs
@@ -26,9 +26,6 @@ namespace LongoMatch.Interfaces.GUI
 {
        public interface ICapturerBin
        {
-               event CaptureFinishedHandler CaptureFinished;
-               event ErrorHandler Error;
-               
                Time CurrentTime {get;}
                bool Capturing {get;}
                Image CurrentMiniatureFrame {get;}
diff --git a/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs b/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs
index 56315ab..f2b1951 100644
--- a/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs
@@ -24,23 +24,14 @@ namespace LongoMatch.Interfaces.GUI
 {
        public interface IPlayerBin
        {
-               event SegmentClosedHandler SegmentClosedEvent;
-               event TickHandler Tick;
-               event ErrorHandler Error;
                event StateChangeHandler PlayStateChanged;
-               event NextButtonClickedHandler Next;
-               event PrevButtonClickedHandler Prev;
-               event DrawFrameHandler DrawFrame;
                event SeekEventHandler SeekEvent;
-               event DetachPlayerHandler Detach;
-               event PlaybackRateChangedHandler PlaybackRateChanged;
                
                Time CurrentTime {get;}
                Time StreamLength {get;}
                Image CurrentMiniatureFrame {get;}
                Image CurrentFrame {get;}
                bool Opened {get;}
-               bool Detached {get;set;}
                bool SeekingEnabled {set;}
                bool Sensitive {set; get;}
 
diff --git a/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs b/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
index 4685063..2ff0621 100644
--- a/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
@@ -44,9 +44,6 @@ namespace LongoMatch.Gui
        [System.ComponentModel.ToolboxItem(true)]
        public partial class CapturerBin : Gtk.Bin, ICapturerBin
        {
-               public event CaptureFinishedHandler CaptureFinished;
-               public event ErrorHandler Error;
-
                CaptureSettings settings;
                CapturerType type;
                bool delayStart;
@@ -237,17 +234,12 @@ namespace LongoMatch.Gui
                        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;
                                }
-                               if (CaptureFinished != null)
-                                       CaptureFinished (false);
-                       };
-                       cancelbutton.Clicked += (sender, e) =>  {
-                               if (CaptureFinished != null)
-                                       CaptureFinished (true);
+                               Config.EventsBroker.EmitCaptureFinished (false);
                        };
+                       cancelbutton.Clicked += (sender, e) => Config.EventsBroker.EmitCaptureFinished (true);
                        videodrawingarea.Realized += (sender, e) =>  {
                                if (delayStart) {
                                        Configure ();
@@ -284,12 +276,6 @@ namespace LongoMatch.Gui
                        delayStart = false;
                }
 
-               void OnError (string message)
-               {
-                       if(Error != null)
-                               Error(message);
-               }
-               
                void OnTick(Time ellapsedTime) {
                        string text = "";
                        Time duration = new Time (0);
@@ -308,6 +294,10 @@ namespace LongoMatch.Gui
                        }
                        timelabel.Markup = String.Format("<span font=\"30px bold\">{0}</span> ",  text);
                }
+               
+               void OnError (string message) {
+                       Config.EventsBroker.EmitCaptureError (message);
+               }
 
                void OnDeviceChange(int deviceID)
                {
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
index 4dc821e..71d8ad2 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
@@ -47,16 +47,10 @@ namespace LongoMatch.Gui
                        public Time Stop;
                }       
 
-               public event SegmentClosedHandler SegmentClosedEvent;
-               public event LongoMatch.Handlers.TickHandler Tick;
-               public event LongoMatch.Handlers.ErrorHandler Error;
+
+               public event TickHandler Tick;
                public event LongoMatch.Handlers.StateChangeHandler PlayStateChanged;
-               public event NextButtonClickedHandler Next;
-               public event PrevButtonClickedHandler Prev;
-               public event LongoMatch.Handlers.DrawFrameHandler DrawFrame;
                public event SeekEventHandler SeekEvent;
-               public event DetachPlayerHandler Detach;
-               public event PlaybackRateChangedHandler PlaybackRateChanged;
 
                const int THUMBNAIL_MAX_WIDTH = 100;
                const int SCALE_FPS = 25;
@@ -97,7 +91,7 @@ namespace LongoMatch.Gui
                        seeksQueue = new double[2];
                        seeksQueue [0] = -1;
                        seeksQueue [1] = -1;
-                       detachbutton.Clicked += (sender, e) => EmitDetach();
+                       detachbutton.Clicked += (sender, e) => Config.EventsBroker.EmitDetach ();
                        seeker = new Seeker();
                        seeker.SeekEvent += HandleSeekEvent;
                        segment.Start = new Time(-1);
@@ -271,8 +265,7 @@ namespace LongoMatch.Gui
                        segment.Stop = new Time (int.MaxValue);
                        SetScaleValue (SCALE_FPS);
                        //timescale.Sensitive = true;
-                       if (SegmentClosedEvent != null)
-                               SegmentClosedEvent();
+                       Config.EventsBroker.EmitSegmentClosed ();
                }
 
                public void SetSensitive() {
@@ -401,20 +394,15 @@ namespace LongoMatch.Gui
                        }
                }
                
-               void EmitDetach () {
-                       if (Detach != null)
-                               Detach(!Detached);
-               }
-               
                void CreatePlayer ()
                {
                        videodrawingarea.DoubleBuffered = false;
                        player = Config.MultimediaToolkit.GetPlayer ();
 
-                       player.Tick +=  OnTick;
+                       player.Tick += OnTick;
+                       player.Error += Config.EventsBroker.EmitMultimediaError;
                        player.StateChange += OnStateChanged;
                        player.Eos += OnEndOfStream;
-                       player.Error += OnError;
                        player.ReadyToSeek += OnReadyToSeek;
 
                        videoeventbox.ButtonPressEvent += OnVideoboxButtonPressEvent;
@@ -485,9 +473,11 @@ namespace LongoMatch.Gui
                                }
                        }
 
-                       if (Tick != null)
+                       if (Tick != null) {
                                Tick (currentTime, streamLength, currentPosition);
-
+                       }
+                       
+                       Config.EventsBroker.EmitTick (currentTime, streamLength, currentPosition);
                }
 
                void OnTimescaleAdjustBounds(object o, Gtk.AdjustBoundsArgs args)
@@ -558,8 +548,7 @@ namespace LongoMatch.Gui
                }
 
                void OnError(string message) {
-                       if(Error != null)
-                               Error(message);
+                       Config.EventsBroker.EmitMultimediaError (message);
                }
 
                void OnClosebuttonClicked(object sender, System.EventArgs e)
@@ -572,14 +561,12 @@ namespace LongoMatch.Gui
                {
                        if (segment.Start.MSeconds > 0)
                                Seek (segment.Start, true);
-                       if(Prev != null)
-                               Prev();
+                       Config.EventsBroker.EmitPrev();
                }
 
                void OnNextbuttonClicked(object sender, System.EventArgs e)
                {
-                       if(Next != null)
-                               Next();
+                       Config.EventsBroker.EmitNext();
                }
 
                void OnVscale1FormatValue(object o, Gtk.FormatValueArgs args)
@@ -608,8 +595,8 @@ namespace LongoMatch.Gui
                                player.Volume = previousVLevel;
 
                        player.Rate = val;
-                       if (PlaybackRateChanged != null && emitRateScale) {
-                               PlaybackRateChanged (val);
+                       if (emitRateScale) {
+                               Config.EventsBroker.EmitPlaybackRateChanged (val);
                        }
                }
 
@@ -647,8 +634,7 @@ namespace LongoMatch.Gui
 
                void OnDrawButtonClicked(object sender, System.EventArgs e)
                {
-                       if(DrawFrame != null)
-                               DrawFrame (CurrentTime);
+                       Config.EventsBroker.EmitDrawFrame (CurrentTime);
                }
                
                void HandleRealized (object sender, EventArgs e)
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs 
b/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
index e4c923f..5a974d3 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
@@ -29,22 +29,9 @@ namespace LongoMatch.Gui
        [System.ComponentModel.ToolboxItem(true)]
        public partial class PlayerCapturerBin : Gtk.Bin, IPlayerBin, ICapturerBin
        {       
-               /* Common events */
-               public event ErrorHandler Error;
-               
-               /* Capturer events */
-               public event CaptureFinishedHandler CaptureFinished;
-               
                /* Player Events */
-               public event SegmentClosedHandler SegmentClosedEvent;
-               public event TickHandler Tick;
                public event StateChangeHandler PlayStateChanged;
-               public event NextButtonClickedHandler Next;
-               public event PrevButtonClickedHandler Prev;
-               public event DrawFrameHandler DrawFrame;
                public event SeekEventHandler SeekEvent;
-               public event DetachPlayerHandler Detach;
-               public event PlaybackRateChangedHandler PlaybackRateChanged;
                
                public enum PlayerOperationMode {
                        Player,
@@ -280,65 +267,16 @@ namespace LongoMatch.Gui
                }
                
                void ConnectSignals () {
-                       capturerbin.CaptureFinished += (bool close) => {
-                               if (CaptureFinished != null)
-                                       CaptureFinished (close);
-                       };
-                       
-                       capturerbin.Error += delegate(string message) {
-                               if (Error != null)
-                                       Error (message);
-                       };
-                       
-                       playerbin.Error += delegate(string message) {
-                               if (Error != null)
-                                       Error (message);
-                       };
-                       
-                       playerbin.SegmentClosedEvent += delegate () {
-                               if (SegmentClosedEvent != null)
-                                       SegmentClosedEvent ();
-                       };
-                       
-                       playerbin.Tick += delegate (Time t, Time s, double p) {
-                               if (Tick != null)
-                                       Tick (t, s, p);
-                       };
-                       
                        playerbin.PlayStateChanged += delegate (bool playing) {
                                if (PlayStateChanged != null)
                                        PlayStateChanged (playing);
                        };
                        
-                       playerbin.Next += delegate () {
-                               if (Next != null)
-                                       Next ();
-                       };
-                       
-                       playerbin.Prev += delegate () {
-                               if (Prev != null)
-                                       Prev ();
-                       };
-                       
-                       playerbin.DrawFrame += delegate (Time time) {
-                               if (DrawFrame != null)
-                                       DrawFrame (time);
-                       };
-                       
                        playerbin.SeekEvent += delegate (Time pos) {
                                if (SeekEvent != null)
                                        SeekEvent (pos);
                        };
                        
-                       playerbin.Detach += delegate (bool detach) {
-                               if (Detach != null)
-                                       Detach (detach);
-                       };
-                       
-                       playerbin.PlaybackRateChanged += (rate) => {
-                               if (PlaybackRateChanged != null)
-                                       PlaybackRateChanged (rate);
-                       };
                }
                
                void LoadBackgroundPlayer (string filename) {
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml b/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
index 949d29c..d7dd50b 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
@@ -6,54 +6,32 @@
       </itemgroup>
     </itemgroups>
     <signals>
-      <itemgroup label="ICapturerBin Signals">
-        <signal name="CaptureFinished" />
-        <signal name="Error" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.PlayerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
       <itemgroup label="IPlayerBin Properties">
-        <property name="Detached" />
         <property name="Sensitive" />
       </itemgroup>
     </itemgroups>
     <signals>
       <itemgroup label="IPlayerBin Signals">
-        <signal name="SegmentClosedEvent" />
-        <signal name="Tick" />
-        <signal name="Error" />
         <signal name="PlayStateChanged" />
-        <signal name="Next" />
-        <signal name="Prev" />
-        <signal name="DrawFrame" />
         <signal name="SeekEvent" />
-        <signal name="Detach" />
-        <signal name="PlaybackRateChanged" />
+        <signal name="Tick" />
       </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.PlayerCapturerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
       <itemgroup label="IPlayerBin Properties">
-        <property name="Detached" />
         <property name="Sensitive" />
       </itemgroup>
     </itemgroups>
     <signals>
       <itemgroup label="ICapturerBin Signals">
-        <signal name="Error" />
-        <signal name="CaptureFinished" />
-        <signal name="SegmentClosedEvent" />
-        <signal name="Tick" />
         <signal name="PlayStateChanged" />
-        <signal name="Next" />
-        <signal name="Prev" />
-        <signal name="DrawFrame" />
         <signal name="SeekEvent" />
-        <signal name="Detach" />
-        <signal name="PlaybackRateChanged" />
       </itemgroup>
     </signals>
   </object>
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
index 0a428c2..f973cd1 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
@@ -87,7 +87,6 @@ namespace LongoMatch.Gui.Component
                }
                
                private void ConnectSignals() {
-                       playercapturer.Detach += DetachPlayer;
                        KeyPressEvent += (o, args) => (
                                Config.EventsBroker.EmitKeyPressed(o, (int)args.Event.Key, 
(int)args.Event.State));
                }
@@ -104,7 +103,7 @@ namespace LongoMatch.Gui.Component
                                
                                playerWindow = new Gtk.Window(Constants.SOFTWARE_NAME);
                                playerWindow.Icon = Stetic.IconLoader.LoadIcon(this, "longomatch", 
IconSize.Button);
-                               playerWindow.DeleteEvent += (o, args) => DetachPlayer(false);
+                               playerWindow.DeleteEvent += (o, args) => DetachPlayer();
                                box = new EventBox();
                                
                                box.KeyPressEvent += (o, args) => OnKeyPressEvent(args.Event);
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index 7636673..083d16c 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -313,56 +313,38 @@
     <signals />
   </object>
   <object type="LongoMatch.Gui.CapturerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals>
-      <itemgroup label="ICapturerBin Signals">
-        <signal name="CaptureFinished" />
-        <signal name="Error" />
+    <itemgroups>
+      <itemgroup label="CapturerBin Properties">
+        <property name="Capturing" />
       </itemgroup>
+    </itemgroups>
+    <signals>
     </signals>
   </object>
   <object type="LongoMatch.Gui.PlayerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
       <itemgroup label="IPlayerBin Properties">
-        <property name="Detached" />
         <property name="Sensitive" />
       </itemgroup>
     </itemgroups>
     <signals>
       <itemgroup label="IPlayerBin Signals">
-        <signal name="SegmentClosedEvent" />
         <signal name="Tick" />
-        <signal name="Error" />
         <signal name="PlayStateChanged" />
-        <signal name="Next" />
-        <signal name="Prev" />
-        <signal name="DrawFrame" />
         <signal name="SeekEvent" />
-        <signal name="Detach" />
-        <signal name="PlaybackRateChanged" />
       </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.PlayerCapturerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
       <itemgroup label="IPlayerBin Properties">
-        <property name="Detached" />
         <property name="Sensitive" />
       </itemgroup>
     </itemgroups>
     <signals>
       <itemgroup label="ICapturerBin Signals">
-        <signal name="Error" />
-        <signal name="CaptureFinished" />
-        <signal name="SegmentClosedEvent" />
-        <signal name="Tick" />
         <signal name="PlayStateChanged" />
-        <signal name="Next" />
-        <signal name="Prev" />
-        <signal name="DrawFrame" />
         <signal name="SeekEvent" />
-        <signal name="Detach" />
-        <signal name="PlaybackRateChanged" />
       </itemgroup>
     </signals>
   </object>
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index e52ee78..fb141ef 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -52,7 +52,6 @@ namespace LongoMatch.Services
                {
                        this.guiToolkit = guiToolkit;
                        this.renderer = renderer;
-                       Config.EventsBroker.OpenedProjectChanged += HandleOpenedProjectChanged;
                        catsTime = new Dictionary<Category, Time>();
                        ConnectSignals ();
                }
@@ -68,24 +67,9 @@ namespace LongoMatch.Services
                        if (project == null)
                                return;
                                
-                       if (player != null) {
-                               player.Prev -= OnPrev;
-                               player.SegmentClosedEvent -= OnSegmentClosedEvent;
-                               player.DrawFrame -= OnDrawFrame;
-                               player.PlaybackRateChanged -= HandlePlaybackRateChanged;
-                       }
-
                        this.analysisWindow = analysisWindow;
                        player = analysisWindow.Player;
                        capturer = analysisWindow.Capturer;
-                       
-                       if (player != null) {
-                               player.Prev += OnPrev;
-                               player.SegmentClosedEvent += OnSegmentClosedEvent;
-                               player.DrawFrame += OnDrawFrame;
-                               player.PlaybackRateChanged += HandlePlaybackRateChanged;
-                       }
-
                }
 
                void Save (Project project) {
@@ -110,6 +94,19 @@ namespace LongoMatch.Services
                        
                        Config.EventsBroker.ShowProjectStatsEvent += HandleShowProjectStatsEvent;
                        Config.EventsBroker.TagSubcategoriesChangedEvent += 
HandleTagSubcategoriesChangedEvent;
+                       
+                       Config.EventsBroker.OpenedProjectChanged += HandleOpenedProjectChanged;
+
+                       Config.EventsBroker.SegmentClosed += OnSegmentClosedEvent;
+                       Config.EventsBroker.Prev += OnPrev;
+                       Config.EventsBroker.DrawFrame += OnDrawFrame;
+                       Config.EventsBroker.PlaybackRateChanged += HandlePlaybackRateChanged;
+                       Config.EventsBroker.Detach += HandleDetach;
+               }
+
+               void HandleDetach ()
+               {
+                       analysisWindow.DetachPlayer ();
                }
 
                void HandleTagSubcategoriesChangedEvent (bool tagsubcategories)
diff --git a/LongoMatch.Services/Services/PlaylistManager.cs b/LongoMatch.Services/Services/PlaylistManager.cs
index 8b71f98..1e85bc8 100644
--- a/LongoMatch.Services/Services/PlaylistManager.cs
+++ b/LongoMatch.Services/Services/PlaylistManager.cs
@@ -89,15 +89,11 @@ namespace LongoMatch.Services
                        Config.EventsBroker.PlayListNodeSelectedEvent += LoadPlaylistPlay;
                        Config.EventsBroker.RenderPlaylist += OnRenderPlaylistEvent;
                        Config.EventsBroker.SegmentClosed += () => {selectedTimeNode = null;};
-                       
-                       /* Handle Next/Prev from the player */
-                       if (analysisWindow.Player != null) {
-                               analysisWindow.Player.Next += () => {Next();};
-                               analysisWindow.Player.Prev += () => {
-                                       if(selectedTimeNode is PlayListPlay)
-                                               Prev();
-                               };
-                       }
+                       Config.EventsBroker.Next += () => {Next ();};
+                       Config.EventsBroker.Prev += () => {
+                               if(selectedTimeNode is PlayListPlay)
+                                       Prev();
+                       };
                }
                
                private void Add(List<Play> plays) {
diff --git a/LongoMatch.Services/Services/ProjectsManager.cs b/LongoMatch.Services/Services/ProjectsManager.cs
index 127ab98..c5ba731 100644
--- a/LongoMatch.Services/Services/ProjectsManager.cs
+++ b/LongoMatch.Services/Services/ProjectsManager.cs
@@ -58,6 +58,9 @@ namespace LongoMatch.Services
                        Config.EventsBroker.CloseOpenedProjectEvent += () => PromptCloseProject();
                        Config.EventsBroker.SaveProjectEvent += SaveProject;
                        Config.EventsBroker.KeyPressed += HandleKeyPressed;
+                       Config.EventsBroker.CaptureError += HandleCaptureError;
+                       Config.EventsBroker.CaptureFinished += HandleCaptureFinished;
+                       Config.EventsBroker.MultimediaError += HandleMultimediaError;
                }
 
                public Project OpenedProject {
@@ -180,19 +183,6 @@ namespace LongoMatch.Services
                        OpenedProjectType = projectType;
                
                        if (Player != null) {
-                               Player.Tick += Config.EventsBroker.EmitTick;
-                               Player.Error += HandleMultimediaError;
-                               Player.SegmentClosedEvent += Config.EventsBroker.EmitSegmentClosed;
-                       }
-                       if (Capturer != null) {
-                               Capturer.CaptureFinished += (close) => {
-                                       CloseOpenedProject (!close);
-                                       if (!close) {
-                                               OpenProjectID (project.ID);
-                                       }
-                               };
-                               if (Capturer != Player)
-                                       Capturer.Error += HandleMultimediaError;
                        }
                        
                        if(projectType == ProjectType.FileProject) {
@@ -387,6 +377,23 @@ namespace LongoMatch.Services
                                " the current project will be closed:")+"\n" + message);
                        CloseOpenedProject (true);
                }
+
+               void HandleCaptureFinished (bool close)
+               {
+                       Guid id = OpenedProject.ID;
+                       ProjectType type = OpenedProjectType;
+                       CloseOpenedProject (!close);
+                       if (!close && type != ProjectType.FakeCaptureProject) {
+                               OpenProjectID (id);
+                       }
+               }
+
+               void HandleCaptureError (string message)
+               {
+                       guiToolkit.ErrorMessage (Catalog.GetString("The following error happened and" +
+                               " the current capture will be closed:")+"\n" + message);
+                       HandleCaptureFinished (false);
+               }
                
                void HandleKeyPressed (object sender, int key, int modifier)
                {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]