[longomatch] Add a new widget for coding



commit 646e2acf5b0a20d9729102b082468611bf383d0d
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Mon May 19 14:43:05 2014 +0200

    Add a new widget for coding

 LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs  |    3 +-
 LongoMatch.GUI/Gui/Component/AnalysisComponent.cs  |  341 ++++++--------------
 .../Gui/Component/AnalysisTemplateEditor.cs        |    2 +-
 LongoMatch.GUI/Gui/Component/ButtonsWidget.cs      |  106 ++++---
 LongoMatch.GUI/Gui/Component/CodingWidget.cs       |  121 +++++++
 LongoMatch.GUI/Gui/Component/Timeline.cs           |    2 +-
 LongoMatch.GUI/LongoMatch.GUI.mdp                  |    2 +
 .../LongoMatch.Gui.Component.AnalysisComponent.cs  |   93 ++----
 .../LongoMatch.Gui.Component.CodingWidget.cs       |  100 ++++++
 .../gtk-gui/LongoMatch.Gui.Component.Timeline.cs   |  142 +++-----
 .../gtk-gui/LongoMatch.Gui.MainWindow.cs           |    2 +-
 .../LongoMatch.Gui.Panel.ProjectsManagerPanel.cs   |    1 -
 .../gtk-gui/LongoMatch.Gui.Panel.WelcomePanel.cs   |    1 -
 LongoMatch.GUI/gtk-gui/gui.stetic                  |  254 ++++++++-------
 LongoMatch.GUI/gtk-gui/objects.xml                 |    5 +
 LongoMatch.Services/Services/EventsManager.cs      |    2 +-
 16 files changed, 621 insertions(+), 556 deletions(-)
---
diff --git a/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs 
b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
index 15d7b74..3f255ba 100644
--- a/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
@@ -67,11 +67,10 @@ namespace LongoMatch.Interfaces.GUI
                void CloseOpenedProject ();
                void AddPlay(Play play);
                void UpdateSelectedPlay (Play play);
-               void UpdateCategories (Categories categories);
+               void UpdateCategories ();
                void DeletePlays (List<Play> plays);
                
                bool Fullscreen {set;}
-               bool WidgetsVisible {set;}
                VideoAnalysisMode AnalysisMode {set;}
                
                IPlayerBin Player{get;}
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
index 17c24ad..464f93f 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
@@ -71,7 +71,6 @@ namespace LongoMatch.Gui.Component
 
                static Project openedProject;
                ProjectType projectType;
-               TimeNode selectedTimeNode;              
                bool detachedPlayer;
                Gtk.Window playerWindow;
                VideoAnalysisMode analysisMode;
@@ -80,6 +79,7 @@ namespace LongoMatch.Gui.Component
                {
                        this.Build ();
                        projectType = ProjectType.None;
+                       playsSelection.Visible = true;
 
                        playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
                        playercapturer.Tick += OnTick;
@@ -87,11 +87,8 @@ namespace LongoMatch.Gui.Component
                        playercapturer.Logo = System.IO.Path.Combine(Config.ImagesDir,"background.png");
                        playercapturer.CaptureFinished += (sender, e) => {
                                EmitCloseOpenedProject();
-                               (downbox[videowidgetsbox] as Box.BoxChild).Expand = true;
-                               (downbox[buttonswidget] as Box.BoxChild).Expand = false;
                        };
                        
-                       buttonswidget.Mode = TagMode.Predifined;
                        ConnectSignals();
                        AnalysisMode = VideoAnalysisMode.PredefinedTagging;
                        
@@ -128,93 +125,46 @@ namespace LongoMatch.Gui.Component
                        }
                }
                
-               public bool WidgetsVisible {
-                       set {
-                               if(openedProject == null)
-                                       return;
-                       
-                               leftbox.Visible = value;
-                               timeline.Visible = value && AnalysisMode == VideoAnalysisMode.Timeline;
-                               buttonswidget.Visible = value && (AnalysisMode == 
VideoAnalysisMode.ManualTagging ||
-                                                                 AnalysisMode == 
VideoAnalysisMode.PredefinedTagging);
-                               if(value) {
-                                       SetTagsBoxVisibility (false);
-                               } else {
-                                       if (selectedTimeNode != null)
-                                               SetTagsBoxVisibility (true);
-                               }
-                       }
-               }
-               
                public VideoAnalysisMode AnalysisMode {
                        set {
-                               buttonswidget.Visible = (value == VideoAnalysisMode.ManualTagging) ||
-                                       (value == VideoAnalysisMode.PredefinedTagging);
-                               timeline.Visible = value == VideoAnalysisMode.Timeline;
-                               if(value == VideoAnalysisMode.ManualTagging)
-                                       buttonswidget.Mode = TagMode.Free;
-                               else if (value == VideoAnalysisMode.ManualTagging)
-                                       buttonswidget.Mode = TagMode.Predifined;
-                               analysisMode = value;
-                               timeline.Visible = true;
-                       }
-                       protected get {
-                               return analysisMode;
+                               codingwidget.AnalysisMode = value;
                        }
                }
                
                public void AddPlay(Play play) {
                        playsSelection.AddPlay(play);
-                       timeline.AddPlay(play);
-                       timeline.QueueDraw();
+                       codingwidget.AddPlay (play);
                }
                
                public void UpdateSelectedPlay (Play play) {
-                       selectedTimeNode = play;
-                       timeline.SelectedTimeNode = play;
+                       codingwidget.SelectedPlay = play;
                        postagger.LoadPlay (play, false);
-                       SetTagsBoxVisibility (true);
                        notes.Play= play;
                }
 
