[longomatch] Add a new Events broker and simplify events passing



commit 6a5d41558c41a205ed3f2e20542b37a6382d2a2a
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Wed Jun 4 09:24:03 2014 +0200

    Add a new Events broker and simplify events passing

 LongoMatch.Core/Common/EventsBroker.cs             |  300 ++++++++++++++++++++
 LongoMatch.Core/Config.cs                          |    1 +
 LongoMatch.Core/Handlers/Handlers.cs               |    4 +-
 LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs  |   36 ---
 LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs      |    3 +-
 LongoMatch.Core/Interfaces/GUI/IMainController.cs  |   23 +--
 .../Interfaces/GUI/IProjectOptionsController.cs    |   35 ---
 LongoMatch.Core/LongoMatch.Core.mdp                |    2 +-
 LongoMatch.Drawing/Widgets/PlaysTimeline.cs        |   24 +-
 LongoMatch.GUI/Gui/Component/AnalysisComponent.cs  |  173 +-----------
 .../Gui/Component/AnalysisTemplateEditor.cs        |    2 +-
 LongoMatch.GUI/Gui/Component/ButtonsWidget.cs      |   21 +--
 LongoMatch.GUI/Gui/Component/CodingWidget.cs       |   17 +-
 LongoMatch.GUI/Gui/Component/NotesWidget.cs        |    4 +-
 .../Gui/Component/PlayersListTreeWidget.cs         |   38 +---
 .../Gui/Component/PlaysListTreeWidget.cs           |   69 +-----
 .../Gui/Component/PlaysSelectionWidget.cs          |  102 +-------
 LongoMatch.GUI/Gui/Component/Timeline.cs           |   74 +-----
 LongoMatch.GUI/Gui/GUIToolkit.cs                   |    4 +-
 LongoMatch.GUI/Gui/MainWindow.cs                   |  251 +++--------------
 LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs        |    5 +-
 LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs       |    4 +-
 LongoMatch.GUI/Gui/Panel/WelcomePanel.cs           |   21 +-
 LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs    |   62 ++---
 .../gtk-gui/LongoMatch.Gui.MainWindow.cs           |   45 +---
 LongoMatch.GUI/gtk-gui/gui.stetic                  |   76 -----
 LongoMatch.GUI/gtk-gui/objects.xml                 |   78 -----
 LongoMatch.Services/LongoMatch.Services.mdp        |    1 -
 LongoMatch.Services/Services/Core.cs               |   18 +-
 LongoMatch.Services/Services/DataBaseManager.cs    |   18 +-
 LongoMatch.Services/Services/EventsManager.cs      |   48 ++--
 LongoMatch.Services/Services/GameUnitsManager.cs   |  146 ----------
 LongoMatch.Services/Services/HotKeysManager.cs     |   17 +-
 LongoMatch.Services/Services/PlaylistManager.cs    |   30 +--
 LongoMatch.Services/Services/ProjectsManager.cs    |   56 ++---
 .../Services/RenderingJobsManager.cs               |    2 +-
 LongoMatch.Services/Services/ToolsManager.cs       |   26 +-
 LongoMatch/Main.cs                                 |    1 +
 38 files changed, 503 insertions(+), 1334 deletions(-)
---
diff --git a/LongoMatch.Core/Common/EventsBroker.cs b/LongoMatch.Core/Common/EventsBroker.cs
new file mode 100644
index 0000000..3b7f0c7
--- /dev/null
+++ b/LongoMatch.Core/Common/EventsBroker.cs
@@ -0,0 +1,300 @@
+//
+//  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.Handlers;
+using System.Collections.Generic;
+using LongoMatch.Store;
+using LongoMatch.Interfaces;
+using LongoMatch.Interfaces.GUI;
+
+namespace LongoMatch.Common
+{
+       public class EventsBroker
+       {
+       
+               public event NewTagHandler NewTagEvent;
+               public event NewTagAtPosHandler NewTagAtPosEvent;
+               public event NewTagStartHandler NewTagStartEvent;
+               public event NewTagStopHandler NewTagStopEvent;
+               public event NewTagCancelHandler NewTagCancelEvent;
+               public event PlaysDeletedHandler PlaysDeleted;
+               public event PlaySelectedHandler PlaySelected;
+               public event PlayCategoryChangedHandler PlayCategoryChanged;
+               public event PlayListNodeAddedHandler PlayListNodeAdded;
+               public event TimeNodeChangedHandler TimeNodeChanged;
+               public event SnapshotSeriesHandler SnapshotSeries;
+               public event RenderPlaylistHandler RenderPlaylist;
+               public event TagPlayHandler TagPlay;
+               public event DuplicatePlayHandler DuplicatePlay;
+               
+               /* Playlist */
+               public event RenderPlaylistHandler RenderPlaylistEvent;
+               public event PlayListNodeAddedHandler PlayListNodeAddedEvent;
+               public event PlayListNodeSelectedHandler PlayListNodeSelectedEvent;
+               public event OpenPlaylistHandler OpenPlaylistEvent;
+               public event NewPlaylistHandler NewPlaylistEvent;
+               public event SavePlaylistHandler SavePlaylistEvent; 
+               
+               
+               public event KeyHandler KeyPressed;
+               
+               /* Project options */
+               public event SaveProjectHandler SaveProjectEvent;
+               public event CloseOpenendProjectHandler CloseOpenedProjectEvent;
+               public event ShowFullScreenHandler ShowFullScreenEvent;
+               public event ShowProjectStats ShowProjectStatsEvent;
+               public event TagSubcategoriesChangedHandler TagSubcategoriesChangedEvent;
+               
+               /* Main controller */
+               
+               /* IMainController */
+               public event NewProjectHandler NewProjectEvent;
+               public event OpenNewProjectHandler OpenNewProjectEvent;
+               public event OpenProjectHandler OpenProjectEvent;
+               public event OpenProjectIDHandler OpenProjectIDEvent;
+               public event ImportProjectHandler ImportProjectEvent;
+               public event ExportProjectHandler ExportProjectEvent;
+               public event QuitApplicationHandler QuitApplicationEvent;
+               public event ManageJobsHandler ManageJobsEvent; 
+               public event ManageTeamsHandler ManageTeamsEvent;
+               public event ManageCategoriesHandler ManageCategoriesEvent;
+               public event ManageProjects ManageProjectsEvent;
+               public event ManageDatabases ManageDatabasesEvent;
+               public event EditPreferences EditPreferencesEvent;
+               public event ConvertVideoFilesHandler ConvertVideoFilesEvent;
+               
+               public event OpenedProjectChangedHandler OpenedProjectChanged;
+               
+               
+               public EventsBroker ()
+               {
+               }
+               
+               public void EmitNewTagAtPos(Category category, Time pos) {
+                       if (NewTagAtPosEvent != null)
+                               NewTagAtPosEvent(category, pos);
+               }
+
+               public void EmitNewTag(Category category) {
+                       if (NewTagEvent != null)
+                               NewTagEvent(category);
+               }
+
+               public void EmitNewTagStart(Category category) {
+                       if (NewTagStartEvent != null)
+                               NewTagStartEvent (category);
+               }
+
+               public void EmitNewTagStop(Category category) {
+                       if (NewTagStopEvent != null)
+                               NewTagStopEvent (category);
+               }
+               
+               public void EmitNewTagCancel(Category category) {
+                       if (NewTagCancelEvent != null)
+                               NewTagCancelEvent (category);
+               }
+               
+               
+               public void EmitPlaysDeleted(List<Play> plays)
+               {
+                       if (PlaysDeleted != null)
+                               PlaysDeleted(plays);
+               }
+               
+               public void EmitPlaySelected(Play play)
+               {
+                       if (PlaySelected != null)
+                               PlaySelected(play);
+               }
+               
+               public void EmitSnapshotSeries(Play play)
+               {
+                       if (SnapshotSeries != null)
+                               SnapshotSeries(play);
+               }
+               
+               public void EmitRenderPlaylist(IPlayList playlist) {
+                       if (RenderPlaylist != null)
+                               RenderPlaylist(playlist);
+               }
+               
+               public void EmitPlayListNodeAdded(List<Play> plays)
+               {
+                       if (PlayListNodeAdded != null)
+                               PlayListNodeAdded(plays);
+               }
+               
+               public void EmitTimeNodeChanged (TimeNode tn, object val)
+               {
+                       if (TimeNodeChanged != null)
+                               TimeNodeChanged(tn, val);
+               }
+               
+               public virtual void EmitPlayCategoryChanged(Play play, Category cat)
+               {
+                       if(PlayCategoryChanged != null)
+                               PlayCategoryChanged(play, cat);
+               }
+               
+               public void EmitTagPlay(Play play) {
+                       if (TagPlay != null)
+                               TagPlay (play);
+               }
+
+               public void EmitDuplicatePlay (Play play)
+               {
+                       if (DuplicatePlay != null)
+                               DuplicatePlay (play);
+               }
+               
+               public void EmitNewPlaylist() {
+                       if (NewPlaylistEvent != null)
+                               NewPlaylistEvent();
+               }
+               
+               public void EmitOpenPlaylist() {
+                       if (OpenPlaylistEvent != null)
+                               OpenPlaylistEvent();
+               }
+               
+               public void EmitSavePlaylist() {
+                       if (SavePlaylistEvent != null)
+                               SavePlaylistEvent();
+               }
+               
+               public void EmitKeyPressed(object sender, int key, int modifier) {
+                       if (KeyPressed != null)
+                               KeyPressed(sender, key, modifier);
+               }
+               
+               public void EmitCloseOpenedProject () {
+                       if (CloseOpenedProjectEvent != null)
+                               CloseOpenedProjectEvent ();
+               }
+               
+               public void EmitShowProjectStats (Project project) {
+                       if (ShowProjectStatsEvent != null)
+                               ShowProjectStatsEvent (project);
+               }
+               
+               public void EmitTagSubcategories (bool active) {
+                       if (TagSubcategoriesChangedEvent != null)
+                               TagSubcategoriesChangedEvent (active);
+               }
+
+               public void EmitShowFullScreen (bool active)
+               {
+                       if (ShowFullScreenEvent != null) {
+                               ShowFullScreenEvent (active);
+                       }
+               }
+               
+               public void EmitSaveProject (Project project, ProjectType projectType) {
+                       if (SaveProjectEvent != null)
+                               SaveProjectEvent (project, projectType);
+               }
+               
+               public void EmitNewProject () {
+                       if (NewProjectEvent != null)
+                               NewProjectEvent();
+               }
+               
+               public void EmitOpenProject () {
+                       if(OpenProjectEvent != null)
+                               OpenProjectEvent();
+               }
+                               
+               public void EmitEditPreferences ()
+               {
+                       if (EditPreferencesEvent != null)
+                               EditPreferencesEvent();
+               }
+               
+               public void EmitManageJobs() {
+                       if(ManageJobsEvent != null)
+                               ManageJobsEvent();
+               }
+               
+               public void EmitManageTeams() {
+                       if(ManageTeamsEvent != null)
+                               ManageTeamsEvent();
+               }
+               
+               public void EmitManageProjects()
+               {
+                       if (ManageProjectsEvent != null)
+                               ManageProjectsEvent();
+               }
+               
+               public void EmitManageDatabases()
+               {
+                       if (ManageDatabasesEvent != null)
+                               ManageDatabasesEvent();
+               }
+               
+               public void EmitManageCategories() {
+                       if(ManageCategoriesEvent != null)
+                               ManageCategoriesEvent();
+               }
+               
+               public void EmitImportProject(string name, string filterName, string filter,
+                                              Func<string, Project> func, bool requiresNewFile) {
+                       if (ImportProjectEvent != null)
+                               ImportProjectEvent(name, filterName, filter, func, requiresNewFile);
+               }
+               
+               public void EmitExportProject (Project project) {
+                       if(ExportProjectEvent != null)
+                               ExportProjectEvent (project);
+               }
+               
+               public void EmitOpenProjectID (Guid projectID ) {
+                       if (OpenProjectIDEvent != null) {
+                               OpenProjectIDEvent (projectID);
+                       }
+               }
+               
+               public void EmitOpenNewProject (Project project, ProjectType projectType, CaptureSettings 
captureSettings)
+               {
+                       if (OpenNewProjectEvent != null) {
+                               OpenNewProjectEvent (project, projectType, captureSettings);
+                       }
+               }
+               
+               public void EmitConvertVideoFiles (List<MediaFile> files, EncodingSettings settings) {
+                       if (ConvertVideoFilesEvent != null)
+                               ConvertVideoFilesEvent (files, settings);
+               }
+               
+               public void EmitQuitApplication () {
+                       if (QuitApplicationEvent != null) {
+                               QuitApplicationEvent ();
+                       }
+               }
+               
+               public  void EmitOpenedProjectChanged (Project project, ProjectType projectType,
+                                                      PlaysFilter filter, IAnalysisWindow analysisWindow)
+               {
+                       if (OpenedProjectChanged != null) {
+                               OpenedProjectChanged (project, projectType, filter, analysisWindow);
+                       }
+               }
+       }
+}
+
diff --git a/LongoMatch.Core/Config.cs b/LongoMatch.Core/Config.cs
index 0de7ef1..4107850 100644
--- a/LongoMatch.Core/Config.cs
+++ b/LongoMatch.Core/Config.cs
@@ -38,6 +38,7 @@ namespace LongoMatch
                public static ITeamTemplatesProvider TeamTemplatesProvider;
                public static ICategoriesTemplatesProvider CategoriesTemplatesProvider;
                public static ISubcategoriesTemplatesProvider SubcategoriesTemplatesProvider;
+               public static EventsBroker EventsBroker;
 
                public static IDataBaseManager DatabaseManager;
                public static IRenderingJobsManager RenderingJobsManger;
diff --git a/LongoMatch.Core/Handlers/Handlers.cs b/LongoMatch.Core/Handlers/Handlers.cs
index c7abdfd..c825e4d 100644
--- a/LongoMatch.Core/Handlers/Handlers.cs
+++ b/LongoMatch.Core/Handlers/Handlers.cs
@@ -55,7 +55,7 @@ namespace LongoMatch.Handlers
        /* Project Events */
        public delegate void SaveProjectHandler(Project project, ProjectType projectType);
        public delegate void OpenedProjectChangedHandler(Project project, ProjectType projectType, 
PlaysFilter filter,
-                                                        IAnalysisWindow analysisWindow, 
IProjectOptionsController projectOptions);
+                                                        IAnalysisWindow analysisWindow);
        public delegate void OpenProjectIDHandler(Guid project_id);
        public delegate void OpenProjectHandler();
        public delegate void CloseOpenendProjectHandler();
@@ -63,7 +63,7 @@ namespace LongoMatch.Handlers
        public delegate void OpenNewProjectHandler(Project project, ProjectType projectType, CaptureSettings 
captureSettings);
        public delegate void ImportProjectHandler(string name, string filterName, string filter,
                                                  Func <string, Project> importProjectFunc, bool 
requiresNewFile);
-       public delegate void ExportProjectHandler();
+       public delegate void ExportProjectHandler (Project project);
        public delegate void QuitApplicationHandler ();
        
        /* GUI */