-               public void UpdateCategories (Categories categories) {
-                       buttonswidget.Categories = openedProject.Categories;
+               public void UpdateCategories () {
+                       codingwidget.UpdateCategories ();
                }
                
                public void DeletePlays (List<Play> plays) {
                        playsSelection.RemovePlays(plays);
-                       timeline.RemovePlays(plays);
-                       timeline.QueueDraw();
+                       codingwidget.DeletePlays (plays);
                }
                
                private void ConnectSignals() {
                        /* Adding Handlers for each event */
 
-                       /* Connect new mark event */
-                       buttonswidget.NewMarkEvent += EmitNewTag;;
-                       buttonswidget.NewMarkStartEvent += EmitNewTagStart;
-                       
-                       buttonswidget.NewMarkStopEvent += EmitNewTagStop;
-                       buttonswidget.NewMarkCancelEvent += EmitNewTagCancel;
-                       timeline.NewTagAtPosEvent += EmitNewTagAtPos;
-
-                       /* Connect TimeNodeChanged events */
-                       timeline.TimeNodeChanged += EmitTimeNodeChanged;
                        notes.TimeNodeChanged += EmitTimeNodeChanged;
 
-                       /* Connect TimeNodeDeleted events */
                        playsSelection.PlaysDeleted += EmitPlaysDeleted;
-                       timeline.TimeNodeDeleted += EmitPlaysDeleted;
-
-                       /* Connect TimeNodeSelected events */
-                       playsSelection.PlaySelected += OnTimeNodeSelected;
-                       timeline.TimeNodeSelected += OnTimeNodeSelected;
-                       
-                       /* Connect TimeNodeChangedEvent */
+                       playsSelection.PlaySelected += EmitPlaySelected;
                        playsSelection.TimeNodeChanged += EmitTimeNodeChanged;
-
-                       /* Connect PlayCategoryChanged events */
                        playsSelection.PlayCategoryChanged += EmitPlayCategoryChanged;
+                       playsSelection.PlayListNodeAdded += EmitPlayListNodeAdded;
+                       playsSelection.DuplicatePlay += EmitDuplicatePlay;
+                       playsSelection.TagPlay += EmitTagPlay;
+                       playsSelection.SnapshotSeries += EmitSnapshotSeries;
+                       playsSelection.RenderPlaylist += EmitRenderPlaylist;
 
                        /* Connect playlist events */
 //                     playlist.PlayListNodeSelected += EmitPlayListNodeSelected;
@@ -222,24 +172,6 @@ namespace LongoMatch.Gui.Component
 //                     playlist.OpenPlaylistEvent += EmitOpenPlaylist;
 //                     playlist.SavePlaylistEvent += EmitSavePlaylist;
 
-                       /* Connect PlayListNodeAdded events */
-                       playsSelection.PlayListNodeAdded += OnPlayListNodeAdded;
-                       timeline.PlayListNodeAdded += OnPlayListNodeAdded;
-
-                       /* Connect duplicate plays */
-                       playsSelection.DuplicatePlay += EmitDuplicatePlay;
-
-                       /* Connect tags events */
-                       playsSelection.TagPlay += EmitTagPlay;
-                       timeline.TagPlay += EmitTagPlay;
-
-                       /* Connect SnapshotSeries events */
-                       playsSelection.SnapshotSeries += EmitSnapshotSeries;
-                       timeline.SnapshotSeries += EmitSnapshotSeries;
-
-                       playsSelection.RenderPlaylist += EmitRenderPlaylist;
-                       timeline.RenderPlaylist += EmitRenderPlaylist;
-                       
                        playercapturer.Error += OnMultimediaError;
                        playercapturer.SegmentClosedEvent += OnSegmentClosedEvent;
                        
@@ -269,10 +201,6 @@ namespace LongoMatch.Gui.Component
                                
                                playercapturer.Reparent(box);
                                videowidgetsbox.Visible = false;
-                               if (openedProject != null) {
-                                       buttonswidget.Visible = true;
-                                       timeline.Visible = true;
-                               }
                        } else {
                                Log.Debug("Attaching player again");
                                videowidgetsbox.Visible = true;
@@ -296,7 +224,6 @@ namespace LongoMatch.Gui.Component
                        bool isLive = false;
                        
                        if(projectType == ProjectType.FileProject) {
-                               timeline.SetProject (project, filter);
                                playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
                        } else {
                                isLive = true;
@@ -307,64 +234,98 @@ namespace LongoMatch.Gui.Component
                                }
                        }
                        
-                       if(projectType == ProjectType.FakeCaptureProject) {
-#if OS_TYPE_LINUX
-                               /* This deadlocks in Windows and OS X */
-                               (downbox[videowidgetsbox] as Box.BoxChild).Expand = false;
-#endif
-                               (downbox[buttonswidget] as Box.BoxChild).Expand = true;
-                       }
+// FIXME
+//                     if(projectType == ProjectType.FakeCaptureProject) {
+//#if OS_TYPE_LINUX
+//                             /* This deadlocks in Windows and OS X */
+//                             (downbox[videowidgetsbox] as Box.BoxChild).Expand = false;
+//#endif
+//                             (downbox[buttonswidget] as Box.BoxChild).Expand = true;
+//                     }
                        
                        openedProject = project;
                        this.projectType = projectType;
                        
-                       playsSelection.SetProject(project, isLive, filter);
-                       buttonswidget.Categories = project.Categories;
-                       ShowWidgets ();
+                       codingwidget.SetProject (project, isLive, filter, this);
+                       playsSelection.SetProject (project, isLive, filter);
                        postagger.LoadBackgrounds (openedProject.Categories.FieldBackground,
                                                   openedProject.Categories.HalfFieldBackground,
                                                   openedProject.Categories.GoalBackground);
-                       ShowWidgets();
                }
                
-               void SetTagsBoxVisibility (bool visible) {
-                       if (visible) {
-                               righthbox.Visible = true;
-                               tagsvbox.Visible = true;
-                       } else {
-                               tagsvbox.Visible = false;
-                       }
+               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);
                }
                
-               private void ResetGUI() {
-                       playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
-                       ClearWidgets();
-                       HideWidgets();
-                       SetTagsBoxVisibility (false);
-                       selectedTimeNode = null;
-                       if (detachedPlayer)
-                               DetachPlayer(false);
+               public void EmitNewTagCancel(Category category) {
+                       if (NewTagCancelEvent != null)
+                               NewTagCancelEvent (category);
                }
                
-               private void ShowWidgets() {
-                       leftbox.Show();
-                       if(analysisMode == VideoAnalysisMode.ManualTagging ||
-                          analysisMode == VideoAnalysisMode.PredefinedTagging) {
-                               buttonswidget.Show();
-                       } else if (analysisMode == VideoAnalysisMode.Timeline) {
-                               timeline.Show();
-                       }
+               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);
                }
 
-               private void HideWidgets() {
-                       leftbox.Hide();
-                       SetTagsBoxVisibility (false);
-                       buttonswidget.Hide();
-                       timeline.Hide();
+               public void EmitRenderPlaylist(IPlayList playlist) {
+                       if (RenderPlaylistEvent != null)
+                               RenderPlaylistEvent(playlist);
+               }
+               
+               public void EmitPlaySelected(Play play)
+               {
+                       if (PlaySelectedEvent != null)
+                               PlaySelectedEvent(play);
                }
 
-               private void ClearWidgets() {
-                       buttonswidget.Categories = null;
+               public void EmitPlaysDeleted(List<Play> plays)
+               {
+                       if (PlaysDeletedEvent != null)
+                               PlaysDeletedEvent(plays);
+               }
+               
+               
+               void ResetGUI() {
+                       playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
+                       ClearWidgets();
+                       if (detachedPlayer)
+                               DetachPlayer(false);
+               }
+               
+               void ClearWidgets() {
                        playsSelection.Clear();
                }
                
@@ -415,29 +376,20 @@ namespace LongoMatch.Gui.Component
                        return ret;
                }
 
-               protected virtual void OnTimeNodeSelected(Play play)
-               {
-                       SetTagsBoxVisibility (true);
-                       if (PlaySelectedEvent != null)
-                               PlaySelectedEvent(play);
-               }
-
-               protected virtual void OnSegmentClosedEvent()
+               void OnSegmentClosedEvent()
                {
-                       SetTagsBoxVisibility (false);
-                       timeline.SelectedTimeNode = null;
-                       selectedTimeNode = null;
+                       codingwidget.SelectedPlay = null;
                }
                
-               protected virtual void OnTick (Time currentTime, Time streamLength,
+               void OnTick (Time currentTime, Time streamLength,
                        double currentPosition)
                {
-                       if (currentTime.MSeconds != 0 && timeline != null && openedProject != null) {
-                               timeline.CurrentTime = currentTime;
-                       }
+                       //if (currentTime.MSeconds != 0 && timeline != null && openedProject != null) {
+                       //      timeline.CurrentTime = currentTime;
+                       //}
                }
                
-               protected virtual void OnMultimediaError(string message)
+               void OnMultimediaError(string message)
                {
                        MessagesHelpers.ErrorMessage (this,
                                Catalog.GetString("The following error happened and" +
@@ -445,128 +397,39 @@ namespace LongoMatch.Gui.Component
                        EmitCloseOpenedProject ();
                }
                
-               private void EmitCloseOpenedProject () {
+               void EmitCloseOpenedProject () {
                        if (CloseOpenedProjectEvent != null)
                                CloseOpenedProjectEvent ();
                }
                
-               private void EmitPlaySelected(Play play)
-               {
-                       if (PlaySelectedEvent != null)
-                               PlaySelectedEvent(play);
-               }
-
-               private void EmitTimeNodeChanged(TimeNode tNode, object val)
-               {
-                       if (TimeNodeChanged != null)
-                               TimeNodeChanged(tNode, val);
-               }
-
-               private void EmitPlaysDeleted(List<Play> plays)
-               {
-                       if (PlaysDeletedEvent != null)
-                               PlaysDeletedEvent(plays);
-               }
-               
-               protected virtual void EmitPlayCategoryChanged(Play play, Category cat)
+               void EmitPlayCategoryChanged(Play play, Category cat)
                {
                        if(PlayCategoryChanged != null)
                                PlayCategoryChanged(play, cat);
                }
 
-               private void OnPlayListNodeAdded(List<Play> plays)
-               {
-                       if (PlayListNodeAddedEvent != null)
-                               PlayListNodeAddedEvent(plays);
-               }
-
-               private void EmitPlayListNodeSelected(PlayListPlay plNode)
+               void EmitPlayListNodeSelected(PlayListPlay plNode)
                {
                        if (PlayListNodeSelectedEvent != null)
                                PlayListNodeSelectedEvent(plNode);
                }
 
-               private void EmitSnapshotSeries(Play play) {
-                       if (SnapshotSeriesEvent != null)
-                               SnapshotSeriesEvent (play);
-               }
-
-               private void EmitNewTagAtPos(Category category, Time pos) {
-                       if (NewTagAtPosEvent != null)
-                               NewTagAtPosEvent(category, pos);
-               }
-
-               private void EmitNewTag(Category category) {
-                       if (NewTagEvent != null)
-                               NewTagEvent(category);
-               }
-
-               private void EmitNewTagStart(Category category) {
-                       if (NewTagStartEvent != null)
-                               NewTagStartEvent (category);
-               }
-
-               private void EmitNewTagStop(Category category) {
-                       if (NewTagStopEvent != null)
-                               NewTagStopEvent (category);
-               }
-               
-               private void EmitNewTagCancel(Category category) {
-                       if (NewTagCancelEvent != null)
-                               NewTagCancelEvent (category);
-               }
-               
-               private void EmitRenderPlaylist(IPlayList playlist) {
-                       if (RenderPlaylistEvent != null)
-                               RenderPlaylistEvent(playlist);
-               }
-               
-               private void EmitTagPlay(Play play) {
-                       if (TagPlayEvent != null)
-                               TagPlayEvent (play);
-               }
-               
-               private void EmitNewPlaylist() {
+               void EmitNewPlaylist() {
                        if (NewPlaylistEvent != null)
                                NewPlaylistEvent();
                }
                
-               private void EmitOpenPlaylist() {
+               void EmitOpenPlaylist() {
                        if (OpenPlaylistEvent != null)
                                OpenPlaylistEvent();
                }
                
-               private void EmitSavePlaylist() {
+               void EmitSavePlaylist() {
                        if (SavePlaylistEvent != null)
                                SavePlaylistEvent();
                }
                
-               private void EmitGameUnitEvent(GameUnit gameUnit, GameUnitEventType eType) {
-                       if (GameUnitEvent != null)
-                               GameUnitEvent(gameUnit, eType);
-               }
-               
-               private void EmitUnitAdded(GameUnit gameUnit, int frame) {
-                       if (UnitAdded != null)
-                               UnitAdded(gameUnit, frame);
-               }
-               
-               private void EmitUnitDeleted(GameUnit gameUnit, List<TimelineNode> units) {
-                       if (UnitDeleted != null)
-                               UnitDeleted(gameUnit, units);
-               }
-               
-               private void EmitUnitSelected(GameUnit gameUnit, TimelineNode unit) {
-                       if (UnitSelected != null)
-                               UnitSelected(gameUnit, unit);
-               }
-               
-               private void EmitUnitChanged(GameUnit gameUnit, TimelineNode unit, Time time) {
-                       if (UnitChanged != null)
-                               UnitChanged(gameUnit, unit, time);
-               }
-               
-               private void EmitKeyPressed(object sender, int key, int modifier) {
+               void EmitKeyPressed(object sender, int key, int modifier) {
                        if (KeyPressed != null)
                                KeyPressed(sender, key, modifier);
                }
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
index 2458ae3..36903e8 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
@@ -35,7 +35,7 @@ namespace LongoMatch.Gui.Component
 
                public Categories Template {
                        set {
-                               buttonswidget.Categories = value;
+                               buttonswidget.UpdateCategories (value);
                        }
                }
                
diff --git a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
index 118554e..9c7a941 100644
--- a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
@@ -39,7 +39,6 @@ namespace LongoMatch.Gui.Component
                public event NewTagStopHandler NewMarkStopEvent;
                public event NewTagCancelHandler NewMarkCancelEvent;
 
-               Categories categories;
                TagMode tagMode;
                Dictionary<ButtonTagger, Category> buttonsDic;
 
@@ -49,6 +48,13 @@ namespace LongoMatch.Gui.Component
                        buttonsDic = new Dictionary<ButtonTagger, Category>();
                        Mode = TagMode.Predifined;
                }
+               
+               public Project Project {
+                       set {
+                               if (value != null)
+                                       UpdateCategories (value.Categories);
+                       }
+               }
 
                public TagMode Mode {
                        set {
@@ -66,58 +72,56 @@ namespace LongoMatch.Gui.Component
                                }
                        }
                }
+               
+               public void UpdateCategories (Categories categories) {
+                       foreach(Widget w in table1.AllChildren) {
+                               table1.Remove(w);
+                               w.Destroy();
+                       }
+                       
+                       if (categories == null)
+                               return;
 
-               public Categories Categories {
-                       set {
-                               foreach(Widget w in table1.AllChildren) {
-                                       table1.Remove(w);
-                                       w.Destroy();
-                               }
-                               categories = value;
-                               if(value == null)
-                                       return;
-
-                               buttonsDic.Clear();
-                               int sectionsCount = value.Count;
-
-                               table1.NColumns =(uint) 10;
-                               table1.NRows =(uint)(sectionsCount/10);
-
-                               for(int i=0; i<sectionsCount; i++) {
-                                       Category cat = value[i];
-                                       ButtonTagger b = new ButtonTagger (cat);
+                       buttonsDic.Clear();
+                       int sectionsCount = categories.Count;
+                       
+                       table1.NColumns =(uint) 10;
+                       table1.NRows =(uint)(sectionsCount/10);
+                       
+                       for(int i=0; i<sectionsCount; i++) {
+                               Category cat = categories[i];
+                               ButtonTagger b = new ButtonTagger (cat);
                                        b.NewTag += (category) => {
-                                               if (NewMarkEvent != null) {
-                                                       NewMarkEvent (category);
-                                               }
-                                       };
-                                       b.NewTagStart += (category) => {
-                                               if (NewMarkStartEvent != null) {
-                                                       NewMarkStartEvent (category);
-                                               }
-                                       };
-                                       b.NewTagStop += (category) => {
-                                               if (NewMarkStopEvent != null) {
-                                                       NewMarkStopEvent (category);
-                                               }
-                                       };
-                                       b.NewTagCancel += (category) => {
-                                               if (NewMarkCancelEvent != null) {
-                                                       NewMarkCancelEvent (category);
-                                               }
-                                       };
-                                       b.Mode = tagMode;
-
-                                       uint row_top =(uint)(i/table1.NColumns);
-                                       uint row_bottom = (uint) row_top+1 ;
-                                       uint col_left = (uint) i%table1.NColumns;
-                                       uint col_right = (uint) col_left+1 ;
-
-                                       table1.Attach(b,col_left,col_right,row_top,row_bottom);
-
-                                       buttonsDic.Add(b, cat);
-                                       b.Show();
-                               }
+                                       if (NewMarkEvent != null) {
+                                               NewMarkEvent (category);
+                                       }
+                               };
+                               b.NewTagStart += (category) => {
+                                       if (NewMarkStartEvent != null) {
+                                               NewMarkStartEvent (category);
+                                       }
+                               };
+                               b.NewTagStop += (category) => {
+                                       if (NewMarkStopEvent != null) {
+                                               NewMarkStopEvent (category);
+                                       }
+                               };
+                               b.NewTagCancel += (category) => {
+                                       if (NewMarkCancelEvent != null) {
+                                               NewMarkCancelEvent (category);
+                                       }
+                               };
+                               b.Mode = tagMode;
+                               
+                               uint row_top =(uint)(i/table1.NColumns);
+                               uint row_bottom = (uint) row_top+1 ;
+                               uint col_left = (uint) i%table1.NColumns;
+                               uint col_right = (uint) col_left+1 ;
+                               
+                               table1.Attach(b,col_left,col_right,row_top,row_bottom);
+                               
+                               buttonsDic.Add(b, cat);
+                               b.Show();
                        }
                }
        }
diff --git a/LongoMatch.GUI/Gui/Component/CodingWidget.cs b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
new file mode 100644
index 0000000..1997ab6
--- /dev/null
+++ b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
@@ -0,0 +1,121 @@
+//
+//  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 LongoMatch.Store;
+using LongoMatch.Common;
+using System.Collections.Generic;
+
+namespace LongoMatch.Gui.Component
+{
+       [System.ComponentModel.ToolboxItem(true)]
+       public partial class CodingWidget : Gtk.Bin
+       {
+               AnalysisComponent parent;
+               VideoAnalysisMode analysisMode;
+               Project project;
+               
+               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;
+               }
+               
+               public void SetProject (Project project, bool isLive, PlaysFilter filter,
+                                       AnalysisComponent parent) {
+                       this.parent = parent;
+                       this.project = project; 
+                       autoTaggingMode.Active = true;
+                       timeline.Visible = false;
+                       buttonswidget.Visible = true;
+                       buttonswidget.Project = project;
+                       timeline.SetProject (project, filter);
+               }
+               
+               public AnalysisComponent AnalysisComponentParent {
+                       set;
+                       protected get;
+               }
+               
+               public void AddPlay(Play play) {
+                       timeline.AddPlay(play);
+               }
+               
+               public void DeletePlays (List<Play> plays) {
+                       timeline.RemovePlays(plays);
+               }
+               
+               public Play SelectedPlay {
+                       set {
+                               timeline.SelectedTimeNode = value;
+                       }
+               }
+               
+               public void UpdateCategories () {
+                       buttonswidget.Project = project;
+               }
+               
+               public VideoAnalysisMode AnalysisMode {
+                       set {
+                               buttonswidget.Visible = (value == VideoAnalysisMode.ManualTagging) ||
+                                       (value == VideoAnalysisMode.PredefinedTagging);
+                               timeline.Visible = value == VideoAnalysisMode.Timeline;
+                               if(value == VideoAnalysisMode.ManualTagging)
+                                       buttonswidget.Mode = TagMode.Free;
+                               else if (value == VideoAnalysisMode.ManualTagging)
+                                       buttonswidget.Mode = TagMode.Predifined;
+                               analysisMode = value;
+                               timeline.Visible = true;
+                       }
+                       protected get {
+                               return analysisMode;
+                       }
+               }
+               
+               public bool WidgetsVisible {
+                       set {
+                               timeline.Visible = value && AnalysisMode == VideoAnalysisMode.Timeline;
+                               buttonswidget.Visible = value && (AnalysisMode == 
VideoAnalysisMode.ManualTagging ||
+                                                                 AnalysisMode == 
VideoAnalysisMode.PredefinedTagging);
+
+                       }
+               }
+               
+               void HandleViewToggled (object sender, EventArgs e)
+               {
+                       buttonswidget.Visible = autoTaggingMode.Active;
+                       timeline.Visible = timelineMode.Active;
+               }
+       }
+
+}
+
diff --git a/LongoMatch.GUI/Gui/Component/Timeline.cs b/LongoMatch.GUI/Gui/Component/Timeline.cs
index d65550a..ca87d2d 100644
--- a/LongoMatch.GUI/Gui/Component/Timeline.cs
+++ b/LongoMatch.GUI/Gui/Component/Timeline.cs
@@ -56,7 +56,7 @@ namespace LongoMatch.Gui.Component
                        this.labels = new CategoriesLabels (new WidgetWrapper (labelsarea));
                        timerulearea.HeightRequest = TIMERULE_HEIGHT;
                        labelsarea.WidthRequest = LongoMatch.Drawing.Common.CATEGORY_WIDTH;
-                       alignment1.HeightRequest = TIMERULE_HEIGHT;
+                       hbox1.HeightRequest = TIMERULE_HEIGHT;
                        scrolledwindow1.Vadjustment.ValueChanged += HandleScrollEvent;
                        scrolledwindow1.Hadjustment.ValueChanged += HandleScrollEvent;
                }
diff --git a/LongoMatch.GUI/LongoMatch.GUI.mdp b/LongoMatch.GUI/LongoMatch.GUI.mdp
index 642c6d5..179a176 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.mdp
+++ b/LongoMatch.GUI/LongoMatch.GUI.mdp
@@ -188,6 +188,8 @@
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Panel.PreferencesPanel.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/Timeline.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.Timeline.cs" />
+    <File subtype="Code" buildaction="Compile" name="Gui/Component/CodingWidget.cs" />
+    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="atk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
index e831b6e..6426852 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
@@ -4,9 +4,9 @@ namespace LongoMatch.Gui.Component
 {
        public partial class AnalysisComponent
        {
+               private global::Gtk.UIManager UIManager;
                private global::Gtk.VPaned vpaned1;
                private global::Gtk.HPaned hpaned;
-               private global::Gtk.VBox leftbox;
                private global::LongoMatch.Gui.Component.PlaysSelectionWidget playsSelection;
                private global::Gtk.HPaned hpaned1;
                private global::Gtk.VBox downbox;
@@ -19,15 +19,16 @@ namespace LongoMatch.Gui.Component
                private global::Gtk.Alignment GtkAlignment22;
                private global::LongoMatch.Gui.Component.NotesWidget notes;
                private global::Gtk.Label GtkLabel31;
-               private global::Gtk.HBox hbox7;
-               private global::LongoMatch.Gui.Component.ButtonsWidget buttonswidget;
-               private global::LongoMatch.Gui.Component.Timeline timeline;
+               private global::LongoMatch.Gui.Component.CodingWidget codingwidget;
                
                protected virtual void Build ()
                {
                        global::Stetic.Gui.Initialize (this);
                        // Widget LongoMatch.Gui.Component.AnalysisComponent
-                       global::Stetic.BinContainer.Attach (this);
+                       Stetic.BinContainer w1 = global::Stetic.BinContainer.Attach (this);
+                       this.UIManager = new global::Gtk.UIManager ();
+                       global::Gtk.ActionGroup w2 = new global::Gtk.ActionGroup ("Default");
+                       this.UIManager.InsertActionGroup (w2, 0);
                        this.Name = "LongoMatch.Gui.Component.AnalysisComponent";
                        // Container child 
LongoMatch.Gui.Component.AnalysisComponent.Gtk.Container+ContainerChild
                        this.vpaned1 = new global::Gtk.VPaned ();
@@ -38,26 +39,19 @@ namespace LongoMatch.Gui.Component
                        this.hpaned = new global::Gtk.HPaned ();
                        this.hpaned.CanFocus = true;
                        this.hpaned.Name = "hpaned";
-                       this.hpaned.Position = 290;
+                       this.hpaned.Position = 261;
                        // Container child hpaned.Gtk.Paned+PanedChild
-                       this.leftbox = new global::Gtk.VBox ();
-                       this.leftbox.Name = "leftbox";
-                       this.leftbox.Spacing = 6;
-                       // Container child leftbox.Gtk.Box+BoxChild
                        this.playsSelection = new global::LongoMatch.Gui.Component.PlaysSelectionWidget ();
                        this.playsSelection.Events = ((global::Gdk.EventMask)(256));
                        this.playsSelection.Name = "playsSelection";
-                       this.leftbox.Add (this.playsSelection);
-                       global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.leftbox 
[this.playsSelection]));
-                       w1.Position = 0;
-                       this.hpaned.Add (this.leftbox);
-                       global::Gtk.Paned.PanedChild w2 = ((global::Gtk.Paned.PanedChild)(this.hpaned 
[this.leftbox]));
-                       w2.Resize = false;
+                       this.hpaned.Add (this.playsSelection);
+                       global::Gtk.Paned.PanedChild w3 = ((global::Gtk.Paned.PanedChild)(this.hpaned 
[this.playsSelection]));
+                       w3.Resize = false;
                        // Container child hpaned.Gtk.Paned+PanedChild
                        this.hpaned1 = new global::Gtk.HPaned ();
                        this.hpaned1.CanFocus = true;
                        this.hpaned1.Name = "hpaned1";
-                       this.hpaned1.Position = 1015;
+                       this.hpaned1.Position = 1046;
                        // Container child hpaned1.Gtk.Paned+PanedChild
                        this.downbox = new global::Gtk.VBox ();
                        this.downbox.Name = "downbox";
@@ -72,15 +66,15 @@ namespace LongoMatch.Gui.Component
                        this.playercapturer.Name = "playercapturer";
                        this.playercapturer.Detached = false;
                        this.videowidgetsbox.Add (this.playercapturer);
-                       global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.videowidgetsbox 
[this.playercapturer]));
-                       w3.Position = 0;
-                       this.downbox.Add (this.videowidgetsbox);
-                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.downbox 
[this.videowidgetsbox]));
+                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.videowidgetsbox 
[this.playercapturer]));
                        w4.Position = 0;