diff --git a/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs 
b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
index 7acdd53..e92bb0a 100644
--- a/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
@@ -27,42 +27,6 @@ namespace LongoMatch.Interfaces.GUI
 {
        public interface IAnalysisWindow
        {       
-               /* Tags */
-               event NewTagHandler NewTagEvent;
-               event NewTagAtPosHandler NewTagAtPosEvent;
-               event NewTagStartHandler NewTagStartEvent;
-               event NewTagStopHandler NewTagStopEvent;
-               event NewTagCancelHandler NewTagCancelEvent;
-               event PlaySelectedHandler PlaySelectedEvent;
-               event TagPlayHandler TagPlayEvent;
-               event PlaysDeletedHandler PlaysDeletedEvent;
-               event TimeNodeChangedHandler TimeNodeChanged;
-               event PlayCategoryChangedHandler PlayCategoryChanged;
-               event DuplicatePlayHandler DuplicatePlay;
-               
-               /* Playlist */
-               event RenderPlaylistHandler RenderPlaylistEvent;
-               event PlayListNodeAddedHandler PlayListNodeAddedEvent;
-               event PlayListNodeSelectedHandler PlayListNodeSelectedEvent;
-               event OpenPlaylistHandler OpenPlaylistEvent;
-               event NewPlaylistHandler NewPlaylistEvent;
-               event SavePlaylistHandler SavePlaylistEvent; 
-               
-               /* Snapshots */
-               event SnapshotSeriesHandler SnapshotSeriesEvent;
-               
-               /* Game Units events */
-               event GameUnitHandler GameUnitEvent;
-               event UnitChangedHandler UnitChanged;
-               event UnitSelectedHandler UnitSelected;
-               event UnitsDeletedHandler UnitDeleted;
-               event UnitAddedHandler UnitAdded;
-               
-               /* Error handling */
-               event CloseOpenendProjectHandler CloseOpenedProjectEvent;
-               
-               event KeyHandler KeyPressed;
-               
                void SetProject(Project project, ProjectType projectType, CaptureSettings props, PlaysFilter 
filter);
                void CloseOpenedProject ();
                void AddPlay(Play play);
diff --git a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
index 2c9e263..59b5f40 100644
--- a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
@@ -60,8 +60,7 @@ namespace LongoMatch.Interfaces.GUI
                
                void OpenProject (Project project, ProjectType projectType, 
                                  CaptureSettings props, PlaysFilter filter,
-                                 out IAnalysisWindow analysisWindow,
-                                 out IProjectOptionsController projectOptionsController);
+                                 out IAnalysisWindow analysisWindow);
                void CloseProject ();
                                             
                void SelectProject(List<ProjectDescription> projects);
diff --git a/LongoMatch.Core/Interfaces/GUI/IMainController.cs 
b/LongoMatch.Core/Interfaces/GUI/IMainController.cs
index aee3051..d2cd23b 100644
--- a/LongoMatch.Core/Interfaces/GUI/IMainController.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IMainController.cs
@@ -23,30 +23,9 @@ namespace LongoMatch.Interfaces.GUI
 {
        public interface IMainController
        {
-               /* Projects */
-               event NewProjectHandler NewProjectEvent;
-               event OpenNewProjectHandler OpenNewProjectEvent;
-               event OpenProjectHandler OpenProjectEvent;
-               event OpenProjectIDHandler OpenProjectIDEvent;
-               event ImportProjectHandler ImportProjectEvent;
-               event ExportProjectHandler ExportProjectEvent;
-               event QuitApplicationHandler QuitApplicationEvent;
-               
-               /* Managers */
-               event ManageJobsHandler ManageJobsEvent; 
-               event ManageTeamsHandler ManageTeamsEvent;
-               event ManageCategoriesHandler ManageCategoriesEvent;
-               event ManageProjects ManageProjectsEvent;
-               event ManageDatabases ManageDatabasesEvent;
-               event EditPreferences EditPreferencesEvent;
-               
-               /* Convert Video Files */
-               event ConvertVideoFilesHandler ConvertVideoFilesEvent;
-               
                void AddExportEntry (string name, string shortName, Action<Project, IGUIToolkit> 
exportAction);
                void AddImportEntry (string name, string shortName, string filterName,
                                     string filter, Func<string, Project> importFunc,
                                     bool requiresNewFile);
        }
-}
-
+}
\ No newline at end of file
diff --git a/LongoMatch.Core/LongoMatch.Core.mdp b/LongoMatch.Core/LongoMatch.Core.mdp
index 7138f53..2d75243 100644
--- a/LongoMatch.Core/LongoMatch.Core.mdp
+++ b/LongoMatch.Core/LongoMatch.Core.mdp
@@ -107,7 +107,6 @@
     <File subtype="Code" buildaction="Compile" name="Common/Gettext.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/Exceptions.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IMainController.cs" />
-    <File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IProjectOptionsController.cs" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/field_background.svg" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/goal_background.svg" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/half_field_background.svg" />
@@ -139,6 +138,7 @@
     <File subtype="Code" buildaction="Compile" name="Common/ExtensionMethods.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Timer.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Period.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/EventsBroker.cs" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