+                       this.downbox.Add (this.videowidgetsbox);
+                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.downbox 
[this.videowidgetsbox]));
+                       w5.Position = 0;
                        this.hpaned1.Add (this.downbox);
-                       global::Gtk.Paned.PanedChild w5 = ((global::Gtk.Paned.PanedChild)(this.hpaned1 
[this.downbox]));
-                       w5.Resize = false;
-                       w5.Shrink = false;
+                       global::Gtk.Paned.PanedChild w6 = ((global::Gtk.Paned.PanedChild)(this.hpaned1 
[this.downbox]));
+                       w6.Resize = false;
+                       w6.Shrink = false;
                        // Container child hpaned1.Gtk.Paned+PanedChild
                        this.righthbox = new global::Gtk.HBox ();
                        this.righthbox.WidthRequest = 100;
@@ -96,8 +90,8 @@ namespace LongoMatch.Gui.Component
                        this.postagger.Events = ((global::Gdk.EventMask)(256));
                        this.postagger.Name = "postagger";
                        this.tagsvbox.Add (this.postagger);
-                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.tagsvbox 
[this.postagger]));
-                       w6.Position = 0;
+                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.tagsvbox 
[this.postagger]));
+                       w7.Position = 0;
                        // Container child tagsvbox.Gtk.Box+BoxChild
                        this.notesframe = new global::Gtk.Frame ();
                        this.notesframe.Name = "notesframe";
@@ -118,48 +112,33 @@ namespace LongoMatch.Gui.Component
                        this.GtkLabel31.UseMarkup = true;
                        this.notesframe.LabelWidget = this.GtkLabel31;
                        this.tagsvbox.Add (this.notesframe);
-                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.tagsvbox 
[this.notesframe]));
-                       w9.Position = 1;
+                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.tagsvbox 
[this.notesframe]));
+                       w10.Position = 1;
                        this.righthbox.Add (this.tagsvbox);
-                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.righthbox 
[this.tagsvbox]));
-                       w10.Position = 0;
+                       global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.righthbox 
[this.tagsvbox]));
+                       w11.Position = 0;
                        this.hpaned1.Add (this.righthbox);
-                       global::Gtk.Paned.PanedChild w11 = ((global::Gtk.Paned.PanedChild)(this.hpaned1 
[this.righthbox]));
-                       w11.Resize = false;
-                       w11.Shrink = false;
-                       this.hpaned.Add (this.hpaned1);
-                       global::Gtk.Paned.PanedChild w12 = ((global::Gtk.Paned.PanedChild)(this.hpaned 
[this.hpaned1]));
+                       global::Gtk.Paned.PanedChild w12 = ((global::Gtk.Paned.PanedChild)(this.hpaned1 
[this.righthbox]));
+                       w12.Resize = false;
                        w12.Shrink = false;
+                       this.hpaned.Add (this.hpaned1);
+                       global::Gtk.Paned.PanedChild w13 = ((global::Gtk.Paned.PanedChild)(this.hpaned 
[this.hpaned1]));
+                       w13.Shrink = false;
                        this.vpaned1.Add (this.hpaned);
-                       global::Gtk.Paned.PanedChild w13 = ((global::Gtk.Paned.PanedChild)(this.vpaned1 
[this.hpaned]));
-                       w13.Resize = false;
+                       global::Gtk.Paned.PanedChild w14 = ((global::Gtk.Paned.PanedChild)(this.vpaned1 
[this.hpaned]));
+                       w14.Resize = false;
                        // Container child vpaned1.Gtk.Paned+PanedChild
-                       this.hbox7 = new global::Gtk.HBox ();
-                       this.hbox7.Name = "hbox7";
-                       this.hbox7.Spacing = 6;
-                       // Container child hbox7.Gtk.Box+BoxChild
-                       this.buttonswidget = new global::LongoMatch.Gui.Component.ButtonsWidget ();
-                       this.buttonswidget.Events = ((global::Gdk.EventMask)(256));
-                       this.buttonswidget.Name = "buttonswidget";
-                       this.hbox7.Add (this.buttonswidget);
-                       global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.hbox7 
[this.buttonswidget]));
-                       w14.Position = 0;
-                       // Container child hbox7.Gtk.Box+BoxChild
-                       this.timeline = new global::LongoMatch.Gui.Component.Timeline ();
-                       this.timeline.Events = ((global::Gdk.EventMask)(256));
-                       this.timeline.Name = "timeline";
-                       this.hbox7.Add (this.timeline);
-                       global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.hbox7 
[this.timeline]));
-                       w15.Position = 1;
-                       this.vpaned1.Add (this.hbox7);
+                       this.codingwidget = new global::LongoMatch.Gui.Component.CodingWidget ();
+                       this.codingwidget.Events = ((global::Gdk.EventMask)(256));
+                       this.codingwidget.Name = "codingwidget";
+                       this.vpaned1.Add (this.codingwidget);
                        this.Add (this.vpaned1);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
-                       this.leftbox.Hide ();
+                       w1.SetUiManager (UIManager);
                        this.tagsvbox.Hide ();
                        this.righthbox.Hide ();