index 56a94af..646b0a6 100644
--- a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
@@ -31,8 +31,6 @@ namespace LongoMatch.Drawing.Widgets
        public class PlaysTimeline: SelectionCanvas
        {
        
-               public event TimeNodeChangedHandler TimeNodeChanged;
-               public event PlaySelectedHandler TimeNodeSelected;
                public event ShowTimelineMenuHandler ShowMenuEvent;
 
                Project project;
@@ -144,9 +142,7 @@ namespace LongoMatch.Drawing.Widgets
                protected override void SelectionChanged (List<Selection> selections) {
                        if (selections.Count > 0) {
                                PlayObject po = selections.Last().Drawable as PlayObject;
-                               if (TimeNodeSelected != null) {
-                                       TimeNodeSelected (po.Play);
-                               }
+                               Config.EventsBroker.EmitPlaySelected (po.Play);
                        }
                }
                
@@ -181,17 +177,15 @@ namespace LongoMatch.Drawing.Widgets
                }
                
                protected override void SelectionMoved (Selection sel) {
-                       if (TimeNodeChanged != null) {
-                               Time moveTime;
-                               Play play = (sel.Drawable as PlayObject).Play;
-
-                               if (sel.Position == SelectionPosition.Right) {
-                                       moveTime = play.Stop;
-                               } else {
-                                       moveTime = play.Start;
-                               }
-                               TimeNodeChanged (play, moveTime);
+                       Time moveTime;
+                       Play play = (sel.Drawable as PlayObject).Play;
+                       
+                       if (sel.Position == SelectionPosition.Right) {
+                               moveTime = play.Stop;
+                       } else {
+                               moveTime = play.Start;
                        }
+                       Config.EventsBroker.EmitTimeNodeChanged (play, moveTime);
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
index 9dfc435..2d06a3e 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
@@ -33,42 +33,6 @@ namespace LongoMatch.Gui.Component
        [System.ComponentModel.ToolboxItem(true)]
        public partial class AnalysisComponent : Gtk.Bin, IAnalysisWindow
        {
-               /* Error handling */
-               public event CloseOpenendProjectHandler CloseOpenedProjectEvent;
-               
-               /* Tags */
-               public event NewTagHandler NewTagEvent;
-               public event NewTagStartHandler NewTagStartEvent;
-               public event NewTagStopHandler NewTagStopEvent;
-               public event NewTagCancelHandler NewTagCancelEvent;
-               public event PlaySelectedHandler PlaySelectedEvent;
-               public event NewTagAtPosHandler NewTagAtPosEvent;
-               public event TagPlayHandler TagPlayEvent;
-               public event PlaysDeletedHandler PlaysDeletedEvent;
-               public event TimeNodeChangedHandler TimeNodeChanged;
-               public event PlayCategoryChangedHandler PlayCategoryChanged;
-               public event DuplicatePlayHandler DuplicatePlay;
-               
-               /* Playlist */
-               public event RenderPlaylistHandler RenderPlaylistEvent;
-               public event PlayListNodeAddedHandler PlayListNodeAddedEvent;
-               public event PlayListNodeSelectedHandler PlayListNodeSelectedEvent;
-               public event OpenPlaylistHandler OpenPlaylistEvent;
-               public event NewPlaylistHandler NewPlaylistEvent;
-               public event SavePlaylistHandler SavePlaylistEvent; 
-               
-               /* Snapshots */
-               public event SnapshotSeriesHandler SnapshotSeriesEvent;
-               
-               /* Game Units events */
-               public event GameUnitHandler GameUnitEvent;
-               public event UnitChangedHandler UnitChanged;
-               public event UnitSelectedHandler UnitSelected;
-               public event UnitsDeletedHandler UnitDeleted;
-               public event UnitAddedHandler UnitAdded;
-               
-               public event KeyHandler KeyPressed;
-
                static Project openedProject;
                ProjectType projectType;
                bool detachedPlayer;
@@ -86,7 +50,7 @@ namespace LongoMatch.Gui.Component
                        playercapturer.Detach += DetachPlayer;
                        playercapturer.Logo = System.IO.Path.Combine(Config.ImagesDir,"background.png");
                        playercapturer.CaptureFinished += (sender, e) => {
-                               EmitCloseOpenedProject();
+                               Config.EventsBroker.EmitCloseOpenedProject();
                        };
                        
                        ConnectSignals();
@@ -146,30 +110,11 @@ namespace LongoMatch.Gui.Component
                }
                
                private void ConnectSignals() {
-                       /* Adding Handlers for each event */
-
-                       notes.TimeNodeChanged += EmitTimeNodeChanged;
-
-                       playsSelection.PlaysDeleted += EmitPlaysDeleted;
-                       playsSelection.PlaySelected += EmitPlaySelected;
-                       playsSelection.TimeNodeChanged += EmitTimeNodeChanged;
-                       playsSelection.PlayCategoryChanged += EmitPlayCategoryChanged;
-                       playsSelection.PlayListNodeAdded += EmitPlayListNodeAdded;
-                       playsSelection.DuplicatePlay += EmitDuplicatePlay;
-                       playsSelection.TagPlay += EmitTagPlay;
-                       playsSelection.SnapshotSeries += EmitSnapshotSeries;
-                       playsSelection.RenderPlaylist += EmitRenderPlaylist;
-
-                       /* Connect playlist events */
-//                     playlist.PlayListNodeSelected += EmitPlayListNodeSelected;
-//                     playlist.NewPlaylistEvent += EmitNewPlaylist;
-//                     playlist.OpenPlaylistEvent += EmitOpenPlaylist;
-//                     playlist.SavePlaylistEvent += EmitSavePlaylist;
-
                        playercapturer.Error += OnMultimediaError;
                        playercapturer.SegmentClosedEvent += OnSegmentClosedEvent;
                        
-                       KeyPressEvent += (o, args) => (EmitKeyPressed(o, (int)args.Event.Key, 
(int)args.Event.State));
+                       KeyPressEvent += (o, args) => (
+                               Config.EventsBroker.EmitKeyPressed(o, (int)args.Event.Key, 
(int)args.Event.State));
                }
                
                void DetachPlayer (bool detach) {
@@ -240,78 +185,13 @@ namespace LongoMatch.Gui.Component
                        openedProject = project;
                        this.projectType = projectType;
                        
-                       codingwidget.SetProject (project, isLive, filter, this);
+                       codingwidget.SetProject (project, isLive, filter);
                        playsSelection.SetProject (project, isLive, filter);
                        postagger.LoadBackgrounds (openedProject.Categories.FieldBackground,
                                                   openedProject.Categories.HalfFieldBackground,
                                                   openedProject.Categories.GoalBackground);
                }
                
-               public void EmitNewTagAtPos(Category category, Time pos) {
-                       if (NewTagAtPosEvent != null)
-                               NewTagAtPosEvent(category, pos);
-               }
-
-               public void EmitNewTag(Category category) {
-                       if (NewTagEvent != null)
-                               NewTagEvent(category);
-               }
-
-               public void EmitNewTagStart(Category category) {
-                       if (NewTagStartEvent != null)
-                               NewTagStartEvent (category);
-               }
-
-               public void EmitNewTagStop(Category category) {
-                       if (NewTagStopEvent != null)
-                               NewTagStopEvent (category);
-               }
-               
-               public void EmitNewTagCancel(Category category) {
-                       if (NewTagCancelEvent != null)
-                               NewTagCancelEvent (category);
-               }
-               
-               public void EmitTimeNodeChanged(TimeNode tNode, object val)
-               {
-                       if (TimeNodeChanged != null)
-                               TimeNodeChanged(tNode, val);
-               }
-
-               public void EmitPlayListNodeAdded(List<Play> plays)
-               {
-                       if (PlayListNodeAddedEvent != null)
-                               PlayListNodeAddedEvent(plays);
-               }
-               
-               public void EmitTagPlay(Play play) {
-                       if (TagPlayEvent != null)
-                               TagPlayEvent (play);
-               }
-               
-               public void EmitSnapshotSeries(Play play) {
-                       if (SnapshotSeriesEvent != null)
-                               SnapshotSeriesEvent (play);
-               }
-
-               public void EmitRenderPlaylist(IPlayList playlist) {
-                       if (RenderPlaylistEvent != null)
-                               RenderPlaylistEvent(playlist);
-               }
-               
-               public void EmitPlaySelected(Play play)
-               {
-                       if (PlaySelectedEvent != null)
-                               PlaySelectedEvent(play);
-               }
-
-               public void EmitPlaysDeleted(List<Play> plays)
-               {
-                       if (PlaysDeletedEvent != null)
-                               PlaysDeletedEvent(plays);
-               }
-               
-               
                void ResetGUI() {
                        playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
                        ClearWidgets();
@@ -388,50 +268,7 @@ namespace LongoMatch.Gui.Component
                        MessagesHelpers.ErrorMessage (this,
                                Catalog.GetString("The following error happened and" +
                                " the current project will be closed:")+"\n" + message);
-                       EmitCloseOpenedProject ();
-               }
-               
-               void EmitCloseOpenedProject () {
-                       if (CloseOpenedProjectEvent != null)
-                               CloseOpenedProjectEvent ();
-               }
-               
-               void EmitPlayCategoryChanged(Play play, Category cat)
-               {
-                       if(PlayCategoryChanged != null)
-                               PlayCategoryChanged(play, cat);
-               }
-
-               void EmitPlayListNodeSelected(PlayListPlay plNode)
-               {
-                       if (PlayListNodeSelectedEvent != null)
-                               PlayListNodeSelectedEvent(plNode);
-               }
-
-               void EmitNewPlaylist() {
-                       if (NewPlaylistEvent != null)
-                               NewPlaylistEvent();
-               }
-               
-               void EmitOpenPlaylist() {
-                       if (OpenPlaylistEvent != null)
-                               OpenPlaylistEvent();
-               }
-               
-               void EmitSavePlaylist() {
-                       if (SavePlaylistEvent != null)
-                               SavePlaylistEvent();
-               }
-               
-               void EmitKeyPressed(object sender, int key, int modifier) {
-                       if (KeyPressed != null)
-                               KeyPressed(sender, key, modifier);
-               }
-
-               void EmitDuplicatePlay (Play play)
-               {
-                       if (DuplicatePlay != null)
-                               DuplicatePlay (play);
+                       Config.EventsBroker.EmitCloseOpenedProject ();
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
index 36903e8..f158ca8 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
@@ -29,7 +29,7 @@ namespace LongoMatch.Gui.Component
                {
                        this.Build ();
                        buttonswidget.Mode = LongoMatch.Common.TagMode.Predifined;
-                       buttonswidget.NewMarkEvent += HandleNewMarkEvent;
+                       //buttonswidget.NewMarkEvent += HandleNewMarkEvent;
                        categoryproperties.Visible = false;
                }
 
diff --git a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
index 9c7a941..b576d2b 100644
--- a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
@@ -34,11 +34,6 @@ namespace LongoMatch.Gui.Component
        [System.ComponentModel.ToolboxItem(true)]
        public partial class ButtonsWidget : Gtk.Bin
        {
-               public event NewTagHandler NewMarkEvent;
-               public event NewTagStartHandler NewMarkStartEvent;
-               public event NewTagStopHandler NewMarkStopEvent;
-               public event NewTagCancelHandler NewMarkCancelEvent;
-
                TagMode tagMode;
                Dictionary<ButtonTagger, Category> buttonsDic;
 
@@ -92,24 +87,16 @@ namespace LongoMatch.Gui.Component
                                Category cat = categories[i];
                                ButtonTagger b = new ButtonTagger (cat);
                                        b.NewTag += (category) => {
-                                       if (NewMarkEvent != null) {
-                                               NewMarkEvent (category);
-                                       }
+                                       Config.EventsBroker.EmitNewTag (category);
                                };
                                b.NewTagStart += (category) => {
-                                       if (NewMarkStartEvent != null) {
-                                               NewMarkStartEvent (category);
-                                       }
+                                       Config.EventsBroker.EmitNewTagStart (category);
                                };
                                b.NewTagStop += (category) => {
-                                       if (NewMarkStopEvent != null) {
-                                               NewMarkStopEvent (category);
-                                       }
+                                       Config.EventsBroker.EmitNewTagStop (category);
                                };
                                b.NewTagCancel += (category) => {
-                                       if (NewMarkCancelEvent != null) {
-                                               NewMarkCancelEvent (category);
-                                       }
+                                       Config.EventsBroker.EmitNewTagCancel (category);
                                };
                                b.Mode = tagMode;
                                
diff --git a/LongoMatch.GUI/Gui/Component/CodingWidget.cs b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
index e2eead0..e334639 100644
--- a/LongoMatch.GUI/Gui/Component/CodingWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
@@ -28,7 +28,6 @@ namespace LongoMatch.Gui.Component
        [System.ComponentModel.ToolboxItem(true)]
        public partial class CodingWidget : Gtk.Bin
        {
-               AnalysisComponent parent;
                VideoAnalysisMode analysisMode;
                TeamTagger teamtagger;
                Project project;
@@ -36,18 +35,6 @@ namespace LongoMatch.Gui.Component
                public CodingWidget ()
                {
                        this.Build ();
-                       buttonswidget.NewMarkEvent += (c) => parent.EmitNewTag (c);
-                       buttonswidget.NewMarkStartEvent += (c) => parent.EmitNewTagStart (c);
-                       buttonswidget.NewMarkStopEvent += (c) => parent.EmitNewTagStop (c);
-                       buttonswidget.NewMarkCancelEvent += (c) => parent.EmitNewTagCancel (c);
-                       timeline.NewTagAtPosEvent += (c, p) => parent.EmitNewTagAtPos (c, p);
-                       timeline.TimeNodeChanged += (t, v) => parent.EmitTimeNodeChanged (t, v);
-                       timeline.PlayListNodeAdded += (p) => parent.EmitPlayListNodeAdded (p);
-                       timeline.TagPlay += (p) => parent.EmitTagPlay (p);
-                       timeline.SnapshotSeries += (t) => parent.EmitSnapshotSeries (t);
-                       timeline.RenderPlaylist += (p) => parent.EmitRenderPlaylist (p);
-                       timeline.TimeNodeDeleted += (p) => parent.EmitPlaysDeleted (p);
-                       timeline.TimeNodeSelected += (p) => parent.EmitPlaySelected (p);
 
                        autoTaggingMode.Toggled += HandleViewToggled;
                        autoTaggingMode.Active = true;
@@ -60,9 +47,7 @@ namespace LongoMatch.Gui.Component
                        drawingarea1.WidthRequest = 300;
                }
                
-               public void SetProject (Project project, bool isLive, PlaysFilter filter,
-                                       AnalysisComponent parent) {
-                       this.parent = parent;
+               public void SetProject (Project project, bool isLive, PlaysFilter filter) {
                        this.project = project; 
                        autoTaggingMode.Active = true;
                        timeline.Visible = false;
diff --git a/LongoMatch.GUI/Gui/Component/NotesWidget.cs b/LongoMatch.GUI/Gui/Component/NotesWidget.cs
index 14aaea6..ead37b1 100644
--- a/LongoMatch.GUI/Gui/Component/NotesWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/NotesWidget.cs
@@ -30,7 +30,6 @@ namespace LongoMatch.Gui.Component
        [System.ComponentModel.ToolboxItem(true)]
        public partial class NotesWidget : Gtk.Bin
        {
-               public event TimeNodeChangedHandler TimeNodeChanged;
                TextBuffer buf;
                Play play;
 
@@ -68,8 +67,7 @@ namespace LongoMatch.Gui.Component
                {
                        if(play != null) {
                                play.Notes=Notes;
-                               if(TimeNodeChanged != null)
-                                       TimeNodeChanged(play,null);
+                               Config.EventsBroker.EmitTimeNodeChanged (play, null);
                                savebutton.Sensitive = false;
                        }
                }
diff --git a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
index d68433a..610b197 100644
--- a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
@@ -33,22 +33,10 @@ namespace LongoMatch.Gui.Component
        public partial class PlayersListTreeWidget : Gtk.Bin
        {
 
-               public event PlaySelectedHandler TimeNodeSelected;
-               public event TimeNodeChangedHandler TimeNodeChanged;
-               public event PlayListNodeAddedHandler PlayListNodeAdded;
-               public event SnapshotSeriesHandler SnapshotSeriesEvent;
-               public event RenderPlaylistHandler RenderPlaylistEvent;
-               public event DuplicatePlayHandler DuplicatePlay;
-
                public PlayersListTreeWidget()
                {
                        this.Build();
-                       playerstreeview.TimeNodeChanged += OnTimeNodeChanged;
-                       playerstreeview.TimeNodeSelected += OnTimeNodeSelected;
-                       playerstreeview.PlayListNodeAdded += OnPlayListNodeAdded;
-                       playerstreeview.SnapshotSeriesEvent += OnSnapshotSeriesEvent;
                        playerstreeview.NewRenderingJob += OnNewRenderingJob;
-                       playerstreeview.DuplicatePlay += DuplicatePlay;
                }
                
                public Project Project {
@@ -111,29 +99,6 @@ namespace LongoMatch.Gui.Component
                        playerstreeview.Model = null;
                }
 
-               protected virtual void OnTimeNodeSelected(Play tNode) {
-                       if(TimeNodeSelected != null)
-                               TimeNodeSelected(tNode);
-               }
-
-               protected virtual void OnSnapshotSeriesEvent(Play tNode)
-               {
-                       if(SnapshotSeriesEvent != null)
-                               SnapshotSeriesEvent(tNode);
-               }
-
-               protected virtual void OnTimeNodeChanged(TimeNode tNode, object val)
-               {
-                       if(TimeNodeChanged != null)
-                               TimeNodeChanged(tNode, val);
-               }
-
-               protected virtual void OnPlayListNodeAdded(List<Play> plays)
-               {
-                       if(PlayListNodeAdded != null)
-                               PlayListNodeAdded(plays);
-               }
-               
                protected virtual void OnNewRenderingJob (object sender, EventArgs args)
                {
                        PlayList playlist = new PlayList();
@@ -148,8 +113,7 @@ namespace LongoMatch.Gui.Component
                                playlist.Add(new PlayListPlay(play, Project.Description.File, true));
                        }
                        
-                       if (RenderPlaylistEvent != null)
-                               RenderPlaylistEvent(playlist);
+                       Config.EventsBroker.EmitRenderPlaylist (playlist);
                }
 
        }
diff --git a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
index 712d7e3..06bddb3 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
@@ -38,31 +38,13 @@ namespace LongoMatch.Gui.Component
        public partial class PlaysListTreeWidget : Gtk.Bin
        {
 
-               public event PlaySelectedHandler TimeNodeSelected;
-               public event TimeNodeChangedHandler TimeNodeChanged;
-               public event PlaysDeletedHandler TimeNodeDeleted;
-               public event PlayListNodeAddedHandler PlayListNodeAdded;
-               public event PlayCategoryChangedHandler PlayCategoryChanged;
-               public event SnapshotSeriesHandler SnapshotSeriesEvent;
-               public event TagPlayHandler TagPlay;
-               public event RenderPlaylistHandler RenderPlaylist;
-               public event DuplicatePlayHandler DuplicatePlay;
-
                private Project project;
 
                public PlaysListTreeWidget()
                {
                        this.Build();
-                       treeview.TimeNodeChanged += OnTimeNodeChanged;
-                       treeview.TimeNodeSelected += OnTimeNodeSelected;
-                       treeview.TimeNodeDeleted += OnTimeNodeDeleted;
-                       treeview.PlayListNodeAdded += OnPlayListNodeAdded;
-                       treeview.SnapshotSeriesEvent += OnSnapshotSeriesEvent;
                        treeview.EditProperties += OnEditProperties;
-                       treeview.PlayCategoryChanged += OnPlayCategoryChanged;
-                       treeview.TagPlay += OnTagPlay;
                        treeview.NewRenderingJob += OnNewRenderingJob;
-                       treeview.DuplicatePlay += OnDuplicatePlay;
                }
                
                public PlaysFilter Filter {
@@ -179,55 +161,9 @@ namespace LongoMatch.Gui.Component
                        dialog.Project = project;
                        dialog.Run();
                        dialog.Destroy();
-                       if(TimeNodeChanged != null)
-                               TimeNodeChanged(tNode, tNode.Name);
-               }
-
-               protected virtual void OnTimeNodeChanged(TimeNode tNode,object val) {
-                       if(TimeNodeChanged != null)
-                               TimeNodeChanged(tNode,val);
-               }
-
-               protected virtual void OnTimeNodeSelected(Play tNode) {
-                       if(TimeNodeSelected != null)
-                               TimeNodeSelected(tNode);
-               }
-
-               protected virtual void OnTimeNodeDeleted(List<Play> plays) {
-                       if(TimeNodeDeleted != null)
-                               TimeNodeDeleted(plays);
-               }
-
-               protected virtual void OnPlayListNodeAdded(List<Play> plays)
-               {
-                       if(PlayListNodeAdded != null)
-                               PlayListNodeAdded(plays);
-               }
-               
-               protected virtual void OnDuplicatePlay (Play play)
-               {
-                       if (DuplicatePlay != null)
-                               DuplicatePlay (play);
-               }
-
-               protected virtual void OnPlayCategoryChanged(Play play, Category cat)
-               {
-                       if(PlayCategoryChanged != null)
-                               PlayCategoryChanged(play, cat);
+                       Config.EventsBroker.EmitTimeNodeChanged (tNode, tNode.Name);
                }
 
-               protected virtual void OnSnapshotSeriesEvent(LongoMatch.Store.Play tNode)
-               {
-                       if(SnapshotSeriesEvent != null)
-                               SnapshotSeriesEvent(tNode);
-               }
-
-               protected virtual void OnTagPlay(LongoMatch.Store.Play tNode)
-               {
-                       if(TagPlay != null)
-                               TagPlay(tNode);
-               }
-               
                protected virtual void OnNewRenderingJob (object sender, EventArgs args)
                {
                        PlayList playlist = new PlayList();
@@ -242,8 +178,7 @@ namespace LongoMatch.Gui.Component
                                playlist.Add (new PlayListPlay(play, project.Description.File, true));
                        }
                        
-                       if (RenderPlaylist != null)
-                               RenderPlaylist (playlist);
+                       Config.EventsBroker.EmitRenderPlaylist (playlist);
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
index fb04954..6b73c35 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
@@ -31,16 +31,6 @@ namespace LongoMatch.Gui.Component
        public partial class PlaysSelectionWidget : Gtk.Bin
        {
        
-               public event PlaysDeletedHandler PlaysDeleted;
-               public event PlaySelectedHandler PlaySelected;
-               public event PlayCategoryChangedHandler PlayCategoryChanged;
-               public event PlayListNodeAddedHandler PlayListNodeAdded;
-               public event TimeNodeChangedHandler TimeNodeChanged;
-               public event SnapshotSeriesHandler SnapshotSeries;
-               public event RenderPlaylistHandler RenderPlaylist;
-               public event TagPlayHandler TagPlay;
-               public event DuplicatePlayHandler DuplicatePlay;
-               
                Project project;
                PlaysFilter filter;
                PlayersFilterTreeView playersfilter;
@@ -52,7 +42,7 @@ namespace LongoMatch.Gui.Component
                        localPlayersList.Team = Team.LOCAL;
                        visitorPlayersList.Team = Team.VISITOR;
                        AddFilters();
-                       ConnectSignals();
+                       Config.EventsBroker.TagPlay += (Play play) => {UpdateTeamsModels();};
                }
                
                #region Plubic Methods
@@ -128,101 +118,11 @@ namespace LongoMatch.Gui.Component
                        filtersnotebook.ShowAll();
                }
                
-               private void ConnectSignals() {
-                       playsList.TimeNodeDeleted += EmitPlaysDeleted;
-
-                       /* Connect TimeNodeSelected events */
-                       playsList.TimeNodeSelected += EmitPlaySelected;
-                       localPlayersList.TimeNodeSelected += EmitPlaySelected;
-                       visitorPlayersList.TimeNodeSelected += EmitPlaySelected;
-
-                       /* Connect PlayListNodeAdded events */
-                       playsList.PlayListNodeAdded += EmitPlayListNodeAdded;
-                       localPlayersList.PlayListNodeAdded += EmitPlayListNodeAdded;
-                       visitorPlayersList.PlayListNodeAdded += EmitPlayListNodeAdded;
-                       
-                       /* Duplicate play */
-                       playsList.DuplicatePlay += EmitDuplicatePlay;
-                       localPlayersList.DuplicatePlay += EmitDuplicatePlay;
-                       visitorPlayersList.DuplicatePlay += EmitDuplicatePlay;
-
-                       /* Play name edited or Category name changed */
-                       playsList.TimeNodeChanged += EmitTimeNodeChanged;
-
-                       /* Connect tags events */
-                       playsList.TagPlay += EmitTagPlay;
-
-                       /* Connect SnapshotSeries events */
-                       playsList.SnapshotSeriesEvent += EmitSnapshotSeries;
-                       localPlayersList.SnapshotSeriesEvent += EmitSnapshotSeries;
-                       visitorPlayersList.SnapshotSeriesEvent += EmitSnapshotSeries;
-
-                       playsList.RenderPlaylist += EmitRenderPlaylist;
-                       localPlayersList.RenderPlaylistEvent += EmitRenderPlaylist;
-                       visitorPlayersList.RenderPlaylistEvent += EmitRenderPlaylist;
-                       
-                       /* Connect PlayCategoryChanged events */
-                       playsList.PlayCategoryChanged += EmitPlayCategoryChanged;
-               }
-               
                private void UpdateTeamsModels() {
                        localPlayersList.SetTeam(project.LocalTeamTemplate, project.AllPlays());
                        visitorPlayersList.SetTeam(project.VisitorTeamTemplate, project.AllPlays());
                }
                
-               private void EmitPlaysDeleted(List<Play> plays)
-               {
-                       if (PlaysDeleted != null)
-                               PlaysDeleted(plays);
-               }
-               
-               private void EmitPlaySelected(Play play)
-               {
-                       if (PlaySelected != null)
-                               PlaySelected(play);
-               }
-               
-               private void EmitSnapshotSeries(Play play)
-               {
-                       if (SnapshotSeries != null)
-                               SnapshotSeries(play);
-               }
-               
-               private void EmitRenderPlaylist(IPlayList playlist) {
-                       if (RenderPlaylist != null)
-                               RenderPlaylist(playlist);
-               }
-               
-               private void EmitPlayListNodeAdded(List<Play> plays)
-               {
-                       if (PlayListNodeAdded != null)
-                               PlayListNodeAdded(plays);
-               }
-               
-               private void EmitTimeNodeChanged (TimeNode tn, object val)
-               {
-                       if (TimeNodeChanged != null)
-                               TimeNodeChanged(tn, val);
-               }
-               
-               protected virtual void EmitPlayCategoryChanged(Play play, Category cat)
-               {
-                       if(PlayCategoryChanged != null)
-                               PlayCategoryChanged(play, cat);
-               }
-               
-               private void EmitTagPlay(Play play) {
-                       if (TagPlay != null)
-                               TagPlay (play);
-                       UpdateTeamsModels();
-               }
-
-               private void EmitDuplicatePlay (Play play)
-               {
-                       if (DuplicatePlay != null)
-                               DuplicatePlay (play);
-               }
-               
                protected void OnCategoriesFiltersbuttonClicked (object sender, System.EventArgs e)
                {
                        if (catfiltersbutton.Active) {
diff --git a/LongoMatch.GUI/Gui/Component/Timeline.cs b/LongoMatch.GUI/Gui/Component/Timeline.cs
index 1d712b4..e2b0341 100644
--- a/LongoMatch.GUI/Gui/Component/Timeline.cs
+++ b/LongoMatch.GUI/Gui/Component/Timeline.cs
@@ -32,15 +32,6 @@ namespace LongoMatch.Gui.Component
        [System.ComponentModel.ToolboxItem(true)]
        public partial class Timeline : Gtk.Bin
        {
-               public event TimeNodeChangedHandler TimeNodeChanged;
-               public event PlaySelectedHandler TimeNodeSelected;
-               public event PlaysDeletedHandler TimeNodeDeleted;
-               public event NewTagAtPosHandler NewTagAtPosEvent;
-               public event PlayListNodeAddedHandler PlayListNodeAdded;
-               public event SnapshotSeriesHandler SnapshotSeries;
-               public event TagPlayHandler TagPlay;
-               public event RenderPlaylistHandler RenderPlaylist;
-               
                const uint TIMEOUT_MS = 100;
                
                PlaysTimeline timeline;
@@ -103,9 +94,6 @@ namespace LongoMatch.Gui.Component
                        focusscale.Value = 6;
                        projectFile = project.Description.File;
                        timerule.Duration = new Time ((int)project.Description.File.Length);
-
-                       timeline.TimeNodeChanged += HandleTimeNodeChanged;
-                       timeline.TimeNodeSelected += HandleTimeNodeSelected;
                        timeline.ShowMenuEvent += HandleShowMenu;
                        QueueDraw ();
                }
@@ -177,25 +165,25 @@ namespace LongoMatch.Gui.Component
                        newPlay = new MenuItem(String.Format ("{0} in {1}",
                                               Catalog.GetString("Add new play"), cat.Name));
                        menu.Append(newPlay);
-                       newPlay.Activated += (sender, e) => {EmitNewPlay (cat, time);};
+                       newPlay.Activated += (sender, e) => Config.EventsBroker.EmitNewTagAtPos (cat, time);
 
                        if (plays != null) {
                                if (plays.Count == 1) {
                                        tag = new MenuItem(Catalog.GetString("Edit tags"));
                                        snapshot = new MenuItem(Catalog.GetString("Export to PGN images"));
-                                       tag.Activated += (sender, e) => EmitTagPlay (plays[0]);
-                                       snapshot.Activated += (sender, e) => EmitSnapshotSeries (plays[0]);
+                                       tag.Activated += (sender, e) => Config.EventsBroker.EmitTagPlay 
(plays[0]);
+                                       snapshot.Activated += (sender, e) => 
Config.EventsBroker.EmitSnapshotSeries (plays[0]);
                                        menu.Add (tag);
                                        menu.Add (snapshot);
                                }
                                if (plays.Count > 0 ) {
                                        del = new MenuItem (String.Format ("{0} ({1})",
                                                            Catalog.GetString("Delete"), plays.Count));
-                                       del.Activated += (sender, e) => EmitDelete (plays);
+                                       del.Activated += (sender, e) => Config.EventsBroker.EmitPlaysDeleted 
(plays);
                                        menu.Add (del);
                                        addPLN = new MenuItem (String.Format ("{0} ({1})",
                                                               Catalog.GetString("Add to playlist"), 
plays.Count));
-                                       addPLN.Activated += (sender, e) => EmitAddToPlaylist (plays);
+                                       addPLN.Activated += (sender, e) => 
Config.EventsBroker.EmitPlayListNodeAdded (plays);
                                        menu.Add (addPLN);
                                        render = new MenuItem (String.Format ("{0} ({1})",
                                                               Catalog.GetString("Export to video file"), 
plays.Count));
@@ -207,57 +195,13 @@ namespace LongoMatch.Gui.Component
                        menu.Popup();
                }
 
-               void EmitTagPlay (Play play)
-               {
-                       if (TagPlay != null) {
-                               TagPlay (play);
-                       }
-               }
-               
-               void EmitSnapshotSeries (Play play)
-               {
-                       if (SnapshotSeries != null)
-                               SnapshotSeries (play);
-               }
-
-               void EmitNewPlay (Category cat, Time time)
-               {
-                       if (NewTagAtPosEvent != null)
-                               NewTagAtPosEvent (cat, time);
-               }
-               
-               void EmitDelete (List<Play> plays)
-               {
-                       if (TimeNodeDeleted != null) {
-                               TimeNodeDeleted (plays);
-                       }
-               }
-               
                void EmitRenderPlaylist (List<Play> plays)
                {
-                       if (RenderPlaylist != null) {
-                               PlayList pl = new PlayList();
-                               foreach (Play p in plays) {
-                                       pl.Add (new PlayListPlay (p, projectFile, true));
-                               }
-                               RenderPlaylist (pl);
-                       }
-               }
-               
-               void EmitAddToPlaylist (List<Play> plays) {
-                       if (PlayListNodeAdded != null) {
-                               PlayListNodeAdded (plays);
+                       PlayList pl = new PlayList();
+                       foreach (Play p in plays) {
+                               pl.Add (new PlayListPlay (p, projectFile, true));
                        }
-               }
-               
-               void HandleTimeNodeChanged(TimeNode tn, object val) {
-                       if(TimeNodeChanged != null)
-                               TimeNodeChanged(tn,val);
-               }
-
-               void HandleTimeNodeSelected(Play tn) {
-                       if(TimeNodeSelected != null)
-                               TimeNodeSelected(tn);
+                       Config.EventsBroker.EmitRenderPlaylist (pl);
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/GUIToolkit.cs b/LongoMatch.GUI/Gui/GUIToolkit.cs
index 246ba2e..fbd22aa 100644
--- a/LongoMatch.GUI/Gui/GUIToolkit.cs
+++ b/LongoMatch.GUI/Gui/GUIToolkit.cs
@@ -309,12 +309,10 @@ namespace LongoMatch.Gui
                
                public void OpenProject (Project project, ProjectType projectType, 
                                         CaptureSettings props, PlaysFilter filter,
-                                            out IAnalysisWindow analysisWindow,
-                                            out IProjectOptionsController projectOptionsController)
+                                            out IAnalysisWindow analysisWindow)
                {
                        Log.Information ("Open project");
                        analysisWindow = mainWindow.SetProject (project, projectType, props, filter);
-                       projectOptionsController = mainWindow;
                }
                
                public void CloseProject ()
diff --git a/LongoMatch.GUI/Gui/MainWindow.cs b/LongoMatch.GUI/Gui/MainWindow.cs
index 0571677..9724bd0 100644
--- a/LongoMatch.GUI/Gui/MainWindow.cs
+++ b/LongoMatch.GUI/Gui/MainWindow.cs
@@ -44,35 +44,8 @@ namespace LongoMatch.Gui
 {
        [System.ComponentModel.Category("LongoMatch")]
        [System.ComponentModel.ToolboxItem(false)]
-       public partial class MainWindow : Gtk.Window, IMainController, IProjectOptionsController
+       public partial class MainWindow : Gtk.Window, IMainController
        {
-               /* IMainController */
-               public event NewProjectHandler NewProjectEvent;
-               public event OpenNewProjectHandler OpenNewProjectEvent;
-               public event OpenProjectHandler OpenProjectEvent;
-               public event OpenProjectIDHandler OpenProjectIDEvent;
-               public event ImportProjectHandler ImportProjectEvent;
-               public event ExportProjectHandler ExportProjectEvent;
-               public event QuitApplicationHandler QuitApplicationEvent;
-               
-               public event ManageJobsHandler ManageJobsEvent; 
-               public event ManageTeamsHandler ManageTeamsEvent;
-               public event ManageCategoriesHandler ManageCategoriesEvent;
-               public event ManageProjects ManageProjectsEvent;
-               public event ManageDatabases ManageDatabasesEvent;
-               public event EditPreferences EditPreferencesEvent;
-               public event ConvertVideoFilesHandler ConvertVideoFilesEvent;
-               
-               /* IProjectOptionsController */
-               public event SaveProjectHandler SaveProjectEvent;
-               public event CloseOpenendProjectHandler CloseOpenedProjectEvent;
-               public event ShowProjectStats ShowProjectStatsEvent;
-               public event ShowFullScreenHandler ShowFullScreenEvent;
-               public event PlaylistVisibiltyHandler PlaylistVisibilityEvent;
-               public event AnalysisWidgetsVisibilityHandler AnalysisWidgetsVisibilityEvent;
-               public event AnalysisModeChangedHandler AnalysisModeChangedEvent;
-               public event TagSubcategoriesChangedHandler TagSubcategoriesChangedEvent;
-               
                IGUIToolkit guiToolKit;
                IAnalysisWindow analysisWindow;
                Project openedProject;
@@ -86,7 +59,6 @@ namespace LongoMatch.Gui
                        
                        this.Build();
                        this.guiToolKit = guiToolkit;
-                       welcomepanel1.Bind (this);
                        
                        Title = Constants.SOFTWARE_NAME;
                        TagSubcategoriesAction.Active = !Config.FastTagging;
@@ -95,9 +67,6 @@ namespace LongoMatch.Gui
                        ConnectSignals();
                        ConnectMenuSignals();
                        
-                       if (!Config.UseGameUnits)
-                               GameUnitsViewAction.Visible = false;
-                       
                        MenuItem parent = ImportProjectActionMenu;
                        parent.Submenu = new Menu();
                        AddImportEntry(Catalog.GetString("Import file project"), "ImportFileProject",
@@ -150,7 +119,9 @@ namespace LongoMatch.Gui
                                            bool requiresNewFile) {
                        MenuItem parent = ImportProjectActionMenu;
                        MenuItem item = new MenuItem(name);
-                       item.Activated += (sender, e) => (EmitImportProject(name, filterName, filter, 
importFunc, requiresNewFile));
+                       item.Activated += (sender, e) => (
+                               Config.EventsBroker.EmitImportProject (name, filterName, filter,
+                                                              importFunc, requiresNewFile));
                        item.Show();
                        (parent.Submenu as Menu).Append(item);
                }
@@ -183,13 +154,11 @@ namespace LongoMatch.Gui
                public void SelectProject (List<ProjectDescription> projects) {
                        OpenProjectPanel panel  = new OpenProjectPanel ();
                        panel.Projects = projects;
-                       panel.OpenProjectEvent += EmitOpenProjectID;
                        SetPanel (panel);
                }
                
                public void CreateNewProject (Project project) {
                        NewProjectPanel panel = new NewProjectPanel (project);
-                       panel.OpenNewProjectEvent += EmitOpenNewProject;
                        SetPanel (panel);
                }
 
@@ -205,21 +174,39 @@ namespace LongoMatch.Gui
                
                private void ConnectSignals() {
                        /* Adding Handlers for each event */
-                       renderingstatebar1.ManageJobs += (e, o) => {EmitManageJobs();};
-                       openAction.Activated += (sender, e) => {EmitSaveProject();};
+                       renderingstatebar1.ManageJobs += (e, o) => {
+                               Config.EventsBroker.EmitManageJobs();};
                }
                
                private void ConnectMenuSignals() {
-                       SaveProjectAction.Activated += (o, e) => {EmitSaveProject();};
-                       CloseProjectAction.Activated += (o, e) => {EmitCloseOpenedProject ();};
-                       ExportToProjectFileAction.Activated += (o, e) => {EmitExportProject();};
+                       SaveProjectAction.Activated += (o, e) => {
+                               Config.EventsBroker.EmitSaveProject (openedProject, projectType);};
+                       CloseProjectAction.Activated += (o, e) => {
+                               Config.EventsBroker.EmitCloseOpenedProject ();};
+                       ExportToProjectFileAction.Activated += (o, e) => {
+                               Config.EventsBroker.EmitExportProject (openedProject);};
+                       CategoriesTemplatesManagerAction.Activated += (o, e) => {
+                               Config.EventsBroker.EmitManageCategories();};
+                       TeamsTemplatesManagerAction.Activated += (o, e) => {
+                               Config.EventsBroker.EmitManageTeams();};
+                       ProjectsManagerAction.Activated += (o, e) => {
+                               Config.EventsBroker.EmitManageProjects();};
+                       DatabasesManagerAction.Activated +=  (o, e) => {
+                               Config.EventsBroker.EmitManageDatabases();};
+                       PreferencesAction.Activated += (sender, e) => {
+                               Config.EventsBroker.EmitEditPreferences();};
+                       ShowProjectStatsAction.Activated += (sender, e) => {
+                               Config.EventsBroker.EmitShowProjectStats (openedProject);}; 
                        QuitAction.Activated += (o, e) => {CloseAndQuit();};
-                       CategoriesTemplatesManagerAction.Activated += (o, e) => {EmitManageCategories();};
-                       TeamsTemplatesManagerAction.Activated += (o, e) => {EmitManageTeams();};
-                       ProjectsManagerAction.Activated += (o, e) => {EmitManageProjects();};
-                       DatabasesManagerAction.Activated +=  (o, e) => {EmitManageDatabases();};
-                       PreferencesAction.Activated += (sender, e) => {EmitEditPreferences();};
-                       ShowProjectStatsAction.Activated += (sender, e) => {EmitShowProjectStats();}; 
+                       openAction.Activated += (sender, e) => {
+                               Config.EventsBroker.EmitSaveProject (openedProject, projectType);
+                               Config.EventsBroker.EmitOpenProject ();};
+                       NewPojectAction.Activated += (sender, e) => {
+                               Config.EventsBroker.EmitNewProject ();
+                       };
+                       TagSubcategoriesAction.Activated += (sender, e) => {
+                               Config.EventsBroker.EmitTagSubcategories (TagSubcategoriesAction.Active);
+                       };
                }
                
                private void ResetGUI() {
@@ -236,21 +223,15 @@ namespace LongoMatch.Gui
                private void MakeActionsSensitive(bool sensitive, ProjectType projectType) {
                        bool sensitive2 = sensitive && projectType == ProjectType.FileProject;
                        CloseProjectAction.Sensitive=sensitive;
-                       TaggingViewAction.Sensitive = sensitive;
-                       ManualTaggingViewAction.Sensitive = sensitive;
                        ExportProjectAction1.Sensitive = sensitive;
                        ShowProjectStatsAction.Sensitive = sensitive;
-                       //GameUnitsViewAction.Sensitive = sensitive2 && gameUnitsActionVisible;
-                       TimelineViewAction.Sensitive = sensitive2;
-                       HideAllWidgetsAction.Sensitive=sensitive2;
                        SaveProjectAction.Sensitive = sensitive2;
                }
 
                private void CloseAndQuit() {
-                       EmitCloseOpenedProject ();
-                       
-                       if (openedProject == null && QuitApplicationEvent != null) {
-                               QuitApplicationEvent ();
+                       Config.EventsBroker.EmitCloseOpenedProject ();
+                       if (openedProject == null) {
+                               Config.EventsBroker.EmitQuitApplication ();
                        }
                }
                
@@ -263,19 +244,6 @@ namespace LongoMatch.Gui
                #endregion
 
                #region Callbacks
-               #region File
-               protected virtual void OnNewActivated(object sender, System.EventArgs e)
-               {
-                       EmitNewProject();
-               }
-
-               protected virtual void OnOpenActivated(object sender, System.EventArgs e)
-               {
-                       EmitOpenProject();
-               }
-               #endregion
-               
-               #region Tool
                protected void OnVideoConverterToolActionActivated (object sender, System.EventArgs e)
                {
                        int res;
@@ -283,71 +251,11 @@ namespace LongoMatch.Gui
                        res = converter.Run ();
                        converter.Destroy();
                        if (res == (int) ResponseType.Ok) {
-                               if (ConvertVideoFilesEvent != null)
-                                       ConvertVideoFilesEvent (converter.Files, converter.EncodingSettings);
-                       }
-               }
-               
-               private void EmitShowProjectStats () {
-                       if (ShowProjectStatsEvent != null)
-                               ShowProjectStatsEvent (openedProject);
-               }
-
-               #endregion
-               
-               #region View
-               protected void OnTagSubcategoriesActionToggled (object sender, System.EventArgs e)
-               {
-                       if (TagSubcategoriesChangedEvent != null)
-                               TagSubcategoriesChangedEvent (TagSubcategoriesAction.Active);
-               }
-
-               protected virtual void OnFullScreenActionToggled(object sender, System.EventArgs e)
-               {
-                       if (ShowFullScreenEvent != null)
-                               ShowFullScreenEvent ((sender as Gtk.ToggleAction).Active);
-               }
-
-               protected virtual void OnPlaylistActionToggled(object sender, System.EventArgs e)
-               {
-                       if (PlaylistVisibilityEvent != null)
-                               PlaylistVisibilityEvent ((sender as Gtk.ToggleAction).Active);
-               }
-
-               protected virtual void OnHideAllWidgetsActionToggled(object sender, System.EventArgs e)
-               {
-                       if (AnalysisWidgetsVisibilityEvent != null) {
-                               AnalysisWidgetsVisibilityEvent ((sender as ToggleAction).Active);
+                               Config.EventsBroker.EmitConvertVideoFiles (converter.Files,
+                                                                          converter.EncodingSettings);
                        }
                }
-
-               protected virtual void OnViewToggled(object sender, System.EventArgs e)
-               {
-                       ToggleAction action = sender as Gtk.ToggleAction;
-                       
-                       if (!action.Active)
-                               return;
-                       
-                       if (AnalysisModeChangedEvent != null) {
-                               VideoAnalysisMode mode;
-                               
-                               if (sender == ManualTaggingViewAction) {
-                                       mode = VideoAnalysisMode.ManualTagging;
-                               } else if (sender == TaggingViewAction) {
-                                       mode = VideoAnalysisMode.PredefinedTagging;
-                               } else if (sender ==  TimelineViewAction) {
-                                       mode = VideoAnalysisMode.Timeline;
-                               } else if (sender == GameUnitsViewAction) {
-                                       mode = VideoAnalysisMode.GameUnits;
-                               } else {
-                                       return;
-                               }
-                               AnalysisModeChangedEvent (mode);
-                       }
-               }
-               #endregion
                
-               #region Help
                protected virtual void OnHelpAction1Activated(object sender, System.EventArgs e)
                {
                        try {
@@ -370,89 +278,6 @@ namespace LongoMatch.Gui
                        info.Run();
                        info.Destroy();
                }
-               
-               #endregion
-               #endregion
-
-               #region Events
-               
-               public void EmitNewProject () {
-                       if (NewProjectEvent != null)
-                               NewProjectEvent();
-               }
-               
-               public void EmitOpenProject () {
-                       if(OpenProjectEvent != null)
-                               OpenProjectEvent();
-               }
-                               
-               public void EmitEditPreferences ()
-               {
-                       if (EditPreferencesEvent != null)
-                               EditPreferencesEvent();
-               }
-               
-               public void EmitManageJobs() {
-                       if(ManageJobsEvent != null)
-                               ManageJobsEvent();
-               }
-               
-               public void EmitManageTeams() {
-                       if(ManageTeamsEvent != null)
-                               ManageTeamsEvent();
-               }
-               
-               public void EmitManageProjects()
-               {
-                       if (ManageProjectsEvent != null)
-                               ManageProjectsEvent();
-               }
-               
-               public void EmitManageDatabases()
-               {
-                       if (ManageDatabasesEvent != null)
-                               ManageDatabasesEvent();
-               }
-               
-               public void EmitManageCategories() {
-                       if(ManageCategoriesEvent != null)
-                               ManageCategoriesEvent();
-               }
-               
-               void EmitSaveProject() {
-                       if (SaveProjectEvent != null)
-                               SaveProjectEvent(openedProject, projectType);
-               }
-               
-               void EmitCloseOpenedProject() {
-                       if (CloseOpenedProjectEvent != null)
-                               CloseOpenedProjectEvent ();
-               }
-               
-               void EmitImportProject(string name, string filterName, string filter,
-                                              Func<string, Project> func, bool requiresNewFile) {
-                       if (ImportProjectEvent != null)
-                               ImportProjectEvent(name, filterName, filter, func, requiresNewFile);
-               }
-               
-               void EmitExportProject() {
-                       if(ExportProjectEvent != null)
-                               ExportProjectEvent();
-               }
-               
-               void EmitOpenProjectID (Guid projectID ) {
-                       if (OpenProjectIDEvent != null) {
-                               OpenProjectIDEvent (projectID);
-                       }
-               }
-               
-               void EmitOpenNewProject (Project project, ProjectType projectType, CaptureSettings 
captureSettings)
-               {
-                       if (OpenNewProjectEvent != null) {
-                               OpenNewProjectEvent (project, projectType, captureSettings);
-                       }
-               }
-               
                #endregion
        }
 }
diff --git a/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs b/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs
index 0e04989..60f9f2b 100644
--- a/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/NewProjectPanel.cs
@@ -46,7 +46,6 @@ namespace LongoMatch.Gui.Panel
        public partial class NewProjectPanel : Gtk.Bin, IPanel
        {
                public event BackEventHandle BackEvent;
-               public event OpenNewProjectHandler OpenNewProjectEvent;
                
                const int PROJECT_TYPE = 0;
                const int PROJECT_DETAILS = 1;
@@ -372,9 +371,7 @@ namespace LongoMatch.Gui.Panel
                void HandleCreateProject (object sender, EventArgs e)
                {
                        if (CreateProject ()) {
-                               if (OpenNewProjectEvent != null) {
-                                       OpenNewProjectEvent (project , projectType, captureSettings);
-                               }
+                               Config.EventsBroker.EmitOpenNewProject (project, projectType, 
captureSettings);
                        }
                }
 
diff --git a/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs b/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs
index 8076a50..466f75e 100644
--- a/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs
@@ -28,7 +28,6 @@ namespace LongoMatch.Gui.Panel
        [System.ComponentModel.ToolboxItem(true)]
        public partial class OpenProjectPanel : Gtk.Bin, IPanel
        {
-               public event OpenProjectIDHandler OpenProjectEvent;
                public event BackEventHandle BackEvent;
 
                public OpenProjectPanel ()
@@ -54,8 +53,7 @@ namespace LongoMatch.Gui.Panel
 
                void HandleProjectSelected (ProjectDescription project)
                {
-                       if (OpenProjectEvent != null)
-                               OpenProjectEvent (project.UUID);
+                       Config.EventsBroker.EmitOpenProjectID  (project.UUID);
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/Panel/WelcomePanel.cs b/LongoMatch.GUI/Gui/Panel/WelcomePanel.cs
index 756d2b8..375501f 100644
--- a/LongoMatch.GUI/Gui/Panel/WelcomePanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/WelcomePanel.cs
@@ -28,16 +28,23 @@ namespace LongoMatch.Gui.Panel
                {
                        this.Build ();
                        backgroundwidget.Background = Gdk.Pixbuf.LoadFromResource (Constants.BACKGROUND);
+                       Bind ();
                }
                
-               public void Bind (MainWindow window)
+               void Bind ()
                {
-                       openbutton.Clicked += (sender, e) => {window.EmitOpenProject ();};
-                       newbutton.Clicked += (sender, e) => {window.EmitNewProject ();};
-                       teamsbutton.Clicked += (sender, e) => {window.EmitManageTeams ();};
-                       sportsbutton.Clicked += (sender, e) => {window.EmitManageCategories ();};
-                   preferencesbutton.Clicked += (sender, e) => {window.EmitEditPreferences ();};
-                   projectsbutton.Clicked += (sender, e) =>  {window.EmitManageProjects ();};
+                       openbutton.Clicked += (sender, e) => {
+                               Config.EventsBroker.EmitOpenProject ();};
+                       newbutton.Clicked += (sender, e) => {
+                               Config.EventsBroker.EmitNewProject ();};
+                       teamsbutton.Clicked += (sender, e) => {
+                               Config.EventsBroker.EmitManageTeams ();};
+                       sportsbutton.Clicked += (sender, e) => {
+                               Config.EventsBroker.EmitManageCategories ();};
+                   preferencesbutton.Clicked += (sender, e) => {
+                               Config.EventsBroker.EmitEditPreferences ();};
+                   projectsbutton.Clicked += (sender, e) =>  {
+                               Config.EventsBroker.EmitManageProjects ();};
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
index 9dac3f6..0f36576 100644
--- a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
+++ b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
@@ -50,15 +50,7 @@ namespace LongoMatch.Gui.Component
                PlaysFilter filter;
                Dictionary<MenuItem, Category> catsDict;
 
-               public event TimeNodeChangedHandler TimeNodeChanged;
-               public event PlaySelectedHandler TimeNodeSelected;
-               public event PlaysDeletedHandler TimeNodeDeleted;
-               public event PlayListNodeAddedHandler PlayListNodeAdded;
-               public event PlayCategoryChangedHandler PlayCategoryChanged;
-               public event SnapshotSeriesHandler SnapshotSeriesEvent;
-               public event TagPlayHandler TagPlay;
                public event EventHandler NewRenderingJob;
-               public event DuplicatePlayHandler DuplicatePlay;
 
                public ListTreeViewBase()
                {
@@ -156,11 +148,6 @@ namespace LongoMatch.Gui.Component
                        }
                }
 
-               protected void EmitTimeNodeChanged(TimeNode tn, object o) {
-                       if(TimeNodeChanged != null)
-                               TimeNodeChanged(tn, o);
-               }
-
                protected void SetMenu() {
                        menu = new Menu();
 
@@ -195,6 +182,12 @@ namespace LongoMatch.Gui.Component
                        snapshot.Activated += OnSnapshot;
                        menu.ShowAll();
                }
+               
+               protected Play SelectedPlay {
+                       get {
+                               return GetValueFromPath(Selection.GetSelectedRows()[0]) as Play;
+                       }
+               }
 
                protected void MultiSelectMenu(bool enabled) {
                        name.Sensitive = !enabled;
@@ -208,11 +201,6 @@ namespace LongoMatch.Gui.Component
                        return modelFilter.GetValue(iter,0);
                }
                
-               protected void EmitTimeNodeChanged(TimeNode tNode) {
-                       if (TimeNodeChanged != null)
-                               TimeNodeChanged(tNode, tNode.Name);
-               }
-
                protected void RenderMiniature(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, 
Gtk.TreeModel model, Gtk.TreeIter iter)
                {
                        var item = model.GetValue(iter, 0);
@@ -294,7 +282,8 @@ namespace LongoMatch.Gui.Component
 
                        if(item is TimeNode) {
                                (item as TimeNode).Name = args.NewText;
-                               EmitTimeNodeChanged((item as TimeNode), args.NewText);
+                               Config.EventsBroker.EmitTimeNodeChanged (
+                                       (item as TimeNode), args.NewText);
                        } else if(item is Player) {
                                (item as Player).Name = args.NewText;
                        }
@@ -312,8 +301,7 @@ namespace LongoMatch.Gui.Component
                        if(!(item is Play))
                                return;
 
-                       if(TimeNodeSelected != null)
-                               this.TimeNodeSelected(item as Play);
+                       Config.EventsBroker.EmitPlaySelected (item as Play);
                }
 
                protected void OnDeleted(object obj, EventArgs args) {
@@ -334,8 +322,8 @@ namespace LongoMatch.Gui.Component
                                TreeIter iter = iters[i];
                                Model.Remove(ref iter);
                        }
-                       if(TimeNodeDeleted != null)
-                               TimeNodeDeleted(playsList);
+                       
+                       Config.EventsBroker.EmitPlaysDeleted (playsList);
                }
 
                protected void OnDeleteKeyFrame(object obj, EventArgs args) {
@@ -353,8 +341,7 @@ namespace LongoMatch.Gui.Component
 
                void OnDuplicate (object sender, EventArgs e)
                {
-                       if (DuplicatePlay != null)
-                               DuplicatePlay((Play)GetValueFromPath(Selection.GetSelectedRows()[0]));
+                       Config.EventsBroker.EmitDuplicatePlay (SelectedPlay);
                }
 
                protected virtual void OnEdit(object obj, EventArgs args) {
@@ -366,26 +353,22 @@ namespace LongoMatch.Gui.Component
                }
 
                protected void OnAdded(object obj, EventArgs args) {
-                       if(PlayListNodeAdded != null) {
-                               List<Play> list = new List<Play>();
-                               TreePath[] paths = Selection.GetSelectedRows();
-                               for(int i=0; i<paths.Length; i++) {
-                                       Play tNode = (Play)GetValueFromPath(paths[i]);
-                                       list.Add (tNode);
-                               }
-                               PlayListNodeAdded(list);
+                       List<Play> list = new List<Play>();
+                       TreePath[] paths = Selection.GetSelectedRows();
+                       for(int i=0; i<paths.Length; i++) {
+                               Play tNode = (Play)GetValueFromPath(paths[i]);
+                               list.Add (tNode);
                        }
+                       Config.EventsBroker.EmitPlayListNodeAdded (list);
                }
 
                protected void OnTag(object obj, EventArgs args) {
-                       if(TagPlay != null)
-                               TagPlay((Play)GetValueFromPath(Selection.GetSelectedRows()[0]));
+                       Config.EventsBroker.EmitTagPlay (SelectedPlay);
                        Refilter();
                }
 
                protected void OnSnapshot(object obj, EventArgs args) {
-                       if(SnapshotSeriesEvent != null)
-                               SnapshotSeriesEvent((Play)GetValueFromPath(Selection.GetSelectedRows()[0]));
+                       Config.EventsBroker.EmitSnapshotSeries (SelectedPlay);
                }
                
                protected void OnRender(object obj, EventArgs args) {
@@ -394,9 +377,8 @@ namespace LongoMatch.Gui.Component
                }
                
                protected void OnCatChanged(object obj, EventArgs args) {
-                       if (PlayCategoryChanged != null)
-                               PlayCategoryChanged((Play)GetValueFromPath(Selection.GetSelectedRows()[0]),
-                                                   catsDict[obj as MenuItem]);
+                       Config.EventsBroker.EmitPlayCategoryChanged (SelectedPlay,
+                                                                    catsDict[obj as MenuItem]);
                }
 
                protected void OnFilterUpdated() {
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
index 517da5e..cb9ba3f 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
@@ -15,19 +15,13 @@ namespace LongoMatch.Gui
                private global::Gtk.Action CategoriesTemplatesManagerAction;
                private global::Gtk.Action ViewAction;
                private global::Gtk.ToggleAction FullScreenAction;
-               private global::Gtk.ToggleAction PlaylistAction;
-               private global::Gtk.RadioAction TaggingViewAction;
-               private global::Gtk.RadioAction TimelineViewAction;
                private global::Gtk.Action SaveProjectAction;
                private global::Gtk.Action HelpAction;
                private global::Gtk.Action AboutAction;
                private global::Gtk.Action ExportProjectToCSVFileAction;
                private global::Gtk.Action TeamsTemplatesManagerAction;
-               private global::Gtk.ToggleAction HideAllWidgetsAction;
                private global::Gtk.Action HelpAction1;
                private global::Gtk.Action ImportProjectAction;
-               private global::Gtk.RadioAction ManualTaggingViewAction;
-               private global::Gtk.RadioAction GameUnitsViewAction;
                private global::Gtk.Action ExportProjectAction;
                private global::Gtk.Action ExportProjectAction1;
                private global::Gtk.Action Action;
@@ -84,19 +78,6 @@ namespace LongoMatch.Gui
                        this.FullScreenAction = new global::Gtk.ToggleAction ("FullScreenAction", 
global::Mono.Unix.Catalog.GetString ("Full Screen"), null, "gtk-fullscreen");
                        this.FullScreenAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Full 
Screen");
                        w1.Add (this.FullScreenAction, "<Control><Alt>f");
-                       this.PlaylistAction = new global::Gtk.ToggleAction ("PlaylistAction", 
global::Mono.Unix.Catalog.GetString ("Playlist"), null, null);
-                       this.PlaylistAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Playlist");
-                       w1.Add (this.PlaylistAction, "<Control>p");
-                       this.TaggingViewAction = new global::Gtk.RadioAction ("TaggingViewAction", 
global::Mono.Unix.Catalog.GetString ("Tagging view"), null, null, 0);
-                       this.TaggingViewAction.Group = new global::GLib.SList (global::System.IntPtr.Zero);
-                       this.TaggingViewAction.Sensitive = false;
-                       this.TaggingViewAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Capture 
Mode");
-                       w1.Add (this.TaggingViewAction, "<Control>c");
-                       this.TimelineViewAction = new global::Gtk.RadioAction ("TimelineViewAction", 
global::Mono.Unix.Catalog.GetString ("Timeline view"), null, null, 0);
-                       this.TimelineViewAction.Group = this.TaggingViewAction.Group;
-                       this.TimelineViewAction.Sensitive = false;
-                       this.TimelineViewAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Analyze 
Mode");
-                       w1.Add (this.TimelineViewAction, "<Control>a");
                        this.SaveProjectAction = new global::Gtk.Action ("SaveProjectAction", 
global::Mono.Unix.Catalog.GetString ("_Save Project"), null, "gtk-save");
                        this.SaveProjectAction.Sensitive = false;
                        this.SaveProjectAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("_Save 
Project");
@@ -115,26 +96,12 @@ namespace LongoMatch.Gui
                        this.TeamsTemplatesManagerAction = new global::Gtk.Action 
("TeamsTemplatesManagerAction", global::Mono.Unix.Catalog.GetString ("Teams Templates Manager"), null, null);
                        this.TeamsTemplatesManagerAction.ShortLabel = global::Mono.Unix.Catalog.GetString 
("Teams Templates Manager");
                        w1.Add (this.TeamsTemplatesManagerAction, null);
-                       this.HideAllWidgetsAction = new global::Gtk.ToggleAction ("HideAllWidgetsAction", 
global::Mono.Unix.Catalog.GetString ("Hide All Widgets"), null, null);
-                       this.HideAllWidgetsAction.Sensitive = false;
-                       this.HideAllWidgetsAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Hide All 
Widgets");
-                       w1.Add (this.HideAllWidgetsAction, null);
                        this.HelpAction1 = new global::Gtk.Action ("HelpAction1", 
global::Mono.Unix.Catalog.GetString ("_Help"), null, "gtk-help");
                        this.HelpAction1.ShortLabel = global::Mono.Unix.Catalog.GetString ("_Help");
                        w1.Add (this.HelpAction1, null);
                        this.ImportProjectAction = new global::Gtk.Action ("ImportProjectAction", 
global::Mono.Unix.Catalog.GetString ("_Import Project"), null, "stock-import");
                        this.ImportProjectAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("_Import 
Project");
                        w1.Add (this.ImportProjectAction, "<Control>i");
-                       this.ManualTaggingViewAction = new global::Gtk.RadioAction 
("ManualTaggingViewAction", global::Mono.Unix.Catalog.GetString ("Manual tagging view"), null, null, 0);
-                       this.ManualTaggingViewAction.Group = this.TaggingViewAction.Group;
-                       this.ManualTaggingViewAction.Sensitive = false;
-                       this.ManualTaggingViewAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Free 
Capture Mode");
-                       w1.Add (this.ManualTaggingViewAction, "<Control>f");
-                       this.GameUnitsViewAction = new global::Gtk.RadioAction ("GameUnitsViewAction", 
global::Mono.Unix.Catalog.GetString ("Game units view"), null, null, 0);
-                       this.GameUnitsViewAction.Group = this.TaggingViewAction.Group;
-                       this.GameUnitsViewAction.Sensitive = false;
-                       this.GameUnitsViewAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Game 
units view");
-                       w1.Add (this.GameUnitsViewAction, null);
                        this.ExportProjectAction = new global::Gtk.Action ("ExportProjectAction", 
global::Mono.Unix.Catalog.GetString ("Export Project"), null, null);
                        this.ExportProjectAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Export 
Project");
                        w1.Add (this.ExportProjectAction, null);
@@ -186,7 +153,7 @@ namespace LongoMatch.Gui
                        this.menubox.Name = "menubox";
                        this.menubox.Spacing = 6;
                        // Container child menubox.Gtk.Box+BoxChild
-                       this.UIManager.AddUiFromString ("<ui><menubar name='menubar1'><menu name='FileAction' 
action='FileAction'><menuitem name='NewPojectAction' action='NewPojectAction'/><menuitem name='openAction' 
action='openAction'/><menuitem name='SaveProjectAction' action='SaveProjectAction'/><menuitem 
name='CloseProjectAction' action='CloseProjectAction'/><separator/><menu name='ImportProjectAction' 
action='ImportProjectAction'/><separator/><menuitem name='PreferencesAction' 
action='PreferencesAction'/><separator/><menuitem name='QuitAction' action='QuitAction'/></menu><menu 
name='ToolsAction' action='ToolsAction'><menuitem name='ProjectsManagerAction' 
action='ProjectsManagerAction'/><menuitem name='CategoriesTemplatesManagerAction' 
action='CategoriesTemplatesManagerAction'/><menuitem name='TeamsTemplatesManagerAction' 
action='TeamsTemplatesManagerAction'/><menuitem name='DatabasesManagerAction' 
action='DatabasesManagerAction'/><separator/><menuitem name='ShowProjectStatsAction' action='
 ShowProjectStatsAction'/><menu name='ExportProjectAction1' action='ExportProjectAction1'><menuitem 
name='ExportToProjectFileAction' action='ExportToProjectFileAction'/></menu><separator/><menuitem 
name='VideoConverterToolAction' action='VideoConverterToolAction'/></menu><menu name='ViewAction' 
action='ViewAction'><menuitem name='FullScreenAction' action='FullScreenAction'/><menuitem 
name='HideAllWidgetsAction' action='HideAllWidgetsAction'/><separator/><menuitem name='PlaylistAction' 
action='PlaylistAction'/><separator/><menuitem name='TagSubcategoriesAction' 
action='TagSubcategoriesAction'/><menuitem name='TaggingViewAction' action='TaggingViewAction'/><menuitem 
name='ManualTaggingViewAction' action='ManualTaggingViewAction'/><menuitem name='TimelineViewAction' 
action='TimelineViewAction'/><menuitem name='GameUnitsViewAction' action='GameUnitsViewAction'/></menu><menu 
name='HelpAction' action='HelpAction'><menuitem name='AboutAction' action='AboutAction'/><menuitem name='He
 lpAction1' action='HelpAction1'/><menuitem name='dialogInfoAction' 
action='dialogInfoAction'/></menu></menubar></ui>");
+                       this.UIManager.AddUiFromString ("<ui><menubar name='menubar1'><menu name='FileAction' 
action='FileAction'><menuitem name='NewPojectAction' action='NewPojectAction'/><menuitem name='openAction' 
action='openAction'/><menuitem name='SaveProjectAction' action='SaveProjectAction'/><menuitem 
name='CloseProjectAction' action='CloseProjectAction'/><separator/><menu name='ImportProjectAction' 
action='ImportProjectAction'/><separator/><menuitem name='PreferencesAction' 
action='PreferencesAction'/><separator/><menuitem name='QuitAction' action='QuitAction'/></menu><menu 
name='ToolsAction' action='ToolsAction'><menuitem name='ProjectsManagerAction' 
action='ProjectsManagerAction'/><menuitem name='CategoriesTemplatesManagerAction' 
action='CategoriesTemplatesManagerAction'/><menuitem name='TeamsTemplatesManagerAction' 
action='TeamsTemplatesManagerAction'/><menuitem name='DatabasesManagerAction' 
action='DatabasesManagerAction'/><separator/><menuitem name='ShowProjectStatsAction' action='
 ShowProjectStatsAction'/><menu name='ExportProjectAction1' action='ExportProjectAction1'><menuitem 
name='ExportToProjectFileAction' action='ExportToProjectFileAction'/></menu><separator/><menuitem 
name='VideoConverterToolAction' action='VideoConverterToolAction'/></menu><menu name='ViewAction' 
action='ViewAction'><menuitem name='FullScreenAction' action='FullScreenAction'/><separator/><menuitem 
name='TagSubcategoriesAction' action='TagSubcategoriesAction'/></menu><menu name='HelpAction' 
action='HelpAction'><menuitem name='AboutAction' action='AboutAction'/><menuitem name='HelpAction1' 
action='HelpAction1'/><menuitem name='dialogInfoAction' action='dialogInfoAction'/></menu></menubar></ui>");
                        this.menubar1 = ((global::Gtk.MenuBar)(this.UIManager.GetWidget ("/menubar1")));
                        this.menubar1.Name = "menubar1";
                        this.menubox.Add (this.menubar1);
@@ -240,19 +207,9 @@ namespace LongoMatch.Gui
                        this.DefaultHeight = 604;
                        this.renderingstatebar1.Hide ();
                        this.Show ();
-                       this.NewPojectAction.Activated += new global::System.EventHandler 
(this.OnNewActivated);
-                       this.openAction.Activated += new global::System.EventHandler (this.OnOpenActivated);
-                       this.FullScreenAction.Toggled += new global::System.EventHandler 
(this.OnFullScreenActionToggled);
-                       this.PlaylistAction.Toggled += new global::System.EventHandler 
(this.OnPlaylistActionToggled);
-                       this.TaggingViewAction.Toggled += new global::System.EventHandler 
(this.OnViewToggled);
-                       this.TimelineViewAction.Toggled += new global::System.EventHandler 
(this.OnViewToggled);
                        this.AboutAction.Activated += new global::System.EventHandler 
(this.OnAboutActionActivated);
-                       this.HideAllWidgetsAction.Toggled += new global::System.EventHandler 
(this.OnHideAllWidgetsActionToggled);
                        this.HelpAction1.Activated += new global::System.EventHandler 
(this.OnHelpAction1Activated);
-                       this.ManualTaggingViewAction.Toggled += new global::System.EventHandler 
(this.OnViewToggled);
-                       this.GameUnitsViewAction.Toggled += new global::System.EventHandler 
(this.OnViewToggled);
                        this.dialogInfoAction.Activated += new global::System.EventHandler 
(this.OnDialogInfoActionActivated);
-                       this.TagSubcategoriesAction.Toggled += new global::System.EventHandler 
(this.OnTagSubcategoriesActionToggled);
                        this.VideoConverterToolAction.Activated += new global::System.EventHandler 
(this.OnVideoConverterToolActionActivated);
                }
        }
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 8db69ef..ca2cce6 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -190,14 +190,12 @@
         <property name="Label" translatable="yes">_New Project</property>
         <property name="ShortLabel" translatable="yes">_New Project</property>
         <property name="StockId">gtk-new</property>
-        <signal name="Activated" handler="OnNewActivated" />
       </action>
       <action id="openAction">
         <property name="Type">Action</property>
         <property name="Label" translatable="yes">_Open Project</property>
         <property name="ShortLabel" translatable="yes">_Open Project</property>
         <property name="StockId">gtk-open</property>
-        <signal name="Activated" handler="OnOpenActivated" />
       </action>
       <action id="QuitAction">
         <property name="Type">Action</property>
@@ -241,40 +239,6 @@
         <property name="StockId">gtk-fullscreen</property>
         <property name="DrawAsRadio">False</property>
         <property name="Active">False</property>
-        <signal name="Toggled" handler="OnFullScreenActionToggled" />
-      </action>
-      <action id="PlaylistAction">
-        <property name="Type">Toggle</property>
-        <property name="Accelerator">&lt;Control&gt;p</property>
-        <property name="Label" translatable="yes">Playlist</property>
-        <property name="ShortLabel" translatable="yes">Playlist</property>
-        <property name="DrawAsRadio">False</property>
-        <property name="Active">False</property>
-        <signal name="Toggled" handler="OnPlaylistActionToggled" />
-      </action>
-      <action id="TaggingViewAction">
-        <property name="Type">Radio</property>
-        <property name="Accelerator">&lt;Control&gt;c</property>
-        <property name="Label" translatable="yes">Tagging view</property>
-        <property name="Sensitive">False</property>
-        <property name="ShortLabel" translatable="yes">Capture Mode</property>
-        <property name="DrawAsRadio">False</property>
-        <property name="Active">False</property>
-        <property name="Value">0</property>
-        <property name="Group">codingmode</property>
-        <signal name="Toggled" handler="OnViewToggled" />
-      </action>
-      <action id="TimelineViewAction">
-        <property name="Type">Radio</property>
-        <property name="Accelerator">&lt;Control&gt;a</property>
-        <property name="Label" translatable="yes">Timeline view</property>
-        <property name="Sensitive">False</property>
-        <property name="ShortLabel" translatable="yes">Analyze Mode</property>
-        <property name="DrawAsRadio">False</property>
-        <property name="Active">True</property>
-        <property name="Value">0</property>
-        <property name="Group">codingmode</property>
-        <signal name="Toggled" handler="OnViewToggled" />
       </action>
       <action id="SaveProjectAction">
         <property name="Type">Action</property>
@@ -307,15 +271,6 @@
         <property name="Label" translatable="yes">Teams Templates Manager</property>
         <property name="ShortLabel" translatable="yes">Teams Templates Manager</property>
       </action>
-      <action id="HideAllWidgetsAction">
-        <property name="Type">Toggle</property>
-        <property name="Label" translatable="yes">Hide All Widgets</property>
-        <property name="Sensitive">False</property>
-        <property name="ShortLabel" translatable="yes">Hide All Widgets</property>
-        <property name="DrawAsRadio">False</property>
-        <property name="Active">False</property>
-        <signal name="Toggled" handler="OnHideAllWidgetsActionToggled" />
-      </action>
       <action id="HelpAction1">
         <property name="Type">Action</property>
         <property name="Label" translatable="yes">_Help</property>
@@ -330,29 +285,6 @@
         <property name="ShortLabel" translatable="yes">_Import Project</property>
         <property name="StockId">stock-import</property>
       </action>
-      <action id="ManualTaggingViewAction">
-        <property name="Type">Radio</property>
-        <property name="Accelerator">&lt;Control&gt;f</property>
-        <property name="Label" translatable="yes">Manual tagging view</property>
-        <property name="Sensitive">False</property>
-        <property name="ShortLabel" translatable="yes">Free Capture Mode</property>
-        <property name="DrawAsRadio">False</property>
-        <property name="Active">False</property>
-        <property name="Value">0</property>
-        <property name="Group">codingmode</property>
-        <signal name="Toggled" handler="OnViewToggled" />
-      </action>
-      <action id="GameUnitsViewAction">
-        <property name="Type">Radio</property>
-        <property name="Label" translatable="yes">Game units view</property>
-        <property name="Sensitive">False</property>
-        <property name="ShortLabel" translatable="yes">Game units view</property>
-        <property name="DrawAsRadio">False</property>
-        <property name="Active">False</property>
-        <property name="Value">0</property>
-        <property name="Group">codingmode</property>
-        <signal name="Toggled" handler="OnViewToggled" />
-      </action>
       <action id="ExportProjectAction">
         <property name="Type">Action</property>
         <property name="Label" translatable="yes">Export Project</property>
@@ -391,7 +323,6 @@
         <property name="ShortLabel" translatable="yes">Tag subcategories</property>
         <property name="DrawAsRadio">False</property>
         <property name="Active">True</property>
-        <signal name="Toggled" handler="OnTagSubcategoriesActionToggled" />
       </action>
       <action id="VideoConverterToolAction">
         <property name="Type">Action</property>
@@ -460,15 +391,8 @@
                   </node>
                   <node type="Menu" action="ViewAction">
                     <node type="Menuitem" action="FullScreenAction" />
-                    <node type="Menuitem" action="HideAllWidgetsAction" />
-                    <node type="Separator" />
-                    <node type="Menuitem" action="PlaylistAction" />
                     <node type="Separator" />
                     <node type="Menuitem" action="TagSubcategoriesAction" />
-                    <node type="Menuitem" action="TaggingViewAction" />
-                    <node type="Menuitem" action="ManualTaggingViewAction" />
-                    <node type="Menuitem" action="TimelineViewAction" />
-                    <node type="Menuitem" action="GameUnitsViewAction" />
                   </node>
                   <node type="Menu" action="HelpAction">
                     <node type="Menuitem" action="AboutAction" />
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index 9eecf8a..c159207 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -6,12 +6,6 @@
   <object type="LongoMatch.Gui.Component.ButtonsWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups />
     <signals>
-      <itemgroup label="ButtonsWidget Signals">
-        <signal name="NewMarkEvent" />
-        <signal name="NewMarkStartEvent" />
-        <signal name="NewMarkStopEvent" />
-        <signal name="NewMarkCancelEvent" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.Component.DrawingToolBox" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
@@ -30,9 +24,6 @@
   <object type="LongoMatch.Gui.Component.NotesWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups />
     <signals>
-      <itemgroup label="NotesWidget Signals">
-        <signal name="TimeNodeChanged" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.Component.PlayersTreeView" palette-category="General" allow-children="false" 
base-type="Gtk.TreeView">
@@ -63,14 +54,6 @@
   <object type="LongoMatch.Gui.Component.PlayersListTreeWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals>
-      <itemgroup label="PlayersListTreeWidget Signals">
-        <signal name="TimeNodeSelected" />
-        <signal name="TimeNodeChanged" />
-        <signal name="PlayListNodeAdded" />
-        <signal name="SnapshotSeriesEvent" />
-        <signal name="RenderPlaylistEvent" />
-        <signal name="DuplicatePlay" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.Component.PlayListWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
@@ -114,17 +97,6 @@
   <object type="LongoMatch.Gui.Component.PlaysListTreeWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals>
-      <itemgroup label="PlaysListTreeWidget Signals">
-        <signal name="TimeNodeSelected" />
-        <signal name="TimeNodeChanged" />
-        <signal name="TimeNodeDeleted" />
-        <signal name="PlayListNodeAdded" />
-        <signal name="PlayCategoryChanged" />
-        <signal name="SnapshotSeriesEvent" />
-        <signal name="TagPlay" />
-        <signal name="RenderPlaylist" />
-        <signal name="DuplicatePlay" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.Component.DrawingWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
@@ -200,17 +172,6 @@
   <object type="LongoMatch.Gui.Component.PlaysSelectionWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals>
-      <itemgroup label="PlaysSelectionWidget Signals">
-        <signal name="PlaysDeleted" />
-        <signal name="PlaySelected" />
-        <signal name="PlayCategoryChanged" />
-        <signal name="PlayListNodeAdded" />
-        <signal name="TimeNodeChanged" />
-        <signal name="SnapshotSeries" />
-        <signal name="RenderPlaylist" />
-        <signal name="TagPlay" />
-        <signal name="DuplicatePlay" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.Component.PlayersFilterTreeView" palette-category="General" 
allow-children="false" base-type="Gtk.TreeView">
@@ -306,33 +267,6 @@
   <object type="LongoMatch.Gui.Component.AnalysisComponent" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals>
-      <itemgroup label="IAnalysisWindow Signals">
-        <signal name="CloseOpenedProjectEvent" />
-        <signal name="NewTagEvent" />
-        <signal name="NewTagStartEvent" />
-        <signal name="NewTagStopEvent" />
-        <signal name="NewTagCancelEvent" />
-        <signal name="PlaySelectedEvent" />
-        <signal name="NewTagAtPosEvent" />
-        <signal name="TagPlayEvent" />
-        <signal name="PlaysDeletedEvent" />
-        <signal name="TimeNodeChanged" />
-        <signal name="PlayCategoryChanged" />
-        <signal name="DuplicatePlay" />
-        <signal name="RenderPlaylistEvent" />
-        <signal name="PlayListNodeAddedEvent" />
-        <signal name="PlayListNodeSelectedEvent" />
-        <signal name="OpenPlaylistEvent" />
-        <signal name="NewPlaylistEvent" />
-        <signal name="SavePlaylistEvent" />
-        <signal name="SnapshotSeriesEvent" />
-        <signal name="GameUnitEvent" />
-        <signal name="UnitChanged" />
-        <signal name="UnitSelected" />
-        <signal name="UnitDeleted" />
-        <signal name="UnitAdded" />
-        <signal name="KeyPressed" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.Panel.WelcomePanel" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
@@ -343,7 +277,6 @@
     <itemgroups />
     <signals>
       <itemgroup label="OpenProjectPanel Signals">
-        <signal name="OpenProjectEvent" />
         <signal name="BackEvent" />
       </itemgroup>
     </signals>
@@ -353,7 +286,6 @@
     <signals>
       <itemgroup label="IPanel Signals">
         <signal name="BackEvent" />
-        <signal name="OpenNewProjectEvent" />
       </itemgroup>
     </signals>
   </object>
@@ -412,16 +344,6 @@
   <object type="LongoMatch.Gui.Component.Timeline" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups />
     <signals>
-      <itemgroup label="Timeline Signals">
-        <signal name="TimeNodeChanged" />
-        <signal name="TimeNodeSelected" />
-        <signal name="TimeNodeDeleted" />
-        <signal name="NewTagAtPosEvent" />
-        <signal name="PlayListNodeAdded" />
-        <signal name="SnapshotSeries" />
-        <signal name="TagPlay" />
-        <signal name="RenderPlaylist" />
-      </itemgroup>
     </signals>
   </object>
   <object type="LongoMatch.Gui.Component.CodingWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
diff --git a/LongoMatch.Services/LongoMatch.Services.mdp b/LongoMatch.Services/LongoMatch.Services.mdp
index 89ae27f..1cf8a74 100644
--- a/LongoMatch.Services/LongoMatch.Services.mdp
+++ b/LongoMatch.Services/LongoMatch.Services.mdp
@@ -22,7 +22,6 @@
     <File subtype="Code" buildaction="Compile" name="Services/PlaylistManager.cs" />
     <File subtype="Code" buildaction="Compile" name="Services/ProjectsManager.cs" />
     <File subtype="Directory" buildaction="Compile" name="." />
-    <File subtype="Code" buildaction="Compile" name="Services/GameUnitsManager.cs" />
     <File subtype="Directory" buildaction="Compile" name="." />
     <File subtype="Directory" buildaction="Compile" name="." />
     <File subtype="Directory" buildaction="Compile" name=".." />
diff --git a/LongoMatch.Services/Services/Core.cs b/LongoMatch.Services/Services/Core.cs
index a99967e..879dc8f 100644
--- a/LongoMatch.Services/Services/Core.cs
+++ b/LongoMatch.Services/Services/Core.cs
@@ -72,13 +72,12 @@ namespace LongoMatch.Services
                public static void Start(IGUIToolkit guiToolkit, IMultimediaToolkit multimediaToolkit) {
                        Config.MultimediaToolkit = multimediaToolkit;
                        Config.GUIToolkit= guiToolkit;
+                       Config.EventsBroker.QuitApplicationEvent += () => Config.GUIToolkit.Quit ();
                        StartServices (guiToolkit, multimediaToolkit);
-                       BindEvents (guiToolkit.MainController);
                }
                
                public static void StartServices (IGUIToolkit guiToolkit, IMultimediaToolkit 
multimediaToolkit){
                        ProjectsManager projectsManager;
-                       GameUnitsManager guManager;
                        PlaylistManager plManager;
                        ToolsManager toolsManager;
                        TemplatesService ts;
@@ -104,26 +103,19 @@ namespace LongoMatch.Services
                        projectsManager = new ProjectsManager(guiToolkit, multimediaToolkit, ts);
                        
                        /* State the tools manager */
-                       toolsManager = new ToolsManager (guiToolkit, multimediaToolkit, projectsManager, ts);
+                       toolsManager = new ToolsManager (guiToolkit, multimediaToolkit, ts);
                        
                        /* Start the events manager */
-                       eManager = new EventsManager (guiToolkit, videoRenderer, projectsManager);
+                       eManager = new EventsManager (guiToolkit, videoRenderer);
                        
                        /* Start the hotkeys manager */
-                       hkManager = new HotKeysManager (projectsManager);
+                       hkManager = new HotKeysManager ();
                        hkManager.newMarkEvent += eManager.OnNewTag;
 
-                       /* Start Game Units manager */
-                       guManager = new GameUnitsManager(projectsManager);
-                       
                        /* Start playlists manager */
-                       plManager = new PlaylistManager(Config.GUIToolkit, videoRenderer, projectsManager);
+                       plManager = new PlaylistManager(Config.GUIToolkit, videoRenderer);
                }
                        
-               public static void BindEvents(IMainController mainController) {
-                       mainController.QuitApplicationEvent += () => {Config.GUIToolkit.Quit();};
-               }
-
                public static void CheckDirs() {
                        if(!System.IO.Directory.Exists(Config.HomeDir))
                                System.IO.Directory.CreateDirectory(Config.HomeDir);
diff --git a/LongoMatch.Services/Services/DataBaseManager.cs b/LongoMatch.Services/Services/DataBaseManager.cs
index 8cb22f3..c530c24 100644
--- a/LongoMatch.Services/Services/DataBaseManager.cs
+++ b/LongoMatch.Services/Services/DataBaseManager.cs
@@ -39,7 +39,7 @@ namespace LongoMatch.DB
                {
                        this.DBDir = DBDir;
                        this.guiToolkit = guiToolkit;
-                       ConnectSignals ();
+                       Config.EventsBroker.ManageDatabasesEvent += HandleManageDatabase;
                        FindDBS();
                }
                
@@ -115,16 +115,14 @@ namespace LongoMatch.DB
                        }
                }
 
-               void ConnectSignals ()
+               void HandleManageDatabase ()
                {
-                       guiToolkit.MainController.ManageDatabasesEvent += () => {
-                               if (OpenedProject != null) {
-                                       var msg = Catalog.GetString("Close the current project to open the 
database manager");
-                                       guiToolkit.ErrorMessage (msg);
-                               } else {
-                                       guiToolkit.OpenDatabasesManager ();
-                               }
-                       };
+                       if (OpenedProject != null) {
+                               var msg = Catalog.GetString("Close the current project to open the database 
manager");
+                               guiToolkit.ErrorMessage (msg);
+                       } else {
+                               guiToolkit.OpenDatabasesManager ();
+                       }
                }
                
                void FindDBS (){
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index b8504e7..2ac91ce 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -44,23 +44,20 @@ namespace LongoMatch.Services
                
                IGUIToolkit guiToolkit;
                IAnalysisWindow analysisWindow;
-               IProjectOptionsController poController;
                IPlayerBin player;
                ICapturerBin capturer;
                IRenderingJobsManager renderer;
 
-               public EventsManager(IGUIToolkit guiToolkit, IRenderingJobsManager renderer,
-                                    ProjectsManager pManager)
+               public EventsManager(IGUIToolkit guiToolkit, IRenderingJobsManager renderer)
                {
                        this.guiToolkit = guiToolkit;
                        this.renderer = renderer;
-                       pManager.OpenedProjectChanged += HandleOpenedProjectChanged;
+                       Config.EventsBroker.OpenedProjectChanged += HandleOpenedProjectChanged;
                        catsTime = new Dictionary<Category, Time>();
                }
 
                void HandleOpenedProjectChanged (Project project, ProjectType projectType,
-                                                PlaysFilter filter, IAnalysisWindow analysisWindow,
-                                                IProjectOptionsController projectOptionsController)
+                                                PlaysFilter filter, IAnalysisWindow analysisWindow)
                {
                        this.openedProject = project;
                        this.projectType = projectType;
@@ -72,7 +69,6 @@ namespace LongoMatch.Services
                                
                        player = analysisWindow.Player;
                        capturer = analysisWindow.Capturer;
-                       this.poController = projectOptionsController;
                        if (this.analysisWindow != analysisWindow) {
                                this.analysisWindow = analysisWindow;
                                ConnectSignals();
@@ -86,30 +82,22 @@ namespace LongoMatch.Services
                }
                
                private void ConnectSignals() {
-                       /* Adding Handlers for each event */
-
-                       /* Connect tagging related events */
-                       analysisWindow.NewTagEvent += OnNewTag;
-                       analysisWindow.NewTagStartEvent += OnNewPlayStart;
-                       analysisWindow.NewTagStopEvent += OnNewPlayStop;
-                       analysisWindow.NewTagCancelEvent += OnNewPlayCancel;
-                       analysisWindow.NewTagAtPosEvent += OnNewTagAtPos;
-                       analysisWindow.TimeNodeChanged += OnTimeNodeChanged;
-                       analysisWindow.PlaysDeletedEvent += OnPlaysDeleted;
-                       analysisWindow.PlaySelectedEvent += OnPlaySelected;
-                       analysisWindow.PlayCategoryChanged += OnPlayCategoryChanged;
-                       analysisWindow.DuplicatePlay += OnDuplicatePlay;
-
-                       /* Connect playlist events */
-                       analysisWindow.PlayListNodeSelectedEvent += (tn) => {loadedPlay = tn;};
-                       /* Connect tags events */
-                       analysisWindow.TagPlayEvent += OnTagPlay;
-
-                       /* Connect SnapshotSeries events */
-                       analysisWindow.SnapshotSeriesEvent += OnSnapshotSeries;
+                       Config.EventsBroker.NewTagEvent += OnNewTag;
+                       Config.EventsBroker.NewTagStartEvent += OnNewPlayStart;
+                       Config.EventsBroker.NewTagStopEvent += OnNewPlayStop;
+                       Config.EventsBroker.NewTagCancelEvent += OnNewPlayCancel;
+                       Config.EventsBroker.NewTagAtPosEvent += OnNewTagAtPos;
+                       Config.EventsBroker.TimeNodeChanged += OnTimeNodeChanged;
+                       Config.EventsBroker.PlaysDeleted += OnPlaysDeleted;
+                       Config.EventsBroker.PlaySelected += OnPlaySelected;
+                       Config.EventsBroker.PlayCategoryChanged += OnPlayCategoryChanged;
+                       Config.EventsBroker.DuplicatePlay += OnDuplicatePlay;
+                       Config.EventsBroker.PlayListNodeSelectedEvent += (tn) => {loadedPlay = tn;};
+                       Config.EventsBroker.TagPlay += OnTagPlay;
+                       Config.EventsBroker.SnapshotSeries += OnSnapshotSeries;
                        
-                       poController.ShowProjectStatsEvent += HandleShowProjectStatsEvent;
-                       poController.TagSubcategoriesChangedEvent += HandleTagSubcategoriesChangedEvent;
+                       Config.EventsBroker.ShowProjectStatsEvent += HandleShowProjectStatsEvent;
+                       Config.EventsBroker.TagSubcategoriesChangedEvent += 
HandleTagSubcategoriesChangedEvent;
                        
                        /* Connect player events */
                        player.Prev += OnPrev;
diff --git a/LongoMatch.Services/Services/HotKeysManager.cs b/LongoMatch.Services/Services/HotKeysManager.cs
index 3367d41..b641992 100644
--- a/LongoMatch.Services/Services/HotKeysManager.cs
+++ b/LongoMatch.Services/Services/HotKeysManager.cs
@@ -19,6 +19,9 @@
 //
 //
 using System.Collections.Generic;
+using LongoMatch.Common;
+
+
 #if HAVE_GTK
 using Gtk;
 using Gdk;
@@ -39,26 +42,22 @@ namespace LongoMatch.Services
                
                Dictionary<HotKey, Category> dic;
                bool ignoreKeys;
-               IAnalysisWindow analysisWindow;
                
-               public HotKeysManager(ProjectsManager pManager)
+               public HotKeysManager()
                {
                        dic = new Dictionary<HotKey,Category>();
-                       pManager.OpenedProjectChanged += HandleOpenedProjectChanged;
+                       Config.EventsBroker.OpenedProjectChanged += HandleOpenedProjectChanged;
+                       Config.EventsBroker.KeyPressed += KeyListener;
                }
 
-               void HandleOpenedProjectChanged (Project project, LongoMatch.Common.ProjectType projectType, 
LongoMatch.Common.PlaysFilter filter, IAnalysisWindow analysisWindow, IProjectOptionsController 
projectOptions)
+               void HandleOpenedProjectChanged (Project project, ProjectType projectType,
+                                                PlaysFilter filter, IAnalysisWindow analysisWindow)
                {
                        if(project == null) {
                                ignoreKeys = true;
                                return;
                        }
                        
-                       if (this.analysisWindow != analysisWindow) {
-                               analysisWindow.KeyPressed += KeyListener;
-                               this.analysisWindow = analysisWindow;
-                       }
-                       
                        dic.Clear();
                        ignoreKeys = false;
                        foreach(Category cat in project.Categories) {
diff --git a/LongoMatch.Services/Services/PlaylistManager.cs b/LongoMatch.Services/Services/PlaylistManager.cs
index 672c197..4178abe 100644
--- a/LongoMatch.Services/Services/PlaylistManager.cs
+++ b/LongoMatch.Services/Services/PlaylistManager.cs
@@ -45,19 +45,18 @@ namespace LongoMatch.Services
                Timer timeout;
                Project openedProject;
                
-               public PlaylistManager (IGUIToolkit guiToolkit, IRenderingJobsManager videoRenderer,
-                                       ProjectsManager pManager)
+               public PlaylistManager (IGUIToolkit guiToolkit, IRenderingJobsManager videoRenderer)
                {
                        this.videoRenderer = videoRenderer;
                        this.guiToolkit = guiToolkit;
-                       pManager.OpenedProjectChanged += HandleOpenedProjectChanged;
+                       Config.EventsBroker.OpenedProjectChanged += HandleOpenedProjectChanged;
                }
 
-               void HandleOpenedProjectChanged (Project project, ProjectType projectType, PlaysFilter 
filter, IAnalysisWindow analysisWindow, IProjectOptionsController projectOptions)
+               void HandleOpenedProjectChanged (Project project, ProjectType projectType,
+                                                PlaysFilter filter, IAnalysisWindow analysisWindow)
                {
                        openedProject = project;
                        if (project != null) {
-                               //playlistWidget = analysisWindow.Playlist;
                                player = analysisWindow.Player;
                                if (this.analysisWindow != analysisWindow) {
                                        BindEvents(analysisWindow);
@@ -82,21 +81,16 @@ namespace LongoMatch.Services
                }
                
                private void BindEvents(IAnalysisWindow analysisWindow) {
-                       /* Track loaded element */
-                       analysisWindow.PlaySelectedEvent += (p) => {selectedTimeNode = p;};
-                       analysisWindow.Player.SegmentClosedEvent += () => {selectedTimeNode = null;};
-                       
-                       /* Handle New/Open/Save playlist */
-                       analysisWindow.OpenPlaylistEvent += OnOpenPlaylist;
-                       analysisWindow.NewPlaylistEvent += OnNewPlaylist;
-                       analysisWindow.SavePlaylistEvent += OnSavePlaylist;
-                       
-                       /* Handle Add/Select/Rate events from other widgets */
-                       analysisWindow.PlayListNodeAddedEvent += OnPlayListNodeAdded;
-                       analysisWindow.PlayListNodeSelectedEvent += LoadPlaylistPlay;
-                       analysisWindow.RenderPlaylistEvent += OnRenderPlaylistEvent;
+                       Config.EventsBroker.PlaySelected += (p) => {selectedTimeNode = p;};
+                       Config.EventsBroker.OpenPlaylistEvent += OnOpenPlaylist;
+                       Config.EventsBroker.NewPlaylistEvent += OnNewPlaylist;
+                       Config.EventsBroker.SavePlaylistEvent += OnSavePlaylist;
+                       Config.EventsBroker.PlayListNodeAddedEvent += OnPlayListNodeAdded;
+                       Config.EventsBroker.PlayListNodeSelectedEvent += LoadPlaylistPlay;
+                       Config.EventsBroker.RenderPlaylistEvent += OnRenderPlaylistEvent;
                        
                        /* Handle Next/Prev from the player */
+                       analysisWindow.Player.SegmentClosedEvent += () => {selectedTimeNode = null;};
                        analysisWindow.Player.Next += () => {Next();};
                        analysisWindow.Player.Prev += () => {
                                if(selectedTimeNode is PlayListPlay)
diff --git a/LongoMatch.Services/Services/ProjectsManager.cs b/LongoMatch.Services/Services/ProjectsManager.cs
index 5073d88..7f8d39d 100644
--- a/LongoMatch.Services/Services/ProjectsManager.cs
+++ b/LongoMatch.Services/Services/ProjectsManager.cs
@@ -35,13 +35,10 @@ namespace LongoMatch.Services
 
        public class ProjectsManager
        {
-               public event OpenedProjectChangedHandler OpenedProjectChanged;
-
                IGUIToolkit guiToolkit;
                IMultimediaToolkit multimediaToolkit;
                IMainController mainController;
                IAnalysisWindow analysisWindow;
-               IProjectOptionsController projectOptionsController;
                IDatabase DB;
                
                public ProjectsManager (IGUIToolkit guiToolkit, IMultimediaToolkit multimediaToolkit,
@@ -54,12 +51,14 @@ namespace LongoMatch.Services
                }
 
                public void ConnectSignals() {
-                       mainController.NewProjectEvent += NewProject;
-                       mainController.OpenProjectEvent += OpenProject;
-                       mainController.OpenProjectIDEvent += OpenProjectID;
-                       mainController.OpenNewProjectEvent += OpenNewProject;
+                       Config.EventsBroker.NewProjectEvent += NewProject;
+                       Config.EventsBroker.OpenProjectEvent += OpenProject;
+                       Config.EventsBroker.OpenProjectIDEvent += OpenProjectID;
+                       Config.EventsBroker.OpenNewProjectEvent += OpenNewProject;
+                       Config.EventsBroker.CloseOpenedProjectEvent += () => PromptCloseProject();
+                       Config.EventsBroker.SaveProjectEvent += SaveProject;
                }
-               
+
                public Project OpenedProject {
                        set;
                        get;
@@ -86,9 +85,8 @@ namespace LongoMatch.Services
                }
                
                void EmitProjectChanged() {
-                       if (OpenedProjectChanged != null)
-                               OpenedProjectChanged (OpenedProject, OpenedProjectType, PlaysFilter,
-                                                     analysisWindow, projectOptionsController);
+                       Config.EventsBroker.EmitOpenedProjectChanged (OpenedProject, OpenedProjectType,
+                                                                     PlaysFilter, analysisWindow);
                }
                
                void RemuxOutputFile (EncodingSettings settings) {
@@ -166,11 +164,8 @@ namespace LongoMatch.Services
                        OpenProjectID (projectID);
                }
        
-               private bool SetProject(Project project, ProjectType projectType, CaptureSettings props)
+               bool SetProject(Project project, ProjectType projectType, CaptureSettings props)
                {
-                       IAnalysisWindow newAnalysiswindow;
-                       IProjectOptionsController newController;
-                       
                        if (OpenedProject != null) {
                                CloseOpenedProject(true);
                        }
@@ -179,23 +174,9 @@ namespace LongoMatch.Services
                                
                        PlaysFilter = new PlaysFilter(project);
                        guiToolkit.OpenProject (project, projectType, props, PlaysFilter,
-                                               out newAnalysiswindow, out newController);
-                       Player = newAnalysiswindow.Player;
-                       Capturer = newAnalysiswindow.Capturer;
-                       if (newAnalysiswindow != analysisWindow) {
-                               analysisWindow = newAnalysiswindow;
-                               analysisWindow.CloseOpenedProjectEvent += () => {
-                                       if (projectType == ProjectType.FileProject) {
-                                               CloseOpenedProject (false);
-                                       } else {
-                                               SaveCaptureProject (OpenedProject);}
-                                       };
-                       }
-                       if (newController != projectOptionsController) {
-                               projectOptionsController = newController;
-                               projectOptionsController.CloseOpenedProjectEvent += () => {PromptCloseProject 
();};
-                               projectOptionsController.SaveProjectEvent += SaveProject;
-                       }
+                                               out analysisWindow);
+                       Player = analysisWindow.Player;
+                       Capturer = analysisWindow.Capturer;
                        OpenedProject = project;
                        OpenedProjectType = projectType;
 
@@ -265,7 +246,7 @@ namespace LongoMatch.Services
                        fChooser.Destroy();
                }*/
 
-               private bool PromptCloseProject() {
+               bool PromptCloseProject() {
                        if(OpenedProject == null)
                                return true;
 
@@ -296,10 +277,9 @@ namespace LongoMatch.Services
                                        return false;
                                }
                        }
-
                }
 
-               private void CloseOpenedProject (bool save) {
+               void CloseOpenedProject (bool save) {
                        if(OpenedProject == null)
                                return;
                                
@@ -353,21 +333,21 @@ namespace LongoMatch.Services
                        guiToolkit.CreateNewProject ();
                }
                
-               protected void OpenNewProject (Project project, ProjectType projectType,
+               void OpenNewProject (Project project, ProjectType projectType,
                                               CaptureSettings captureSettings)
                {
                        if (project != null)
                                SetProject(project, projectType, captureSettings);
                }
                
-               protected void OpenProject() {
+               void OpenProject() {
                        if (!PromptCloseProject ()) {
                                return;
                        }
                        guiToolkit.SelectProject(DB.GetAllProjects());
                }
                
-               protected void OpenProjectID (Guid projectID) {
+               void OpenProjectID (Guid projectID) {
                        Project project = null;
                        
                        project = DB.GetProject(projectID);
diff --git a/LongoMatch.Services/Services/RenderingJobsManager.cs 
b/LongoMatch.Services/Services/RenderingJobsManager.cs
index d9c6f80..d8e73eb 100644
--- a/LongoMatch.Services/Services/RenderingJobsManager.cs
+++ b/LongoMatch.Services/Services/RenderingJobsManager.cs
@@ -49,7 +49,7 @@ namespace LongoMatch.Services
                        pendingJobs = new List<Job>();
                        stateBar.Cancel += (sender, e) => CancelCurrentJob();
                        stateBar.ManageJobs += (sender, e) => ManageJobs();
-                       guiToolkit.MainController.ConvertVideoFilesEvent += delegate(List<MediaFile> 
inputFiles, EncodingSettings encSettings) {
+                       Config.EventsBroker.ConvertVideoFilesEvent += (inputFiles, encSettings) => {
                                ConversionJob job = new ConversionJob(inputFiles, encSettings);
                                AddJob (job);
                        };; 
diff --git a/LongoMatch.Services/Services/ToolsManager.cs b/LongoMatch.Services/Services/ToolsManager.cs
index 7668152..d7357b6 100644
--- a/LongoMatch.Services/Services/ToolsManager.cs
+++ b/LongoMatch.Services/Services/ToolsManager.cs
@@ -35,35 +35,37 @@ namespace LongoMatch.Services {
                IMultimediaToolkit multimediaToolkit;
                
                public ToolsManager (IGUIToolkit guiToolkit, IMultimediaToolkit multimediaToolkit,
-                                    ProjectsManager projectsManager,
                                     TemplatesService templatesService)
                {
                        this.guiToolkit = guiToolkit;
                        this.multimediaToolkit = multimediaToolkit;
                        this.templatesService = templatesService;
-                       projectsManager.OpenedProjectChanged += (project, projectType, filter, 
analysisWindow, projectOptions) => {
-                               this.openedProject = project;
+                       Config.EventsBroker.OpenedProjectChanged += (pr, pt, f, a) => {
+                               this.openedProject = pr;
                        };
                        
-                       guiToolkit.MainController.EditPreferencesEvent += () => {
+                       Config.EventsBroker.EditPreferencesEvent += () => {
                                guiToolkit.OpenPreferencesEditor();
                        };
-                       guiToolkit.MainController.ManageCategoriesEvent += () => {
+                       
+                       Config.EventsBroker.ManageCategoriesEvent += () => {
                                guiToolkit.OpenCategoriesTemplatesManager ();
                        };
-                       guiToolkit.MainController.ManageTeamsEvent += () => {
+                       
+                       Config.EventsBroker.ManageTeamsEvent += () => {
                                guiToolkit.OpenTeamsTemplatesManager ();
                        };
-                       guiToolkit.MainController.ManageProjectsEvent += () => {
+                       
+                       Config.EventsBroker.ManageProjectsEvent += () => {
                                guiToolkit.OpenProjectsManager(this.openedProject);
                        };
                        
-                       guiToolkit.MainController.ImportProjectEvent += ImportProject;
-                       guiToolkit.MainController.ExportProjectEvent += ExportProject;
+                       Config.EventsBroker.ImportProjectEvent += ImportProject;
+                       Config.EventsBroker.ExportProjectEvent += ExportProject;
                }
                
-               void ExportProject() {
-                       if (openedProject == null) {
+               void ExportProject (Project project) {
+                       if (project == null) {
                                Log.Warning("Opened project is null and can't be exported");
                        }
                        
@@ -76,7 +78,7 @@ namespace LongoMatch.Services {
                        System.IO.Path.ChangeExtension (filename, Constants.PROJECT_EXT);
                        
                        try {
-                               Project.Export (openedProject, filename);
+                               Project.Export (project, filename);
                                guiToolkit.InfoMessage (Catalog.GetString("Project exported successfully"));
                        } catch (Exception ex) {
                                guiToolkit.ErrorMessage (Catalog.GetString("Error exporting project"));
diff --git a/LongoMatch/Main.cs b/LongoMatch/Main.cs
index fd30c0c..0203d9e 100644
--- a/LongoMatch/Main.cs
+++ b/LongoMatch/Main.cs
@@ -63,6 +63,7 @@ namespace LongoMatch
                                AddinsManager manager = new AddinsManager(Config.PluginsConfigDir, 
Config.PluginsDir);
                                manager.LoadConfigModifierAddins();
                            Config.DrawingToolkit = new CairoBackend ();
+                           Config.EventsBroker = new EventsBroker ();
                            IMultimediaToolkit multimediaToolkit = new MultimediaToolkit();
                            Config.MultimediaToolkit = multimediaToolkit;
                            GUIToolkit guiToolkit = new GUIToolkit(version);


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