-                       this.buttonswidget.Hide ();
                        this.Hide ();
                }
        }
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
new file mode 100644
index 0000000..7977cb6
--- /dev/null
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
@@ -0,0 +1,100 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace LongoMatch.Gui.Component
+{
+       public partial class CodingWidget
+       {
+               private global::Gtk.UIManager UIManager;
+               private global::Gtk.RadioAction timelineMode;
+               private global::Gtk.RadioAction autoTaggingMode;
+               private global::Gtk.Action zoomFitAction;
+               private global::Gtk.VBox vbox2;
+               private global::Gtk.HBox hbox1;
+               private global::Gtk.Toolbar codingtoolbar;
+               private global::Gtk.Toolbar timelinetoolbar;
+               private global::Gtk.HBox hbox2;
+               private global::LongoMatch.Gui.Component.ButtonsWidget buttonswidget;
+               private global::LongoMatch.Gui.Component.Timeline timeline;
+               
+               protected virtual void Build ()
+               {
+                       global::Stetic.Gui.Initialize (this);
+                       // Widget LongoMatch.Gui.Component.CodingWidget
+                       Stetic.BinContainer w1 = global::Stetic.BinContainer.Attach (this);
+                       this.UIManager = new global::Gtk.UIManager ();
+                       global::Gtk.ActionGroup w2 = new global::Gtk.ActionGroup ("Default");
+                       this.timelineMode = new global::Gtk.RadioAction ("timelineMode", null, 
global::Mono.Unix.Catalog.GetString ("Timeline view"), "gtk-justify-fill", 0);
+                       this.timelineMode.Group = new global::GLib.SList (global::System.IntPtr.Zero);
+                       w2.Add (this.timelineMode, null);
+                       this.autoTaggingMode = new global::Gtk.RadioAction ("autoTaggingMode", null, 
global::Mono.Unix.Catalog.GetString ("Automatic tagging view"), "gtk-select-color", 0);
+                       this.autoTaggingMode.Group = this.timelineMode.Group;
+                       w2.Add (this.autoTaggingMode, null);
+                       this.zoomFitAction = new global::Gtk.Action ("zoomFitAction", null, null, 
"gtk-zoom-fit");
+                       w2.Add (this.zoomFitAction, null);
+                       this.UIManager.InsertActionGroup (w2, 0);
+                       global::Gtk.ActionGroup w3 = new global::Gtk.ActionGroup ("Timeline");
+                       this.UIManager.InsertActionGroup (w3, 1);
+                       this.Name = "LongoMatch.Gui.Component.CodingWidget";
+                       // Container child LongoMatch.Gui.Component.CodingWidget.Gtk.Container+ContainerChild
+                       this.vbox2 = new global::Gtk.VBox ();
+                       this.vbox2.Name = "vbox2";
+                       this.vbox2.Spacing = 6;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.hbox1 = new global::Gtk.HBox ();
+                       this.hbox1.Name = "hbox1";
+                       this.hbox1.Spacing = 6;
+                       // Container child hbox1.Gtk.Box+BoxChild
+                       this.UIManager.AddUiFromString ("<ui><toolbar name='codingtoolbar'><toolitem 
name='autoTaggingMode' action='autoTaggingMode'/><toolitem name='timelineMode' 
action='timelineMode'/></toolbar></ui>");
+                       this.codingtoolbar = ((global::Gtk.Toolbar)(this.UIManager.GetWidget 
("/codingtoolbar")));
+                       this.codingtoolbar.Name = "codingtoolbar";
+                       this.codingtoolbar.ShowArrow = false;
+                       this.hbox1.Add (this.codingtoolbar);
+                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.codingtoolbar]));
+                       w4.Position = 0;
+                       w4.Expand = false;
+                       w4.Fill = false;
+                       // Container child hbox1.Gtk.Box+BoxChild
+                       this.UIManager.AddUiFromString ("<ui><toolbar name='timelinetoolbar'><toolitem 
name='zoomFitAction' action='zoomFitAction'/></toolbar></ui>");
+                       this.timelinetoolbar = ((global::Gtk.Toolbar)(this.UIManager.GetWidget 
("/timelinetoolbar")));
+                       this.timelinetoolbar.Name = "timelinetoolbar";
+                       this.timelinetoolbar.ShowArrow = false;
+                       this.hbox1.Add (this.timelinetoolbar);
+                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.timelinetoolbar]));
+                       w5.Position = 1;
+                       w5.Expand = false;
+                       w5.Fill = false;
+                       this.vbox2.Add (this.hbox1);
+                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox1]));
+                       w6.Position = 0;
+                       w6.Expand = false;
+                       w6.Fill = false;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.hbox2 = new global::Gtk.HBox ();
+                       this.hbox2.Name = "hbox2";
+                       this.hbox2.Spacing = 6;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.buttonswidget = new global::LongoMatch.Gui.Component.ButtonsWidget ();
+                       this.buttonswidget.Events = ((global::Gdk.EventMask)(256));
+                       this.buttonswidget.Name = "buttonswidget";
+                       this.hbox2.Add (this.buttonswidget);
+                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.buttonswidget]));
+                       w7.Position = 0;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.timeline = new global::LongoMatch.Gui.Component.Timeline ();
+                       this.timeline.Events = ((global::Gdk.EventMask)(256));
+                       this.timeline.Name = "timeline";
+                       this.hbox2.Add (this.timeline);
+                       global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.timeline]));
+                       w8.Position = 1;
+                       this.vbox2.Add (this.hbox2);
+                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox2]));
+                       w9.Position = 1;
+                       this.Add (this.vbox2);
+                       if ((this.Child != null)) {
+                               this.Child.ShowAll ();
+                       }
+                       w1.SetUiManager (UIManager);
+                       this.Hide ();
+               }
+       }
+}
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Timeline.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Timeline.cs
index 7ecae55..de7dfd4 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Timeline.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Timeline.cs
@@ -5,14 +5,10 @@ namespace LongoMatch.Gui.Component
        public partial class Timeline
        {
                private global::Gtk.HBox hbox1;
-               private global::Gtk.VBox vbox2;
-               private global::Gtk.VButtonBox vbuttonbox1;
-               private global::Gtk.Button button7;
-               private global::Gtk.Button button6;
-               private global::Gtk.Button button8;
-               private global::Gtk.Button button9;
                private global::Gtk.VBox vbox4;
-               private global::Gtk.Alignment alignment1;
+               private global::Gtk.HBox hbox2;
+               private global::Gtk.HScale hscale1;
+               private global::Gtk.Button button1;
                private global::Gtk.DrawingArea labelsarea;
                private global::Gtk.VBox vbox1;
                private global::Gtk.DrawingArea timerulearea;
@@ -30,86 +26,54 @@ namespace LongoMatch.Gui.Component
                        this.hbox1.Name = "hbox1";
                        this.hbox1.Spacing = 6;
                        // Container child hbox1.Gtk.Box+BoxChild
-                       this.vbox2 = new global::Gtk.VBox ();
-                       this.vbox2.Name = "vbox2";
-                       this.vbox2.Spacing = 6;
-                       // Container child vbox2.Gtk.Box+BoxChild
-                       this.vbuttonbox1 = new global::Gtk.VButtonBox ();
-                       this.vbuttonbox1.Name = "vbuttonbox1";
-                       // Container child vbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
-                       this.button7 = new global::Gtk.Button ();
-                       this.button7.CanFocus = true;
-                       this.button7.Name = "button7";
-                       this.button7.UseUnderline = true;
-                       this.button7.Label = global::Mono.Unix.Catalog.GetString ("GtkButton");
-                       this.vbuttonbox1.Add (this.button7);
-                       global::Gtk.ButtonBox.ButtonBoxChild w1 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.vbuttonbox1 [this.button7]));
-                       w1.Expand = false;
-                       w1.Fill = false;
-                       // Container child vbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
-                       this.button6 = new global::Gtk.Button ();
-                       this.button6.CanFocus = true;
-                       this.button6.Name = "button6";
-                       this.button6.UseUnderline = true;
-                       this.button6.Label = global::Mono.Unix.Catalog.GetString ("GtkButton");
-                       this.vbuttonbox1.Add (this.button6);
-                       global::Gtk.ButtonBox.ButtonBoxChild w2 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.vbuttonbox1 [this.button6]));
+                       this.vbox4 = new global::Gtk.VBox ();
+                       this.vbox4.Name = "vbox4";
+                       this.vbox4.Spacing = 6;
+                       // Container child vbox4.Gtk.Box+BoxChild
+                       this.hbox2 = new global::Gtk.HBox ();
+                       this.hbox2.HeightRequest = 30;
+                       this.hbox2.Name = "hbox2";
+                       this.hbox2.Spacing = 6;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.hscale1 = new global::Gtk.HScale (null);
+                       this.hscale1.CanFocus = true;
+                       this.hscale1.Name = "hscale1";
+                       this.hscale1.Adjustment.Upper = 100;
+                       this.hscale1.Adjustment.PageIncrement = 10;
+                       this.hscale1.Adjustment.StepIncrement = 1;
+                       this.hscale1.DrawValue = true;
+                       this.hscale1.Digits = 0;
+                       this.hscale1.ValuePos = ((global::Gtk.PositionType)(2));
+                       this.hbox2.Add (this.hscale1);
+                       global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox2 [this.hscale1]));
+                       w1.Position = 0;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.button1 = new global::Gtk.Button ();
+                       this.button1.CanFocus = true;
+                       this.button1.Name = "button1";
+                       this.button1.UseUnderline = true;
+                       this.button1.Label = global::Mono.Unix.Catalog.GetString ("GtkButton");
+                       this.hbox2.Add (this.button1);
+                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox2 [this.button1]));
                        w2.Position = 1;
                        w2.Expand = false;
                        w2.Fill = false;
-                       // Container child vbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
-                       this.button8 = new global::Gtk.Button ();
-                       this.button8.CanFocus = true;
-                       this.button8.Name = "button8";
-                       this.button8.UseUnderline = true;
-                       this.button8.Label = global::Mono.Unix.Catalog.GetString ("GtkButton");
-                       this.vbuttonbox1.Add (this.button8);
-                       global::Gtk.ButtonBox.ButtonBoxChild w3 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.vbuttonbox1 [this.button8]));
-                       w3.Position = 2;
+                       this.vbox4.Add (this.hbox2);
+                       global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox4 [this.hbox2]));
+                       w3.Position = 0;
                        w3.Expand = false;
                        w3.Fill = false;
-                       // Container child vbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
-                       this.button9 = new global::Gtk.Button ();
-                       this.button9.CanFocus = true;
-                       this.button9.Name = "button9";
-                       this.button9.UseUnderline = true;
-                       this.button9.Label = global::Mono.Unix.Catalog.GetString ("GtkButton");
-                       this.vbuttonbox1.Add (this.button9);
-                       global::Gtk.ButtonBox.ButtonBoxChild w4 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.vbuttonbox1 [this.button9]));
-                       w4.Position = 3;
-                       w4.Expand = false;
-                       w4.Fill = false;
-                       this.vbox2.Add (this.vbuttonbox1);
-                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.vbuttonbox1]));
-                       w5.Position = 2;
-                       this.hbox1.Add (this.vbox2);
-                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox2]));
-                       w6.Position = 0;
-                       w6.Expand = false;
-                       w6.Fill = false;
-                       // Container child hbox1.Gtk.Box+BoxChild
-                       this.vbox4 = new global::Gtk.VBox ();
-                       this.vbox4.Name = "vbox4";
-                       this.vbox4.Spacing = 6;
-                       // Container child vbox4.Gtk.Box+BoxChild
-                       this.alignment1 = new global::Gtk.Alignment (0.5F, 0.5F, 1F, 1F);
-                       this.alignment1.Name = "alignment1";
-                       this.vbox4.Add (this.alignment1);
-                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.vbox4 
[this.alignment1]));
-                       w7.Position = 0;
-                       w7.Expand = false;
-                       w7.Fill = false;
                        // Container child vbox4.Gtk.Box+BoxChild
                        this.labelsarea = new global::Gtk.DrawingArea ();
                        this.labelsarea.Name = "labelsarea";
                        this.vbox4.Add (this.labelsarea);
-                       global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.vbox4 
[this.labelsarea]));
-                       w8.Position = 1;
+                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.vbox4 
[this.labelsarea]));
+                       w4.Position = 1;
                        this.hbox1.Add (this.vbox4);
-                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox4]));
-                       w9.Position = 1;
-                       w9.Expand = false;
-                       w9.Fill = false;
+                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox4]));
+                       w5.Position = 0;
+                       w5.Expand = false;
+                       w5.Fill = false;
                        // Container child hbox1.Gtk.Box+BoxChild
                        this.vbox1 = new global::Gtk.VBox ();
                        this.vbox1.Name = "vbox1";
@@ -118,29 +82,29 @@ namespace LongoMatch.Gui.Component
                        this.timerulearea = new global::Gtk.DrawingArea ();
                        this.timerulearea.Name = "timerulearea";
                        this.vbox1.Add (this.timerulearea);
-                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.vbox1 
[this.timerulearea]));
-                       w10.Position = 0;
-                       w10.Expand = false;
-                       w10.Fill = false;
+                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox1 
[this.timerulearea]));
+                       w6.Position = 0;
+                       w6.Expand = false;
+                       w6.Fill = false;
                        // Container child vbox1.Gtk.Box+BoxChild
                        this.scrolledwindow1 = new global::Gtk.ScrolledWindow ();
                        this.scrolledwindow1.CanFocus = true;
                        this.scrolledwindow1.Name = "scrolledwindow1";
                        this.scrolledwindow1.ShadowType = ((global::Gtk.ShadowType)(1));
                        // Container child scrolledwindow1.Gtk.Container+ContainerChild
-                       global::Gtk.Viewport w11 = new global::Gtk.Viewport ();
-                       w11.ShadowType = ((global::Gtk.ShadowType)(0));
+                       global::Gtk.Viewport w7 = new global::Gtk.Viewport ();
+                       w7.ShadowType = ((global::Gtk.ShadowType)(0));
                        // Container child GtkViewport.Gtk.Container+ContainerChild
                        this.timelinearea = new global::Gtk.DrawingArea ();
                        this.timelinearea.Name = "timelinearea";
-                       w11.Add (this.timelinearea);
-                       this.scrolledwindow1.Add (w11);
+                       w7.Add (this.timelinearea);
+                       this.scrolledwindow1.Add (w7);
                        this.vbox1.Add (this.scrolledwindow1);
-                       global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.vbox1 
[this.scrolledwindow1]));
-                       w14.Position = 1;
+                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.vbox1 
[this.scrolledwindow1]));
+                       w10.Position = 1;
                        this.hbox1.Add (this.vbox1);
-                       global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox1]));
-                       w15.Position = 2;
+                       global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox1]));
+                       w11.Position = 1;
                        this.Add (this.hbox1);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
index a5d4dbd..da25c3a 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
@@ -131,7 +131,7 @@ namespace LongoMatch.Gui
                        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.ManualTaggingViewAction.Group;
+                       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);
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
index 4169e1e..a392384 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
@@ -463,7 +463,6 @@ namespace LongoMatch.Gui.Panel
                        w61.Position = 0;
                        // Container child rbox.Gtk.Box+BoxChild
                        this.hbuttonbox1 = new global::Gtk.HButtonBox ();
-                       this.hbuttonbox1.Name = "hbuttonbox1";
                        // Container child hbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
                        this.savebutton = new global::Gtk.Button ();
                        this.savebutton.Sensitive = false;
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.WelcomePanel.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.WelcomePanel.cs
index e101721..4419a43 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.WelcomePanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.WelcomePanel.cs
@@ -48,7 +48,6 @@ namespace LongoMatch.Gui.Panel
                        w2.Fill = false;
                        // Container child vbox1.Gtk.Box+BoxChild
                        this.hbuttonbox1 = new global::Gtk.HButtonBox ();
-                       this.hbuttonbox1.Name = "hbuttonbox1";
                        this.hbuttonbox1.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(1));
                        // Container child hbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
                        this.newbutton = new global::Gtk.Button ();
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index a276388..d9effb6 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -263,7 +263,7 @@
         <property name="DrawAsRadio">False</property>
         <property name="Active">False</property>
         <property name="Value">0</property>
-        <property name="Group">group1</property>
+        <property name="Group">codingmode</property>
         <signal name="Toggled" handler="OnViewToggled" />
       </action>
       <action id="TimelineViewAction">
@@ -275,7 +275,7 @@
         <property name="DrawAsRadio">False</property>
         <property name="Active">True</property>
         <property name="Value">0</property>
-        <property name="Group">group1</property>
+        <property name="Group">codingmode</property>
         <signal name="Toggled" handler="OnViewToggled" />
       </action>
       <action id="SaveProjectAction">
@@ -341,7 +341,7 @@
         <property name="DrawAsRadio">False</property>
         <property name="Active">False</property>
         <property name="Value">0</property>
-        <property name="Group">group1</property>
+        <property name="Group">codingmode</property>
         <signal name="Toggled" handler="OnViewToggled" />
       </action>
       <action id="GameUnitsViewAction">
@@ -352,7 +352,7 @@
         <property name="DrawAsRadio">False</property>
         <property name="Active">False</property>
         <property name="Value">0</property>
-        <property name="Group">group1</property>
+        <property name="Group">codingmode</property>
         <signal name="Toggled" handler="OnViewToggled" />
       </action>
       <action id="ExportProjectAction">
@@ -6467,6 +6467,7 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
     </child>
   </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.AnalysisComponent" design-size="1524 648">
+    <action-group name="Default" />
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
@@ -6478,22 +6479,11 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
           <widget class="Gtk.HPaned" id="hpaned">
             <property name="MemberName" />
             <property name="CanFocus">True</property>
-            <property name="Position">290</property>
+            <property name="Position">261</property>
             <child>
-              <widget class="Gtk.VBox" id="leftbox">
+              <widget class="LongoMatch.Gui.Component.PlaysSelectionWidget" id="playsSelection">
                 <property name="MemberName" />
-                <property name="Visible">False</property>
-                <property name="Spacing">6</property>
-                <child>
-                  <widget class="LongoMatch.Gui.Component.PlaysSelectionWidget" id="playsSelection">
-                    <property name="MemberName" />
-                    <property name="Events">ButtonPressMask</property>
-                  </widget>
-                  <packing>
-                    <property name="Position">0</property>
-                    <property name="AutoSize">True</property>
-                  </packing>
-                </child>
+                <property name="Events">ButtonPressMask</property>
               </widget>
               <packing>
                 <property name="Resize">False</property>
@@ -6503,7 +6493,7 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
               <widget class="Gtk.HPaned" id="hpaned1">
                 <property name="MemberName" />
                 <property name="CanFocus">True</property>
-                <property name="Position">1015</property>
+                <property name="Position">1046</property>
                 <child>
                   <widget class="Gtk.VBox" id="downbox">
                     <property name="MemberName" />
@@ -6614,30 +6604,9 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
           </packing>
         </child>
         <child>
-          <widget class="Gtk.HBox" id="hbox7">
+          <widget class="LongoMatch.Gui.Component.CodingWidget" id="codingwidget">
             <property name="MemberName" />
-            <property name="Spacing">6</property>
-            <child>
-              <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
-                <property name="MemberName" />
-                <property name="Visible">False</property>
-                <property name="Events">ButtonPressMask</property>
-              </widget>
-              <packing>
-                <property name="Position">0</property>
-                <property name="AutoSize">True</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="LongoMatch.Gui.Component.Timeline" id="timeline">
-                <property name="MemberName" />
-                <property name="Events">ButtonPressMask</property>
-              </widget>
-              <packing>
-                <property name="Position">1</property>
-                <property name="AutoSize">True</property>
-              </packing>
-            </child>
+            <property name="Events">ButtonPressMask</property>
           </widget>
         </child>
       </widget>
@@ -10106,34 +10075,32 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
         <property name="MemberName" />
         <property name="Spacing">6</property>
         <child>
-          <widget class="Gtk.VBox" id="vbox2">
+          <widget class="Gtk.VBox" id="vbox4">
             <property name="MemberName" />
             <property name="Spacing">6</property>
             <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <widget class="Gtk.VButtonBox" id="vbuttonbox1">
+              <widget class="Gtk.HBox" id="hbox2">
                 <property name="MemberName" />
-                <property name="Size">4</property>
+                <property name="HeightRequest">30</property>
+                <property name="Spacing">6</property>
                 <child>
-                  <widget class="Gtk.Button" id="button7">
+                  <widget class="Gtk.HScale" id="hscale1">
                     <property name="MemberName" />
                     <property name="CanFocus">True</property>
-                    <property name="Type">TextOnly</property>
-                    <property name="Label" translatable="yes">GtkButton</property>
-                    <property name="UseUnderline">True</property>
+                    <property name="Upper">100</property>
+                    <property name="PageIncrement">10</property>
+                    <property name="StepIncrement">1</property>
+                    <property name="DrawValue">True</property>
+                    <property name="Digits">0</property>
+                    <property name="ValuePos">Top</property>
                   </widget>
                   <packing>
-                    <property name="Expand">False</property>
-                    <property name="Fill">False</property>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="Gtk.Button" id="button6">
+                  <widget class="Gtk.Button" id="button1">
                     <property name="MemberName" />
                     <property name="CanFocus">True</property>
                     <property name="Type">TextOnly</property>
@@ -10142,62 +10109,11 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
                   </widget>
                   <packing>
                     <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
                     <property name="Expand">False</property>
                     <property name="Fill">False</property>
                   </packing>
                 </child>
-                <child>
-                  <widget class="Gtk.Button" id="button8">
-                    <property name="MemberName" />
-                    <property name="CanFocus">True</property>
-                    <property name="Type">TextOnly</property>
-                    <property name="Label" translatable="yes">GtkButton</property>
-                    <property name="UseUnderline">True</property>
-                  </widget>
-                  <packing>
-                    <property name="Position">2</property>
-                    <property name="Expand">False</property>
-                    <property name="Fill">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="Gtk.Button" id="button9">
-                    <property name="MemberName" />
-                    <property name="CanFocus">True</property>
-                    <property name="Type">TextOnly</property>
-                    <property name="Label" translatable="yes">GtkButton</property>
-                    <property name="UseUnderline">True</property>
-                  </widget>
-                  <packing>
-                    <property name="Position">3</property>
-                    <property name="Expand">False</property>
-                    <property name="Fill">False</property>
-                  </packing>
-                </child>
-              </widget>
-              <packing>
-                <property name="Position">2</property>
-                <property name="AutoSize">False</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="Position">0</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.VBox" id="vbox4">
-            <property name="MemberName" />
-            <property name="Spacing">6</property>
-            <child>
-              <widget class="Gtk.Alignment" id="alignment1">
-                <property name="MemberName" />
-                <child>
-                  <placeholder />
-                </child>
               </widget>
               <packing>
                 <property name="Position">0</property>
@@ -10217,7 +10133,7 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
             </child>
           </widget>
           <packing>
-            <property name="Position">1</property>
+            <property name="Position">0</property>
             <property name="AutoSize">False</property>
             <property name="Expand">False</property>
             <property name="Fill">False</property>
@@ -10262,7 +10178,121 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
             </child>
           </widget>
           <packing>
-            <property name="Position">2</property>
+            <property name="Position">1</property>
+            <property name="AutoSize">True</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CodingWidget" design-size="673 300">
+    <action-group name="Default">
+      <action id="timelineMode">
+        <property name="Type">Radio</property>
+        <property name="Label" translatable="yes" />
+        <property name="StockId">gtk-justify-fill</property>
+        <property name="Tooltip" translatable="yes">Timeline view</property>
+        <property name="DrawAsRadio">False</property>
+        <property name="Active">False</property>
+        <property name="Value">0</property>
+        <property name="Group">codingmode</property>
+      </action>
+      <action id="autoTaggingMode">
+        <property name="Type">Radio</property>
+        <property name="Label" translatable="yes" />
+        <property name="StockId">gtk-select-color</property>
+        <property name="Tooltip" translatable="yes">Automatic tagging view</property>
+        <property name="DrawAsRadio">False</property>
+        <property name="Active">True</property>
+        <property name="Value">0</property>
+        <property name="Group">codingmode</property>
+      </action>
+      <action id="zoomFitAction">
+        <property name="Type">Action</property>
+        <property name="Label" translatable="yes" />
+        <property name="StockId">gtk-zoom-fit</property>
+      </action>
+    </action-group>
+    <action-group name="Timeline" />
+    <property name="MemberName" />
+    <property name="Visible">False</property>
+    <child>
+      <widget class="Gtk.VBox" id="vbox2">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <child>
+          <widget class="Gtk.HBox" id="hbox1">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="Gtk.Toolbar" id="codingtoolbar">
+                <property name="MemberName" />
+                <property name="ShowArrow">False</property>
+                <node name="codingtoolbar" type="Toolbar">
+                  <node type="Toolitem" action="autoTaggingMode" />
+                  <node type="Toolitem" action="timelineMode" />
+                </node>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">False</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Toolbar" id="timelinetoolbar">
+                <property name="MemberName" />
+                <property name="ShowArrow">False</property>
+                <node name="timelinetoolbar" type="Toolbar">
+                  <node type="Toolitem" action="zoomFitAction" />
+                </node>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">False</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder />
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.HBox" id="hbox2">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
+                <property name="MemberName" />
+                <property name="Events">ButtonPressMask</property>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="LongoMatch.Gui.Component.Timeline" id="timeline">
+                <property name="MemberName" />
+                <property name="Events">ButtonPressMask</property>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
             <property name="AutoSize">True</property>
           </packing>
         </child>
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index a57d4c8..cc4de42 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -486,4 +486,9 @@
       </itemgroup>
     </signals>
   </object>
+  <object type="LongoMatch.Gui.Component.CodingWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
+    <itemgroups />
+    <signals>
+    </signals>
+  </object>
 </objects>
\ No newline at end of file
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index 8009a9f..69c2464 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -317,7 +317,7 @@ namespace LongoMatch.Services
                                player.Seek (pos, true);
                        }
                        else if(tNode is Category) {
-                               analysisWindow.UpdateCategories(openedProject.Categories);
+                               analysisWindow.UpdateCategories();
                        }
                        filter.Update();
                }


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